上线flask记录

pip3 install virtualenv

cd /data/ops

virtualenv -p /usr/bin/python3 backstage

source backstage/bin/activate

cd backstage

# 创建管理启动python程序代码: vim gunicorn_flask.py

# gunicorn_test.py
import logging
import logging.handlers
from logging.handlers import WatchedFileHandler
import os
import multiprocessing


# 绑定ip和端口号
bind = '0.0.0.0:8000'

# 监听队列
backlog = 512

# 设置超时时间120s,默认为30s。按自己的需求进行设置timeout = 120
timeout = 120

# 超时重启
graceful_timeout = 300

# 在keep-alive连接上等待请求的秒数,默认情况下值为2。一般设定在1~5秒之间。
keepalive = 3

# HTTP请求行的最大大小,此参数用于限制HTTP请求行的允许大小,默认情况下,这个值为4094。
# 值是0~8190的数字。此参数可以防止任何DDOS攻击
limit_request_line = 5120

# 限制HTTP请求中请求头字段的数量。
# 此字段用于限制请求头字段的数量以防止DDOS攻击,与limit-request-field-size一起使用可以提高安全性。
# 默认情况下,这个值为100,这个值不能超过32768
limit_request_fields = 101

# 限制HTTP请求中请求头的大小,默认情况下这个值为8190。
# 值是一个整数或者0,当该值为0时,表示将对请求头大小不做限制
limit_request_field_size = 8190

# 设置gunicorn使用的python虚拟环境
pythonpath='/data/ops/backstage/bin/python'

# 环境变量
raw_env = 'APE_API_ENV=DEV'

# gunicorn要切换到的目的工作目录
chdir = '/data/ops/backstage'

# 使用gevent模式,还可以使用sync 模式,默认的是sync模式
worker_class = 'gevent'

# 并行工作进程数, int,cpu数量*2+1 推荐进程数
workers = multiprocessing.cpu_count() * 2 + 1
threads = 1000 # 指定每个进程开启的线程数

# 设置最大并发量(每个worker处理请求的工作线程数,正整数,默认为1)
worker_connections = 2000

# 最大客户端并发数量,默认情况下这个值为1000。此设置将影响gevent和eventlet工作模式
max_requests = 2000

# 设置进程文件目录
pidfile = '/data/ops/backstage/run/gunicorn.pid'

loglevel = 'info' # 日志级别,这个日志级别指的是错误日志的级别,而访问日志的级别无法设置

# 设置gunicorn访问日志格式,错误日志无法设置
access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"'

# 设置访问日志和错误信息日志路径
accesslog = "/data/ops/backstage/logs/gunicorn_access.log"      #访问日志文件
errorlog = "/data/ops/backstage/logs/gunicorn_error.log"        #错误日志文件

# 进程名
proc_name = 'gunicorn_process'


"""
其每个选项的含义如下:
h          remote address
l          '-'
u          currently '-', may be user name in future releases
t          date of the request
r          status line (e.g. ``GET / HTTP/1.1``)
s          status
b          response length or '-'
f          referer
a          user agent
T          request time in seconds
D          request time in microseconds
L          request time in decimal seconds
p          process ID
"""

mkdir run logs

yum -y install epel-release

yum makecache

yum -y install supervisor

vim /etc/supervisord.d/supervisord_gunicorn.ini

; 项目名
[program:gunicorn]
; 项目目录
directory=/data/ops/backstage

command=/data/ops/backstage/bin/gunicorn -c gunicorn_flask.py main:app  ;main:指的是main.py代码文件,app指的是app = Flask(__name__)

; supervisor启动的时候是否随着同时启动,默认True
autostart=true
autorestart=false

; 这个选项是子进程启动多少秒之后,此时状态如果是 running,则我们认为启动成功了。默认值为1
startsecs=1

; 当进程启动失败后,最大尝试的次数。当超过5次后,进程的状态变为FAIL
startretries=5

; 这个东西主要用于,supervisord管理的子进程,这个子进程本身还有子进程。那么我们如果仅仅干掉supervisord的子进程的话,子进程的子进程有可能会变成孤儿进程。所以可以设置这个选项,把整个该子进程的整个进程组干掉。默认false
stopasgroup=true

; 程序运行的用户身份
user = root

# 日志输出
stderr_logfile=/data/ops/backstage/logs/app_err.log
stdout_logfile=/data/ops/backstage/logs/app_stdout.log

#把stderr重定向到stdout,默认 false
redirect_stderr = true

#stdout日志文件大小,默认 50MB
stdout_logfile_maxbytes = 100MB

#stdout日志文件备份数
stdout_logfile_backups = 20

# 启动supervisord并设置开机自启

systemctl enable --now supervisord.service

# nginx配置: vim flask.conf

​upstream flask {
    ip_hash;
    server 127.0.0.1:8000;  
    server 172.17.0.100:8000;  
}  

server {  
    listen       99;
    server_name  172.17.0.100 192.168.240.42;
    location / {
        proxy_pass http://flask;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

# nginx部署在/data/software/nginx

vim /etc/supervisord.d/supervisord_nginx.ini

[program: nginx]    
; 管理的子进程。后面的是名字,最好写的具有代表性,避免日后"认错"
; 我们的要启动进程的命令路径,可以带参数。
command=/data/software/nginx/sbin/nginx -g 'daemon off;'

; 进程运行前,会先切换到这个目录
directory=/data/software/nginx/etc

; 设置子进程挂掉后自动重启的情况,有三个选项,false,unexpected和true。false表示无论什么情况下,都不会被重新启动;unexpected表示只有当进程的退出码不在下面的exitcodes里面定义的退出码的时候,才会被自动重启。当为true的时候,只要子进程挂掉,将会被无条件的重启
autostart=true
autorestart=true

# 这个选项是子进程启动多少秒之后,此时状态如果是 running,则我们认为启动成功了。默认值为1
startsecs=1

; 日志,没什么好说的
stderr_logfile=/data/software/nginx/logs/supervisord_nginx_error.log
stdout_logfile=/data/software/nginx/logs/supervisord_nginx_stdout.log

# 把stderr重定向到stdout,默认 false
redirect_stderr = true
#stdout日志文件大小,默认 50MB
stdout_logfile_maxbytes = 100MB

# stdout日志文件备份数
stdout_logfile_backups = 20

; 可以用来管理该program的用户
user=root

; 进程停止信号,可以为TERM, HUP, INT, QUIT, KILL, USR1等,默认为TERM
; stopsignal=INT

; 当进程启动失败后,最大尝试的次数。当超过5次后,进程的状态变为FAIL
startretries=5

; 这个东西主要用于,supervisord管理的子进程,这个子进程本身还有子进程。那么我们如果仅仅干掉supervisord的子进程的话,子进程的子进程有可能会变成孤儿进程。所以可以设置这个选项,把整个该子进程的整个进程组干掉。默认false
stopasgroup=true

你可能感兴趣的:(python,flask,python,后端)