项目部署

部署回顾

1 配置gunicorn

 想用python3 跑程序那就 pip3 install gunicorn
 

	在你的工程下边 新建一个gunicorn的配置文件目录在该目录下 新建一个gunicorn的配置文件 内容如下

command = '/home/ubuntu/.local/bin/gunicorn' #命令(绝对路径)
pythonpath = '/home/ubuntu/liuda/项目代码'  #这个路径是你Django项目的路径 这个路径下边要包含manage.py

bind = '127.0.0.1:12356' #你服务运行的端口
workers = 2  #表示开几个线程去相应浏览器请求
#注意:gunicorn的路径 是在执行了which gunicorn得到的路径

测试:在包含manage.py文件的目录下运行类似下面的命令

gunicorn 工程名字.wsgi -c gunicorn配置文件夹/配置文件

2 配置nginx

sudo apt install nginx

		在/etc/nginx/conf.d 目录下 新建一个 你的配置文件.conf

	加入类似的配置

server{
    listen 80;
    server_name axf.sharemsg.cn; #此处写你的域名或者ip

    location / {
      proxy_pass http://127.0.0.1:12356; #你Django服务跑的那个端口
      proxy_set_header Host $host;
      #捕获客户端真实IP
      proxy_set_header X-Real-IP $remote_addr;         #$remote_addr 代表客户端IP
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
    }
    
    location /static{
	alias  /home/ubuntu/liuda/项目代码/static/; #静态文件的配置 路径就是你Django的static目录的路径
    }

}

修改完配置 执行 sudo nginx -s reload

负载均衡的配置
upstream axf{
    server 47.94.143.162:12356 weight=2;
    server 127.0.0.1:12355 weight=3;
}
server{
    listen 80;
    server_name axf.sharemsg.cn 139.224.115.157;

    location / {
      proxy_pass http://axf;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
    }
    location /static {
      alias /home/liuda/axf/hz1806axf/static;
    }
}

3配置supervisor

	安装:sudo apt install supervisor

	在/etc/supervisor/conf.d 目录下新建你的配置文件.conf 内容如下

[program:axf]
directory=/home/ubuntu/liuda/项目代码
command=/home/ubuntu/.local/bin/gunicorn AXF1806.wsgi -c gunicorn_confs/axf.conf
autostart=true        
startsecs=10         
autorestart=true     
startretries=3       
user=ubuntu           
priority=999          
redirect_stderr=true 
stdout_logfile_maxbytes=100MB  
stdout_logfile_backups = 20
stdout_logfile=/var/log/supervisor_logs/axf.log
stopasgroup=false
killasgroup=false

带注释的版本

[program:axf]
directory=/home/liuda/shangmi_new/pro
command=gunicorn pro.wsgi -c service_conf/django_gunicorn.conf ; 程序启动命令
autostart=true       ; 在supervisord启动的时候也自动启动
startsecs=10         ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true     ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=3       ; 启动失败自动重试次数,默认是3
user=root          ; 用哪个用户启动进程,默认是root
priority=999         ; 进程启动优先级,默认999,值小的优先启动
redirect_stderr=true ; 把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=100MB  ; stdout 日志文件大小,默认50MB
stdout_logfile_backups = 20   ; stdout 日志文件备份数,默认是10
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile=/var/log/supervisor_logs/axf.out
stopasgroup=false     ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false     ;默认为false,向进程组发送kill信号,包括子进程

修改完以后

重新加载配置文件 执行命令: sudo supervisorctl reload

						 sudo supervisorctl restart all(你想重启的单个应用名字也可以)

使用sudo supervisorctl status 查看状态

如果启动问题 先去看看log log的位置 stdout_logfile=/var/log/supervisor_logs/axf.out

部署

debug=false

代理 nginx

server{
    listen 80;
    server_name axf.sharemsg.cn;

    location / {
      proxy_pass http://127.0.0.1:8080;
      proxy_set_header Host $host;
      #捕获客户端真实IP
      proxy_set_header X-Real-IP $remote_addr; $remote_addr代表客户端IP
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
    }
    # location 顾名思义,定位,就是当访问 / 的时候,nginx会将请求转给本地的8080端口,而后面的设置都是一些基本的配置,可以直接用
    location /static {
      alias /home/project/static;
    }
    # 这个就是配置静态文件的地方,要用绝对地址,对应最开始的目录形式,假设project就在/home下面,那么这样配置就可以的了,还有个前提是,你在开发的时候,采取了django的建议,每个app的静态文件都用多了一层app_name的文件夹来包住。
}

服务 gunicorn

gunicorn是一个python Wsgi http server,只支持在类Unix系统上运行,来源于Ruby的unicorn项目。Gunicorn使用prefork master-worker模型(在gunicorn中,master被称为arbiter),能够与各种wsgi web框架协作

切换到root用户 然后安装
pip3 install gunicorn

command = 'gunicorn'
pythonpath = '/home/liuda/shangmi_new/pro/'
bind = '127.0.0.1:12349'
workers = 3

进程守护 supervisor

sudo apt-get install supervisor

注意:默认python命令 要指向2.7

常用命令

supervisord : 启动supervisor
supervisorctl reload :修改完配置文件后重新启动supervisor
supervisorctl status :查看supervisor监管的进程状态
supervisorctl start 进程名 :启动XXX进程
supervisorctl stop 进程名 :停止XXX进程
supervisorctl stop all:停止全部进程,注:start、restart、stop都不会载入最新的配置文件。
supervisorctl update:根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启
supervisorctl reload  更改了supervisor配置文件,需要重启

常用配置

[program:axf]
directory=/home/liuda/shangmi_new/pro
command=gunicorn pro.wsgi -c service_conf/django_gunicorn.conf ; 程序启动命令
autostart=true       ; 在supervisord启动的时候也自动启动
startsecs=10         ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true     ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=3       ; 启动失败自动重试次数,默认是3
user=root          ; 用哪个用户启动进程,默认是root
priority=999         ; 进程启动优先级,默认999,值小的优先启动
redirect_stderr=true ; 把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=100MB  ; stdout 日志文件大小,默认50MB
stdout_logfile_backups = 20   ; stdout 日志文件备份数,默认是10
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile=/var/log/supervisor_logs/axf.out
stopasgroup=false     ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false     ;默认为false,向进程组发送kill信号,包括子进程

supervisor 不支持python3 也就是默认python对应版本是python2

当我们修改了原码的时候就要重启我们的supervisor

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值