admin管理员组文章数量:1568557
租用服务器每年会有一定的费用,今天买了一个树莓派就把我部署在阿里云的Django项目迁移到树莓派上。
1. SSH登入到树莓派。
ssh pi@192.168.1.201
2. 新建一个名为app的目录,将项目源码checkout到app目录中。
mkdir app
cd app
git clone https://github/username/project_name
3. virtualenv。因为我的树莓派的Python版本和这个Django项目的Python版本不一致,所以需要创建一个独立的Python运行环境,virtualenv就是用来创建隔离的Python环境的。
sudo pip3 install virtualenv
cd project_name创建名为venv的运行环境,--no-site-packages表示原来的系统python环境不会复制过来,创建的环境是全新的。(python3需要指定-p /usr/bin/python3,否则venv会使用python2.x)
virtualenv -p /usr/bin/python3 --no-site-packages /home/pi/venv进入virtualenv,每次进入都需要使用这个命令,退出环境使用deactivate。
source /home/pi/venv/bin/activate在~/.bashrc文件最后加上以下代码以确保pip3安装的时候将packages安装到virtualenv中而不是系统中,然后退出SSH再重新登入树莓派并进入virtualenv。
vi ~/.bashrc
# add this line to ~/.bashrc.
export PIP_REQUIRE_VIRTUALENV=true
cd app/project_name
source /home/pi/venv/bin/activate
4. Django项目依赖。安装Django项目的所有依赖(可选,如果是新项目就不需要安装)。
sudo /home/pi/venv/bin/pip3 install xxxxx
...
sudo apt-get install xxxx
...如果出现安装Pillow错误,需要先安装Pillow相关依赖。
apt-get install libjpeg-dev zlib1g-dev查看pip3安装了哪些依赖。
pip3 freeze # show installed packages in requirements format
pip3 list # show all installed packages
pip3 freeze --all == pip list
pip3 freeze > requirements.txt # output all requirements to file
5. 安装数据库。数据库我们使用的是Django官方推荐的postgresql
sudo apt-get install postgresql postgresql-contrib
# vi /etc/postgresql/9.6/main/pg_hba.conf
# (Change all authentication mechanisms from ident to md5)
sudo /etc/init.d/postgresql reload创建账号和数据库
# switch to postgres account
(venv) pi@raspberrypi:~/app/DjangoApps$ sudo su - postgres
# create postgres user
postgres@raspberrypi:~$ createuser pi
# create database
postgres@raspberrypi:~$ createdb myproject
# sql environment
postgres@raspberrypi:~$ psql
# add password for user
postgres=# ALTER USER pi WITH PASSWORD '123456';
ALTER ROLE
# make user superuser
postgres=# ALTER ROLE pi WITH SUPERUSER;
ALTER ROLE
# add create roll permission
postgres=# ALTER ROLE pi WITH CREATEROLE;
ALTER ROLE
# logout
postgres-# \q
postgres@raspberrypi:~$ exit
logout从原来服务器导出数据,database为你的数据库名称。(可选,如果是新项目就不需要)
pg_dump > dump.sql导入到当前数据库(可选,如果是新项目就不需要)
(venv) pi@raspberrypi:~/app/DjangoApps/sqls $ psql -U pi myproject < dump.sqlsettings.py设置数据库信息
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'myproject',
'PASSWORD': '123456',
'HOST': 'localhost',
'PORT': '',
}
}
6. 现在运行Django,并在树莓派运行localhost:8000/admin就会出现如下画面了。
(venv) pi@raspberrypi:~/app/DjangoApps$ python manage.py runserver
7. Apache2。创建需要的文件夹
mkdir media logs复制static文件
python manage.py collectstatic修改myproject/wsgi.py如下
import os
import sys
#sys.path.append('/home/pi/app/DjangoApps/venv/lib/python3.5/site-packages/')
# add your project directory to the sys.path
project_home = u'/home/pi/app/DjangoApps'
if project_home not in sys.path:
print(project_home)
sys.path.append(project_home)
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
application = get_wsgi_application()
from os.path import dirname,abspath
PROJECT_DIR = dirname(dirname(abspath(__file__)))
sys.path.insert(0, PROJECT_DIR)安装Apache2
sudo apt-get install apache2 libapache2-mod-wsgi3如果安装的时候提示找不到libapache2-mod-wsgi3,请使用以下命令
sudo apt-get install apache2 libapache2-mod-wsgi-py3添加并编辑配置文件
cd /etc/apache2/sites-available
sudo cp 000-default.conf myproject.conf
sudo vi myproject.conf配置文件内容,使用绝对路径
WSGIScriptAlias / /home/pi/app/DjangoApps/myproject/wsgi.py
# for virtaulenv
WSGIDaemonProcess myproject python-home=/home/pi/venv python-path=/home/pi/app/DjangoApps
# for virtaulenv
WSGIProcessGroup myproject
DocumentRoot "/home/pi/app/DjangoApps"
# mkdir /home/pi/app/DjangoApps/static if not exists.
Alias /static/ /home/pi/app/DjangoApps/static/
# mkdir /home/pi/app/DjangoApps/media if not exists.
Alias /media/ /home/pi/app/DjangoApps/media/
# mkdir /home/pi/app/DjangoApps/logs if not exists.
ErrorLog "/home/pi/app/DjangoApps/logs/error_log"
CustomLog "/home/pi/app/DjangoApps/logs/access_log" common
Require all granted
Require all granted
Require all granted
因为需要将Apache和Django进行绑定,所以需要将端口更改为它们共有的
sudo vi /etc/apache2/ports.conf
# add this two line to /etc/apache2/ports.conf
NamevirtualHost *:8000
Listen 8000/etc/apache2/apache2.conf添加ServerName
sudo vi /etc/apache2/apache2.conf
# add this line to /etc/apache2/apache2.conf
ServerName 192.168.1.201
# ServerName localhost
# ServerName 127.0.0.1启用配置文件并重新加载Apache2
# enable myproject.conf
sudo a2ensite myproject.conf
# reload apache2
sudo service apache2 reload使默认配置失效,否则局域网内无法使用
sudo a2dissite 000-default.conf重启Apache2
sudo /etc/init.d/apache2 restartApache log地址:
/var/log/apache2/这样你在树莓派里运行192.168.1.201:8000/admin就会出现如下画面了。如果你只是在局域网内使用这个服务器的话到这步就可以结束了,如果需要做成被外网访问就需要添加动态域名了。如果出现如下错误:access to / denied (filesystem path '/root/app') because search permissions are missing on a component of the path. 则需要确保root和app的目录权限都是755.
如果出现404 bad request错误,则需要将ip添加到myproject/settings.py的ALLOWED_HOSTS
ALLOWED_HOSTS = ['localhsot', '127.0.0.1', '192.168.1.201']如果出现如下错误,表示Apache2的默认用户名是www-data,我们需要将默认用户名改为pi并重启Apache2
sudo vim /etc/apache2/envvars
# 将APACHE_RUN_USER和APACHE_RUN_GROUP都改为pi
# export APACHE_RUN_USER=www-data
# export APACHE_RUN_GROUP=www-data
export APACHE_RUN_USER=pi
export APACHE_RUN_GROUP=pi
sudo /etc/init.d/apache2 restart
8. 动态域名。进入创建账号然后通过邮箱激活并
登入以后进入Hostname这行输入你想添加的hostname,在Domain这行选择一个domain,如果已经注册了就换一个,点击Add Hostname添加hostname创建完成后你将看到一条记录,点击Active进入域名详细列表。点击画圈黄色字体进入配置。点击Configure Now选择你的域名(如果只有一个会默认选中)并点击Next Step路由器我这边是TP-Link,设备选中Rasspberry pi选中Yes并点击Next Step点击Download DUC这边我们选中Linux并点击Download Now下载完客户端后解压并编译安装
tar vzxf noip-duc-linux.tar.gz
cd noip-2.1.9-1
make
sudo make install安装过程中输入信息
# 输入no-ip账号
Please enter the login/email string for no-ip
myemail@gmail
#输入no-ip密码
Please enter the password for user
....*******
# no-ip客户端检查你路由器外部网址变化的间隔默认是30分钟,我们改为10分钟,因为国内ISP会每几天强制断线、更换IP,这时noip会短暂失效。
Please enter an update interval: [30]
(Increments in minutes that you want no-ip client to check if your router’s external dynamic IP address has changed and updates it accordingly.)
10
# 直接按回车
Do you wish to run something at successful update? [N] (y/N)启动noip客户端,如果需要开机就启动,将下面这行添加到/etc/rc.local的exit 0这行前面
sudo /usr/local/bin/noip2其它no-ip命令
sudo /usr/local/bin/noip2 -C # 重新配置一次
sudo /usr/local/bin/noip2 -S # 显示当前运行状态安装完以后点击Next Step在路由器设置端口转发,可以参考this guide这篇文章或者我之前写的文章8000端口,所以我们转发外部8000端口到内部8000端口。设置完路由器以后我们点击Next Step输入你转发的端口号并点击Check Port进行验证如果显示Port xxx is not open说明你路由器端口转发还不正确需要重新配置。如果显示Port xxx is open表示端口转发成功点击Next Step页面会显示配置成功暂时还不知道什么原因,外网可以访问no-ip:8000这个网址了,但是本地网络内的设备还是只能使用192.168.1.201:8000来访问这个服务器,之后知道原因以后将会更新。
这样我们就将原来在阿里云的服务器迁移到自己的树莓派上了。
版权声明:本文标题:python是apache服务器吗_部署Django + Apache服务器 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1725022514a1002658.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论