Jason Sheh

使用nginx gunicorn django mysql构建个人博客


0x00 起因
想要学习一下django,并且把自己的博客系统由原来臃肿的wordpress转变为自己更为熟悉的python语言编写的博客,自己编写的博客在安全性上可能会比wrodpress更高,wordpress良莠不齐的各式插件有利有弊,自己编写的则更利于管理与扩展。

0x01 django
django把数据库的功能做成了orm也是我第一次接触到这类模式,只要django的源码不出问题,应该是不需要考虑注入问题。django也自带了csrf的防御功能,只要在表单提交出添加{% csrf_token %}
本站后台编辑器采用开源的editor.md,配合django使用时需要注意,编辑器中的请求初始时不带有django的csrf_token,需要修改源代码 editormd\plugins\image-dialog.js,增加下段代码

var csrfToken = $("input[name='csrfmiddlewaretoken']").val();
var csrfField = "";
if (csrfToken) {
    csrfField = "<input type='hidden' name='csrfmiddlewaretoken' value='" + csrfToken + "' />";
}

并且在随后的dialogContent变量中,增加刚定义的csrfField

部署到服务器上时,需要把settings.py中的内容稍作修改

DEBUG = False # 原先为True

ALLOWED_HOSTS = ['localhost'] # 需要添加localhost

0x02 gunicorn
安装

pip install gunicorn

配置/etc/systemd/system/gunicorn.service

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=nginx
Group=nginx
WorkingDirectory=/var/www/Myblog
ExecStart=/usr/local/bin/gunicorn --workers 2 --bind unix:/var/www/Myblog/myblog.sock myblog.wsgi:application

[Install]
WantedBy=multi-user.target

配置完成后即可使用systemctl start gunicorn启动gunicorn
使用systemctl enable gunicorn开机启动gunicorn

选择的 unix:/var/www/Myblog/myblog.sock 的所属用户和组需要是nginx可以访问

0x03 nginx
需要使用nginx代理静态文件的目录

location / {
    proxy_pass http://unix:/var/www/Myblog/myblog.sock;
}

location = /favicon.ico {
    access_log off;
    log_not_found off;
}

location /static/ {
    root /var/www/Myblog;
}

location /upload/ {
    root /var/www/Myblog;
}

至此如果服务器返回错误是400的话,一般是因为django的settings.py没有设置完善

0x04 mysql
mysql数据库的导出导入可以直接使用输入输出重定向 > <。

0x05 总结
部署完成新博客之后服务器内存使用量有了明显的下降

目前存在的问题有,没有评论功能,文章页面图片不能自动缩放