# Django_Blog **Repository Path**: su_ye0620/Django_Blog ## Basic Information - **Project Name**: Django_Blog - **Description**: 社团网站 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-12-28 - **Last Updated**: 2022-12-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## PyGeek协会内容发布网站使用说明 ### 项目信息 - Python版本: 3.8 - Django版本: 3.0.5 - [欢迎访问👉](http://www.pygeek.club/) ### 调试步骤 - 使用conda创建指定版本的Python虚拟环境 - 激活上述虚拟环境,安装 virtualenv 包 - 终端目录cd到项目位置 - `virtualenv ENVNAME`创建名为`ENVNAME`虚拟环境 - 在终端中`activate`激活`ENVNAME`环境,然后使用requirement.txt安装需要的package - 终端中`python manage.py runserver`或者`python manage.py runserver 端口号`(Windows下)启动项目 ### Web相关 #### Linux命令 - [Linux 查看端口占用情况](https://www.runoob.com/w3cnote/linux-check-port-usage.html): `netstat -tunlp`,`kill -9 进程号` - Linux程序后台运行命令`nohup command &` - [linux复制指定目录下的全部文件到另一个目录中,linux cp 文件夹](https://www.cnblogs.com/zdz8207/p/linux-cp-dir.html#:~:text=linux%E4%B8%8B%E8%BF%9B%E8%A1%8C%E5%A4%8D%E5%88%B6%E7%9A%84%E5%91%BD%E4%BB%A4%E4%B8%BAcp%E3%80%82.%20%E5%81%87%E8%AE%BE%E5%A4%8D%E5%88%B6%E6%BA%90%E7%9B%AE%E5%BD%95%20%E4%B8%BA%20dir1%20%2C%E7%9B%AE%E6%A0%87%E7%9B%AE%E5%BD%95%E4%B8%BAdir2%E3%80%82.%20%E6%80%8E%E6%A0%B7%E6%89%8D%E8%83%BD%E5%B0%86dir1%E4%B8%8B%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6%E5%A4%8D%E5%88%B6%E5%88%B0dir2%E4%B8%8B%E4%BA%86%20%E5%A6%82%E6%9E%9Cdir2%E7%9B%AE%E5%BD%95%E4%B8%8D%E5%AD%98%E5%9C%A8%EF%BC%8C%E5%88%99%E5%8F%AF%E4%BB%A5%E7%9B%B4%E6%8E%A5%E4%BD%BF%E7%94%A8%20cp,%E5%A6%82%E6%9E%9C%E5%AD%98%E5%9C%A8%E6%96%87%E4%BB%B6%E9%9C%80%E8%A6%81%E5%85%88%E5%88%A0%E9%99%A4%20rm%20-rf%20%2Fhome%2Fwww%2Fstatics%2F%2A%20%E5%90%A6%E5%88%99%E4%BC%9A%E4%B8%80%E4%B8%AA%E4%B8%AA%E6%96%87%E4%BB%B6%E6%8F%90%E7%A4%BA%E4%BD%A0%E7%A1%AE%E8%AE%A4%EF%BC%8C%E4%BD%BF%E7%94%A8cp%20-rf%20%E4%B9%9F%E4%B8%80%E6%A0%B7%E6%8F%90%E7%A4%BA.%20) - vim - 按下`Esc`,可退出编辑模式,然后输入`:wq`保存加退出 - 浏览模式`dd`删除当前行 - 当前目录下`sudo vi FILENAME`可创建新文件 - gunicorn - gthread是启用多线程的意思 #### Django静态文件丢失 - debug = True时,`runserver`命令后Django会自己去搜索静态文件;而关闭debug模式后,我们就需要自己配置返回静态文件的方式 - PyGeekWeb使用Django + Nginx + Gunicorn的部署方案 - 显示了网站内容,但是静态文件都是404,那就是静态文件地址配错了;静态文件显示403,那就是权限问题,在nginx的配置头部更改user信息,改成你的用户,要注意,你用户有nginx的权限才行,最简单就是把用户加到nginx这个组里面去,当然如果是想立刻看到,**直接改成 user root**。 #### 项目自动重启功能 可能该Web项目长时间运行会产生缓存,导致后台加载变得巨慢,所以我们在服务器写了一个自动重启脚本,来解决这一问题。提升脚本权限后使用crontab命令(`sudo crontab -e`),将脚本添加到定时重启的服务队列中。 脚本内容如下: ```bash #!/bin/bash # use bash to run this script echo "restart PyGeek Web ..." # restart the nginx service service nginx restart # kill the old Web process(In this case, port num is 8000) ps -ef | grep python | grep :8000 | awk '{print $2}' | xargs kill -9 # change the work dir cd /home/ubuntu/PyGeekWeb/Django_Blog/ # activate the venv source myenv/bin/activate # start the Web project, Django_Blog is the file folder(package) having the same name as the Web proj nohup gunicorn Django_Blog.wsgi -w 4 -k gthread -b 0.0.0.0:8000 & echo "restart successfully !" ``` ### 部署步骤 - [参考1: 大江狗博文,介绍了Docker、Django等Python Web相关](https://pythondjango.cn/python/tools/2-docker-dockerfile/#docker%E5%AE%B9%E5%99%A8%E6%93%8D%E4%BD%9C) - [参考2: Diango博客--11.Nginx + Gunicorn + Supervisor 方式部署](https://blog.csdn.net/fanxindong0620/article/details/103548934)👍 - 创建文件夹,拉取代码,创建Django所需的Python虚拟环境 - 安装Nginx + Gunicorn(在虚拟环境下) - 配置Nginx,安装好后可能只需要在/etc/nginx/conf.d/增加自定义的网站配置,然后给nginx.conf文件root权限 - 关闭 DEBUG 模式,收集静态文件`python manage.py collectstatic` - 在虚拟环境下,使用`gunicorn PROJECTNAME.wsgi -w 2 -k gthread -b 0.0.0.0:8000`检查调试 - 切换成nohup - (可选)使用 Supervisor管理 Gunicorn 进程 - 部署后md编辑器无法显示图片bug: > 上传文件的GET请求定义成media/,但实际位置在uploads/,所以要让ngnix去下面找,static只会有第一次collectstatic的文件,所以一开始测试404。 在conf中添加: ``` location /media { alias /home/ubuntu/PyGeekWeb/Django_Blog/uploads/ ; } ``` 添加完了要`service nginx restart` - [参考3: 初次部署django + gunicorn + nginx](https://blog.csdn.net/weixin_49722764/article/details/112607360) - [参考4: django+nginx+gunicorn部署配置](https://cloud.tencent.com/developer/article/1704281): 它指出修改/etc/nginx/sites-enabled/default,配置nginx。实测发现有点混乱,但也说明应该在/etc/nginx/conf.d/增加自定义的网站配置 - [参考5: 【部署】了解nginx+gunicorn+django架构](https://blog.csdn.net/m0_37621024/article/details/120621699) - [参考6: 虚拟环境管理](https://www.cnblogs.com/shyern/p/11284127.html): 如何使用virtualenv - [参考7: linux中grep查找进程名,使用awk截取进程号,通过xargs来kill掉进程](https://blog.csdn.net/weixin_39096855/article/details/105783681) - [参考8: Linux crontab 命令](https://www.runoob.com/linux/linux-comm-crontab.html) - [参考9: 修复数学公式支持bug-保证美元符号之间字符不被mistune解析](https://www.cnblogs.com/spaceskynet/p/13347938.html) - [参考10: 修复数学公式支持bug-保证美元符号之间字符不被mistune解析](https://blog.depa.do/post/mistune-parser-syntax-mathjax-centered-images) ![nginx+gunicorn+django架构](https://img-blog.csdnimg.cn/082b867c1682450289d14c46ab7142e4.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6buR6buR55m955m95ZCb,size_19,color_FFFFFF,t_70,g_se,x_16)