之前博客是基于wordpress平台,虽然之前也折腾过几次主题,但是一直都没有办法弄出来自己满意的。一个偶然的机会,发现laike9m的这个python博客风格很好,而且还在github上开源了,于是就下定决心将博客迁移到python平台上。修改后代码放在github上。
python3平时没有接触过,但考虑到laike9m是基于python3搭建的,避免一些重复工作,我这里也直接使用python3. 在通常情况下,大家喜欢用virtualenv来兼容python2和python3,但我发现无论是Mac还是ubuntu,直接安装2个版本的python本身并不冲突,通过python和python3区分python版本,pip和pip3是用来区分python版本对应的包管理命令。 基于上述条件,优先安装一个python3和pip3:
macos : sudo brew install python3
ubuntu: sudo apt-get install python3
由于平时使用mysql比较多,而且之前linode上搭建的wordpress已经部署mysql,所有这里没有继续使用laike9m的postgresql。
- 增加mysql依赖
使用mysql,需要做一定的修改。需要增加pymysql的依赖,在my_blog的__init__.py中添加如下代码:
import pymysql
pymysql.install_as_MySQLdb()
- 更新下requirements.txt文件
django==1.8
requests==2.9.1
django-contact-form==1.2
django-taggit==0.18.1
unidecode==0.4.19
Pillow==3.1.1
uwsgi==2.0.12
uwsgidecorators==1.1.0
pymysql==0.7.2
- 安装下这些依赖
pip3 install -r requirements.txt
找一个工作目录,创建static,media文件夹作为 STATIC_ROOT 和 MEDIA_ROOT。按照新的路径修改choose_setting.py文件,具体见github代码。
- 在 css3two_blog 文件夹中,准备做数据模型同步
mkdir migrations
cd migrations
touch __init__.py
- 然后回到根目录执行,执行
python3 manage.py makemigrations
python3 manage.py migrate --fake-initial
- 最后,拷贝静态文件
python manage.py collectstatic
用runserver启动测试服务器,通过ip访问网站并执行操作。运行正常后,可以开始准备部署上线了。
上线采用Nginx+uWSGI进行部署。前提是先得安装好相应的应用。参考 Linode部署文档。
- 新增一个uWSGI的配置文件
[File: /etc/uwsgi/sites/blog.ini]
[uwsgi]
# Django-related settings
# the base directory (full path)
chdir = /home/metaboy/blog/My_Blog
# Django's wsgi file
module = my_blog.wsgi:application
# the virtualenv (full path)
home = /home/metaboy/blog
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 3
# the socket (use the full path to be safe
socket = /tmp/uwsgi.sock
# ... with appropriate permissions - may be needed
chmod-socket = 777
# clear environment on exit
vacuum = true
logto = /home/metaboy/uwsgi.log
- 创建一个Upstart job:
[File: /etc/init/uwsgi.conf]
env DJANGO_DB_PASSWORD=
env EMAIL_HOST_PASSWORD=
env LC_ALL=en_US.UTF-8
env LANG=en_US.UTF-8
start on runlevel [2345]()
stop on runlevel [!2345]()
setuid root
setgid www-data
exec /usr/local/bin/uwsgi --ini /home/metaboy/blog/My_Blog/uwsgi.ini
- 启动uwsgi服务:
service uwsgi start
切换到/etc/nginx/sites-enabled目录下。
- 新增一个博客的配置项:
[File: /etc/nginx/sites-enabled/blog.wangyuxiong.com]
server {
listen 80;
server_name blog.wangyuxiong.com;
location /media {
alias /home/metaboy/blog/media;
etag on;
expires max;
add_header Pragma public;
add_header Cache-Control "public";
access_log off;
}
location ~* ^/static/(.+.css)$ {
alias /home/metaboy/blog/static/$1;
etag on;
expires 1d;
add_header Pragma public;
add_header Cache-Control "public";
access_log off;
}
location /static {
alias /home/metaboy/blog/static;
etag on;
expires max;
add_header Pragma public;
add_header Cache-Control "public";
access_log off;
}
location / {
include uwsgi_params;
uwsgi_pass unix:/tmp/uwsgi.sock;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
-
启用该配置:
ln -s /etc/nginx/sites-available/blog.wangyuxiong.com /etc/nginx/sites-enabled -
重启nginx
service nginx configtest && service nginx restart
按照上面部署,接着就可以通过链接 www.wangyuxiong.com进行访问了。