DJango部署 Gunicorn+Nginx+Django+supervisor+Virtualenv
這兩天部署了一下自己寫的django blog 記錄一下備忘
系統:Ubuntu 16.04.2
部署方案:Gunicorn+Nginx+Django+supervisor+Virtualenv
virtualenv 建立一個python3環境用於執行django blog
1.安裝相關軟體
apt-get install nginx //安裝nginx
systemctl enable nginx //設定nginx開機自啟動
apt-getinstall python3 python3-pip //安裝python3和PIP
python3-m pip install virtualenv //安裝virtualenv
2.建立專案環境
mkdir /django //dango相關主目錄
mkdir /django/site //用來放網站檔案
mkdir /django/env //用來放虛擬環境目錄
建立虛擬環境
cd/django/env
virtualenv --python=python3 django //這個用來跑django專案
3.拉取django專案檔案並安裝專案依賴
cd/django/site
git cloneXXXXXXXX(你的專案git倉庫地址) //拉取專案
cd Django-project(你的Django專案)
source /django/env/django/bin/activate //啟用虛擬環境
pip install -r requirements //安裝專案依賴這步不懂的自行百度pip
安裝完畢依賴後
python manager.py runserver //測試一下專案和環境在本機能正常訪問127.0.0.1:8000表示正常
pip install gunicorn //在虛擬環境下安裝gunicorn
pip install gevent//在虛擬環境下安裝gevent
4.django相關配置
配置專案settings.py
INSTALLED_APPS下新增gunicorn
DEBUG= False //關閉除錯模式
ALLOWED_HOSTS= ['*'] //我直接設成所有了也可以根據自己需要設定
STATIC_ROOT= os.path.join(BASE_DIR, 'static') //設定靜態檔案目錄
python manage.py collectstatic //收集靜態檔案(在django虛擬環境下執行)
5.測試gunicorn
使用gunicorn替換runserver啟動django
啟用虛擬環境切換到Django專案根目錄
gunicorn --worker-class=gevent blogprject.wsgi:application
//blogprject就是你的專案名稱內有setting.py和wsgi.py的那個資料夾的名字
無報錯,能正常訪問127.0.0.1:8000表示成功
預設用的是8000埠 如果要在一臺伺服器上部署多個網站可以指定別的埠
-b 127.0.0.1:8080 這個引數可以指定別的埠
6.配置 nginx
vim /etc/nginx/sites-available/default //ubuntu下是這個配置檔案(記得先備份)其他系統一般是 /etc/nginx/nginx.conf
server {
listen 80;
server_name 127.0.0.1:8000;
access_log /var/log/nginx/django.log;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /static/ { #靜態檔案引用所有url中帶static的都指向下面的目錄
root /django/site/Django-project; #Django專案所在目錄
}
location /media/ { #同上這個檔案我的專案中是放圖片和頭像的
root /django/site/Django-project;
}
}
測試 先開啟nginx 再執行 gunicorn 後 訪問伺服器外網IP 能正常訪問--正常
7.配置 supervisor
守護程式 作用自行百度我的理解 就是 保證 gunicorn 程式一直存在 方便啟動和停止
superisor 不支援python3 不過不影響使用
apt-get install python-pip //安裝python2下的pip ubuntu自帶python2.7
pip install supervisor //直接在ubuntu中安裝 不是虛擬環境
echo_supervisord_conf > supervisor.conf //建立配置檔案
vim supervisor.conf //編輯配置檔案
啟用web頁面對比一下原配置檔案去掉冒號就行了
配置要守護的程式 gunirorn
說明:/django/env/django/bin/gunicorn 是虛擬目錄django的路徑
supervisor操作
• supervisord -c supervisor.conf //啟動supervisor程式
• supervisorctl //進入互動式介面 輸使用者名稱密碼(預設 user/123 配置檔案裡有)
• status //檢視APP狀態
• start all start django //啟動所有app或者啟動指定
• stop 同上
• 測試 能否通過 supervisor 啟動或停止 gunicron
設定supervisor開機自啟動
建立啟動檔案 vim /lib/systemd/system/supervisord.service
[Unit]
Description=Process Monitoring and Control Daemon
After=rc-local.service
[Service]
Type=forking
ExecStart=/usr/local/bin/supervisord -c /django/supervisor.conf // /django/supervisor.conf配置檔案的路徑最好使用絕對路徑
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
systemctl stop supervisord.service
systemctl start supervisord.service
測試能都通過上述命令 停止和啟動 supervisor 如果可以表示成功
systemctl enable supervisord.service 設定開機自啟動因為在 配置檔案中已經開啟了 gunicron app 隨supervisor啟動後自啟
確保nginx也是開機自啟動後,嘗試 reboot 系統
如重啟後能正常訪問頁面表示成功!!
使用 Fabric
還可以使用 fabric 進一步自動化部署
更新伺服器上程式碼的步驟一般有這麼幾個吧?
- 到github上下載更新的程式碼
git pull # 抓取github上最新的程式碼
git checkout . && git clean -xdf #上一步可能會失敗 執行該命令丟棄本地所有未提交的程式碼後重試
- 安裝最新的依賴庫
pip install -r requirements.txt
- 檢查一下setting.py 檔案中伺服器部署相關配置還在不在
- 重新收集一下靜態檔案
- 重新啟動 gunicorn或supervisor
- 重新啟動 nginx
最少也要上面j幾個步驟吧?如果每次更新都這樣來一遍頁很麻煩吧?
所以該 Fabric 這個神器出場啦。。。。
相關文章
- Django部署HTTPSDjangoHTTP
- Django上線部署Django
- Django在centos上部署DjangoCentOS
- Winserver+Apache+django部署ServerApacheDjango
- django_celery_beat的部署Django
- Django遠端部署--命令收集Django
- 5.Django專案部署Django
- Linux 下部署Django專案LinuxDjango
- Linux部署Django (Nginx + uwsgi + Python3 + Django)的過程LinuxDjangoNginxPython
- 容器化部署實踐之Django應用部署(二)Django
- centos7部署djangoCentOSDjango
- docker 部署 django + mysql + vue 專案DockerDjangoMySqlVue
- Vue專案打包到django部署VueDjango
- 使用nginx+uwsgi部署Django專案NginxDjango
- 使用 Nginx 和 Gunicorn 部署 Django 部落格NginxDjango
- 寶塔皮膚部署django的坑Django
- Nginx + Gunicorn 伺服器配置部署 DjangoNginx伺服器Django
- Docker 部署 Django+Uwsgi+Nginx+MySQL+VueDockerDjangoNginxMySqlVue
- 使用 uWSGI 和 Nginx 部署 Django 專案NginxDjango
- 使用Docker容器化部署實踐之Django應用部署(一)DockerDjango
- Django 靜態檔案管理與部署指南Django
- 阿里雲部署Django專案(nginx+uWSGI)阿里DjangoNginx
- 一個django APP 的伺服器部署DjangoAPP伺服器
- django專案部署到centos,踩的坑DjangoCentOS
- 阿里雲伺服器部署django專案阿里伺服器Django
- Ubuntu Apache下部署Django2專案UbuntuApacheDjango
- Centos7系統部署django專案CentOSDjango
- Nginx+uWSGI+Django部署web伺服器NginxDjangoWeb伺服器
- 部署Django到阿里雲伺服器教程Django阿里伺服器
- 【django輕量級框架】django專案部署到阿里雲伺服器流程Django框架阿里伺服器
- Docker容器中部署Django的時區問題DockerDjango
- 寶塔皮膚成功部署Django專案流程Django
- 在centos8使用Docker部署Django專案CentOSDockerDjango
- centos8-django專案部署 nginx+uwsgiCentOSDjangoNginx
- Docker+Jenkins+Gitlab+Django應用部署實踐DockerJenkinsGitlabDjango
- 阿里雲部署Django專案(nginx+uWSGI)-2018.11阿里DjangoNginx
- 伺服器(Aliyun)部署Django專案(Ubunto版)伺服器Django
- 如何在阿里雲上部署 Django 應用程式阿里Django
- 一學就會的django專案伺服器部署nginx-uwsgi-django/buildDjango伺服器NginxUI