新手学习 Python Web 后端之 Django, 线上部署记录.
环境
Ubuntu 16.04.6
Python 3.7.8
Django 3.0.6
Uwsgi 2.0.19.1
Nginx 1.10.3
安装 python3.7 ubuntu 自带 python2.7、python3.5
1 2 3 4 5 6 7 ~ /usr/ bin/python /u sr/bin/ python2.7 -config /usr/ bin/python2-pbr /u sr/bin/ python3.5 -config /usr/ bin/python3m-config/usr/ bin/python2 /u sr/bin/ python2-config /usr/ bin/python3 /u sr/bin/ python3.5 m /usr/ bin/python3-config/usr/ bin/python2.7 /u sr/bin/ python2-jsonschema /usr/ bin/python3.5 /u sr/bin/ python3.5 m-config /usr/ bin/python3m/usr/ bin/python-config没有3.7 的版本
1 2 ~# python --version Python 3.5 .2
系统默认环境不是 python3.7 更改默认为 python3.7 先删除默认的 Python 软链接
1 ~# sudo rm /usr/bin/python
1 ~# sudo ln -s /usr/bin/python3.7 /usr/bin/python
1 2 ~# python --version Python 3.7 .8
1 2 3 4 5 6 7 8 ~# wget https: ~# python get-pip.py 安装成功 查看pip版本 ~# pip -V pip 20.1 .1 from /usr/ local/lib/ python3.7 /dist-packages/ pip (python 3.7 )
安装虚拟环境
venv (python 内置 仅支持 Python3 以上版本)
virtualenv
anaconda3
我们使用 venv
创建名为 envpy37 的 python3.7 的虚拟环境
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ~ (envpy37) :~ 退出envpy37 ~ 为了方便切换,我们设置一个别名 ~ 添加 alias envpy37='source env_py37/bin/activate' 保存 退出 vim 生效.bashrc ~ 用设置的别名启动虚拟环境 ~ (env_py37) :~ 查看虚拟环境的python版本 (env_py37) :~ Python 3.7 .7
安装 Git 1 2 3 4 5 6 7 ~ 为了方便XShell或者CRT连接服务器,建议安装OpenSSH ~ ~
安装 MySQL
测试 mysql
本地登陆 mysql
修改登陆权限
开启 ssh 远程连接权限
用工具测试远程连接
测试项目
1 2 (env_py37) :~ (env_py37) project :~
这个虚拟环境下安装依赖包 requirements.txt (可以通过 pip freeze .)获取该文件内容
1 2 (env_py37) project :~ (env_py37) project :~
运行项目
记得开放 8000 端口
在 setting.py—–ALLOW_HOST 改成 [“*”]
在 setting.py—–DEBUG=False
在浏览器用 ip 访问 http://:8000
确保没有错误,和在本地运行一样没有任何错误
安装 uwsgi 应用服务器
uwsgi 必须安装在系统级别的 Python 环境中,不要安装到虚拟环境中
1 2 3 4 (env_py37) project :~ ~
测试 uwsgi
在根目录下新建一个 testuwsgi.py 并且添加内容
测试 uwsgi 服务器的响应 执行 testuwsgi.py (必须在 testuwsgi 的同级目录下执行)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 (env_py37) :~# cd project (env_py37) project :~# vi testuwsgi.py3 #添加以下代码 def application(env,start_response): start_response('200 ok' ,[('Content-Type' ,'text/html' )]) return [b'Hello world' ] (保存退出vim) (env_py37) project :~# uwsgi --http :8000 --wsgi-file testuwsgi.py 在浏览器用ip访问 http: 正常结果是是返回一个Hello world 网页
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 (env_py37) project:~# vi project_uwsgi.ini [uwsgi] home =/root/env_py37chdir =/srv/projectmaster =true processes =4threads =2socket =127.0.0.1:8002vacuum =true pidfile = uwsgi.pid wsgi-file =shudong_server/wsgi.py(保存退出vim)
1 2 3 (env_py37) project :~ 没有错误的话,可以试着访问项目
安装 nginx
nginx 是一个 web 服务器。用来加载静态文件和接收 http 请求的
同样安装到系统环境
nginx 常用命令
启动 nginx:service nginx start
关闭 nginx:service nginx stop
重启 nginx:service nginx restart
刷新 nginx 配置: nginx -s reload
1 2 3 ~ ~ nginx version : nginx/1.10 .3 (Ubuntu)
收集静态文件
静态文件应该让nginx
来处理,而不是让django
来做。
首先确保你的settings.py
文件中有一个STATIC_ROOT
配置,这个配置应该指定你的静态文件要放在哪个目录下
那么我们可以执行以下命令:python manage.py collectstatic
来收集所有静态文件
执行完毕 可以查看目录是否生成静态文件
1 2 3 4 5 6 7 8 STATIC_ROOT = '/srv/project/static/' STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static" ), '/srv/project/static/' , ]
编写 nginx 的配置文件 在/etc/nginx/conf.d 目录下 新建一个 project.conf
测试配置文件 service nginx configtest
改完配置需要重启 service nginx restart
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 conf.d:~ server { listen 80 ; server_name <你的域名> (可选 没有的话 用 _ 替代); charset utf-8 ; client_max_body_size 75M ; location /static { alias /srv/project/static; } location / { uwsgi_pass 127.0 .0.1 :8002 ; include /etc/nginx/uwsgi_params; } } (保存退出vim)
nginx 测试 ok
在项目根目录执行 启动项目
在浏览器访问 访问成功 即部署成功
到此即部署完成 第一次接触后端 如果有误~欢迎指正!