2 Django + uswgi + nginx 将自己本地学习的博客部署到阿里云
参考网址:
https://blog.csdn.net/fengzq15/article/details/78633827
各软件版本
1
2
3
4
5centos 7.4
python 3.6 #virtualenv
django 1.11.7
uwsgi 2.0.17.1
nginx 1.12.2前言
不要问我为什么要重复造轮子!开始我也不明白,为什么那么多人重复去造轮子,不过当你在浩瀚如星空一样的教程里面谷歌,百度一天,就是找不到属于你的那一颗,呵呵…..还是做个自己的轮子自己滚吧。安全组,防火墙设置
进入到阿里云控制面板的安全组标签,在入口标签开启80,443,8000端口,出方向默认无限制。
然后关闭 centos7 的 firewalld 防火墙,调试好再开启防火墙,开放端口。
1
2systemctl stop firewalld
systemctl status firewalld #查看防火墙运行状态远程服务器环境部署
项目目录:
1
2
3
4
5
6
7
8
9
10
11--root
--project
--blog
--blog
--settings.py
--urls.py
--wsgi.py
--app
--manage.py
--uwsgi.ini(这个在后面才配置)
--nginx.conf(可以先配置好然后ln过去,我是直接配置了)安装python3和pip3 参考另外一篇文章
安装virtualenv 和virtualenvwrapper 管理虚拟环境,虚拟环境为:maguadj , 环境的导入导出
1
2
3
4
5
6#本地虚拟环境执行
workon maguadj
pip freeze > requirements.txt
#服务器端执行
workon maguadj #服务器进入虚拟环境
pip install -r requirements.txt验证django项目可以运行:
在服务器端blog的setting.py 里面找到并设置
1
2
3DEBUG = True
ALLOWED_HOSTS = ['*'] #设置允许登入的主机然后运行测试服务器
1
2
3workon maguadj #进入虚拟环境
python3 manage.py runserver 0.0.0.0:8000 #注意和平常在本地测试的区别
#在本地电脑输入远程服务器公网ip:8000,(确保你的服务器的8000端口已经开放),来验证是否可以访问网站。第四步配置uwsgi:
安装uwsgi: !!注意:在uwsgi安装之前要确定是否安装uwsgi的依赖库,如g++, python-devl等,否则安装失败
1
pip3 install uwsgi
验证uwsgi:
1
2#进入到和django项目的manage.py所在的文件夹,运行如下命令:
uwsgi --http :8000 --module Sport.wsgi!!注意:http和:之间有空格,blog换成你自己项目的名字。 用本地电脑浏览器登录服务器ip:8000来确定是否运行成功。
编辑uwsgi配置文件,并验证:
1
2
3find / -name django #查看自己的虚拟环境目录
#/root/.virtualenvs/maguadj/lib/python3.6/site-packages/django
vim uwsgi.ini1
2
3
4
5
6
7
8
9
10[uwsgi]
socket = :8000
#http = :8000
chdir = /home/tulin/project/blog
home = /root/.virtualenvs/maguadj
module = blog.wsgi
master = true
processes = 10
chmod-socket = 664
vacuum = true然后在uwsgi.ini所在目录运行
1
2workon maguadj #进入到虚拟环境
uwsgi --ini uwsgi.ini正确运行出现如下信息
1
2
3
4
5
6
7
8……
* uWSGI is running in multiple interpreter mode *
spawned uWSGI master process (pid: 7158)
spawned uWSGI worker 1 (pid: 7160, cores: 1)
spawned uWSGI worker 2 (pid: 7161, cores: 1)
spawned uWSGI worker 3 (pid: 7162, cores: 1)
spawned uWSGI worker 4 (pid: 7163, cores: 1)
......用本地电脑登录远程服务器8000端口,这个是用来验证其他电脑能不能登录服务器运行的项目,如果不能登录,将uwsgi.ini里面的socket改为http,若这样登录成功就证明没问题。然后记得把http改回socket,这时应该可以顺利打开网页。
第五步生成将项目的静态文件全部集中到一个文件夹:
首先修改settings.py,添加如下内容:
1
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
我的设置
1
2
3
4
5STATIC_URL = '/static/'
STATIC_ROOT = '/home/tulin/project/blog/static'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"),
)然后在manage.py 目录运行
1
2python3 manage.py collectstatic
#完成后,会发下目录下多了一个static文件夹。所有静态文件会被拷贝到这里配置nginx:
安装nginx
1
2
3
4
5yum install nginx
systemctl status nginx
systemctl start nginx
#systemctl stop nginx
systemctl restart nginx运行nginx后用自己电脑浏览器直接输入远程服务器地址不带端口,应该会出现nginx的欢迎界面。
配置nginx.conf:
首先设置nginx的运行用户为root,解决nginx出现403 forbidden的问题,就是静态文件加载的时候403,css,图片,js都加载不了,在这里浪费一个下午。
参考网址:https://segmentfault.com/a/1190000010998164
1
2
3
4vim /etc/nginx/nginx.conf
#user nginx; 找到这一行修改为下面的user root
#user root;
service nginx restart; #重启nginxnginx的配置文件默认是/etc/nginx/nginx.conf ,但是我们可以在/etc/nginx/conf.d文件夹里面创建自己的配置文件,在nginx启动的时候也会加载,注意要是.conf结尾的文件
1
vim /etc/nginx/conf.d blog.conf
内容如下,/home/tulin/project/blog/static换成你自己的路径
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21upstream django {
server 127.0.0.1:8000;
}
server {
listen 80;
server_name localhost;
charset utf-8;
client_max_body_size 75M;
location /static {
alias /home/tulin/project/blog/static;
}
location / {
uwsgi_pass django;
include /etc/nginx/uwsgi_params;
}
}
自己的版本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22server {
listen 80;
server_name xx.xx.xx.xx;
charset UTF-8;
access_log /var/log/nginx/myweb_access.log;
error_log /var/log/nginx/myweb_error.log;
client_max_body_size 75M;
location / {
include uwsgi_params;
uwsgi_pass xx.xx.xx.xx:8000;
uwsgi_read_timeout 2;
}
location /static {
expires 30d;
autoindex on;
add_header Cache-Control private;
alias /home/tulin/project/blog/static;
}
}重新启动nginx:
1
systemctl restart nginx
验证配置
1
回到/home/tulin/project/ 文件夹下,输入uwsgi –ini uwsgi.ini启动项目,然后在本地电脑登录服务器ip地址即可(不用指定端口,现在是默认访问80端口,而非8000端口)。
!!注意:如果出现静态文件无权访问的情况,vi /etc/nginx/nginx.conf,在第一行添加user root,然后再次重启nginx即可。
21
121