阿里雲部署Django專案(超詳細圖文教程) —— Part2. 使用Nginx, Gunicorn, virtualenv, supervisor 部署Django應用
阿里雲部署Django專案(超詳細圖文教程)
Part2. 使用Nginx, Gunicorn, virtualenv, supervisor 部署Django應用
前言:
花了一個月的空閒時間,終於成功把Django網站部署到了阿里雲ECS上,包含以下功能:
- 不使用任何第三方工具,直接用網頁連線阿里雲ECS
- 使用GIT進行原始碼控制和上傳到伺服器
- 使用git hooks實現自動部署
- 用的是時下比較流行的一套部署方案——Nginx, Gunicorn, virtualenv, supervisor and PostgreSQL
- 可以在同一臺伺服器上部署兩個、甚至多個網站
光說不練假把式,建議大家邊看邊操作!
軟體介紹
nginx: 反向代理伺服器,處理靜態資源,負載均衡等。
gunicorn: Python WSGI HTTP Server for UNIX。
virtualenv: 建立獨立的 python 環境。
supervisor: 基於linux作業系統的一款伺服器管理工具,用以監控伺服器的執行,發現問題能立即自動預警及自動重啟等功能。
1.系統更新和軟體安裝
依次在遠端管理終端下執行以下步驟,進行伺服器系統更新和依賴軟體安裝:
* 更新系統
sudo aptitude update
sudo aptitude upgrade
* 安裝資料庫PostgreSQL
sudo aptitude install postgresql postgresql-contrib
sudo aptitude install libpq-dev python-dev
* 安裝virtualenv
sudo aptitude install python-virtualenv
* 安裝Supervisor
sudo aptitude install supervisor
* 安裝Nginx
sudo aptitude install nginx
PS: 可以使用右上角的“複製命令輸入”將命令貼上進來
過程中會提示需要多少的磁碟空間,如果空間夠用的話選擇 yes 就可以繼續了,耐心等待更新包安裝
對比文章標題,大家會發現Gunicorn還沒有安裝,稍後我們會在建立出的python環境中安裝Gunicorn
2. 建立一個許可權組來管理應用
出於安全和方便管理的目的,使用專門的使用者組來操作web應用
- 新增使用者組
sudo groupadd --system webapps
命令解釋:
groupadd 新增使用者組
–system 指定將要新增的使用者組是系統級別的
webapps 使用者組的名字,也可以叫djangoapps等,起名字最好有一定的意義
* 新增使用者
sudo useradd --system --gid webapps --shell /bin/bash --home /webapps/hello_django user_hello_django
命令解釋:
useradd 新增使用者
–gid 指定使用者所屬的組,後面緊跟的webapps就指定了使用者屬於webapps組
–shell 使用者使用shell的路徑,即/bin/bash
–home 使用者home資料夾位置,即/webapps/hello_django,這個目錄將是web應用的根目錄
user_hello_django 使用者名稱(起名字要有辨識度,最好能自解釋)
為使用者設定密碼
sudo passwd user_hello_django
給使用者新增執行sudo命令的許可權
vim /etc/sudoers
在root ALL=(ALL:ALL) ALL 下面新增一行:
user_hello_django ALL=(ALL:ALL) ALL
建立目錄並授權
sudo mkdir -p /webapps/hello_django/
sudo chown user_hello_django /webapps/hello_django/
命令解釋:
mkdir 建立資料夾
chown 改變檔案或資料夾的所有者
這幾條命令都是linux的基礎命令,有疑問可以百度之。
3.建立獨立的python執行環境
切換使用者
sudo su - user_hello_django
注意命令提示符字首的變化。
進入應用目錄
cd /webapps/hello_django/
- 建立環境
virtualenv -p /usr/bin/python3.4 .
命令解釋:
- p /usr/bin/python3.4 表示建立python3.4的執行環境,也可以通過改變引數建立其他python版本的環境
- . 表示當前目錄,也可以指定完整路徑,如/webapps/hello_django/
* 啟用環境
source bin/activate
4.安裝Django和Gunicorn
- 安裝
pip install django
pip install gunicorn
pip install psycopg2
- 建立一個Django專案,名稱為hello
django-admin.py startproject hello
- 驗證Django是否正常工作
cd hello
python manage.py runserver 112.74.123.69:8000
命令解釋:
112.74.123.69 為伺服器的IP地址,注意替換為自己的
在瀏覽器中輸入112.74.123.69:8000並跳轉,看到如下頁面表示成功:
5.建立Gunicorn的啟動指令碼
- 建立檔案/webapps/hello_django/bin/gunicorn_start
cd /webapps/hello_django/bin/
vim gunicorn_start
- 在vim中編輯檔案
輸入i進入編輯模式
貼上文字內容
:w 儲存修改
:q 退出
(...)
NAME="hello_app" # Django應用的名稱
DJANGODIR=/webapps/hello_django/hello # Django 專案的目錄
SOCKFILE=/webapps/hello_django/run/gunicorn.sock
USER=user_hello_django # 使用者名稱
GROUP=webapps # 使用者組
NUM_WORKERS=3 # 一般是伺服器使用CPU的個數X2+1,所以一個CPU的話,worker就是3
DJANGO_SETTINGS_MODULE=hello.settings # Django應用使用的settings檔案
DJANGO_WSGI_MODULE=hello.wsgi # WSGI 模組名稱
(...)
給檔案新增可執行許可權
sudo chmod u+x bin/gunicorn_start
6.建立Supervisor配置檔案
在/etc/supervisor/conf.d目錄下建立檔案hello.conf
內容如下:
[program:hello]
command = /webapps/hello_django/bin/gunicorn_start #指定啟動Django app的命令,也是剛才建立的gunicorn指令碼
user = user_hello_django #使用者名稱
stdout_logfile = /webapps/hello_django/logs/gunicorn_supervisor.log #執行日誌存放位置
redirect_stderr = true #把stderr日誌也放在剛才的檔案裡
注意到日誌檔案還沒有建立,我們來建立一下:
mkdir -p /webapps/hello_django/logs/
touch /webapps/hello_django/logs/gunicorn_supervisor.log
可以使用下面的命令控制元件Supervisor
sudo supervisorctl reread #修改配置檔案後需要使用
sudo supervisorctl update #更新狀態,會啟動剛配置的應用
sudo supervisorctl status hello #檢視應用狀態
sudo supervisorctl stop hello #停止應用
sudo supervisorctl start hello #啟動應用
sudo supervisorctl restart hello #重啟應用
7. 建立Nginx虛擬伺服器
在目錄/etc/nginx/sites-available下建立hello檔案
upstream hello_app_server {
server unix:/webapps/hello_django/run/gunicorn.sock fail_timeout=0;
}
server {
listen 80;
server_name hello.test;
client_max_body_size 4G;
access_log /webapps/hello_django/logs/nginx-access.log;
error_log /webapps/hello_django/logs/nginx-error.log;
location /static/ {
alias /webapps/hello_django/static/;
}
location /media/ {
alias /webapps/hello_django/media/;
}
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
if (!-f $request_filename) {
proxy_pass http://hello_app_server;
break;
}
}
執行命令進行檔案連結
sudo ln -s /etc/nginx/sites-available/hello /etc/nginx/sites-enabled/hello
sudo service nginx restart
命令解釋:
ln -s 建立兩個檔案之間的同步連結,這時/etc/nginx/sites-available/hello和/etc/nginx/sites-enabled/hello的內容將會完全相同,以後要修改的話也只需要修改/sites-available/hello的內容,會自動同步
如果nginx restart 顯示 fail, 可以使用sudo nginx -t命令檢視失敗原因
注意在Django的settings檔案中INSTALLED_APPS加入gunicorn
修改內容後:
sudo service nginx restart
sudo supervisorctl restart hello
參考文章:
Setting up Django with Nginx, Gunicorn, virtualenv, supervisor and PostgreSQL
本文主要是由該文章翻譯整理而來,向大神致敬。
相關文章
- 阿里雲部署Django專案(nginx+uWSGI)阿里DjangoNginx
- 使用 Nginx 和 Gunicorn 部署 Django 部落格NginxDjango
- 阿里雲部署Django專案(nginx+uWSGI)-2018.11阿里DjangoNginx
- Nginx + Gunicorn 伺服器配置部署 DjangoNginx伺服器Django
- 使用 uWSGI 和 Nginx 部署 Django 專案NginxDjango
- 使用nginx+uwsgi部署Django專案NginxDjango
- CentOS下寶塔部署Django專案的詳細教程CentOSDjango
- 阿里雲伺服器部署django專案阿里伺服器Django
- nginx+gunicorn專案部署Nginx
- 如何在阿里雲上部署 Django 應用程式阿里Django
- 阿里雲centos7部署Django專案阿里CentOSDjango
- centos+nginx+uwsgi部署django專案上線詳解CentOSNginxDjango
- 部署Django到阿里雲伺服器教程Django阿里伺服器
- 【django輕量級框架】django專案部署到阿里雲伺服器流程Django框架阿里伺服器
- 把django專案部署到阿里雲伺服器流程Django阿里伺服器
- 寶塔皮膚+Python管理器+Django部署+nginx+gunicornPythonDjangoNginx
- centos8-django專案部署 nginx+uwsgiCentOSDjangoNginx
- Djang專案部署阿里雲伺服器(四)之執行Django專案阿里伺服器Django
- 5.Django專案部署Django
- Linux 下部署Django專案LinuxDjango
- django專案在uwsgi+nginx上部署遇到的坑DjangoNginx
- docker 部署 django + mysql + vue 專案DockerDjangoMySqlVue
- Vue專案打包到django部署VueDjango
- 一學就會的django專案伺服器部署nginx-uwsgi-django/buildDjango伺服器NginxUI
- 在centos8使用Docker部署Django專案CentOSDockerDjango
- 使用Docker容器化部署實踐之Django應用部署(一)DockerDjango
- Flask web專案 gunicorn部署FlaskWeb
- 【轉】Nginx部署多專案詳細總結Nginx
- ubuntu18.04中為django專案搭建nginx+gunicorn環境UbuntuDjangoNginx
- 使用Jenkins優雅部署Java專案【超級詳細的實戰教程】JenkinsJava
- Python系列之-Nginx+uWSGI+virtualenv多專案部署PythonNginx
- 容器化部署實踐之Django應用部署(二)Django
- 前端專案自動化部署——超詳細教程(Jenkins、Github Actions)前端JenkinsGithub
- Ubuntu Apache下部署Django2專案UbuntuApacheDjango
- Centos7系統部署django專案CentOSDjango
- django專案部署到centos,踩的坑DjangoCentOS
- Nginx+uwsgi+Django 的web應用環境部署-完整記錄NginxDjangoWeb
- Linux部署Django (Nginx + uwsgi + Python3 + Django)的過程LinuxDjangoNginxPython
- Windows下使用Apache和mod_wsgi部署django專案WindowsApacheDjango