1. 程式人生 > >Django專案部署上線

Django專案部署上線

1 專案程式碼打包部署

包壓縮技巧:( zip / unzip linux 下的zip檔案的壓包和解包命令 )

tar -cjvf python3.6_env.tar.bz2 python3.6_env/

tar xjvf python3.6_env.tar.bz2

一。壓縮拷貝程式碼:

(1)進入工程主目錄

cd SHDjangoLesson

(2)產生依賴庫 pip freeze > requirements.txt

(3)壓縮

​ cd SHDjangoLesson

zip -r SHDjangoLesson.zip SHDjangoLesson/

二。遠端拷貝

伺服器端(ubuntu):

nc -l 11111 > SHDjangoLesson.zip

客戶端:

nc IP 11111 < SHDjangoLesson.zip

三。配置環境, 解壓

python依賴的環境: python3.5 或者 python3.6

安裝並配置虛擬環境: virtualenv –no-site-packages venv -p /usr/bin/python3.6

source venv/bin/activate

進入虛擬環境

pip install -r requirements.txt

檢視環境依賴:pip list

四。啟動服務

確認redis, mysql安裝良好,能訪問

setings.py 中 ALLOWS = [‘*’]

啟動服務

python manage.py runserver 0.0.0.0:8000

(無問題情況,在後臺執行:

nohup python manage.py runserver 0.0.0.0:8000 &

)

備註:
如果出現如下問題:

DjangoUeditor ModuleNotFoundError: No module named ‘widgets’

解決方案:

(2)修改DjangoUeditor下的views.py中的240行,新增:

