Django項目在linux系統中虛擬環境部署


Django項目在linux系統中虛擬環境部署

1.在linux系統下,安裝virtualenv

命令:pip install virtualenv

2.項目部署前的准備

 

 

1. Django web project deployment

1.1. 項目准備

准備打包好項目組開發的web項目,通過FTP上傳到指定的linux/unix服務器

案例項目:mysite/

1.2. 生產環境准備

Django生產環境服務器,常規情況下使用Linux/Unix平台作為服務器平台,需要准備如下運行環境

l 環境:python2.x / python3.x

l 軟件:mysql-server、mysql-client

l 模塊:pymysql、pillow、django、uwsgi

1.3. 項目部署【UWSGI部署】



在指定的文件夾中上傳項目文件

使用FTP連接linux系統,一般情況下建議使用非root賬號和密碼進行連接。

上傳文件之前可以使用pip freeze  > 文件名,在原來的項目環境中進入項目搜集第三方模塊,並保存在自定義文件中,將該文件創建於項目內部,一起上傳如linux系統。

(1) 在生產環境打開mysql-client命令行,執行項目sql腳本語句,初始化數據庫

(2) 在項目根目錄中,添加uwsgi.ini配置文件,添加如下內容

[uwsgi]

# 指定服務器部署IP地址和端口

http=192.168.10.120:8000

# 配置項目在當前服務器中的絕對路徑

chdir=/home/worker/django_pro_1_11/mysite

# 相對路徑指定當前項目中wsgi.py

wsgi-file=mysite/wsgi.py

# 設置啟動的進程數量

processes=4

# 設置每個進程啟動的線程數量

threads=2

# 設置主進程

master=True

# 指定保存主進程編號的文件

pidfile=uwsgi.pid

# 指定守護進程的日志存儲

daemonize=uwsgi.log

 

(3) 項目運行

啟動項目,當前路徑中,直接運行命令啟動項目

uwsgi --ini uwsgi.ini

 

停止項目,通過包含主進程編號的文件設置停止項目

uwsgi --stop uwsgi.pid

 

重啟項目

uwsgi --reload uwsgi.pid

 

1.4. 項目部署【UWSGI + NGINX】

通過UWSGI服務器部署Django項目,通過nginx進行反向代理

(1) 項目根目錄創建uwsgi.ini配置文件

[uwsgi]

# 配置和nginx反向代理之間的連接地址

socket=localhost:8000

# 配置項目根路徑

chdir=/home/worker/django_pro_1_11/mysite

# 相對路徑指定當前項目中wsgi.py

wsgi-file=mysite/wsgi.py

# 設置啟動的進程數量

processes=4

# 設置每個進程啟動的線程數量

threads=2

# 設置主進程

master=True

# 指定保存主進程編號的文件

pidfile=uwsgi.pid

# 指定守護進程的日志存儲

daemonize=uwsgi.log

 

(2) 編輯nginx.conf配置文件,設置反向代理

nginx和uwsgi進行配合使用時,nginx主要有兩個作用,使用nginx作為靜態文件服務器和反向代理服務器

l 設置靜態文件

打開django項目的配置文件,添加STATIC_ROOT配置

編輯mysite/mysite/settings.py

..

STATIC_ROOT=/home/worker/django_pro_1_11/myweb/static_file/

..

 

進入Django項目根目錄執行命令收集靜態文件

>>> python manage.py collectstatic

 

l 反向代理配置

編輯/etc/nginx/nginx.conf配置文件,編輯server配置選項

核心配置反向代理server服務器和靜態文件別名

..

events {

       ...

}

..

http {

        ..

        server {

            listen 80;

            server_name 192.168.10.120;

            # 反向代理配置

            location / {

                include uwsgi_params;

                uwsgi_pass 127.0.0.1:8000;

            }

            # 靜態文件路徑配置

            location /static {

                alias /home/worker/django_pro_1_11/myweb/static_file/;

            }

        }

        ..

}

 

(3) 啟動項目進行測試

l 首先進入項目目錄,啟動Django項目

>>> uwsgi --ini uwsgi.ini

 

l 啟動nginx服務器

>>> nginx

 

l 檢查進程啟動情況

>>> ps -ef|grep wsgi

..

>>> ps -ef|grep nginx

..

 

l 測試訪問項目

TEST

1.5. 項目分布式部署【UWSGI + NGINX】

使用UWSGI配置Django項目的多進程部署,使用nginx進行靜態文件的部署和負載均衡的配置

(1) 在多台主機上部署多個相同的django項目【同一台主機上部署多個項目進行模擬】

設置兩個或者多個Django項目的啟動配置信息如下

mysite/uwsgi.ini

[uwsgi]

# 配置項目訪問地址

http=localhost:8000

# 配置項目根路徑

