最近在学习一个 Django博客教程,边学边练习。在Vultr上部署花了好长时间。写点心得总结一下部署方法。另外,Vultr的注册链接。
安装软件
yangxg@localhost:~$ sudo apt-get install nginx
yangxg@localhost:~$ sudo apt-get install git python3 python3-pip
yangxg@localhost:~$ sudo pip3 install virtualenv
nginx 配置
先在服务器的 /etc/nginx/sites-available/ 目录下新建一个配置文件,文件名我一般就设置为域名。写上下面的配置内容:
server {
charset utf-8;
listen 80;
server_name www.rubic.win;
location /static {
alias /home/gaoyan/sites/blogprojecttwo/static;
}
location / {
proxy_set_header Host $host;
proxy_pass http://unix:/tmp/www.rubic.win.socket;
}
}
创建一个符号链接,把这个配置文件加入到启用的网站列表中去,被启用网站的目录在 /etc/nginx/sites-enabled/,你可以理解为从 sites-available/ 目录下发送了一个配置文件的快捷方式到 sites-enabled/ 目录。具体命令如下:
sudo ln -s /etc/nginx/sites-available/www.rubic.win /etc/nginx/sites-enabled/www.rubic.win
nginx 启动、重启、关闭:
sudo service nginx start
sudo service nginx stop
sudo service nginx reload
Django 配置
配置虚拟环境:
gaoyan@vultr:~/sites$ virtualenv venv
gaoyan@vultr:~/sites$ source venv/bin/activate
(venv) gaoyan@vultr:~/sites$
Django
第一步:安装项目依赖的库。
第二步:手机静态文件到项目根目录下的 static 文件夹下。settings.py 要添加STATIC_ROOT = os.path.join(BASE_DIR, 'static')
第三步:创建数据库文件
第四步:创建超集用户
(venv) gaoyan@vultr:~/sites/blogprojecttwo$ pip install -r requirements.txt
(venv) gaoyan@vultr:~/sites/blogprojecttwo$ python manage.py collectstatic
(venv) gaoyan@vultr:~/sites/blogprojecttwo$ python manage.py migrate
(venv) gaoyan@vultr:~/sites/blogprojecttwo$ python manage.py createsuperuse
Gunicorn + Fabric 部署
这种方法应该是所有系统通用的方法,是我试过后两种方法在Ubuntu16.04 失败后找到的方法。
首先,在项目根目录先新建一个 shell 文件,文件里内容如下:
#!/usr/bin/env bash
nohup gunicorn --bind unix:/tmp/www.rubic.win.socket blogprojecttwo.wsgi:application&
然后,新建 fabfile.py ,内容如下:
from fabric.api import env, run
from fabric.operations import sudo
import win_unicode_console
win_unicode_console.enable()
GIT_REPO = 'git仓库'
env.user = '用户名'
env.password = '密码'
env.hosts = ['主机名']
env.port = '22'
def deploy():
source_folder = '/home/gaoyan/sites/blogprojecttwo'
run('cd {} && git pull'.format(source_folder))
run("""
cd {} &&
source ../venv/bin/activate
pip install -r requirements.txt &&
python manage.py collectstatic --noinput &&
python manage.py migrate &&
sh -x start-gunicorn.sh &&
sleep 1
""".format(source_folder))
sudo('service nginx reload')
在本地根目录下命令行输入 fab deploy
即可自动部署。