output_path = "/static/" + urljoin(USettings.gSettings.MEDIA_URL, OutputPathFormat)
return_info = {
        # 儲存後的檔名稱
        #'url': urljoin(USettings.gSettings.MEDIA_URL, OutputPathFormat),
        'url': output_path,

(3)編譯 進入到DjangoUeditor工程目錄 python setup.py install

  1. 建議: 將DjangoUeditor3/DjangoUeditor專案移動到 extapps/目錄下, 修改它的models.py檔案:
# 修改 from .widgets import .... 為下面的widgets位置
from DjangoUeditor.widgets import ....

2 專案分散式部署的整體框架圖

提供兩種方案,一個備選方案:

方案1:

client —> Nginx(openresty) —> gunicorn (通過wsgi啟動託管) —> django (應用服務)

方案2:

Nginx(openresty, upstream) —> supervisor (monitor ) ——> gunicorn (同uwsgi) —> django (應用服務)

備選:

按照原來的HTTP啟動的方式

nohup python manage.py runserver 0.0.0.0:9001 &

Nginx(openresty, upstream) —> supervisor(minitor) HTTP —> django (HTTP)

使用如下框架和工具

  1. 反向代理負載均衡伺服器: Nginx (Openresty)

  2. gunicorn (代替uwsgi)

  3. django

  4. supervisor (監控並拉起失敗服務)

1 安裝專案依賴包

pip list

採用pip freeze產生專案依賴包,輸出到 requirements.txt

pip freeze > requirements.txt

拷貝requirements.txt檔案到線上伺服器,並在虛擬環境下安裝

將線下專案工程目錄打包,並用nc上傳到伺服器上。

假設線上的工程目錄放在了

2 安裝gunicorn(或uwsgi)

​ gunicorn是一個python Wsgi http server,只支援在Unix系統上執行,來源於Ruby的unicorn專案。Gunicorn使用prefork master-worker模型(在gunicorn中,master被稱為arbiter),能夠與各種wsgi web框架協作。

在虛擬環境下安裝上述的requirements.txt中對應的依賴包

(1)pip install -r requirements.txt

注:

​ 確保DjangoUeditor3安裝成功,之前講過從git下載安裝

(3)啟動gunicorn, 命令如下:

具體chdir是專案的basedir目錄

nohup gunicorn --chdir /home/apple/www/TAdminPro/ TAdminPro.wsgi:application  --bind 0.0.0.0:9000  --workers=1 &

nohup gunicorn --chdir /home/apple/artproject/ artproject.wsgi:application  --bind 0.0.0.0:9000  --workers=2 &

# 啟動專案, 伺服器8000
nohup gunicorn --chdir /home/apple/www/xsapp/  XSproject.wsgi:application --bind 0.0.0.0:8000 --workers=2 &

注: 重新安裝DjangoUeditor專案,可以先試著python manage.py runserver 是否能正常啟動django專案

3 關於靜態資源管理

將分散在各個app應用中的靜態資源集中管理,採用如下命令:

python manage.py collectstatic

此時會在base_dir目錄下產生statics資料夾

後面nginx靜態檔案配置就可以指定此路徑

4 配置Nginx伺服器

在nginx伺服器配置中修改配置目錄

將nginx.conf修改為:

# user  nobody;
# user nginx;
worker_processes  2;        #cat /proc/cpuinfo
# worker_cpu_affinity       0001 0010 0100 1000;

error_log  logs/error.log  notice;
# error_log  logs/error.log  debug;

pid  logs/nginx.pid;

events
{
    use   epoll;
    multi_accept  on;
    accept_mutex_delay  50ms;
    worker_connections  65535;    #每個worker支援最大網路連線數
}    

http
{
    include  mime.types;
    # default_type  application/octet-stream;
     default_type   text/html;

# log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
#                  '$status $body_bytes_sent "$http_referer" '
#                  '"$http_user_agent" "$http_x_forwarded_for"'
#                  '"$upstream_addr" "$upstream_status" "$upstream_response_time" '
#                  '$request_time -- $http_cookie -- $cookie_pin';


# access_log  logs/access.log  main;

sendfile  on;
tcp_nopush  on;

keepalive_timeout  0;

gzip  on;
gzip_min_length  1k;
# gzip_buffers 48k;  # 注意,可能會出現無效的數值
gzip_http_version  1.1;
gzip_types  text/plain application/x-javascript text/css  text/shtml application/xml;

proxy_intercept_errors  on;
charset  utf-8;

######################
include  conf.d/*.conf;
######################

}

建立目錄conf.d, 並新增如下資訊到project.conf:

proxy_next_upstream  error;

server
{
    listen 80;       #nginx提供對外的埠是80, 通過路由 / 轉發到127.0.0.1:8000/art/index 服務,而8000埠是上述gunicorn提供的埠
    server_name   localhost;

    client_max_body_size  50M;

    #配置專案靜態資源目錄
    location /static {
        alias /home/apple/artproject/static;
    }


    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;
     }

    # error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
     error_page  500  502  503  504 /50x.html;
     location = /50x.htlml {
         root  html;
      }

}

重啟Nginx服務,生效。

通過以上的配置資訊,基本已經完成了nginx + gunicorn + django的配置

5 安裝Supervisor與配置

​ supervisor管理程序,是通過fork/exec的方式將這些被管理的程序當作supervisor的子程序來啟動,所以我們只需要將要管理程序的可執行檔案的路徑新增到supervisor的配置檔案中就好了。此時被管理程序被視為supervisor的子程序,若該子程序異常終端,則父程序可以準確的獲取子程序異常終端的資訊,通過在配置檔案中設定autostart=true,可以實現對異常中斷的子程序的自動重啟。

(1)安裝supervisor

(python3.6_env) app[email protected]:~$ sudo apt install supervisor

上述方法我們直接管理gunicorn,讓它啟動和暫停,現在我們希望採用supervisor來管理gunicorn

(2)配置supervisor

將supervisor設定為管理啟動監控 gunicorn

新增檔案 /etc/supervisor/conf.d/xs.conf ,配置資訊如下

[group:xsapp]
programs=xs-1, xs-2  

[program:xs-1]
command=gunicorn --chdir /home/apple/www/xsapp XSproject.wsgi:application  --bind 0.0.0.0:8001 --workers=1
directory=/home/apple/www/xsapp 
user=apple   
autorestart=true
redirect_stderr=true
stdout_logfile=log/xs1.log
loglevel=info
stopsignal=INT


[program:xs-2]
command=gunicorn --chdir /home/apple/www/xsapp XSproject.wsgi:application  --bind 0.0.0.0:8002 --workers=1
directory=/home/apple/www/xsapp
user=apple
autorestart=true
redirect_stderr=true
stdout_logfile=log/xs2.log
loglevel=info
stopsignal=INT

建立log資料夾,存放日誌檔案

修改 /etc/supervisor/supervisord.conf 檔案:

[unix_http_server]
file=log/supervisor.sock   ; (the path to the socket file)
chmod=0700                       ; sockef file mode (default 0700)
chown=apple:apple  ; 檔案的所屬使用者和組

[supervisord]
nodaemon=false
logfile=log/supervisord.log
loglevel=info
pidfile=log/supervisord.pid

[supervisorctl]
serverurl=unix://log/supervisor.sock ; use a unix:// URL  for a unix socket

在nginx配置檔案project.conf (或 xs.conf檔案 )中加入如下資訊

upstream xsapp{
    #ip_hash;  or  輪詢(預設) or url_hash
    server 127.0.0.1:8001;
    server 127.0.0.1:8002;
 }

 server {
      ...
      location / {
         #(2) method2: use proxy_pass upstream to the supervisor who manage the gunicorn

        proxy_pass  http://xsapp;
        ...
  }

 }

新增好上述配置資訊後

(1)啟動nginx

(2)通過supervisor啟動gunicorn

注意: 先確認gunicorn 程序是否已啟動

ps -ef | grep gunicorn

ps -ef | grep supervisor

supervisord -c supervisor.conf # 建議複製/etc/supervisor/supervisord.conf 到 專案所在位置

或 supervisord -n 啟動, 預設conf檔案是/etc/supervisor/supervisord.conf

​ 綜合上述,nginx做反向代理和負載均衡,將請求upstream轉發給一個Supervisor監管的Gunicorn程序,而Gunicorn程序拖管了Django工程程式碼。

至此,Nginx + Gunicorn + Supervisor + Django 線上環境部署都已經完成!

supervisord常用命令

supervisord : 啟動supervisor, -h 檢視幫助
supervisorctl reload :修改完配置檔案後重新啟動supervisor
supervisorctl status :檢視supervisor監管的程序狀態
supervisorctl start 程序名 :啟動XXX程序
supervisorctl stop 程序名 :停止XXX程序
supervisorctl stop all:停止全部程序,注:start、restart、stop都不會載入最新的配置檔案。
supervisorctl update:根據最新的配置檔案,啟動新配置或有改動的程序,配置沒有改動的程序不會受影響而重啟

解決 “Error: Cannot open an HTTP server: socket.error reported errno.EACCES (13)” 錯誤:

主要是supervisor.socket檔案的許可權問題, 可以調整它的位置,或設定它們的許可權。

相關推薦

Django專案部署上線

1 專案程式碼打包部署 包壓縮技巧:( zip / unzip linux 下的zip檔案的壓包和解包命令 ) tar -cjvf python3.6_env.tar.bz2 python3.6_env/ tar xjvf

如何部署Django專案上線你需要知道!!!

        一、準備工作            1、安裝Django:sudo pip install Django==1.11.4(推薦)            2、安裝Mysq1:sudo pip install pymysql            3、關閉除錯,允

Ubuntu下flask Django專案部署

Ubuntu下python框架 Django Flask 專案部署 使用nginx 一。下載安裝 nginx 方法1:https://blog.csdn.net/b_evan/article/details/72858149 方法2: 1.去nginx管網 2.選擇download

Django專案部署 3

建立APP   在Django中,專案是網站的框架和容器,APP是一個具體的WEB應用程式,用來實現具體的功能和完成具體的事項,一個專案裡可以有多個APP,就像一個網站可以有文章系統,論壇系統,後臺系統,每一個APP也可以剝離出來作為獨立的模組元件。   python manage.py startapp

Django專案部署 2

修改manage.py檔案中的python為python3 設定模板目錄   建立一個與專案同級的目錄(templates)用來放置以後需要使用到的HTML檔案   在setting.py檔案中,將新建立的目錄設為模板引擎的路徑   即在空的 DIRS 列表裡新增以下命令   os.path.joi

超詳細講解Django打造大型企業官網之Django專案部署

326-在開發機上的準備工作 327-在伺服器上安裝vim、MySQL、memcached等 328-在伺服器上安裝Python環境、Git、虛擬環境等 329-生產環境Django專案部署 330-用uWSGI部署Django專案 331-用Nginx+uWS

Django專案部署(django+guncorn+virtualenv+nginx)

  一、說明     為了django專案部署到生產環境上,能夠穩定的執行,且能夠同時指出http和https的訪問,對django的部署進行了一些研究,決定採用django + gunicorn + virtualenv +nginx + mysql的方式進行部署,下面是本

Django專案部署()

一、安裝python3 1、安裝前準備 1)centos7的虛擬機器環境 2)環境初始化關閉防火牆systemctl stop firewalld #關閉防火牆iptables -F #清除預設表filter中所有規則鏈中的規則setenforce 0   #系統自帶防火牆也給關了

Django專案部署(nginx+uWSGI+django+virtualenv+supervisor釋出web伺服器 )

一、簡介 WSGI是Web伺服器閘道器介面。它是一個規範,描述了Web伺服器如何與Web應用程式通訊,以及Web應用程式如何連結在一起以處理一個請求,(接收請求,處理請求,響應請求) 基於wsgi執行的框架有bottle,DJango,Flask,用於解析動態HTTP請求 支援WSGI的伺服器

專案部署上線後,運營商管理,商品稽核等後臺流量問題

流量分三種:商家流量,使用者流量,運營商流量 解決方案:這三種流量對系統的執行造成很大的壓力,隨著時間的增長,壓力就會越來越大,因此我們想要減輕系統地訪問壓力,就需要做一系列優化的措施。 具體優化: 資料層面的優化: 從資料庫層面的優化:索引,快取,叢集

django專案部署到伺服器

如何在阿里雲上部署 Django 應用程式 概述與目的 此帖介紹瞭如何(利用 Ubuntu 作業系統)在阿里雲上啟動和部署 Django 應用程式。這兩個流程的詳細步驟說明如下所述:● 使用阿里雲管理控制檯啟動您的第一個 Linux 例項● 在此例項上安裝和部署 Django 應用程式 關

[學習筆記] Python 虛擬環境的安裝以及django專案部署到nginx伺服器

安裝Python虛擬環境 sudo apt install python3-pip python3-dev build-essential sudo pip3 install --upgrade pip sudo pip3 install virtualenv MySQL

django專案上線問題

DEBUG = FalseALLOWED_HOSTS = ['*']1.靜態檔案載入不出來的問題:在settings.py中新增STATIC_ROOT = os.path.join(BASE_DIR,'static')在urls.py中新增from django.views&nb

Django專案部署:Python3+Django2+Nginx+Uwsgi

一.版本說明 系統:Ubuntu16.04(阿里雲) Python:Python3.7 Django:Django2 Nginx:Nginx1.10.3 二.安裝軟體 該操作使用的是root賬號,如果不是root賬號,那麼需要在命令前面加sudo.示例:sud

Linux Django專案部署

步驟 1.資料庫的處理 1.1 上傳bbs.sql 1.2 在mysql中建立bbs庫,並匯入資料庫SQL指令碼 mysql> create database bbs charset utf8mb4; mysql> use bbs mysql> source /opt/b

Django專案部署:Nginx+uWSGI伺服器

         在Django專案的開發中,Django框架集成了開發者的伺服器,但是在實際生產環境中並不能作為網站的伺服器。專案開發完成,需要將它放到伺服器上,這個伺服器有固定的ip,通過域名繫結,瀏覽器在訪問域名時就可以通過DNS解析出對應的伺服器ip地址。伺服器分為

Django專案部署到Apache上

部署環境:本地為win10+python3+Mysql+Django自帶伺服器雲端為阿里雲Ubuntu+python2.7+Mysql+Apache①首先遇到的問題:瀏覽器直接訪問,沒有迴應,瀏覽器無限菊花,很明顯,這是雲伺服器沒有配置好安全組的原因,阿里雲預設的安全組為:裡

將一個Django專案部署到伺服器

環境:Ubuntu 16.04,Python3.5,此處資料庫使用sqlite 步驟: 1.安裝Python3 sudo apt install python3.5 sudo apt update sudo apt instal

django專案部署到apache2繫結域名後開啟域名顯示apache2預設主頁

        要把網站繫結域名需要修改/etc/apache2/sites-available/sitename.conf檔案,將ServerName改為你的域名(如:www.yourdomain.com)。再把Django工程下的seeting.py檔案,將其ALLO

django專案部署到Linux

1. 下載apache原始碼[[email protected] ~]# tar -zxvf httpd-2.4.33.tar.gz [[email protected] httpd-2.4.33]# ./configure --prefix=/usr/