阿里雲使用nginx+gunicorn+postgresql部署django專案
新接手公司微信公眾號專案,專案後端使用django框架開發,postgresql資料庫,由於公眾號轉發URL需要外網IP,個人買了一年阿里雲伺服器,新人優惠力度非常大,選個低配用於學習非常划算,回到剛買的伺服器,開始安裝環境,限於本人能力及精力有限,寫部落格僅做個人編寫的技術文件,能夠給大家提供一點點幫助的話就更有價值了,其中個別錯誤請見諒。
1.安裝postgresql資料庫,參考我的另一篇部落格:https://www.cnblogs.com/lis-arc/p/11497388.html
2.安裝nginx
(1)線上安裝(我用的這個方法):
yum install nginx
systemctl start nginx
(2)離線安裝
首先檢測nginx的安裝環境
yum -y install gcc gcc-c++
yum -y installpcre pcre-devel
yum -y installzlib zlib-devel
yum -y installopenssl openssl-devel
下載nginx包:
wget http://nginx.org/download/nginx-1.9.9.tar.gz # 這個包比較老了,第一次安裝的時候用的版本配置有點問題,後來安了這個版本的,也可以去官網看看
解壓縮 tar -xzvfnginx-1.9.9.tar.gz
到解壓縮後的目錄中 cd nginx-1.9.9
執行一下命令:
執行檔案 ./configure
make
make install
安裝完成後生成目錄/usr/local/nginx/,其中conf目錄為配置檔案,sbin為啟動檔案,logs為日誌檔案,其他可以自己研究研究
/usr/local/nginx/sbin/nginx 啟動服務,指定引數-s reload可重新載入服務,-s stop停服務。
完成後在本地瀏覽器輸入伺服器外網IP可以看到nginx的歡迎頁面,說明nginx已經安裝成功並啟動
2.安裝gunicorn
我使用的python3建立的django專案,gunicorn是python的模組,直接使用命令pip3 install gunicorn 即可
其他依賴根據自己的環境安裝,使用django框架訪問postgresql資料庫需要安裝psycopg2模組
3.上傳django專案,使用gunicorn啟動專案
在postgtresql資料庫中新建資料庫例項
CREATE DATABASE DATABASE_01 ;
建立使用者
CREATE USER USER_01 WITH PASSWORD $PASSWORD;
配置django專案settings.py檔案
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'DATABASE_01',
'USER': 'USER_01',
'PASSWORD': '$PASSWORD',
'HOST': 'localhost',
'PORT': '5432',
}
}
比如我的專案是/home/abc/Abc專案,到Abc下,執行命令gunicorn Abc.wsgi:application --bind 127.0.0.1:8080啟動服務並監聽8080埠,如果資料庫連線失敗去檢查一下pg_hba.conf和postgresql.conf檔案
4.修改nginx的配置檔案,nginx.conf
server { listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://127.0.0.1:7000;
}
location /static/ {
root /home/abc/Abc;
}
nginx -s reload重新載入nginx
好了,迫不及待的在本地瀏覽器訪問阿里雲服務,發現服務起來了,但是沒有載入樣式,gunicorn並不能託管樣式,所以還需要指定nginx來託管樣式
5.nginx託管django樣式
nginx.conf配置檔案中 location /static/ {} 中已經指定了靜態檔案的載入目錄,但是django的後臺管理需要收集靜態檔案
$ python manage.pycollectstatic
如果沒有在配置檔案中指定STATIC_ROOT需新增靜態檔案目錄
STATIC_ROOT = 'static'
重啟服務,登陸後臺發現樣式已經加載出來了
如果沒有載入檢視一下/var/log/nginx/error.log日誌檔案,如果提示Permission denied說明nginx沒有對靜態檔案的訪問許可權,在配置檔案裡找到user配置項,修改nginx使用者為web服務使用者,重啟nginx。