• 上线flask记录


    pip3 install virtualenv

    cd /data/ops

    virtualenv -p /usr/bin/python3 backstage

    source backstage/bin/activate

    cd backstage

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

    1. # gunicorn_test.py
    2. import logging
    3. import logging.handlers
    4. from logging.handlers import WatchedFileHandler
    5. import os
    6. import multiprocessing
    7. # 绑定ip和端口号
    8. bind = '0.0.0.0:8000'
    9. # 监听队列
    10. backlog = 512
    11. # 设置超时时间120s,默认为30s。按自己的需求进行设置timeout = 120
    12. timeout = 120
    13. # 超时重启
    14. graceful_timeout = 300
    15. # 在keep-alive连接上等待请求的秒数,默认情况下值为2。一般设定在1~5秒之间。
    16. keepalive = 3
    17. # HTTP请求行的最大大小,此参数用于限制HTTP请求行的允许大小,默认情况下,这个值为4094。
    18. # 值是0~8190的数字。此参数可以防止任何DDOS攻击
    19. limit_request_line = 5120
    20. # 限制HTTP请求中请求头字段的数量。
    21. # 此字段用于限制请求头字段的数量以防止DDOS攻击,与limit-request-field-size一起使用可以提高安全性。
    22. # 默认情况下,这个值为100,这个值不能超过32768
    23. limit_request_fields = 101
    24. # 限制HTTP请求中请求头的大小,默认情况下这个值为8190。
    25. # 值是一个整数或者0,当该值为0时,表示将对请求头大小不做限制
    26. limit_request_field_size = 8190
    27. # 设置gunicorn使用的python虚拟环境
    28. pythonpath='/data/ops/backstage/bin/python'
    29. # 环境变量
    30. raw_env = 'APE_API_ENV=DEV'
    31. # gunicorn要切换到的目的工作目录
    32. chdir = '/data/ops/backstage'
    33. # 使用gevent模式,还可以使用sync 模式,默认的是sync模式
    34. worker_class = 'gevent'
    35. # 并行工作进程数, int,cpu数量*2+1 推荐进程数
    36. workers = multiprocessing.cpu_count() * 2 + 1
    37. threads = 1000 # 指定每个进程开启的线程数
    38. # 设置最大并发量(每个worker处理请求的工作线程数,正整数,默认为1)
    39. worker_connections = 2000
    40. # 最大客户端并发数量,默认情况下这个值为1000。此设置将影响gevent和eventlet工作模式
    41. max_requests = 2000
    42. # 设置进程文件目录
    43. pidfile = '/data/ops/backstage/run/gunicorn.pid'
    44. loglevel = 'info' # 日志级别,这个日志级别指的是错误日志的级别,而访问日志的级别无法设置
    45. # 设置gunicorn访问日志格式,错误日志无法设置
    46. access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"'
    47. # 设置访问日志和错误信息日志路径
    48. accesslog = "/data/ops/backstage/logs/gunicorn_access.log"      #访问日志文件
    49. errorlog = "/data/ops/backstage/logs/gunicorn_error.log"        #错误日志文件
    50. # 进程名
    51. proc_name = 'gunicorn_process'
    52. """
    53. 其每个选项的含义如下:
    54. h          remote address
    55. l          '-'
    56. u          currently '-', may be user name in future releases
    57. t          date of the request
    58. r          status line (e.g. ``GET / HTTP/1.1``)
    59. s          status
    60. b          response length or '-'
    61. f          referer
    62. a          user agent
    63. T          request time in seconds
    64. D          request time in microseconds
    65. L          request time in decimal seconds
    66. p          process ID
    67. """

    mkdir run logs

    yum -y install epel-release

    yum makecache

    yum -y install supervisor

    vim /etc/supervisord.d/supervisord_gunicorn.ini

    1. ; 项目名
    2. [program:gunicorn]
    3. ; 项目目录
    4. directory=/data/ops/backstage
    5. command=/data/ops/backstage/bin/gunicorn -c gunicorn_flask.py main:app  ;main:指的是main.py代码文件,app指的是app = Flask(__name__)
    6. ; supervisor启动的时候是否随着同时启动,默认True
    7. autostart=true
    8. autorestart=false
    9. ; 这个选项是子进程启动多少秒之后,此时状态如果是 running,则我们认为启动成功了。默认值为1
    10. startsecs=1
    11. ; 当进程启动失败后,最大尝试的次数。当超过5次后,进程的状态变为FAIL
    12. startretries=5
    13. ; 这个东西主要用于,supervisord管理的子进程,这个子进程本身还有子进程。那么我们如果仅仅干掉supervisord的子进程的话,子进程的子进程有可能会变成孤儿进程。所以可以设置这个选项,把整个该子进程的整个进程组干掉。默认false
    14. stopasgroup=true
    15. ; 程序运行的用户身份
    16. user = root
    17. # 日志输出
    18. stderr_logfile=/data/ops/backstage/logs/app_err.log
    19. stdout_logfile=/data/ops/backstage/logs/app_stdout.log
    20. #把stderr重定向到stdout,默认 false
    21. redirect_stderr = true
    22. #stdout日志文件大小,默认 50MB
    23. stdout_logfile_maxbytes = 100MB
    24. #stdout日志文件备份数
    25. stdout_logfile_backups = 20

    # 启动supervisord并设置开机自启

    systemctl enable --now supervisord.service

    # nginx配置: vim flask.conf

    1. ​upstream flask {
    2.     ip_hash;
    3.     server 127.0.0.1:8000;  
    4.     server 172.17.0.100:8000;  
    5. }  
    6. server {  
    7.     listen       99;
    8.     server_name  172.17.0.100 192.168.240.42;
    9.     location / {
    10.         proxy_pass http://flask;
    11.         proxy_set_header Host $host;
    12.         proxy_set_header X-Real-IP $remote_addr;
    13.     }
    14. }

    # nginx部署在/data/software/nginx

    vim /etc/supervisord.d/supervisord_nginx.ini

    1. [program: nginx]    
    2. ; 管理的子进程。后面的是名字,最好写的具有代表性,避免日后"认错"
    3. ; 我们的要启动进程的命令路径,可以带参数。
    4. command=/data/software/nginx/sbin/nginx -g 'daemon off;'
    5. ; 进程运行前,会先切换到这个目录
    6. directory=/data/software/nginx/etc
    7. ; 设置子进程挂掉后自动重启的情况,有三个选项,false,unexpected和truefalse表示无论什么情况下,都不会被重新启动;unexpected表示只有当进程的退出码不在下面的exitcodes里面定义的退出码的时候,才会被自动重启。当为true的时候,只要子进程挂掉,将会被无条件的重启
    8. autostart=true
    9. autorestart=true
    10. # 这个选项是子进程启动多少秒之后,此时状态如果是 running,则我们认为启动成功了。默认值为1
    11. startsecs=1
    12. ; 日志,没什么好说的
    13. stderr_logfile=/data/software/nginx/logs/supervisord_nginx_error.log
    14. stdout_logfile=/data/software/nginx/logs/supervisord_nginx_stdout.log
    15. # 把stderr重定向到stdout,默认 false
    16. redirect_stderr = true
    17. #stdout日志文件大小,默认 50MB
    18. stdout_logfile_maxbytes = 100MB
    19. # stdout日志文件备份数
    20. stdout_logfile_backups = 20
    21. ; 可以用来管理该program的用户
    22. user=root
    23. ; 进程停止信号,可以为TERM, HUP, INT, QUIT, KILL, USR1等,默认为TERM
    24. ; stopsignal=INT
    25. ; 当进程启动失败后,最大尝试的次数。当超过5次后,进程的状态变为FAIL
    26. startretries=5
    27. ; 这个东西主要用于,supervisord管理的子进程,这个子进程本身还有子进程。那么我们如果仅仅干掉supervisord的子进程的话,子进程的子进程有可能会变成孤儿进程。所以可以设置这个选项,把整个该子进程的整个进程组干掉。默认false
    28. stopasgroup=true

  • 相关阅读:
    【剑指offer|图解|双指针】训练计划 I + 删除有序数组中的重复项
    nginx降权+匹配php
    0401hive入门-hadoop-大数据学习.md
    canvas 绘制折线图及思考
    Qt第二十六章:Nuitka打包教程
    android 获取局域网其他设备ip
    FFmpeg对H246进行编解码的实现
    腾讯安全在2022:出租车、地铁和爆发的火山
    机器学习之时序差分学习(Temporal Different Learning)
    bootstrap系列-6.BooStrap表单(上)
  • 原文地址:https://blog.csdn.net/moyuanbomo/article/details/126462535