1. Django web project deployment
1.1项目准备
准备打包好项目开发web项目,通过FTP上传到指定的linux/unix服务器
案例项目:mysite/
1.2生产环境的准备
Django生产环境服务器,常规情况下使用Linux/Unix平台作为服务器平台,需要准备
如下运行环境
环境:python2 x/python3.x
软件:mysql-server、mysql-client
模块:pymysql、pillow、django、uwsgi
1.3项目部署【UWSGI】
(1)生产环境打开mysql-client命令行,执行项目sql脚本语言,初始化数据库
(2)在项目根目录中,添加uwsgi.ini配置文件,添加如下内容:
[uwsgi]
#指定服务器部署IP地址和端口
http=192.168.10.120:8000
#配置项目在当前服务器中的绝对路径
chdir=/home/worker/django_pro/mysite
#相对路径指定当前项目中wsgi.py
wsgi-file=mysite/wsgi.py
#设置启动的进程数量
processes=4
#设置每个进程启动的线程数量
threads=2
#设置主进程
master=True
#指定保存主进程编号的文件
padfile=uwsgi.pid
#指定守护进程的日志存储
daemonize=uwsgi.log
(3) 项目运行
启动项目,当前路径中,直接运行命令启动项目
uwsgi --ini
停止项目,通过包含主进程编号的文件设置停止项目
uwsgi --stop uwsgi.pid
启动项目
uwsgi --reload uwsgi.pid
1.4项目部署【 UWSGI + NGINX】
通过UWSGI服务器部署Django项目,通过nginx进行反向代理
(1)项目根目录创建uwsgi.ini配置文件
[uwsgi]
#配置和nginx反向代理之间的连接地址
socket=localhost:8000
#配置项目根目录
chdir=/home/worker/django_pro/mysite
#相对路径指定当前项目中wsgi.py
wsgi-file=mysite/wsgi.py
#设置启动的进程数量
processes=4
#设置每个进程启动的线程数量
threads=2
#设置主进程
master=True
#指定保存主进程编号的文件
pidfile=uwsgi.pid
#指定守护进程的日志存储
daemonzie=uwsgi.log
(2) 编程nginx.conf配置文件,设置反向代理
nginx和uwsgi进行配合使用时,nginx主要有两个作用,使用nginx作为静态文件服务器和反向代理服务器
- 设置静态文件
打开django项目的配置文件,添加STATIC_ROOT配置
编辑mysite/mysites/settings.py
STATIC_ROOT=/home/worker/django_pro/myweb/static_file/
进入Django项目根目录执行命令手机静态文件
>>>python manage.py collectstatic
- 反向代理配置
编辑/etc/nginx/nginx.conf配置文件,编辑sever配置选项
核心配置反向代理server 服务器和静态文件别名
··
event {
···
}
··
http {
··
server {
listen 80;
server_name 192.168.10.120;
#反向代理配置
location / {
include uwsgi_parmas;
uwsgi_paas 127.0.0.1:8000;
}
#静态文件路径配置
location /static{
alias /home/worker/django_pro/myweb/static_file/;
}
}
··
}
(3) 启动项目进行测试
- 首先进入项目目录,启动Django项目
>>>uwsgi --in uwsgi.ini
- 启动nginx服务器
>>>nginx
- 检查进程启动情况
>>> ps -ef|grep wsgi
··
>>>ps -ef|grep nginx
- 测试访问项目
test
1.5项目分布式部署【UWSGU + NGINX】
使用UWSGI配置Django项目的多进程部署,使用nginx进行静态文件的部署和负载均衡的配置
(1) 在多态主机上部署多个相同的django项目【同一台主机上部署多个项目进行模拟】设置两个或者多个Django项目启动配置信息如下
mysite/uwsgi.ini
[uwsgi]
#配置项目访问地址
http=localhost:8000
#配置项目根路径
chdir=/home/worker/django_pro/mysite
#相对路径指定当前项目中wsgi.py
#设置启动的进程数量
processes=4
#设置每个进程启动的线程数量
thread=2
#设置主进程
master=True
#指定保存主进程编号文件
pidfile=uwsgi.pid
#指定守护进程的日志存储
demonize=uwsgi.log
(2)配置nginx静态服务器映射和负载均衡
# 使用默认的轮询分发配置多个分布的服务主机
upstream myweb {
server 127.0.0.1:8000;
server 127.0.0.1:9000;
}
server {
listen 80;
server_name 192.168.10.120;
# 配置分布式负载转发
location / {
proxy_pass http://myweb;
}
# 配置静态文件服务器
location /static {
alias /home/worker/django_pro_1_11/myweb/static_file/;
}
.. ..
(3)测试访问项目
TEST
2. Tornado web project deployment
2.1项目准备
参考Django1.1部分
2.2项目常规部署【使用自带服务器直接操作】
直接通过配置文件命令或者命令行指定端口运行程序,就可以使用tornado自带的web服务器启动web项目并提供正常的web服务了
但是这样的操作方式并不是可取的,命令行需要处理让启动的程序后台运行,并且如果部署多进程项目的话,多个进程直接没有进行统一管理的操作,很不方便后期的维护操作
直接运行【阻塞方式】
>>>python demo.py --port=8000
后台运行【非阻塞方式】
>>>python demo.py --port=8000
2.3supervisor管理器
针对tornado多进程部署方式,第三方提供了各种进程管理模块用于进行tornado项目多个进程的维护管理,项目中常用的如supervisor、circus等等
(1)ubuntu中安装supervisor
$sudo apt-get install supervisor
备注:可以使用pip install supervisor进行安装
安装完成后,生成supervisor配置文件
$cd /etc/supervisor
$echo_supervisor_conf > supervisord.conf
修改配置文件/etc/supervisor/supervisor.conf
··
[include]
files./conf.d/*.conf
(2)添加tornado管理配置文件/etc/supervisor/conf.d/tornadoes.conf
[group:td]
programs=tornado-8000, tornado-8001
[program:tornado-8000]
command=/home/worker/tornado_web/tornado_lib/bin/python /home/worker/tornado_web/web1/demo01.py --port=8000
directory=/home/worker/tornado_web/web1
user=www-data
autorestart=true
redirect_stderr=true
stdout_logfile=/home/worker/tornado_web/web1/log/tornado.log
loglevel=debug
[program:tornado-8001]
command=/home/worker/tornado_web/tornado_lib/bin/python /home/worker/tornado_web/web1/demo01.py --port=8001
directory=/home/worker/tornado_web/web1
user=www-data
autorestart=true
redirect_stderr=true
stdout_logfile=/home/worker/tornado_web/web1/log/tornado.log
loglevel=info
(3)进程管理
启动进程管理器
$ supervisor -c supervisord.conf
进程管理器包含进程状态管理
supervisorctl status #查看管理的所有进程的状态
supervisorctl update #重新启动配置文件修改的程序
supervisorctl stop td:* #停止所有进程【可以指定进程】
supervisorctl start td:* #启动所以进程【可以指定进程】
supervisorctl restart td:* #重启所有进程进程【可以指定进程】
2.4supervisor + nginx 分布式部署
模仿Django和Tornado的项目部署方式
参考http://docs.jinkan.org/docs/flask/deploying/index.html#deployment