首页 > 系统相关 >centos7部署django

centos7部署django

时间:2024-09-09 11:03:37浏览次数:10  
标签:配置文件 部署 默认 django centos7 nginx 进程 config uwsgi

问题汇总

由于centos7到现在好像挺老了。有些东西真的逆天。

本次采取的项目为django后端项目

采用的是开源的django博客系统
代码仓库:https://github.com/liangliangyy/DjangoBlog.git

  • 使用poetry作为包管理工具。

  • uwsgi + nginx进行部署

  • supervisor作为进程管理工具

  • 采取动静分离的nginx代理设计。

遇到的问题

  1. python3.6装不了coverage==7.3.2
    源代码换python3.9进行重新安装部署。

    • 中间出的问题是,poetry卸掉了python3.6配置文件没卸载。
      --使用yum安装回python3.6,先通过pip3把poetry卸了。再装新的环境的包。
    • poetry下包巨慢
      --换源:poetry source add tsinghua https://pypi.tuna.tsinghua.edu.cn/simple
      注意这个好像3.6下的poetry不支持。也问题不大,找教程就行。
  2. mysqlclient包安不上

    好家伙包这个错:

    Exception: Can not find valid pkg-config name.
        Specify MYSQLCLIENT_CFLAGS and MYSQLCLIENT_LDFLAGS env vars manually
        [end of output]
    

    --解决方法
    试着用yum安装pkg-config。找不到包和其他问题话。总结配置环境变量

        # 找到 mysql_config 文件的路径
        [root@localhost Backend]# which mysql_config
        /usr/local/mysql8/bin/mysql_config
        # 配置MYSQLCLIENT_CFLAGS 和 MYSQLCLIENT_LDFLAGS 环境变量,将 mysql_config 的路径传递给它们
        [root@localhost Backend]# export MYSQLCLIENT_CFLAGS=$(mysql_config --cflags)
        [root@localhost Backend]# export MYSQLCLIENT_LDFLAGS=$(mysql_config --libs)
        # 再安装就行了
    
  3. 结果搞了这么久,yum装不了mysql,centos7装的mariadb

    也可以安装高版本mariadb,参考文章:https://www.cnblogs.com/pyyu/p/9467289.html,按照配置仓库,安装的要求就行,巨详细。
    没办法,源码安装mysql-8,可以参考文章:https://www.cnblogs.com/zhourx/p/17558946.html

  4. uwsgi.ini配置问题

    重要配置

    • chdir:一定是项目根目录,也就是uwsgi.ini的位置
    • module:这个必须得是根目录开始,找到wsgi的目录application
    • wsgi-file:和module基本一致,就是去找wsgi.py
    • home: 虚拟环境路径
    • 通信方式:socket/http。内部通信使用socket,比如说和nginx通信;外部通信使用http,可以直接展示与页面
        [uwsgi]
        project=djangoblog
        # uid=www-data
        # gid=www-data
        base=/root/DjangoBlog
    
        chdir           = %(base)
        # 项目application路径,也就是django的wsgi.py路径
        module          = %(project)/wsgi:application
        wsgi-file       = %(project)/wsgi.py
        # 虚拟环境路径
        home            = /root/.cache/pypoetry/virtualenvs/djangoblog-h-y_BC25-py3.9
    
        # chown-socket    =%(uid):www-data
        # chmod-socket    =664
    
        # 使用http协议与nginx通信
        # 监听在端口号8888上
        # http            =0.0.0.0:8000
        # 使用socket和nginx通信,不暴露http
        socket           =0.0.0.0:8888
        # 服务器的缓冲区大小设置为64KB(65536字节)
        buffer-size     =65536
        # 用于存储当前运行的进程ID,以便在需要时可以重新启动或停止该进程
        pidfile         =/tmp/%(project)-master.pid
        # 启用了自动清理功能
        vacuum          =True
        # 每个进程允许处理的最大请求数为5000次
        max-requests    =5000
    
        # 日志文件
        # daemonize       =/tmp/%(project)-uwsgi.log
        # 生成一个监听的文件,
        # touch .touchforlogrotat 相当于修改了创建时间,系统会重新reload日志
        # touch-logreopen =/tmp/.touchforlogrotat
    
        #设置一个请求的超时时间(秒),如果一个请求超过了这个时间,则请求被丢弃
        harakiri=60
        #当一个请求被harakiri杀掉会,会输出一条日志
        harakiri-verbose=true
    
        master          = True
        # worker数,多个worker则多进程
        processes       = 4
    
        #开启内存使用情况报告
        memory-report = true
    
        #设置平滑的重启(直到处理完接收到的请求)的长等待时间(秒)
        reload-mercy = 10
    
        #设置工作进程使用虚拟内存超过N MB就回收重启
        reload-on-as= 1024
        
        # uwsgi热加载
        py-autoreload=1 
        # uwsgi后台运行
        daemonize = yes
    
    
  5. nginx做动静分离时。

    因为django静态文件的问题,得把静态文件搞出来:设置setting的三个主要参数

        STATIC_ROOT='/opt/nginx1-12/static'
        STATIC_URL = '/static/'
        STATICFILES_DIRS=[
            os.path.join(BASE_DIR,"static"),
        ]
    

    接下来做静态文件的收集(收集于STATIC_ROOT路径当中)和nginx配置

        # 收集静态文件
        python3 manage.py collectstatic
        # 记得记录收集的文件根目录文件以配置nginx
        # 配置nginx虚拟主机(server)加个location,来标记static别名位置,可以直接通过nginx拿静态文件而不走django
        location /static {
    		alias /opt/djangostatic/collectedstatic;
    	}
    
  6. 完成之后,按道理是正常启动,可是,还有一点bug

    1. 拿静态文件还是拿不到,报403.

      显然权限问题,把收集的静态文件权限给nginx,或者直接打开就是
      chmod 777 /opt/djangostatic/collectedstatic

    2. 首页刷新出现404,这个好像常发生在vue项目当中

      在nginx的location当中添加参数
      try_files $url $url/ /index.html

  7. supervisor进程管理工具

    管理进程组开关,并且把配置文件多的命令搞成一个项目,已控制启动和关闭。

    • pip安装或者yum安装和简单配置
        # pip安装
        pip3 install supervisor
        # yum安装
        yum install python-setuptools
        easy_install supervisor
        # 拿配置文件(将配置文件生成在哪)
        echo_supervisord_conf > /etc/supervisord.conf
        # 书写uwsgi的配置(记得用which拿命令绝对路径)
        # 在配置文件最后加上
        [program:my]
        command=/opt/venv/bin/uwsgi --ini  /etc/uwsgi_nginx.ini ;需执行命令
        stopasgroup=true     ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
        killasgroup=true     ;默认为false,向进程组发送kill信号,包括子进程
    
    • 配置文件详解
    # supervisord.conf配置文件参数解释
        [program:xx]是被管理的进程配置参数,xx是进程的名称
        [program:xx]
        command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run  ; 程序启动命令
        autostart=true       ; 在supervisord启动的时候也自动启动
        startsecs=10         ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
        autorestart=true     ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
        startretries=3       ; 启动失败自动重试次数,默认是3
        user=tomcat          ; 用哪个用户启动进程,默认是root
        priority=999         ; 进程启动优先级,默认999,值小的优先启动
        redirect_stderr=true ; 把stderr重定向到stdout,默认false
        stdout_logfile_maxbytes=20MB  ; stdout 日志文件大小,默认50MB
        stdout_logfile_backups = 20   ; stdout 日志文件备份数,默认是10
        ; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
        stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out
        stopasgroup=false     ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
        killasgroup=false     ;默认为false,向进程组发送kill信号,包括子进程
    
    • 运行常用命令
        # 带着配置文件启动
        supervisord -c /etc/supervisord.conf
        # 查找配置文件更新
        supervisorctl reread
        # 更新配置文件
        supervisorctl update
        # 进入supervisor管理页面
        supervisorctl
        # 启动重启停止
        start/restart/stop program1 
        # 停止所有项目
        stop all
        # 查看某项目状态
        status program1
        # 退出
        exit
    

标签:配置文件,部署,默认,django,centos7,nginx,进程,config,uwsgi
From: https://www.cnblogs.com/lmlsh/p/18336971

相关文章