程序员

Django博客项目迁移之从零开始

最近阿里云的服务器快到期了,打算换个国外服务器vultr,这样不仅可以自己搭一个shadowsocks,同时还可以把博客平台迁过来,一举两得。


准备

登录服务器后,第一步要做的就是安装相关必要软件。
因为服务器一般是Linux系统,python2是默认自带的,在此就忽略啦。

  1. 安装 pip
    一般地,因为我们是python 项目,所以pip是一定少不了。但pip依赖一个叫setuptools的软件包,在安装pip前先安装它。

     1. download get-pip.py
     2. python get-pip.py

    get-pip.py 在默认情况下会自动帮你安装上setuptools,这样就达到了一步到位地效果。当然你也可以分别下载setuptools和pip的安装包手动运行安装。
    ( 附上get-pip.py的下载地址 )

  2. 安装Django
    用pip安装Django非常简单,但在安装时有一点需要注意,因为是项目迁移,所以最好先查询下之前服务器上的Django版本,然后再安装与之对应的Django版本,避免因为版本升级造成额外的麻烦。

    pip install Django==1.7( old version )

    当安装完之后,运行如下命令,如没有异常则表明Django已安装成功。

    python
    import django
    django.get_version()
  3. 服务器安装
    目前采用的是Nginx+ uWSGI模式 。
    • 对于Nginx安装,一般地如果没有特殊需求的话( 如需要Nginx插件之类的 ),可以直接通过apt-get直接安装nginx。
      sudo apt-get install nginx
      sudo /etc/init.d/nginx start    # 启动 nginx
  4. uWSGI的安装相对比较麻烦,依赖于C编译器,gcc和clang都可以。
    当然我们可以通过pip命令一次性把python build中所需的环境安装完成。

    #On a Debian/Ubuntu system
     apt-get install build-essential python
     apt-get install python-dev

    然后就可以直接通过pip安装uWSGI了。

    pip install uwsgi

    更多安装参考详见官方文档

  5. 数据库
    在我的博客项目中使用的是MySQL数据库,下面就简单介绍下MySql的配置方法。
    MySql的安装其实非常简单,通过apt-get可以直接进行安装。

    sudo apt-get install mysql-server

    安装期间会提示输入密码,这里可以输入也可以选择忽略。
    然后就可以在shell中输入命令进入MySql了。

    mysql -u root -p

    但这里有两点需要注意:

    • 因为Django是一个python项目,所以在使用MySql时需要额外安装一个python-mysqldb的插件,安装方式非常简单apt-get即可。
      sudo apt-get install python-mysqldb
  6. 另一点就是MySql的字符集问题(这个问题坑了我好久-,-)。
    MySql的存储的默认字符集是****,而Django的默认字符集是utf-8,所以如果直接将数据迁入的话会造成数据错乱,并且数据库由于输出的数据不是utf-8格式,还会造成Django发生异常。
    首先使用命令show variables like ‘collation_%’show variables like ‘character_%’; 查看Mysql的字符集和排序方式。

EFB64E7D-DF6A-4DEC-A848-4BFCAE8A52A1.png

7082E143-A2C2-48AA-A6CB-003C98C2C620.png
可以从图中看到有些字符集的配置都是latin1,而导致乱码的罪魁祸首就是server端的character不是uf8。
    1. vim /etc/mysql/my.cnf
    2. character-set-server=utf8  #在 [mysqld] 标签下添加
    3. default-character-set=utf8  #在 [mysql] 标签下添加
    4. service mysql restart
 当修改完之后,可以再查看数据库当前字符集配置,你会发现server端的character变成utf-8了,这就说明大工告成了。

5E3E98E3-D491-418F-B94B-E0AF84813C13.png

迁移

完成上面的准备工作,基本上整个博客项目的迁移就完成了60%,剩下的主要就是Django的生产环境配置和数据库的数据迁移。

  1. 生产环境配置
    生产环境的配置其实主要是两个配置文件的迁移,分别是nginx的配置文件nginx.conf 和 uWSGI的配置文件uwsgi.ini。
    方式也非常简单,直接使用scp命令从服务器拷贝出来,然后再修改与本地路径相关的一些参数即可。
    至于nginx.conf 和 uwsgi.ini怎么配置,可以参考官方文档进行配置。

  2. 数据库内容迁移
    Django的基础框架建设非常的完善,所以数据库的内容迁移自然也是非常简单。
    Django 提供了一个命令可以直接将数据库中的内容导出成json格式的文本文件。

      1. python manage.py dumpdata > all.json # 指定导出的json名字
      2. python manage.py dumpdata [appname] > blog.json # 指定导出的json名字

    上述命令1是默认导出Django项目中所有app的数据,当然你也可以使用命令2单独指定导出一个app的数据,不过并不建议这么做,除非你没有使用Django的用户管理,后台管理等系统功能( 显然这是不常见的 )。
    在正在执行数据导入前,我们还需要先将项目对应的数据库建立起来。

      1. mysql -u root -p
      2. create database; [数据库名称];
      3. show databases;

    这里需要注意的是新创建的数据库名字最好和Django项目的settings文件中配置的数据库名字保持一致,不然将无法找到数据库。
    然后再调用Django命令将项目中的数据模型在数据库中建立起来(就是创建表)。

      python manage.py migrate

    最后再将之前导出的数据导入至新服务器的数据库中,就大功告成啦。

     python manage.py loaddata blog_dump.json
  3. 启动服务器

    nginx服务器之前已经启动,现在我们只需启动Django配置的uwsgi服务器,就可以监听相应的端口号,响应nginx服务器分发的动态请求了。
    uwsgi --ini pcms_uwsgi.ini

最后

至此一个简单的Django项目迁移流程就结束了,欢迎访问我的博客xyczero.com,如有疑问欢迎提出。
最后安利一波,如果你也想在vultr上建立自己的服务器或shadowsocks,欢迎点击优惠链接>> ,互惠互利嘛^ . ^ 。


参考资料 :

  1. http://uwsgi-docs.readthedocs.io/en/latest/
  2. https://pip.pypa.io/en/latest/installing/
  3. http://www.ziqiangxuetang.com/django/django-data-migration.html
  4. http://www.cnblogs.com/donqiang/articles/2057972.html

欢迎查看 个人博客.