将本地的Django项目部署到云服务器
1.开发环境
- 开发语言: Python3
- 后台框架:Django
- wsgi服务器:uwsgi
- web服务器:nginx
2.首先python3和pip3的安装
- 首先安装相关包
1
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
- 下载python 地址:
1
wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
- 解压
1
tar xf Python-3.6.8.tgz
- 安装目录为/usr/local/python3(可以自定义安装目录)
1
./configure -prefix=/usr/local/python3/
- 编译并安装
1
make && make install
- 建立软链
1
2ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 - 升级pip3
1
pip3 pip3 install --upgrade pip
- 安装其他软件
1
2yum install mysql mysql-devel
yum install sqlite-devel
3.安装django
1 | pip3 install django1.11.11 |
4.安装uWSGI
1 | pip3 install uwsgi |
- 测试:
1 | # test.py |
uwsgi –http :666 –wsgi-file test.py
5.将uwsgi与Django连接:
配置setting.py中的allowed_host设置为:
1 | ALLOWED_HOSTS = ['boomju.com'] |
1 | uwsgi --http :666 --chdir /root/djlee/ --wsgi-file djlee/wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:9192 |
访问 http://boomju.com:666 成功,出现Django欢迎页面。
参数太多,可以将其写入ini文件中
1 | # hello_uwsgi.ini file |
uwsgi –ini uwsgi.ini
6.安装配置Nginx
略 详情请见博文《Nginx搭建hexo博客》中安装Nginx部分
7.将nginx和uwsgi以及Django结合
- Nginx配置文件在里面添加:
1
vim /etc/nginx/conf.d/djsite.conf
重启nginx:1
2
3
4
5
6
7
8
9
10
11
12server{
listen 80;
server_name boomju.com;
root /root/djlee/;
index index.html;
location /{
include /etc/nginx/uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
通信。
uwsgi_read_timeout 2;
}
}1
service nginx restart
8.让Nginx处理Django的静态文件
静态文件指JS、css、图片等文件,在django项目投入生产中时,可以不必在setting中指明静态文件的路径,只需在nginx的站点配置中指明即可
- 修改setting.py文件
1
2
3
4
5
6
7
8DEBUG = False
STATIC_URL = '/static/'
# 所有静态文件(css/js/图片)都放在该文件夹中,该文件夹与manage.py同级
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static")
] - 修改Nginx站点配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17server{
listen 80; # 如果不加的话,会默认为80,这里也可以不改
server_name boomju.com;
location /static {
autoindex on;
alias /var/www/djlee/static;
}
location / {
include /etc/nginx/uwsgi_params;
uwsgi_pass 127.0.0.1:8000; # 需要和ini文件中的端口保持一致,这样才能实现两者的
通信。
uwsgi_read_timeout 2;
}
}网站最好不要部署在root目录下,因权限原因容易出现例如403、404等问题。
后台启动:
uwsgi: uwsgi uwsgi.ini -d uwsgi.log(可根据不同配置文件启动不同站点,但是会启动多个进程。)
结束后台进程:
可以把所有配置文件放到一个文件夹下使用emperor同时启动所有站点1
uwsgi –emperor /path/to/vassals/
ps -ef |grep uwsgi 查看进程号
kill -9 父进程号
或者:
pkill -f uwsgi -9