参考
- https://blog.csdn.net/yilovexing/article/details/82969103
- djanog2.2
1. 首先通过django直接运行项目-调试模式
先在服务器上放上网站项目代码,然后
2. 然后通过uwsgi运行项目-不走nginx
关掉上面的manage.py, python下安装uwsgi,通过uwsgi运行项目
检查项目中wsgi.py是否存在
参考django官方文档,https://docs.djangoproject.com/en/2.2/howto/deployment/wsgi/uwsgi/ ,
用django start-project 命令创建的项目会在创建时自带 wsgi.py
假设项目根目录为/www/myadmin, 创建项目时在此目录下执行
在项目文件夹根目录下新建uwsgi.ini配置文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | ; run: uwsgi --ini uwsgi.ini ; reload: uwsgi --reload uwsgi.pid ; stop: uwsgi --stop uwsgi.pid [uwsgi] chdir=/www/your_websit pidfile = /www/your_website/uwsgi.pid daemonize = /www/your_website/running.log ;记录日志的位置 module=server.wsgi:application master=True vacuum=True max-requests=5000 py-autoreload = 1 ;修改py文件后自动重启uwsgi processes=4 ;根据实际cpu数量酌情配置 disable-logging = true ;正常的request不记录,只记录异常 http-socket = :8090 ;网页直接访问,可用于测试没有nginx时是否正常运行。 socket = 127.0.0.1:30888 ;和nginx相连时的配置 |
- 配置daemonize = *.log,会使任务在后台运行。
- 配置logto = *.log, 会使任务在前台运行。
- 网上说的后台运行方法
uwsgi -d --ini uwsgi.ini ,可能是老版本的,这个命令在2.2版本会创建一个名为--ini 的文件作为日志文件,命令后面的uwsgi.ini会被被忽略。
通过uwsgi启动项目
cd到项目根目录下,先测试没有nginx时uwsgi是否正常运行:
1 2 3 4 5 | # 激活虚拟环境 conda activate your_env # 启动wsgi,该命令相当于上面的 python manage.py runserver uwsgi --ini uwsgi.ini |
浏览器访问服务器8090端口。因为配置文件中设置了http-socket=8090,所以此时应该能访问网站,但是静态文件打不开(注意防火墙开放端口)。
错误排查
如果不能访问,可查看uwsgi的日志排查错误,
3. 最后通过nginx + wsgi 运行项目
安装nginx
参考 https://www.jianshu.com/p/8a6d923cda9f
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # 添加nginx存储库 sudo yum install epel-release # 使用yum安装Nginx sudo yum install nginx # 也可以试试这个:https://www.jianshu.com/p/c22faafc7b8b yum install nginx --enablerepo=epel # 设置nginx开机自启动 systemctl enable nginx # 重启nginx systemctl restart nginx |
配置nginx
ubuntu Nginx 默认的配置文件在
-
server_name可以区分从不同hostname网址来的请求,比如两个网址都解析到了该主机,那么设置server_name可以将其区分。设置为
_ 表示所有如果没有其他适配的,就到这里。 -
client_max_body_size,前端上传文件大小限制,nginx默认是1m
-
可以设置多个server,实现一台主机上部署多个网站。通过listen不同的端口,设置不同的server_name来区别不同的请求。
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 33 34 35 36 37 | ... http { ... server { listen 80; client_max_body_size 200m; server_name _; ... #配置uwsgi转发,需要和上面uwsgi.ini中的端口对应 location / { include uwsgi_params; uwsgi_pass 127.0.0.1:30888; } # serve静态文件 location /static { autoindex on; alias /www/myadmin/static/; } ... } server { listen 80; listen 8090; client_max_body_size 200m; server_name www.aaa.com www.bbb.com; ... } } |
重启nginx使配置生效:
1 | systemctl restart nginx |
uwsgi可能也需要重启:
1 2 3 4 5 6 | # 先激活python虚拟环境,再执行下面语句 uwsgi --stop uwsgi.pid uwsgi --ini uwsgi.ini #或者使用reload uwsgi --reload uwsgi.pid |
测试和错误排查
此时访问服务器的80端口,应该能正常访问网站,包括静态资源。
如果不行,可能需要关闭SELinux。 临时关闭:输入命令
另外可查看nginx中配置中error_log的位置,检查nginx的error_log。默认路径为
4. 设置开机自启动
创建sh脚本,脚本中激活anaconda,然后启动uwsgi服务。
1 2 3 4 5 6 7 8 9 10 | # #!/bin/sh # #this script will run in background systemctl start nginx source /root/anaconda3/bin/activate syadmin uwsgi --ini /www/syadmin/uwsgi.ini # nohup python /www/your_webst/manage.py start_circle_task >/dev/null 2>&1 & |
有了上面的sh脚本后,可以将其加入/etc/rc.d/rc.local中实现开机自启动。
也可以用systemctl启动。参考下面的方法(这个没有实践):
- https://blog.csdn.net/huaishuming/article/details/79794637
- https://blog.csdn.net/sinat_41292836/article/details/103764842
创建systemctl服务,指定Type=forking,systemd认为当该服务fork出子进程并生成PIDFile,且父进程退出后服务启动成功。同时指定 PIDFile=FilePath,以便 systemd 能够跟踪服务的主进程。