首先准备好:
- 编写好的Django项目
- 购买服务器,安装centos(我使用腾讯云+centos7.4)
- 安装nginx
- 安装uwsgi
- 申请ssl证书并下载
- 开始配置
配置步骤:
1、Django同步到linux:使用远程连接软件或者git都行,pycharm可以直接连接然后同步,具体:
2、配置uwsgi和Django的连接:
(1)在Django的manage.py同级目录中新建:django_uwsgi.ini
touch django_uwsgi.ini
(2)编写django_uwsgi.ini:
[uwsgi]
# 项目路径
chdir = /root/django1
# 项目里wsgi.py文件相对路径
module = django1.wsgi
# 挂在9222端口
http-socket = :9222
mater = True
# 进程线程数
processes = 4
threads = 1
vacuum = True
# 如果要后台跑这个程序的话,配置下面3行:日志路径、日志大小、进程号路径
daemonize = %(chdir)/log/uwsgi-9222.log
log-maxsize = 1024*1024*1024
pidfile = %(chdir)/pid/uwsgi-9222.pid
(3)在你写的日志路径和进程号路径创建对应的日志和pid文件夹,我这用的是manage.py的同级目录
mkdir log
mkdir pid
(4)启动uwsgi:
uwsgi --ini django_uwsgi.ini
出现[uWSGI] getting INI configuration from django-uwsgi.ini就成功启动了
(5)查看uwsgi进程,也可以看到启动了(启动了多条进程是你自己设置的,可以在(2)uwsgi配置里改)
ps aux | grep uwsgi
(6)如果要停止服务:(9222是端口号,自己设置的)
uwsgi --stop pid/uwsgi-9222.pid
坑:如果更改了Django项目里的代码,最好先关掉,再改,再启动,不然可能会没法重启。
3、配置nginx到uwsgi的连接:
(1)首先启动uwsgi,查看进程号和pid确定启动成功,如图:
uwsgi --ini django_uwsgi.ini
cat pid/uwsgi-9222.pid
ps -aux | grep 32923
(2)到nginx目录,修改配置文件nginx.conf(我直接yum装的nginx所以在/etc/nginx),修改和添加若干个server节点设置反向代理,完整代码在下面:
5、配置nginx静态文件目录和日志文件:如下完整代码配置,我写了注释(#)
6、配置https的ssl证书和转发端口配置:如下完整代码配置。
修改nginx.conf的配置文件
vim nginx.conf
配置代码: 在http{}中修改和添加如下内容:
upstream uwsgi{
server 127.0.0.1:8888;
# Django项目的端口,用uwsgi启动它,这里做配置,看下面配置proxy_pass的时候详细说这里用来干嘛
}
server{
# 监听了80端口,如果直接访问http的话,转发到https
listen 80;
server_name .ifeels.cn;
return 301 https://ifeels.cn$request_uri;
}
server {
# 监听443默认https端口
listen 443 ssl default_server;
listen [::]:80 default_server;
# 域名名称
server_name .ifeels.cn;
charset utf-8;
# ssl证书信息(申请下来的ssl证书里的Nginx包里)和版本
ssl_certificate /etc/nginx/1_www.ifeels.cn_bundle.crt;
ssl_certificate_key /etc/nginx/2_www.ifeels.cn.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# 日志文件存在这
access_log /var/log/nginx/nginx-uwsgi.log;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
# 如果是默认访问域名,内部到8888端口去找,等同于http://uwsgi
location / {
proxy_pass http://127.0.0.1:8888;
}
# 配置静态文件的目录,记得不要把网站配置在root目录下,除非你把root目录的权限更改成755
location /static {
alias /root/ifeels/Ifells/static;
}
}
如果要部署两个项目:
- uwsgi配置第二个项目的信息
同样在manage.py同级目录新建:项目名_uwsgi.ini文件,写入:
[uwsgi]
chdir = /root/aaaa
module = aaaa.wsgi
http-socket = :9222
mater = True
processes = 4
threads = 1
vacuum = True
daemonize = %(chdir)/log/uwsgi-9222.log
log-maxsize = 1024*1024*1024
pidfile = %(chdir)/pid/uwsgi-9222.pid
- 设置第二个项目的转发端口和静态文件目录
upstream uwsgi{
server 127.0.0.1:8888;
# Django项目的端口,用uwsgi启动它,这里做配置,看下面配置proxy_pass的时候详细说这里用来干嘛
}
server{
# 监听了80端口,如果直接访问http的话,转发到https
listen 80;
server_name .ifeels.cn;
return 301 https://ifeels.cn$request_uri;
}
server {
# 监听443默认https端口
listen 443 ssl default_server;
listen [::]:80 default_server;
# 域名名称
server_name .ifeels.cn;
charset utf-8;
# ssl证书信息(申请下来的ssl证书里的Nginx包里)和版本
ssl_certificate /etc/nginx/1_www.ifeels.cn_bundle.crt;
ssl_certificate_key /etc/nginx/2_www.ifeels.cn.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# 日志文件存在这
access_log /var/log/nginx/nginx-uwsgi.log;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
# 如果是默认访问域名,内部到8888端口去找,等同于http://uwsgi
location / {
proxy_pass http://127.0.0.1:8888;
}
# 配置静态文件的目录,记得不要把网站配置在root目录下,除非你把root目录的权限更改成755
location /static {
alias /root/ifeels/Ifells/static;
}
# 这一块是我又开启了一个Django项目,端口9222,然后用了同一个ssl证书配置https
location /msbm{
proxy_pass http://www.ifeels.cn:9222/msbm/;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
alias /root/msbm/static;
}
# 第二个项目静态目录
location /msbm/static {
alias /root/msbm/static;
}
}
配置多个静态文件:
在配置的第二个项目下面,写alias,和静态目录,然后请求静态文件就用域名/project2/static/....请求
踩过的坑
- uwsgi和Django的连接:如果更改了Django项目,最好手动关闭再改再开启
- nginx的nginx.conf配置:监听的端口,转发的端口,ssl处理,static处理!!!
- nginx的static处理:不要放在root下,如果要放在root下必须给755权限