项目路径:/home/zyh/projects/mytestProject1/mysite
切换到项目路径
cd /home/zyh/projects/mytestProject1/mysite新建虚拟环境python3_venv
python -m venv python3_venv激活
source python3_venv/bin/activate下载项目所需第三方库
pip install -r requirements.txt虚拟环境中安装gunicorn
pip install gunicorn测试开启服务(可选):
cd /home/zyh/projects/mytestProject1/mysite gunicorn mysite.wsgi:application --bind 127.0.0.1:9000 # 9000 为gunicorn端口编写gunicorn脚本文件
1. cd /home/zyh/projects/mytestProject1/mysite 2. touch gunicorn_start.sh # 新建gunicorn文件插入代码
#!/bin/bash NAME="mysite" DIR=/home/zyh/projects/mytestProject1/mysite USER=zyh GROUP=zyh WORKERS=3 BIND=127.0.0.1:9000 DJANGO_SETTINGS_MODULE=mysite.settings DJANGO_WSGI_MODULE=mysite.wsgi LOG_LEVEL=error cd $DIR source ../python3_venv/bin/activate export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE export PYTHONPATH=$DIR:$PYTHONPATH exec ../python3_venv/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \ --name $NAME \ --workers $WORKERS \ --bind=$BIND \ --log-level=$LOG_LEVEL \ --log-file=-修改权限为可执行模式
sudo chmod u+x bin/gunicorn_start虚拟环境中安装supervisor
pip install supervisor生成配置文件
cd /etc/supervisor echo_supervisord_conf > /etc/supervisord.conf sudo vim supervisord.conf修改代码
[unix_http_server] file=/var/run/supervisor.sock (修改成当前) [supervisord] logfile=/var/log/supervisord.log(修改成当前) pidfile=/var/run/supervisord.pid(修改成当前) [supervisorctl] serverurl=unix:///var/run/supervisor.sock(修改成当前) 最后一行改为:files = /etc/supervisor/conf.d/*.conf编辑自己的mysite.conf文件
cd conf.d touch mysite.conf插入代码
[program:mysite] command =/home/zyh/projects/mytestProject1/mysite/gunicorn_start.sh(执行gunicorn文件) user = zyh autostart=true autorestart=true redirect_stderr = true stdout_logfile =/home/zyh/projects/mytestProject1/mysite/logs/robot.log stderr_logfile=/home/zyh/projects/mytestProject1/mysite/logs/err.log也可以直接在supervisord.conf中插入代码
删除最后一行files = /etc/supervisor/conf.d/*.conf
[program:mysite] command =/home/zyh/projects/mytestProject1/mysite/gunicorn_start.sh(执行gunicorn文件) user = zyh autostart=true autorestart=true redirect_stderr = true stdout_logfile =/home/zyh/projects/mytestProject1/mysite/logs/robot.log stderr_logfile=/home/zyh/projects/mytestProject1/mysite/logs/err.log新建logs文件夹
cd /home/zyh/projects/mytestProject1/mysite mkdir logs调试
启动 $ supervisord -c /etc/supervisor/supervisord.conf $ sudo supervisorctl reread mysite: available $ sudo supervisorctl update mysite: added process group 查看所有服务状态 $ sudo supervisorctl status mysite RUNNING pid 18020, uptime 0:00:50 停止服务 $ sudo supervisorctl stop mysite mysite: stopped 开启服务 $ sudo supervisorctl start mysite mysite: started 重启服务 $ sudo supervisorctl restart mysite mysite: stopped mysite: started下载
sudo apt install nginx新建dj.conf文件
cd /etc/nginx/sites-available/ touch dj.conf插入代码
server { listen 8000; # 监听端口(前端访问端口) server_name 192.168.153.189; # IP或者域名(前端访问) charset utf-8; client_max_body_size 75M; location / { proxy_pass http://127.0.0.1:9000; # gunicorn的bind proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /static { #这里做了访问静态目录不走uwsgi/gunicorn #expires 30d; #autoindex on; #add_header Cache-Control private; alias /home/zyh/projects/mytestProject1/mysite/staticfiles; } }创建软连接
sudo ln -s /etc/nginx/sites-available/dj.conf /etc/nginx/sites-enabled/dj.conf # 必须为绝对路径删除默认文件
sudo rm /etc/nginx/sites-enabled/default重启nginx
sudo service nginx restart或sudo service nginx startDEBUG = False
项目下新建static,staticfiles文件夹
setting.py:
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]url.py:
from django.urls import path, re_path, include from django.conf.urls import url from django.contrib import admin from django.views import static from django.conf import settings urlpatterns = [ #re_path(r'^admin/', admin.site.urls), #path('polls/', include('polls.urls')), url(r'^static/(?P<path>.*)$', static.serve, {'document_root': settings.STATIC_ROOT}, name='static'), ]设置nginx
cd /etc/nginx/sites-available 将所有.conf文件中server下添加: location /static { #这里做了访问静态目录不走uwsgi/gunicorn expires 30d; # 可选 autoindex on; # 可选 add_header Cache-Control private; # 可选 alias /home/zyh/projects/mytestProject1/mysite/staticfiles; }收集静态文件:
python manage.py collectstatic sudo service nginx restart # 重启nginx配置系统文件
cd /lib/systemd/system vim supervisord.service插入代码
[Unit] Description=Supervisord Service [Service] Type=forking ExecStart=/home/zyh/projects/mytestProject1/python3_venv/bin/supervisord -c /etc/supervisor/supervisord.conf ExecStop=/home/zyh/projects/mytestProject1/python3_venv/bin/supervisorctl $OPTIONS shutdown ExecReload=/home/zyh/projects/mytestProject1/python3_venv/bin/supervisorctl $OPTIONS reload KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target重新加载
systemctl daemon-reload激活开机启动
systemctl enable supervisord.service后台运行‘cmd’
$ nohup ‘cmd’查看端口
netstat -nlpt | grep 9090查看关键字
ps -aux | grep gunicornkill 端口
sudo fuser -k 8000/tcp客户通过nginx:8000端口提交请求,nginx将动态请求分给gunicorn:9000端口,gunicorn通过Django执行后台程序后返回response给nginx,再返回给客服端;将静态请求设置缓存。supervisor检测gunicorn是否一直处于运行状态。