首先得有一份Django app项目代码,在本地调试模式下(python manage.py runserver
)跑起来各种没问题。
配置云服务器
在DigitalOcean上申请Ubuntu 16.04LTS的Droplet,拿到公网IP和root密码,登陆后安装Django项目中用到的数据库软件,比如MySql:
1 | sudo apt-get update |
执行命令sudo netstat -tap | grep mysql
来检查MySql是否在运行,登录打开MySql提示符执行mysql> create database proj_db_name character set utf8;
来预创建Django项目要用到的数据库,这里数据库名字为proj_db_name。
执行sudo apt-get -y install nginx
安装NGINX,用来服务支持静态文件(css,js, images),还可以在代理服务器下运行Django app。
安装Supervisor,用来启动和管理Django应用程序服务。
1 | sudo apt-get -y install supervisor |
安装Python 3.x,我实践中是安装的3.6版本,那就需要去下载Python 3.6源码做编译安装。
执行sudo apt-get -y install python-virtualenv
安装Python Virtualenv,使用virtualenv已然是Python项目的最佳实践之一,它可以方便的建立独立python依赖空间,避免项目之间可能的依赖冲突问题。一般实践中是virtualenv venv
在项目根目录下生成保存独立python环境与依赖的venv目录。
添加项目专用的用户,执行adduser joe
,这里joe就是用户名,然后gpasswd -a joe sudo
加入到sudo用户列表。
执行su - joe
切换到joe账号,当前目录应该是/home/joe
,再执行virtualenv -p python3 .
,也即在当前目录生成一份独立python环境,python版本和系统命令python3指向的python版本一致,如果不加-p python3
则就和默认命令python指向的python版本一致,再继续执行source bin/activate
启用这个独立虚拟python环境。
1 | joe@ubuntu-s-1vcpu-1gb-sfo2:~$ source bin/activate |
设置Django项目
git clone项目代码到/home/joe
,执行git clone https://github.com/python012/guest.git
,继续执行pip install -r guest/requirements.txt
安装所有依赖。
注意这里guest是Django项目(as Django app)名字。
修改Django项目中的./guest/guest/settings.py
,以下是修改后的一个diff:
1 | -DEBUG = True |
回到当前目录/home/joe
,生成静态文件目录mkdir /home/joe/www/static
,执行python manage.py migrate
连接MySql初始化各个数据表,再执行python manage.py createsuperuser
来生成管理员账户,最后执行python manage.py collectstatic
。
设置Gunicorn、Supervisor、NGINX
执行pip install gunicorn
安装Gunicorn(可能是发音G unicorn),这是一个WSGI容器(WSGI HTTP Server)。
执行vim bin/gunicorn_start
,文件内容如下:
1 |
|
执行chmod u+x bin/gunicorn_start
,给gunicorn_start文件添加执行权限。在用户目录/home/joe
下生成run、logs两个目录。执行touch logs/gunicorn-error.log
用来保存Django app错误日志。
执行sudo vim /etc/supervisor/conf.d/guest.conf
生成一个Supervisor配置文件,文件内容如下:
1 | [program:guest] |
刷新Supervisor的配置文件信息,启动Django app。
1 | sudo supervisorctl reread |
继续设置Nginx,执行sudo vim /etc/nginx/sites-available/guest
生成Django app对应的配置文件,文件内容如下:
1 | upstream app_server { |
执行sudo ln -s /etc/nginx/sites-available/guest /etc/nginx/sites-enabled/guest
创建符号链接,执行sudo rm /etc/nginx/sites-enabled/default
删除NGINX默认的网站配置,最后执行sudo service nginx restart
来重启nginx,这时候应该能够通过云服务器的公网IP访问Django app了,注意还需要加上配置的端口号8089,如果设置为80则可直接访问IP了。如果后期Django项目代码有更改,可以执行sudo supervisorctl restart guest
来重启Djang app以应用最新项目代码。