项目部署经验
使用supervisor开启多个线程
ubuntu下使用apt-get安装supervisor
# apt-get install supervisor
然后,给我们自己开发的应用程序编写一个配置文件,让supervisor来管理它。每个进程的配置文件都可以单独分拆,放在/etc/supervisor/conf.d/目录下,以.conf作为扩展名,例如,hdpt.conf定义了一个gunicorn的进程。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [group:hdpt] programs =hdpt-web [program:hdpt-web] user =root directory =/data/www/vhosts/hdpt-backend command =python3 main.py 120 %(process_num)02 d process_name = %(program_name)s%(process_num)d autorestart =true redirect_stderr =true stdout_logfile =/data/www/vhosts/hdpt-backend/log/tornado.log stdout_logfile_maxbytes =500 MB stdout_logfile_backups =50 stderr_logfile =/data/www/vhosts/hdpt-backend/log/tornado.log loglevel =info numprocs = 10 numprocs_start = 1
重载配置文件
启动用户组下的程序
# supervisorctl start hdpt:*
查看线程启动情况
root @panjikejiproduce:/etc/supervisor/conf.d# supervisorctl statushdpt :hdpt-web1 RUNNING pid 27267 , uptime 0 :21 :12 hdpt :hdpt-web10 RUNNING pid 27260 , uptime 0 :21 :13 hdpt :hdpt-web2 RUNNING pid 27265 , uptime 0 :21 :12 hdpt :hdpt-web3 RUNNING pid 27266 , uptime 0 :21 :12 hdpt :hdpt-web4 RUNNING pid 27263 , uptime 0 :21 :13 hdpt :hdpt-web5 RUNNING pid 27264 , uptime 0 :21 :12 hdpt :hdpt-web6 RUNNING pid 27261 , uptime 0 :21 :13 hdpt :hdpt-web7 RUNNING pid 27262 , uptime 0 :21 :13 hdpt :hdpt-web8 RUNNING pid 27268 , uptime 0 :21 :12 hdpt :hdpt-web9 RUNNING pid 27269 , uptime 0 :21 :12
查看端口占用时候否正确
tcp 0 0 0.0.0.0:12010 0.0.0.0 :* LISTEN 27260 /python3 tcp 0 0 127.0.0.1:49417 127.0.0.1:27017 ESTABLISHED 27260 /python3 tcp 0 0 127.0.0.1:49418 127.0.0.1:27017 ESTABLISHED 27260 /python3 tcp 0 0 127.0.0.1:49439 127.0.0.1:27017 ESTABLISHED 27260 /python3 tcp6 0 0 :::12010 :::* LISTEN 27260 /python3
27260是hdpt:hdpt-web10的pid,通过查看端口占用可见27260确实是占用的12010这个端口。
配置ngix的负载均衡
修改/etc/nginx/sites-enabled/hdpt,在其中添加一个端口映射,upstream,并修改proxy_pass。
原文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 server { listen 80 ; server_name www.huodipingtai.com huodipingtai.com; client_max_body_size 50 m; listen 443 ; ssl on; ssl_certificate /data/ www/vhosts/ hdpt-ssl/chained.pem; ssl_certificate_key /data/ www/vhosts/ hdpt-ssl/domain.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 ; ssl_prefer_server_ciphers on; ssl_session_timeout 10 m; ssl_session_cache shared:SSL:10 m; ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /data/ www/vhosts/ hdpt-ssl/signed.crt; resolver 8.8 .4.4 8.8 .8.8 valid=300 s; resolver_timeout 10 s; location /.well-known/ acme-challenge/ { alias /data/ www/vhosts/ hdpt-acme-challenge/; } location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ; proxy_pass http:// 127.0 .0.1 :8889 ; } location /static/ { alias /data/ www/vhosts/ hdpt-backend/static/ ; } access_log /var/ log/nginx/ hdpt-backend.access_log; error_log /var/ log/nginx/ hdpt-backend.error_log; }
修改后的文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 upstream tornadoes { ip_hash; server 127.0 .0.1 :12001 ; server 127.0 .0.1 :12002 ; server 127.0 .0.1 :12003 ; server 127.0 .0.1 :12004 ; server 127.0 .0.1 :12005 ; server 127.0 .0.1 :12006 ; server 127.0 .0.1 :12007 ; server 127.0 .0.1 :12008 ; server 127.0 .0.1 :12009 ; server 127.0 .0.1 :12010 ; } server { listen 80 ; server_name www.huodipingtai.com huodipingtai.com; client_max_body_size 50 m; listen 443 ; ssl on; ssl_certificate /data/ www/vhosts/ hdpt-ssl/chained.pem; ssl_certificate_key /data/ www/vhosts/ hdpt-ssl/domain.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 ; ssl_prefer_server_ciphers on; ssl_session_timeout 10 m; ssl_session_cache shared:SSL:10 m; ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /data/ www/vhosts/ hdpt-ssl/signed.crt; resolver 8.8 .4.4 8.8 .8.8 valid=300 s; resolver_timeout 10 s; location /.well-known/ acme-challenge/ { alias /data/ www/vhosts/ hdpt-acme-challenge/; } location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ; proxy_pass http:// tornadoes; } location /static/ { alias /data/ www/vhosts/ hdpt-backend/static/ ; } access_log /var/ log/nginx/ hdpt-backend.access_log; error_log /var/ log/nginx/ hdpt-backend.error_log; }