操做系统:Ubuntu 18.04.2 LTS 64位python
python版本:Python 3.6.7linux
Django版本:Django 2.2nginx
首先使用root用户登陆服务器。web
apt update apt install python3 apt install python3-pip
pip3 install django
下载项目后,进入项目主目录,切换到back_end_server分支,进入backend文件夹,执行数据库
pip3 install -r requirements.txt
安装相关依赖。安装过程当中下载速度过慢时能够更换pip源为国内源(https://blog.csdn.net/chenghuikai/article/details/55258957)。django
将settings.example.py文件内容复制到settings.py并修改相关配置:ubuntu
在settings.py文件中加入域名:服务器
ALLOWED_HOSTS = ['www.example.com']
在数据库中构建相关的数据表:并发
python3 manage.py makemigrations python3 manage.py migrate
启动Django自带开发服务器runserver进行临时开发和测试:app
python3 manage.py runserver 0:80
启动以后即可以对服务器进行访问。
runserver默认使用http链接,可经过以下方式配置ssl证书使用https链接:
pip3 install django-extensions pip3 install django-werkzeug-debugger-runserver pip3 install pyOpenSSL
将生成的ssl证书放在服务器上后启动runserver:
python3 manage.py runserver_plus 0:443 --cert-file /etc/certificate/certificate.crt --key-file /etc/certificate/key.key
其中--cert-file
和--key-file
后为对应的ssl证书文件路径。
Django 自带的runserver是一个用于开发的简易服务器,它是一个用纯Python写的轻量级的Web服务器,目的是为了让你能快速的开发出想要的东西,并不适用于实际的生产环境中。
在生产环境中,Django的主要部署平台是WSGI,它是Python的标准web服务器和应用,而uWSGI是实现了WSGI的工具。
安装uWSGI:
pip3 install uwsgi
遇到以下问题时
[x86_64-linux-gnu-gcc -pthread] core/dot_h.o [x86_64-linux-gnu-gcc -pthread] core/config_py.o *** uWSGI compiling embedded plugins *** [x86_64-linux-gnu-gcc -pthread] plugins/python/python_plugin.o In file included from plugins/python/python_plugin.c:1:0: plugins/python/uwsgi_python.h:2:10: fatal error: Python.h: No such file or directory #include <Python.h> ^~~~~~~~~~ compilation terminated. ---------------------------------------- Command "/usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-8zavi4g8/uwsgi/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-g8yr_0sf-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-8zavi4g8/uwsgi/
须要安装python3-dev
包:
apt install build-essential python-dev
在Django项目的同级目录下新建uwsgi目录并在其中添加uwsgi.ini文件:
[uwsgi] # 这个端口须要打开 http-socket = :8001 # 须要生成的sock文件,nginx会经过这个sock文件与django通讯 # 注意这个socket文件要放在服务器的根目录下,不要是某个用户的文件夹下 # 不然之后会出现访问权限问题 socket=/www/backend_uwsgi.sock chdir = /root/GroupWork/backend/ # module=backend.wsgi:application # Django项目中uwsgi.py的路径(相对于Django项目根路径) wsgi-file = backend/wsgi.py # wsgi-file = /root/GroupWork/backend/backend/wsgi.py master = true # 设置启动相应的uwsgi进程数和线程数 processes = 10 threads = 2 # 设置日志文件路径 daemonize = /root/GroupWork/backend/uwsgi/uwsgi.log pidfile = /root/GroupWork/backend/uwsgi/uwsgi.pid # env = DJANGO_SETTINGS_MODULE=backend.settings
在根目录下新建www文件夹:
mkdir /www
启动uwsgi:
uwsgi --ini uwsgi/uwsgi.ini
关闭全部uwsgi进程:
killall -9 uwsgi
Nginx是一个异步框架的开源Web服务器,由于并发能力强、占用资源少而被普遍应用在许多网站项目中。在实际应用中,可使用Nginx做为反向代理服务器,经过uWSGI链接Nginx和Django,当Nginx接收到一个静态文件请求时直接从磁盘读取并返回对应的文件,而接收到一个动态数据请求时,先将请求代理到uWSGI服务器,而后调用Django中相应的视图函数进行处理。
安装Nginx:
apt install nginx
在/etc/nginx/conf.d/
文件夹内添加以下配置文件:
# /etc/nginx/conf.d/django.conf upstream django { server 服务器的外网ip:443; # 服务器的外网ip,443是https的默认端口 } server { listen 443 ssl; server_name 域名; ssl on; # 证书和秘钥的绝对路径 ssl_certificate /etc/certificate/certificate.crt; ssl_certificate_key /etc/certificate/key.key; client_max_body_size 5M; charset utf-8; # nginx日志文件的路径 access_log /root/GroupWork/backend/nginx/https.access.log; error_log /root/GroupWork/backend/nginx/https.error.log; # 指定django项目中存储媒体文件的地址 location /media { alias /root/GroupWork/backend/media; } # 指定django项目中存储静态文件的地址 location /static { alias /root/GroupWork/backend/static; } location / { # 以前配置uwsgi时新建的socket文件 uwsgi_pass unix:///www/backend_uwsgi.sock; include /etc/nginx/uwsgi_params; } }
修改/etc/nginx/nginx.conf
文件,将nginx的使用用户改变为当前用户:
user root; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf;
启动nginx:
nginx
重启nginx:
reload -s nginx
强制关闭全部nginx进程:
pkill -9 nginx
启动服务器时需先启动uwsgi,再启动Nginx:
uwsgi --ini uwsgi/uwsgi.ini nginx
每次修改django项目后都须要从新启动uwsgi:
killall -9 uwsgi uwsgi --ini uwsgi/uwsgi.ini