欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python開(kāi)發(fā)之Nginx+uWSGI+virtualenv多項(xiàng)目部署教程

 更新時(shí)間:2019年05月13日 08:42:09   作者:門牙  
這篇文章主要介紹了Python系列之-Nginx+uWSGI+virtualenv多項(xiàng)目部署教程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

1、新建獨(dú)立運(yùn)行環(huán)境,命名為env

[root@vultr ~]# mkdir projects # 測(cè)試的項(xiàng)目總目錄
[root@vultr ~]# pip3 install virtualenv
[root@vultr ~]# cd projects
[root@vultr projects]# virtualenv env --python=python3 --no-site-packages
--python:指定Python版本
--no-site-packages:不復(fù)制系統(tǒng)已安裝Python包

2、激活虛擬環(huán)境

[root@vultr projects]# source env/bin/activate

執(zhí)行后命令提示符前面會(huì)出現(xiàn)一個(gè)env,變成(env)[root@vultr opt]#,退出虛擬環(huán)境執(zhí)行deactivate即可。

3、安裝項(xiàng)目依賴:

pip3 install, 在虛擬環(huán)境中安裝的包,不會(huì)對(duì)系統(tǒng)環(huán)境造成影響。

Django項(xiàng)目配置

1、上傳Django項(xiàng)目: Hello項(xiàng)目

目錄結(jié)構(gòu):

Hello/
 apps/
 Hello/
 manage.py

2、配置項(xiàng)目的數(shù)據(jù)庫(kù)信息:vi Hello/Hello/settings.py

如果是遠(yuǎn)程服務(wù)器,需要修改setting.py文件中的ALLOWED_HOSTS:

ALLOWED_HOSTS = ['*']

3、數(shù)據(jù)遷移

(env)[root@vultr Hello]# python3 manage.py makemigrations
(env)[root@vultr Hello]# python3 manage.py migrate

4、收集靜態(tài)文件:vi Hello/Hello/settings.py

STATIC_ROOT = os.path.join(BASE_DIR, "static")

:wq保存后,執(zhí)行

(env)[root@vultr Hello]# python3 manage.py collectstatic --noinput

5、用runserver啟動(dòng)項(xiàng)目,看是否正常運(yùn)行

(env)[root@vultr Hello]# python3 manage.py runserver 0.0.0.0:8088

uWSGI配置

deactivate退出虛擬環(huán)境

1、安裝uWSGI

[root@vultr Hello]# pip3 install uWSGI

2、命令行運(yùn)行測(cè)試

在 項(xiàng)目目錄Hello 下,執(zhí)行以下命令:

[root@vultr Hello]# uwsgi --http ip:端口 --home /root/env/ --file Hello/wsgi.py --static-map=/static=static

--home:指定虛擬環(huán)境的目錄

wsgi.py:Django創(chuàng)建項(xiàng)目時(shí)生成的文件

如果訪問(wèn)URL正常,說(shuō)明Python虛擬環(huán)境和uWSGI沒(méi)有問(wèn)題.

3、使用ini配置文件來(lái)啟動(dòng)uWSGI

我習(xí)慣性創(chuàng)建projects目錄,目錄結(jié)構(gòu)如下:

/root/projects/
   script/  --> 存放uWSGI相關(guān)的文件,例如uwsgi.ini, uwsgi.pid...
   Hello/ --> 項(xiàng)目目錄
     apps/ --> 應(yīng)用程序目錄
     Hello/ --> settings.py等文件所在目錄
     static/
   env/ --> 虛擬環(huán)境目錄

[root@vultr projects]# vi script/uwsgi.ini

[uwsgi]
# 項(xiàng)目目錄
chdir=/root/projects/Hello/
# 虛擬環(huán)境目錄
home=/root/projects/env/
# 啟動(dòng)uwsgi的用戶名和用戶組
uid=root
gid=root
# 指定項(xiàng)目的application
module=Hello.wsgi:application
# 指定sock的文件路徑
socket=/root/projects/script/uwsgi.sock
# 啟用主進(jìn)程
master=true
# 進(jìn)程個(gè)數(shù)
workers=5
pidfile=/root/projects/script/uwsgi.pid
# 自動(dòng)移除unix Socket和pid文件當(dāng)服務(wù)停止的時(shí)候
vacuum=true
# 序列化接受的內(nèi)容,如果可能的話
thunder-lock=true
# 啟用線程
enable-threads=true
# 設(shè)置自中斷時(shí)間
harakiri=30
# 設(shè)置緩沖
post-buffering=4096
# 設(shè)置日志目錄
daemonize=/root/projects/script/uwsgi.log

