1. 程式人生 > 實用技巧 >阿里雲使用nginx+gunicorn+postgresql部署django專案

阿里雲使用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。