python项目部署
打包上传代码
项目开发完毕,在部署之前需要再配置文件中将 ALLOWED_HOSTS配置设置为:当前服务器IP或*,如:
ALLOWED_HOSTS = ["*",]
这个配置就是允许别人通过哪个ip访问你,*表示所有ip
上线时还要将配置中的DEBUG改为False
不同系统如何传代码
windows:
yum install lrzsz
压缩zip包,拖进来。
mac:
scp /home/xx/s8day145.zip [email protected]:/data/
在真正的线上环境应该从git上拖代码
安装Python3
a. 下载Python:https://www.python.org/ftp/python/3.5.4/
b. 解压 tar -xvf Python-3.5.4.tgz
c. cd Python-3.5.4
d. 先装依赖:
- yum install openssl-devel
- yum install sqlite-devel
e. 编译安装
- ./configure
- make
- make install
/usr/local/bin python3
f. 安装django
pip3 install django==1.11.7
第一版本上线:简单粗暴
进入python程序目录
python3 manage.py runserver 0.0.0.0:8000
uwsgi
Django框架运行依赖wsgi(本质提供socket服务端),众多模块实现了wsgi规范,而django框架中默认使用wsigiref模块来实现,他由于性能比较低,所以用于本地开发和测试,而线上部署时需要使用uwsgi来代替
在服务器上安装uwsgi
pip3 install uwsgi
单文件使用uwsgi
在服务器上编写一个Python文件app.py:
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
在服务器上执行命令启动Web服务器:
uwsgi --http :9001 --wsgi-file app.py
或
uwsgi --http :9002 --wsgi-file app.py --master --processes 4 # 启动4个进程
PS: flask需要再加 --callable app
uwsgi --http :9002 --wsgi-file app.py --callable app
django程序*
方式一
uwsgi --http :9003 --chdir /data/s8day145/ --wsgi-file s8day145/wsgi.py # chdir进入后面的项目目录 然后wsgi-file找到项目中的wsgi.py文件
方式二
可以看到上面的方法参数很多,我们可以将参数写到一个文件中
s8day145_uwsgi.ini
[uwsgi]
http = 0.0.0.0:9005
chdir = /data/s8day145/
wsgi-file = s8day145/wsgi.py
processes = 4 # 进程数
static-map = /static=/data/s8day145/allstatic # 静态文件的目录
启动时
uwsgi --ini s8day145_uwsgi.ini
此时访问时,会出现找不到静态文件的错误。
想要uwsgi处理静态文件,需要先将django的静态文件收集到制定目录,然后再设置对应关系。
收集django静态文件
1.在django的配置文件中添加:STATIC_ROOT = os.path.join(BASE_DIR,"allstatic")
2.执行 python3 manage.py collectstatic 命令,至此django项目所有相关静态文件都会收集到制定目录。
**设置uwsgi静态文件对应关系**
3.uwsgi --http :9005 --chdir /data/oldboy/ --wsgi-file oldboy/wsgi.py --master --processes 4 --static-map /static=/data/oldboy/allstatic
第三版本上线:uwsgi + nginx
nginx作用:
- 处理静态文件
- 反向代理
- 负载均衡(LVS、haproxy)
uwsig作用: - 处理动态请求
nginx配置文件
user root;
worker_processes 4;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
include /etc/nginx/mime.types;
default_type application/octet-stream;
upstream django {
server 127.0.0.1:8001;
server 127.0.0.1:8002;
}
server {
listen 80;
charset utf-8;
# max upload size
client_max_body_size 75M;
location /static {
alias /data/s8day145/allstatic;
}
location / {
uwsgi_pass django;
include uwsgi_params;
}
}
}
uwsgi配置:/data/s8day145/
s8day145_uwsgi_8001.ini
[uwsgi]
socket = 127.0.0.1:8001
chdir = /data/s8day145/
wsgi-file = s8day145/wsgi.py
processes = 1
s8day145_uwsgi_8002.ini
[uwsgi]
socket = 127.0.0.1:8002
chdir = /data/s8day145/
wsgi-file = s8day145/wsgi.py
processes = 1
启动
nginx:
/etc/init.d/nginx start
/bin/systemctl restart nginx.service
/bin/systemctl start nginx.service
/bin/systemctl stop nginx.service
uwsgi:
uwsgi --ini s8day145_uwsgi_8001.ini &
uwsgi --ini s8day145_uwsgi_8002.ini &
如果进程挂了,supervisor帮助你自动将服务重新启动
supervisor是一个对进程管理的软件,可以帮助我们启动uwsgi并维护(uwsgi进程关闭时,自动将其启动起来)
安装
yum install supervisor
配置/etc/supervisord.conf
[program:s8day145]
command=/usr/local/bin/uwsgi --ini /data/s8day145/s8day145_uwsgi_8001.ini ;命令
priority=999 ; 优先级(越小越优先)
autostart=true ; supervisord启动时,该程序也启动
autorestart=true ; 异常退出时,自动启动
startsecs=10 ; 启动后持续10s后未发生异常,才表示启动成功
startretries=3 ; 异常后,自动重启次数
exitcodes=0,2 ; exit异常抛出的是0、2时才认为是异常
stopsignal=QUIT ; 杀进程的信号
stopwaitsecs=10 ; 向进程发出stopsignal后等待OS向supervisord返回SIGCHILD 的时间。若超时则supervisord将
使用SIGKILL杀进程
user=root ; 设置启动该程序的用户
log_stdout=true ; 如果为True,则记录程序日志
log_stderr=false ; 如果为True,则记录程序错误日志
logfile=/var/log/cat.log ; 程序日志路径
logfile_maxbytes=1MB ; 日志文件最大大小
logfile_backups=10 ; 日志文件最大数量
启动
systemctl start supervisord.service
公司正式上线流程
公司中的部署步骤及负责人:
- 开发提交代码
- 测试人员开始测试
- 运维人员进行上线
使用软件:jenkins+自己写脚本,运维人员点点点。
- 从git上啦代码到一个服务器,在该服务器上对代码进行编译(c/vue/java)
- 通过以下工具 将代码同步到每台服务器上
- saltstack
- ansible
- 执行命令启动程序
原文:https://blog.csdn.net/qq_40285302/article/details/81064739
上一篇: Linux 操作指令杂记