首先準備好:
- 編寫好的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權限