chdir=/home/worker/django_pro_1_11/mysite

# 相對路徑指定當前項目中wsgi.py

wsgi-file=mysite/wsgi.py

# 設置啟動的進程數量

processes=4

# 設置每個進程啟動的線程數量

threads=2

# 設置主進程

master=True

# 指定保存主進程編號的文件

pidfile=uwsgi.pid

# 指定守護進程的日志存儲

daemonize=uwsgi.log

 

mysite2/uwsgi.ini

[uwsgi]

# 配置項目訪問地址

http=localhost:9000

# 配置項目根路徑

chdir=/home/worker/django_pro_1_11/mysite2

# 相對路徑指定當前項目中wsgi.py

wsgi-file=mysite/wsgi.py

# 設置啟動的進程數量

processes=4

# 設置每個進程啟動的線程數量

threads=2

# 設置主進程

master=True

# 指定保存主進程編號的文件

pidfile=uwsgi.pid

# 指定守護進程的日志存儲

daemonize=uwsgi.log

 

(2) 配置nginx靜態服務器映射和負載均衡

.. ..

# 使用默認的輪詢分發配置多個分布的服務主機

upstream myweb {

            server 127.0.0.1:8000;

            server 127.0.0.1:9000;

        }

        server {

            listen 80;

            server_name 192.168.10.120;

            # 配置分布式負載轉發

            location / {

                proxy_pass http://myweb;

            }

            # 配置靜態文件服務器

            location /static {

                alias /home/worker/django_pro_1_11/myweb/static_file/;

            }

        .. ..

 

(3) 測試訪問項目

TEST

2. Tornado web project deployment

2.1. 項目准備

參考Django 1.1部分

2.2. 項目常規部署【使用自帶服務器直接操作】

直接通過配置文件或者命令行指定端口運行程序,就可以使用torando自帶的web服務器啟動web項目並提供正常的web服務了

 

但是這樣的操作方式並不是可取的,命令行需要處理讓啟動的程序后台運行,並且如果部署多進程項目的話,多個進程之間沒有進行統一管理的操作,很不方便后期的維護操作

 

直接運行【阻塞方式】

>>> python demo.py --port=8000

 

后台運行【非阻塞方式】

>>> python demo.py --port=8000 &

 

2.3. supervisor管理進程

針對tornado多進程部署方式,第三方提供了各種進程管理模塊用於進行tornado項目多個進程的維護管理,項目中常用的如supervisor、circus等等

 

(1) ubuntu中安裝supervisor

$ sudo apt-get install supervisor

備注:可以使用pip install supervisor安裝

 

安裝完成后,生成supervisor配置文件

$ cd /etc/supervisor

$ echo_supervisord_conf > supervisord.conf

 

修改配置文件/etc/supervisor/supervisord.conf

..

[include]

files=./conf.d/*.conf

 

(2) 添加tornado管理配置文件/etc/supervisor/conf.d/tornadoes.conf

[group:td]

programs=tornado-8000, tornado-8001

[program:tornado-8000]

command=/home/worker/tornado_web/tornado_lib/bin/python /home/worker/tornado_web/web1/demo01.py --port=8000

directory=/home/worker/tornado_web/web1

user=www-data

autorestart=true

redirect_stderr=true

stdout_logfile=/home/worker/tornado_web/web1/log/tornado.log

loglevel=debug

[program:tornado-8001]

command=/home/worker/tornado_web/tornado_lib/bin/python /home/worker/tornado_web/web1/demo01.py --port=8001

directory=/home/worker/tornado_web/web1

user=www-data

autorestart=true

redirect_stderr=true

stdout_logfile=/home/worker/tornado_web/web1/log/tornado.log

loglevel=info

 

(3) 進程管理

啟動進程管理器

$ supervisord -c supervisord.conf

 

進程管理器包含進程狀態管理

supervisorctl status   # 查看管理的所有進程的狀態

supervisorctl update   # 重新啟動配置文件修改的程序

supervisorctl stop td:* # 停止所有進程[可以指定進程]

supervisorctl start td:* # 啟用所有進程[可以指定進程]

supervisorctl restart td:* # 重啟所有進程進程[可以指定進程]

 

2.4. supervisor+nginx分布式部署

參考Django項目部署1.5章節nginx部署部分

3. Flask web project deployment

模仿Django和Tornado的項目部署方式

 

參考

http://docs.jinkan.org/docs/flask/deploying/index.html#deployment


 

 

 

3.在指定的文件夾中上傳項目文件

使用FTP連接linux系統,一般情況下建議使用非root賬號和密碼進行連接。

上傳文件之前可以使用pip freeze  > 文件名,在原來的項目環境中進入項目搜集第三方模塊,並保存在自定義文件中,將該文件創建於項目內部,一起上傳如linux系統。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM