nginx+gunicorn

在nginx+uwsgi的部署中發現部署的過程,會有不少時候出現502的錯誤,或者直接程序死了,到如今,學習一個nginx+gunicorn的部署,html

0.建立用戶更新系統

咱們拿到新的服務器對的時候,應該先更新下服務器:python

  1. $ sudo yum update

其次咱們應該建立一個用戶,用來部署,在Centos下建立用戶:mysql

  1. $ adduser jummy #這裏是輸入用戶名,jummy能夠換成本身喜歡的用戶名
  2. $ passwd jummy # 這裏是輸入密碼
  3. ---------受權--------------
  4. $ chmod -v u+w /etc/sudoers
  5. $ vim /etc/sudoers

咱們在這個sudoers的文件下咱們找到root那行:nginx

  1. # /etc/sudoers
  2. ···
  3. root ALL=(ALL) ALL
  4. jummy ALL=(ALL) ALL # 這是新添加的用戶須要本身寫

保存退出後,應該收回這個權限chmod -v u-w /etc/sudoersgit

  1. $ su jummy
  2. $ sudo cat /etc/sudoers
  3. $ 輸入密碼,這裏照輸入,由於密碼看不見的,因此你看到是空白,但其實輸入對確認就能夠了

這樣咱們就新建立用戶完畢,能夠去配置環境了redis

1.環境

我是在centos7下的,裝了python3.6,和虛擬環境,虛擬環境的做用想必學py的人都知道他的用處,若是不會能夠在 Centos下安裝pyenv和virtualenvwrappersql

  1. $ mkdir workspace
  2. $ pip instlall virtualenv
  3. $ virtualenv typeidea
  4. $ source typeidea/bin/activate

咱們先建一個文件夾來裝咱們的虛擬環境,而後在建立一個名爲typeidea的虛擬環境(你的名字能夠跟我不同),而後咱們進入到咱們的環境當中django

2.Git項目到服務器上

把咱們寫的代碼放到服務器,大家能夠選擇用FileZilla傳輸過去,也能夠用Git,這裏爲了裝B一下,我仍是用Git去傳輸,若是對Git不熟悉能夠看Git的使用操做vim

  1. $ cd
  2. $ mkdir typeidea
  3. $ cd typeidea
  4. $ git clone 你的倉庫地址
3.下載項目依賴包

通常咱們的項目在上傳到服務器時,會打包一份requirements.txt的文件,這是用於加載咱們在開發階段所用到包,以及版本,爲了不在部署的時候版本不同,而致使的問題,咱們一般會先生成個txt的文件,因此在你的開發環境中,進入虛擬環境,在你的項目根目錄執行以下:centos

  1. $ pip freeze > requirements.txt

生成完成後,能夠去看我寫的Git操做,把項目上傳到GitHub上,或者本身搭建的Git服務器,在切到服務器中Git下來,進入到服務器的虛擬環境,去到requirements.txt的路徑下

  1. $ pip install -r requirements.txt

系統會自動幫你安裝依賴

4.下載mysql,redis(這裏看本身需求而選擇)

這兩個是咱們用的最多的插件,mysql的安裝在個人簡書上會有一個詳細的安裝過程,但那是5.6的若是是其餘的,請本身去問問搜索引擎,這裏不詳細介紹,mysql5.6安裝,下面是redis的安裝以下

  1. $ wget http://download.redis.io/releases/redis-4.0.9.tar.gz
  2. $ tar xzf redis-4.0.9.tar.gz
  3. $ cd redis-4.0.9
  4. $ make

若是其餘配置須要本身去設置先,暫時個人博客是用了這兩個插件

5.啓動項目,收集靜態,配置settings

這裏咱們能夠先直接啓動下項目python manage.py runserver,看下是否能正常啓動仍是說少了安裝包什麼的,若是少了,能夠經過pip去安裝一波,啓動成功後Ctrl+c結束掉。在settings.py中咱們先看看有沒有設置靜態文件收集在哪裏的語句,若是沒,就加上

  1. $ vim settings.py
  2. ALLOWED_HOSTS = ['*'] # 能夠配置爲你的域名或者公網IP,寫*是匹配所有均可以
  3. ···
  4. THEME = 'themes/default'
  5. STATIC_URL = '/static/'
  6. STATIC_ROOT = '../static_files/'
  7. ···

只要加入STATIC_ROOT這個就好,後面的路徑請本身選擇,我這裏是放在了上一層目錄當中,由於個人項目路徑是,一個typeidea,裏面纔是django的項目,咱們收集靜態文件

  1. $ cd typeidea
  2. $ python manage.py collectstatic

到這裏咱們就能發現咱們的上一層目錄已經多了靜態資源的文件夾

