云服务器centos下nginx+uWSGI+Django+域名部署
本篇文章介绍了云服务器centos下nginx+uWSGI+Django+域名部署, 请打开相应端口和购买域名
安装nginx
1
2yum install nginx
vi /etc/nginx/conf.d/builddemo_nginx.confbuilddemo_nginx.conf文件名字是自定义的, 在此文件中输入以下内容
1
2
3
4
5
6
7
8server {
server_name 域名或者主机外网ip;
listen 17879;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:17878;
}
}注:
(1) 如果server_name 域名;的话,需要保证服务器与服务器已绑定, 绑定方法请参考:[(1条消息) 如何绑定腾讯云域名到云服务器ip?_colorfulyan的博客-CSDN博客](https://blog.csdn.net/colorfulyan/article/details/108952573#:~:text=登陆 腾讯云 ,鼠标移至” 云 产品”,下滑选择” 域名 管理” ,如何 绑定ip ) 进入控制台->总览-> 云 解析 2) 这里需要做进一步的设置,比如,在更多选项卡中,开启CNAME加速,)
(2)uwsgi_pass 是nginx与uWSGI服务器之间通信, 一般nginx是和uWSGI服务器是在同一台主机上面,因此直接使用127.0.0.1即可, 端口自己定义
(3) listen 17879; 这里的端口号也是自己定义的,这是用于客户端与nginx之间的通信. 比如在浏览器输入: http://sunshine.site:17879/
安装uWSGI—web服务器
1
2pip install uwsgi
systemctl stop firewalld //关掉防火墙检测uwsgi的是否可用
在任意一个文件夹
vi test.py
,输入以下内容:
1
2
3
4def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
tt = "hello world"
return tt.encode('utf-8')1
2// 执行命令
[root@infinity ~]# uwsgi --http :18001 --wsgi-file test.py在浏览器输入ip地址:端口号
这就确保了uWSGI服务器正常
创建django项目
1
2
3
4
5django-admin startproject builddemo
cd builddemo
python manage.py startapp firstapp
mkdir uwsgi_conf
vi uwsgi_params在
uwsgi_params
里面输入以下内容1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REQUEST_SCHEME $scheme;
uwsgi_param HTTPS $https if_not_empty;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;现在的目录结构是介样的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29[root@infinity builddemo]# tree
.
├── builddemo
│ ├── asgi.py
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-36.pyc
│ │ ├── settings.cpython-36.pyc
│ │ ├── urls.cpython-36.pyc
│ │ └── wsgi.cpython-36.pyc
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── db.sqlite3
├── firstapp
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── manage.py
├── media
├── static
├── uwsgi_conf
└── uwsgi_params在builddemo/settings.py 里面的
ALLOWED_HOSTS = []
改成ALLOWED_HOSTS = ['*']
在根目录输入
python manage.py runserver
正常就表明项目创建成功也可以通过uwsgi来启动项目(注:此时仅仅只是可用uwsgi命令来启动, 和nginx还没关联):
[root@infinity builddemo]# uwsgi --http :19091 --module builddemo.wsgi
在浏览器输入: 外网ip:端口号即可访问
通过uwsgi.ini文件将nginx和uWSGI和django项目关联起来
1
2cd uwsgi_conf
vi uwsgi.ini在uwsgi.ini里面输入以下配置信息:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44# uwsig使用配置文件启动
[uwsgi]
socket = 127.0.0.1:17878 # 注意要和/etc/nginx/conf.d/builddemo_nginx.conf里面uwsgi_pass的端口保持一致
# 项目所在的根目录
chdir=/root/builddemo/
# 指定项目的application,区别于启动命令--wsgi-filemysite/wsgi.py
module=builddemo.wsgi:application
#the local unix socket file than commnuincate to Nginx
# 指定sock的文件路径,这个sock文件会在nginx的uwsgi_pass配置,用来nginx与uwsgi通信
# 支持ip+port模式以及socket file模式
# 进程个数, 一般设置为cpu个数的两倍
processes = 8
# 每个进程worker数
workers=5
py-autoreload=1 # py文件修改,自动加载
# 指定多个静态文件:static目录和media目录,也可以不用指定该静态文件,在nginx中配置静态文件目录
# uwsgi有自己的配置语法,详细可参考官网,无需写绝对路径,可以用循环、判断等高级配置语法
for =static media
static-map=/static=%(chdir)/%(_)
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置一个超时,用于中断那些超过服务器请求上限的额外请求
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=%(chdir)/uwsgi_conf/uwsgi.log
# uWSGI进程号存放
pidfile=%(chdir)/uwsgi_conf/uwsgi.piduwsgi.ini文件中记录了要部署的项目的目录,以及nginx的端口 以及其他配置信息, 实现了将nginx和uWSGI和django项目关联起来
启动uWSGI和nginx
1
2[root@infinity builddemo]# uwsgi --ini uwsgi_conf/uwsgi.ini
[root@infinity builddemo]# systemctl start nginx
这样整个项目就部署成功了,在浏览器输入: ip:端口 或者 域名:端口 就可以正常访问了:
完结撒花!!!
参考文章: centos7下部署Django(nginx+uwsgi+django+python3) - 知乎 (zhihu.com)