问题汇总
由于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不支持。也问题不大,找教程就行。
- 中间出的问题是,poetry卸掉了python3.6配置文件没卸载。
-
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