4、后臺(tái)啟動(dòng)停止uWSGI的命令

[root@vultr projects]# uwsgi --ini script/uwsgi.ini # 啟動(dòng)
[root@vultr projects]# uwsgi --stop script/uwsgi.pid # 停止

Nginx配置

1、 配置yum:

[root@vultr projects]# vi /etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
# 下面這行centos根據(jù)你自己的操作系統(tǒng)修改比如:OS/rehel
# 6是你Linux系統(tǒng)的版本,可以通過(guò)URL查看路徑是否正確
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1

2、 安裝: yum -y install nginx

3、添加配置文件

[root@vultr projects]# vi /etc/nginx/conf.d/Hello.conf  # 名字是隨便起的,建議跟項(xiàng)目目錄一樣

server {
 listen 84; # 端口
 server_name 10.129.205.183 ; # 域名
 access_log /var/log/nginx/access.log main;
 charset utf-8;
 gzip on;
 gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream;
 
 error_page 404   /404.html;
 error_page 500 502 503 504 /50x.html;
 # 指定項(xiàng)目路徑uwsgi
 location / {
  include uwsgi_params; # 加載nginx和uwsgi的通信協(xié)議模塊
  uwsgi_connect_timeout 30; # 超時(shí)時(shí)間
  uwsgi_pass unix:/root/projects/script/uwsgi.sock;
 }
 # 指定靜態(tài)文件路徑
 location /static/ {
 alias /root/projects/Hello/static/;
 index index.html index.htm;
 }
}

4、啟動(dòng)與停止Nginx

檢查uWSGI是否啟動(dòng)了

[root@vultr projects]# ps -ef | grep uwsgi
root  2299  1 0 06:22 ?  00:00:00 uwsgi --ini script/uwsgi.ini
root  2301 2299 0 06:22 ?  00:00:00 uwsgi --ini script/uwsgi.ini
root  2302 2299 0 06:22 ?  00:00:00 uwsgi --ini script/uwsgi.ini
root  2303 2299 0 06:22 ?  00:00:00 uwsgi --ini script/uwsgi.ini
root  2304 2299 0 06:22 ?  00:00:00 uwsgi --ini script/uwsgi.ini
root  2305 2299 0 06:22 ?  00:00:00 uwsgi --ini script/uwsgi.ini
root  2306 2299 0 06:22 ?  00:00:00 uwsgi --ini script/uwsgi.ini
root  2361 2016 0 06:32 pts/1 00:00:00 grep uwsgi

啟動(dòng)Nginx

[root@vultr projects]# /etc/init.d/nginx start

訪問(wèn)URL,見(jiàn)證奇跡的時(shí)刻到了,然后...

ok,報(bào)錯(cuò)了,莫慌。度娘查了502是服務(wù)器錯(cuò)誤,然而前面測(cè)試了Django+uWSGI沒(méi)問(wèn)題,所以最有可能是在Nginx出錯(cuò)了。

來(lái),我們查看一下Nginx的錯(cuò)誤日志文件,日志文件在哪呢???

[root@vultr projects]# find / -name nginx.conf
/etc/nginx/nginx.conf
[root@vultr projects]# vi /etc/nginx/nginx.conf

error_log參數(shù)就是錯(cuò)誤日志文件了,讓我們?cè)俅蜷_(kāi)error.log文件,找到最后一條記錄:

2019/05/12 06:41:43 [crit] 1514#1514: *2 connect() to unix:/root/projects/script/uwsgi.sock failed (13: Permission denied) while connecting to upstream, ...(后面省略)

從 failed (13: Permission denied) while connecting to upstream 可以看出是沒(méi)有權(quán)限???原因是我貪圖方便, 直接把項(xiàng)目文件以及uWSGI文件放在了/root/目錄下 !!!

好,修改路徑,先停止Nginx和uWSGI,再修改路徑/root/projects/更改為/opt/projects/:

[root@vultr projects]# uwsgi --stop script/uwsgi.pid 
[root@vultr projects]# /etc/init.d/nginx stop
停止 nginx:            [確定]
[root@vultr projects]# cd ..
[root@vultr ~]# mv projects /opt/
[root@vultr ~]# cd /opt/projects/

然后將script/uwsgi.ini和/etc/nginx/conf.d/Hello.conf中關(guān)于路徑的都修改過(guò)來(lái),修改好后,再次啟動(dòng)uWSGI和Nginx:

[root@vultr projects]# uwsgi --ini script/uwsgi.ini 
[uWSGI] getting INI configuration from script/uwsgi.ini
[root@vultr projects]# /etc/init.d/nginx start

正在啟動(dòng) nginx:                                           [確定]

再次訪問(wèn)URL, 訪問(wèn)正常。

多項(xiàng)目部署

利用virtualenv可以在服務(wù)器上配置多個(gè)Python運(yùn)行環(huán)境,因此根據(jù)Nginx、uWSGI、virtualenv可以實(shí)現(xiàn)一個(gè)服務(wù)器上運(yùn)行多個(gè)項(xiàng)目,且互不干擾。

首先我們先來(lái)了解一下Nginx+uWSGI通信原理。


請(qǐng)求首先交給Nginx,如果是靜態(tài)內(nèi)容Nginx就直接處理了,如果是動(dòng)態(tài)內(nèi)容就將請(qǐng)求交給uWSGI服務(wù)器,Nginx和uWSGI之間是通過(guò)Socket來(lái)通信的,通信協(xié)議就是/etc/nginx/conf.d/Hello.conf里配置的uwsgi_params文件。

那么,現(xiàn)在我們來(lái)梳理一下,Nginx是怎么知道uWSGI在哪里?通過(guò)什么和uWSGI做Socket通信,回看/etc/nginx/conf.d/Hello.conf文件:


原來(lái)是根據(jù)uwsgi_pass指定了Nginx與uWSGI通信的Socket文件路徑,看到這,就知道好辦了,一個(gè)項(xiàng)目配置一個(gè)uwsgi.ini文件和nginx.conf里的一個(gè)server,那既然需要部署多個(gè)項(xiàng)目,那就是多個(gè)uwsgi.ini和nginx.conf里的多個(gè)server。

好的,我們開(kāi)始測(cè)試:

1、配置虛擬環(huán)境以及測(cè)試用runserver運(yùn)行Django項(xiàng)目是否正常。 我的目錄結(jié)構(gòu)是:

opt/
 projects/
  Hello/ --> 第一個(gè)Django項(xiàng)目
  env/  --> 第一個(gè)Django項(xiàng)目的虛擬環(huán)境
  World/ --> 第二個(gè)Django項(xiàng)目
  env_1/ --> 第二個(gè)Django項(xiàng)目的虛擬環(huán)境
  script/ --> uwsig.ini等文件存放

2、配置World項(xiàng)目的uwsgi_world.ini文件

[root@vultr projects]# vi script/uwsgi_w.ini

[uwsgi]
# 項(xiàng)目目錄
chdir=/opt/projects/World/
# 虛擬環(huán)境目錄
home=/opt/projects/env_1/
# 啟動(dòng)uwsgi的用戶名和用戶組
uid=root
gid=root
# 指定項(xiàng)目的application
module=World.wsgi:application
# 指定sock的文件路徑
socket=/opt/projects/script/uwsgi_w.sock
# 啟用主進(jìn)程
master=true
# 進(jìn)程個(gè)數(shù)
workers=5
pidfile=/opt/projects/script/uwsgi_w.pid
# 自動(dòng)移除unix Socket和pid文件當(dāng)服務(wù)停止的時(shí)候
vacuum=true
# 序列化接受的內(nèi)容,如果可能的話
thunder-lock=true
# 啟用線程
enable-threads=true
# 設(shè)置自中斷時(shí)間
harakiri=30
# 設(shè)置緩沖
post-buffering=4096
# 設(shè)置日志目錄
daemonize=/opt/projects/script/uwsgi_w.log

3、配置Nginx

# 可以分開(kāi)多個(gè)配置文件,這里我放在同一個(gè)配置文件里
[root@vultr projects]# vi /etc/nginx/conf.d/Hello.conf

server {
 listen 84; # 端口,請(qǐng)注意端口
 server_name 10.129.205.183 ; # 域名
 access_log /var/log/nginx/access.log main;
 charset utf-8;
 gzip on;
 gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream;

 error_page 404   /404.html;
 error_page 500 502 503 504 /50x.html;
 # 指定項(xiàng)目路徑uwsgi
 location / {
  include uwsgi_params; # 加載nginx和uwsgi的通信協(xié)議模塊
  uwsgi_connect_timeout 30; # 超時(shí)時(shí)間
  uwsgi_pass unix:/opt/projects/script/uwsgi.sock;
 }
 # 指定靜態(tài)文件路徑
 location /static/ {
 alias /opt/projects/Hello/static/;
 index index.html index.htm;
 }
}