6.啓動gunicorn
  1. # 在虛擬環境下
  2. $ pip install gunicorn

根據gunicorn的文檔咱們試下用gunicorn啓動下項目,這裏的typeidea換成本身的項目名。

  1. $ gunicorn typeidea.wsgi:application -w 4 -b 0.0.0.0:8000

這裏簡單說明一下,-w的參數是指啓動多少個線程,我這裏能夠啓動4個線程,這個根據本身的服務器大小,已經項目需求去啓動數目,通常4個線程夠用了。

-b的參數是指明瞭啓動的端口,默認是127.0.0.1:8000,這裏我是指明瞭監聽所有端口,這個能夠跟啓動django的項目端口同樣,這樣咱們就能發現咱們的線程啓動了,也不會有錯誤,咱們把這個gunicorn扔到後臺去跑,或者進階去用supervisord.conf去管理,這裏的typeidea換成本身的項目名。

  1. $ nohup gunicorn typeidea.wsgi:application -w 4 -b 0.0.0.0:8000 &
7.nginx的配置

nginx的 功能能夠說很強大,能作負載均衡,端口的分發,對靜態資源的處理等等,咱們先來一波下載nginx

  1. $ sudo yum install nginx

下載好後,咱們直接運行命令啓動咱們的nginx

  1. $ sudo service nginx start

這樣就能看到咱們熟悉的歡迎頁面了,咱們先來看看nginx的配置在去寫nginx

  1. $ cd /etc/nginx
  2. $ sudo cat nginx.conf

這個時候咱們就能看到在配置中有這樣的一句話,

  1. include /etc/nginx/conf.d/*.conf;

這個意思是他啓動的時候會去讀取conf.d下的配置文件,也就是咱們能夠在這個 /etc/nginx/con.d目錄下去寫配置文件,操做以下

  1. $ cd /etc/nginx/conf.d
  2. $ sudo touch nginx.conf
  3. $ sudo vim nginx.conf

配置文件的內容以下:

  1. # /etc/nginx/conf.d/nginx.conf
  2. server {
  3. listen 80;
  4. root /home/jummy/workspace/typeidea-env/; #配置虛擬環境的目錄
  5. access_log /home/jummy/workspace/typeidea/log/access_log; #配置這個log文件夾
  6. error_log /home/jummy/workspace/typeidea/log/error_log; #配置這個log文件夾
  7. server_name www.jummy.top; # 配置域名
  8. #處理靜態文件 /favicon.ico:
  9. location /favicon.ico {
  10. alias /home/jummy/typeidea/static_files/favicon.ico; # 若是沒,不用配置
  11. }
  12. #處理django的靜態文件
  13. location /static/ {
  14. alias /home/jummy/typeidea/static_files/; # 收集靜態資源的路徑
  15. }
  16. #處理請求轉發8000接口 若是你的gunicorn是其餘端口,請本身改
  17. location / {
  18. proxy_pass http://127.0.0.1:8000;
  19. proxy_set_header X-Real-IP $remote_addr;
  20. proxy_set_header Host $host;
  21. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  22. }
  23. }

這樣咱們的nginx配置文件就能寫完了,可是若是你重啓的話,會發現一個問題,那就是權限,你會發現你啓動的文件,於你的配置文件權限不同,這會致使你沒法啓動,或者是其餘問題,咱們返回以前的/etc/nginx的目錄之下,把下面的用戶名改成本身的用戶名字,就能夠了:

  1. # /etc/nginx/nginx.conf
  2. ···
  3. user jummy
  4. ···

固然寫完nginx的時候咱們能夠進入到本身寫的配置路徑下面,執行nginx -t看下所運行的狀態,或者第幾行發生到錯誤。而後咱們就能夠啓動nginx,在瀏覽器輸入本身的IP或者域名就成功


ps:1.若是發現啓動仍是沒法訪問,首先檢查一下防火牆,防火牆要開80端口,不會開能夠看這編Linux上防火牆的設置

2.去本身的服務器廠家的控制檯,查看本身是否放通了安全組,通常要放通80,若是要調試能夠順便把8000端口也放通,固然取決於本身實際需求

3.檢查本身的nginx的靜態路徑,反響代理的端口和IP,以及文件的權限問題

4.以上機器是在阿里雲,騰訊雲的Centos7.2的服務器上測試,均部署成功,若有問題,請留言,謝謝大佬們

8.問題

若是有問題,能夠在下方留言,或者發郵件到a929440925@gmail.com,我會把我所知的幫大家解答,若有很差的地方,也能夠留言說說,謝謝你們,轉載請說明出處,謝謝

9.更新了Supervisrcrd管理

若是想要用Supervisrcrd去管理,能夠看這編文章Supervisrcrd

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息