这两天参考网上的各种部署教程,总算是把Django的服务器初步搭建起来了。
软件安装
我这里用的是腾讯的云服务器,Ubuntn16.04操作系统。需要安装的软件:
- pip3
- Django
- gunicorn
- nginx
- mysql (可选)
- git ( 可选)
-
virtualenv (可选)
系统自带有Python2,Python3, 如果使用Python3运行Django,则需要安装 pip3, 安装命令 apt-get install python3-pip。有了pip3,就可以方便的安装Django和gunicorn , pip3 install django, gunicorn ,如果需要选择安装版本,参考命令 pip3 install django==1.10.5
安装ngnix,git和mysql,apt-get install nginx git mysql-server。这里mysql是Django使用的数据库。如果使用其他数据库,参考对应的数据库软件安装方法。git是用来把本机文件同步到服务器的版本管理软件,可以用其他软件代替,只要能把Django代码转移到在服务器上即可。
如果需要的话,还可以安装virtualenv,搭建python的虚拟环境。
Mysql数据库相关命令
根据setting.py文件的配置,创建数据库和相应的用户,需要的使用的命令如下:
登陆mysql数据库客户端 mysql -u root -h localhost -p,安装mysql时,根据提示设置root账户的密码,这里使用root账号登录
创建数据库 utf-8 字符编码
CREATE DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
查看,修改数据库编码
use database_name;
show variables like 'character_set_database';
alter database <数据库名> character set utf8;
删除数据库
Drop database db_name;
创建MYSQL 用户
CREATE USER 'user_name'@'localhost' IDENTIFIED BY 'password';
授权
GRANT privileges ON databasename.tablename TO 'username'@'host';
其中的privileges包括 select , delete , update 等权限,Django操作数据库需要全部的权限,可参考如下命令
GRANT ALL ON `discuz`.* TO 'discuz'@'localhost';
查看用户权限:
show grants for username@'localhost';
Django运行环境搭建
假设已经在本地电脑上调试好Django代码,通过git上传到服务器端的 /var/www/ 目录下。
- 安装Django 项目依赖的python包。
- 参考上一节创建空的utf8字符编码数据库,和授权用户。数据库名,登陆账号密码与Setting文件一致。
- 对每个app使用makemigrations命令,然后使用migrate命令。在服务器端第一次使用makemigrations时,最好分别对每个app执行一次,以免生成数据库是出错。如果已经出错,可以先进入mysql,删除原有数据库,再新建一个空的数据库后,重新操作。
-
创建管理员账号,并运行 runserver 0.0.0.0:8000,可在终端浏览器看到Django页面。
现在中断看到的是Django自带调试用的http服务器,不推荐使用,下面讲如何使用gunicorn 和 nginx。
gunicorn 配置
gunicorn 可简单配置为
gunicorn -b0.0.0.0:8999 dj.wsgi
执行命令之后,可以在浏览器访问页面,但是看不到静态文件(图片,CSS,JS等)。静态文件的路径需要在nginx中配置。
参考连接 http://blog.51cto.com/10452483/1769749
nginx配置
Django文件的路径 最好是放在 /var/www/ 目录下,否则访问静态文件可能因为权限问题出现 403 forbidden error 错误。参考链接 http://blog.51yip.com/apachenginx/1512.html
nginx配置文件的路径:
/etc/nginx/sites-available/ : 先把配置文件放在这里,编辑好之后,链接到目录 /etc/nginx/sites-enable/
简单的配置文件如下:
server
{
listen 80;
location /static/ {
alias /var/www/static/;
}
location / {
proxy_pass http://127.0.0.1:8999;
}
}
不出意外应该是可以在浏览器端(访问地址: x.x.x.x)看到完整的页面了。另外要特别主要服务器开放的端口号有哪些。比如阿里云默认开放的端口号为 3389,需要自行设置一下,开放相应端口号,以免出现无法访问的问题。
后续再对gunicorn 和 nginx 做细致的配置。