连接远程服务器
ssh <user>@<远程IP>
, 如1
ssh fhy@192.168.137.115
第一步:项目环境搭建好,能正常运行;
第二步:在项目目录下新建nginx_wsgi.py
文件;
第三步:Nginx安装配置;
第四步:Gunicorn安装配置;
第五步:进程管理工具Supervisor安装配置;
wsgi
nginx_wsgi.py
添加如下内容:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19import sys
import site
import os
# site-packages
site.addsitedir('/home/nginxuser/.virtualenvs/example/lib/python2.7/site-packages')
# Add the project directory
# sys.path.append('/home/nginxuser/nginxuser')
PROJECT_DIR = '/home/nginxuser/projects/example'
sys.path.insert(0, PROJECT_DIR)
os.environ['DJANGO_SETTINGS_MODULE'] = 'example.settings.prod'
# Activate your virtual env
activate_env = os.path.expanduser("/home/nginxuser/.virtualenvs/example/bin/activate_this.py")
execfile(activate_env, dict(__file__=activate_env))
# after activite env
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Nginx
安装
1 | apt-get install nginx |
新建网站运行配置
(# 后文字仅注释)1
vim /etc/nginx/conf.d/example.conf
1 | server { |
检查配置是否有错
1 | nginx -t -c /etc/nginx/nginx.conf |
修改主配置文件
1 | user nginx; |
nginx改为系统当前用户名
可以看到,其中有一行是1
include /etc/nginx/conf.d/*.conf;
就是此行将新建网站配置文件包含进去
检查配置是否有错
1 | nginx -t -c /etc/nginx/nginx.conf |
启动nginx
1 | service nginx start |
设置开机自启
1 | systemctl enable nginx |
Gunicorn
安装
1 | pip install gunicorn |
项目根目录下添加gunicorn运行配置文件gunicorn.conf.py1
2
3
4
5
6import multiprocessing
bind = "127.0.0.1:8000"
workers = 2
errorlog = "/home/nginxuser/example/gunicorn.error.log"
#loglevel = "debug"
proc_name = "gunicorn_example"
启动
1 | sudo gunicorn example.nginx_wsgi:application -c /home/nginxuser/projects/example/gunicorn.conf.py |
后台运行1
sudo nohup gunicorn example.nginx_wsgi:application -c /home/nginxuser/projects/example/gunicorn.conf.py&
Supervisor
安装
1 | pip install supervisor |
创建管理进程配置文件
1 | vim /etc/supervisord.d/example.ini |
1 | [program:example] |
以上也可直接在主配置文件中直接加
如果启动命令需要在虚拟环境内(workon),可增加environment参数
environment=PATH="/home/username/.virtualenvs/myproject/bin"
或修改PYTHONPATH(如上配置文件最后注释)
启动
1 | supervisord -c /etc/supervisord.conf |
如遇到以下报错:1
2Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.
For help, use /use/bin/supervisord -h
可以使用以下命令解决:1
sudo unlink /var/run/supervisor/supervisor.sock
具体由supervisor.sock所在实际路径决定
可在配置文件/etc/supervisord.conf
查看
1
2 [unix_http_server]
file=/tmp/supervisor.sock ; (the path to the socket file)
命令行客户端工具supervisorctl
1 | supervisorctl -c /etc/supervisord.conf |
启动后进入supervisorctl的shell,在此shell里可以执行以下命令1
2
3
4
5
6status # 查看程序状态
start example # 启动example程序
stop example # 关闭example程序
restart example # 重启example程序
reread # 读取有更新(增加)的配置文件,不会启动新添加的程序
update # 重启配置文件修改过的程序
也可以不进shell执行以上命令1
2
3
4
5
6supervisorctl status # 查看程序状态
supervisorctl start example # 启动example程序
supervisorctl stop example # 关闭example程序
supervisorctl restart example # 重启example程序
supervisorctl reread # 读取有更新(增加)的配置文件,不会启动新添加的程序
supervisorctl update # 重启配置文件修改过的程序
开启web管理界面
如果要开启web管理界面,打开/etc/supervisord.conf把下面几行取消注释即可1
2
3
4:[inet_http_server] ; inet (TCP) server disabled by default
:port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for all iface)
:username=user ; (default is no username (open server))
:password=123 ; (default is no password (open server))