server {
 listen 86; # 端口,請(qǐng)注意端口
 server_name 10.129.205.183 ; # 域名
 access_log /var/log/nginx/access.log main;
 charset utf-8;
 gzip on;
 gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream;

 error_page 404   /404.html;
 error_page 500 502 503 504 /50x.html;
 # 指定項(xiàng)目路徑uwsgi
 location / {
  include uwsgi_params; # 加載nginx和uwsgi的通信協(xié)議模塊
  uwsgi_connect_timeout 30; # 超時(shí)時(shí)間
  uwsgi_pass unix:/opt/projects/script/uwsgi_w.sock;
 }
 # 指定靜態(tài)文件路徑
 location /static/ {
 alias /opt/projects/World/static/;
 index index.html index.htm;
 }
}

4、啟動(dòng)uWSGI和Nginx,訪問(wèn)兩個(gè)端口的URL。 ok,訪問(wèn)正常。

總結(jié)

以上所述是小編給大家介紹的Python開(kāi)發(fā)之Nginx+uWSGI+virtualenv多項(xiàng)目部署教程,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • Python如何將兩個(gè)三維模型(obj)合成一個(gè)三維模型(obj)

    Python如何將兩個(gè)三維模型(obj)合成一個(gè)三維模型(obj)

    這篇文章主要介紹了Python如何將兩個(gè)三維模型(obj)合成一個(gè)三維模型(obj)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Python數(shù)據(jù)類型探索列表魔法世界

    Python數(shù)據(jù)類型探索列表魔法世界

    這篇文章主要為大家介紹了Python數(shù)據(jù)類型探索列表魔法世界,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Python利用prettytable實(shí)現(xiàn)格式化輸出內(nèi)容

    Python利用prettytable實(shí)現(xiàn)格式化輸出內(nèi)容

    Python有一個(gè)第三方模塊叫?prettytable,專門用來(lái)將數(shù)據(jù)格式輸出。本文將通過(guò)示例為大家詳細(xì)講講prettytable的用法,感興趣的可以了解一下
    2022-07-07
  • Python如何在列表尾部添加元素

    Python如何在列表尾部添加元素

    這篇文章主要介紹了Python如何在列表尾部添加元素,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python 2.x如何設(shè)置命令執(zhí)行的超時(shí)時(shí)間實(shí)例

    Python 2.x如何設(shè)置命令執(zhí)行的超時(shí)時(shí)間實(shí)例

    這篇文章主要給大家介紹了關(guān)于Python 2.x如何設(shè)置命令執(zhí)行超時(shí)時(shí)間的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-10-10
  • 解決Django中checkbox復(fù)選框的傳值問(wèn)題

    解決Django中checkbox復(fù)選框的傳值問(wèn)題

    這篇文章主要介紹了解決Django中checkbox復(fù)選框的傳值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • 利用Python寫一場(chǎng)新年煙花秀

    利用Python寫一場(chǎng)新年煙花秀

    這篇文章主要介紹了利用Python寫一場(chǎng)新年煙花秀,可以送給朋友還可以當(dāng)作練習(xí),Python 模塊包括:tkinter、PIL、time、random、math,下面來(lái)看一下代碼實(shí)現(xiàn),需要的朋友可以參考一下
    2022-01-01
  • Python?設(shè)計(jì)模式中命令模式

    Python?設(shè)計(jì)模式中命令模式

    這篇文章主要介紹了Python?設(shè)計(jì)模式中的命令模式,命令模式的目的是解耦調(diào)用操作的對(duì)象和提供實(shí)現(xiàn)的對(duì)象,下文介紹具有一定參考價(jià)值,需要的小伙伴可以參考一下
    2022-02-02
  • Python用for循環(huán)實(shí)現(xiàn)九九乘法表

    Python用for循環(huán)實(shí)現(xiàn)九九乘法表

    本文通過(guò)實(shí)例代碼給大家介紹了Python用for循環(huán)實(shí)現(xiàn)九九乘法表的方法,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2018-05-05
  • Django與AJAX實(shí)現(xiàn)網(wǎng)頁(yè)動(dòng)態(tài)數(shù)據(jù)顯示的示例代碼

    Django與AJAX實(shí)現(xiàn)網(wǎng)頁(yè)動(dòng)態(tài)數(shù)據(jù)顯示的示例代碼

    這篇文章主要介紹了Django與AJAX實(shí)現(xiàn)網(wǎng)頁(yè)動(dòng)態(tài)數(shù)據(jù)顯示的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02

最新評(píng)論