呓语 | 杨英明的个人博客

专注于c++、Python,欢迎交流

By

Django网站搭建心得汇总

搭建该网站过程中的心得汇总。

网站采用Django web框架开发,完全从0开始搭建。之所以不采用wordpress,主要是嫌它有些臃肿,另一方面也是为了学习一下Django,总之各有所好吧。

一开始是一边学教程一边搭建,到后来发现我想实现的功能教程里根本没有提及,于是渐渐的开始抛开教程自己边查文档边改进。到后期基本是自己在瞎捣鼓研究,往往一个简单问题要花费半天时间才能解决,过后再回头看,发现走了不少冤枉路。不过捣鼓网站这段时间,前端和后端方面确实都有所提高。

在这里将搭建网站期间的心得做一下汇总,短的直接写在这篇博文里,长的我写在了新博文里,在这里只汇总链接。

Django-markdownx 配置

Django-markdownx是一款轻量级的Markdown编辑器,主要用于后台编辑文章。

以下是Django-markdownx的配置心得:

Django-markdownx 支持gif动态图片上传

Django-markdownx 修改默认渲染引擎,支持GFM的```代码块识别

Django-markdownx 修改预览页默认CSS样式

Django-admin 相关

Django-admin是网站的后台应用,写文章、添加用户、添加分类/标签 等常用操作都在这里。

以下是与 Django-admin 相关的心得:

Django 后台添加more标签识别(自动截取文章简介)

Django admin 自定义Choice_field

数据库相关

博客园文章迁移脚本(xml.sax+mysqldb)

Nginx和uWSGI 配置

Nginx是一款服务器程序,与apache相比,它更轻量和快速。

uWSGI是一款符合WSGI规范的服务器程序,由于nginx无法直接和Django通信,所以需要用它来做消息中转。

部署Django网站的时候nginx和uWSGI的配置是主要难点。

参考自:
如何理解Nginx, WSGI, Flask之间的关系
Ubuntu上通过nginx部署Django笔记 - j_hao104
通过Nginx部署Django(基于ubuntu) - 虫师
uwsgi初始配置问题 - segmentsfault
如何将django项目用Nginx部署到服务器? - 知乎

修改博客系统的第三方库

部署好nginx和uWSGI后,运行博客系统就要先搭建运行环境。

博客系统的运行环境由Django、markdownx、markdown-deux、markdown2等第三方库组成。

在写博客系统的过程中,为了实现自己的意图,我修改了一些第三方库的源代码。

为了以后方便部署,在这里记录一下我修改的地方。

详情见博文:修改博客系统的第三方库

uWSGI 启动/关闭/重启脚本

部署Django网站的时候经常需要重启uWSGI服务,每次操作都很麻烦,于是参考别人的代码整理了一个uWSGI启动/关闭/重启的脚本。

#!/bin/bash
if [ ! -n "$1" ]
then
    echo "Usages: sh uwsgiserver.sh [start|stop|restart]"
    exit 0
fi

if [ $1 = start ]
then
    psid=`ps aux | grep "uwsgi" | grep -v "grep" | wc -l`
    if [ $psid -gt 5 ]
    then
        echo "uwsgi is running!"
        exit 0
    else
        /root/workspace/BLOG_VENV/bin/uwsgi --ini uwsgi.ini --daemonize log/uwsgi.log
        echo "Start uwsgi service [OK]"
    fi


elif [ $1 = stop ];then
    killall -9 uwsgi
    echo "Stop uwsgi service [OK]"
elif [ $1 = restart ];then
    killall -9 uwsgi
    echo "Stop uwsgi service [OK]"
    /root/workspace/BLOG_VENV/bin/uwsgi --ini uwsgi.ini --daemonize log/uwsgi.log
    echo "Start uwsgi service [OK]"

else
    echo "Usages: sh uwsgiserver.sh [start|stop|restart]"
fi

支持uWSGI后台运行。

使用步骤:

  1. 在项目下创建一个脚本文件 uwsgiserver.sh,将代码复制进去。

  2. 执行命令 chmod +x uwsgiserver.sh, 添加脚本的执行权限。

  3. 执行命令 ./uwsgiserver.sh start,启动uWSGI。

参考自:uwsgi启动和停止脚本

搭建网站自动备份机制

个人网站在云服务器上部署好了之后,为了防止数据丢失,我们往往需要定期的备份网站的数据。

每次手动去备份太麻烦,我们可以使用 Linux+Python 搭建一个 网站自动备份机制 来自动化、定时的去完成备份工作。

简单来说这个机制可以 定时备份网站数据,并自动将备份文件上传到云上

详见博文:搭建网站自动备份机制(crontab+mysqldump+tar+oss)

网站CSS样式

网站中使用的一些CSS样式: 网站CSS样式

uWSGI 优化

1. 开启 disable-logging,不记录请求信息的日志

logging 会产生大量请求信息的日志,这是一种低效率的做法,不适合在生产环境中使用。如果不开启这项,那么你的日志中会大量出现这种记录: [pid: 347|app: 0|req: 106/367] 117.116.122.172 () {52 vars in 961 bytes} [Thu Jul 7 19:20:56 2016] POST /post => generated 65 bytes in 6 msecs (HTTP/1.1 200) 2 headers in 88 bytes (1 switches on core 0)

开启方法:修改 ini 配置文件,添加一行:

disable-logging=true

或者在 uWSGI 启动命令里添加 --disable-logging

参考资料:

uWSGI的安装与配置(官网摘录)

python uwsgi 部署以及优化

uWSGI参考资料(1.0版本的配置选项列表)

2. 配置 evil-reload-on-as 和 evil-reload-on-rss 自动释放内存

网站运行了几个月之后发现,uwsgi 不会主动释放内存,导致开启的几个进程占用了不少内存资源。

这个时候有两个办法:1.定期手动重启uwsgi 2.修改配置文件让它以后自动重启

我首先手动重启了 uwsgi ,结果内存一下子释放了 500+M,爽。

但是每次手动重启也不是办法,我们要想办法把一切变得自动化,于是采用第二个方法,解决方案就是:修改配置文件,添加 evil-reload-on-as 和 evil-reload-on-rss 的设置

evil-reload-on-as = 100
evil-reload-on-rss = 100

这两行代码的意思分别是当 虚拟内存 / 物理内存 使用超过100M时,重启对应的 uwsgi 工作进程。

as 对应虚拟内存、 rss 对应物理内存。

参考资料:

UWSGI关于内存释放问题

uWSGI参考资料(1.0版本的配置选项列表)

原创声明

转载请注明:呓语 » Django网站搭建心得汇总