本次将一个前后端不分离的项目部署到web上,采用如上的架构,并使用supervisor进行进程的管理
项目访问路径:https://www.kunmzhao.cn/login/
项目源码下载网盘地址:
https://pan.baidu.com/s/1sGSnrHendFImTC-extkLww
提示:小编不易,提取码只需要1元,添加以下小编微信索要提货码
1.将项目复制到服务器上
这有很多方式,可以通过FTP或者scp等,我这边采用SFTP的方式 注意点: 1. 如果我们之前项目中有虚拟环境,则将虚拟环境的目录删除 2. 将之前需要用的环境记得导出一并上传到服务器 pip list --format=freeze > requirements.txt
2.为此项目创建虚拟环境
虚拟环境做好和之前的环境保持一致,如python版本等 1. 创建虚拟环境 virtualenv --python=python3 env 2. 激活虚拟环境 source env/bin/activate 3. 安装依赖包 # 有时候可能会失败,我们可以将失败的依赖手动添加 pip install -r requirement.txt
3.创建数据库
-
我们需要确认对应的数据库已经在后台运行
-
将项目的数据库数据导出
mysqldump -u 用户名 -p 数据库 > 导出的文件
-
将生成的数据上传的服务器
-
在服务器上创建数据库
-
导入数据
1. 首先创建一个数据库 create database orderSystem charset utf8; 2. 使用数据库 use orderSystem; 3. 导入数据 source sb.sql
-
配置Django中关于mysql的配置
配置成服务端的数据库
4.配置redis
-
确认redis已运行
-
配置django中的redis设置
-
测试django能否运行
python3 manage.py runserver # 自己在在方面花了很长时间操作数据库,或者模块的引入,需要有耐心
5.配置uwsgi
-
创建uwsgi.ini的配置文件
touch uwsgi.ini
-
写入配置如下
[uwsgi] # 填写项目的第一层绝对路径 chdir = /home/ubuntu/kunmzhao/orderPlatform/orderPlatform # 填写项目第二层的相对路径,找到第二层目录下的wsgi.py # 这里填写的不是路径,是以上一个参数为相对,找到第二层项目目录下的wsgi.py文件 module = orderPlatform.wsgi # 填写虚拟环境解释器的第一层工作目录 home = /home/ubuntu/kunmzhao/orderPlatform/env master = true # 代表定义uwsgi运行的多进程数量,官网给出的优化建议是 2*cpu核数+1 ,单核的cpu填写几? processes = 3 # 这里的socket参数,是用于和nginx结合部署的unix-socket参数 socket = 0.0.0.0:8000 vacuum = true
-
使用uwsgi启动项目
uwsgi --ini ./uwsgi.ini --plugin python3
6.配置supervisor
-
生成supervison配置文件
echo_supervisord_conf > supervisord.conf
-
写入配置如下
在配置文件末尾添加 [program:my_uwsgi] command= /usr/bin/uwsgi --ini /home/ubuntu/kunmzhao/orderPlatform/uwsgi.ini --plugin python3 autostart=true startsecs=10 autorestart=true stopasgroup=true killasgroup=true
-
启动supervisor
sudo supervisord -c supervisord.conf
-
使用supervisorctl查看任务
sudo supervisorctl -c supervisord.conf
7.配置nginx
-
写入配置如下
server { listen 80; server_name localhost; charset utf-8; error_page 404 /40x.html; location / { uwsgi_pass 0.0.0.0:8000; include uwsgi_params; }
-
启动nginx
sudo nginx
8.静态文件处理
此时是可以访问项目的,但会发现静态资源缺失
-
设置django的配置文件
收集所有的静态文件,放入一个统一管理的目录 打开项目配置文件,加入 STATIC_ROOT='/home/ubuntu/kunmzhao/orderPlatform/orderPlatform/my_static/'
-
用命令收集静态文件
python3 manage.py collectstatic
-
配置nginx
在上面的基础上添加: # 将客户端关于/static的请求全部转移到指定的目录 location /static { alias /home/ubuntu/kunmzhao/orderPlatform/orderPlatform/my_static/; }
-
再次访问
9.域名和https证书
-
域名可以到各大平台购买,但需要备案,备案时间一般在10-15个工作日
-
证书有免费的,我们使用免费的即可,需要将证书下载到项目部署服务器上
在nginx的配置文件中,添加配置如下
server { listen 443 ssl; server_name www.kunmzhao.cn; ssl_certificate /home/ubuntu/kunmzhao/orderPlatform/ssl/public.pem; ssl_certificate_key /home/ubuntu/kunmzhao/orderPlatform/ssl/private.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配 ssl_prefer_server_ciphers on; }
如果希望全站https,可以将http请求重定向为https,添加配置如下
server { listen 80; server_name www.kunmzhao.cn; rewrite ^(.*) https:$host$1 permanent; }