centos7部署django

随笔3个月前发布 倪的涵宝吖
40 0 0

问题汇总

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

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

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

使用poetry作为包管理工具。

uwsgi + nginx进行部署

supervisor作为进程管理工具

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

遇到的问题

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不支持。也问题不大,找教程就行。

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)
    # 再安装就行了

结果搞了这么久,yum装不了mysql,centos7装的mariadb

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

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

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;
	}

完成之后,按道理是正常启动,可是,还有一点bug

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

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

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

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

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
© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...