91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何部署Django uwsgi Nginx的生產環境

發布時間:2021-08-21 11:13:07 來源:億速云 閱讀:143 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關如何部署Django uwsgi Nginx的生產環境,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

配置生產環境

#setting.py 文件中

DEBUG = False  # 生產環境

# 允許訪問的域名,域名前加一個點表示允許訪問該域名下的子域名,比如 www.zmrenwu.com、
# test.zmrenwu.com 等二級域名同樣允許訪問。如果不加前面的點則只允許訪問 zmrenwu.com
ALLOWED_HOSTS = ["127.0.0.1",".blogzjl.site"]

創建Python虛擬環境

安裝 virtualenv

sudo pip3 install virtualenv

克隆Python的環境

#先到指定目錄下運行, 我的虛擬環境是在 blogzjl.site 目錄下
#指定--python=python3 克隆Python3的環境
virtualenv --python=python3 env

#進入虛擬環境
source /home/zjl/sites/blogzjl.site/env/bin/activate
#用戶名前,會出現 (env) zjl@ ,表示進入
#后面基本上都是在虛擬環境中完成的

收集靜態文件

先在settings中配置 STATIC_ROOT = os.path.join(BASE_DIR, 'static')

同時在mysite_nginx.conf 中將靜態文件的路徑改為 static 的絕對路徑

#在settings中配置

# STATIC_ROOT 指明了靜態文件的收集目錄,即項目根目錄(BASE_DIR)下的 static 文件夾
STATIC_ROOT = os.path.join(BASE_DIR, 'static')


#在命令行輸入
python3 manage.py collectstatic #將靜態文件copy到統一的目錄static下

uwsgi配置

安裝 uwsgi

pip3 install uwsgi

#可能需要更新pip才能安裝,根據提示輸入命令更新
pip install --upgrade pip

測試 uwsgi

在項目目錄下執行

uwsgi --http 127.0.0.1:8080 --file BlogProject/wsgi.py --static-map=/static=static
#--http 這個就和runserver一樣指定IP 端口
#--file Django 項目中wsgi.py文件的路徑,和setting.py在同一個目錄下
#-- static 做一個映射,指定靜態文件

#可能會啟動/訪問失敗,請檢查端口是否占用,file 或 static 路徑是否正確
#使用命令 netstat -nultp 查看端口使用情況
#關掉相關經常 killall -9 uwsgi 或 kill -9 進程號

執行Linux命令 curl http://127.0.0.1:8080 訪問,查看是否是訪問成功后的頁面(可以啟動DEBUG 對錯誤頁面的相關調試)

配置文件

相當于將 uwsgi --http 127.0.0.1:8080 --file BlogProject/wsgi.py --static-map=/static=static 這一長串命令配置到文件里,簡化以后的啟動命令

在自定義目錄或項目主目錄下創建uwsgi配置文件:blogzjl_uwsgi.ini(自定義命名,以 .ini 結束),我這里是在/home/zjl/sites/blogzjl.site/blogzjl/

路徑下自定義的一個目錄 script 存放所有配置(包括nginx)相關的文件

[uwsgi]
#the local unix socket file than commnuincate to Nginx

socket = /home/zjl/sites/blogzjl.site/blogzjl/script/uwsgi.sock

# 項目路徑
chdir = /home/zjl/sites/blogzjl.site/blogzjl/BlogProject/

# Django's wsgi file 項目中wsgi的位置
wsgi-file = BlogProject/wsgi.py


#進程相關設置
# 進程數 同 processes
worker = 5
#processes = 4
#線程數
#threads = 2

#指定靜態文件
static-map = /static=/home/zjl/sites/blogzjl.site/blogzjl/BlogProject/static

#主進程啟動
master = true

pidfile = /home/zjl/sites/blogzjl.site/blogzjl/script/uwsgi.pid

#static-map = /static = /home/zjl/sites/blogzjl.site/blogzjl/BlogProject/static

#啟動uwsgi的用戶名和用戶組
uid = zjl
gid = zjl

#啟用線程
enable-threads = True
#設置自中斷時間
harakir = 30

#設置緩沖
post-buffering = 4096

#設置后臺運行
daemonize = /home/zjl/sites/blogzjl.site/blogzjl/script/uwsgi.log

#monitor uwsgi status
#stats = 127.0.0.1:9191
# clear environment on exit 退出時清除環境
vacuum     = true

uwsgi 執行的相關命令

#啟動命令
#在項目目錄下
uwsgi --ini ../script/blogzjl-uwsgi.ini
#停止
uwsgi --stop ../script/uwsgi.pid
#重啟
uwsgi -- reload ../script/uwsgi.pid

#uwsgi.pid 為 配置文件中 pidfile 設置的值 ,用來控制uwsgi重啟或停止,

uwsgi 相關配置文件參數

master = true 
#啟動主進程,來管理其他進程,其它的uwsgi進程都是這個master進程的子進程,如果kill這個master進程,相當于重啟所有的uwsgi進程。

chdir = /web/www/mysite 
#在app加載前切換到當前目錄, 指定運行目錄

module = mysite.wsgi 
# 加載一個WSGI模塊,這里加載mysite/wsgi.py這個模塊

py-autoreload=1 
#監控python模塊mtime來觸發重載 (只在開發時使用)

lazy-apps=true 
#在每個worker而不是master中加載應用

socket = /test/myapp.sock 
#指定socket文件,也可以指定為127.0.0.1:9000,這樣就會監聽到網絡套接字

processes = 2 #啟動2個工作進程,生成指定數目的worker/進程

buffer-size = 32768 
#設置用于uwsgi包解析的內部緩存區大小為64k。默認是4k。

daemonize = /var/log/myapp_uwsgi.log 
# 使進程在后臺運行,并將日志打到指定的日志文件或者udp服務器

log-maxsize = 5000000 #設置最大日志文件大小

disable-logging = true #禁用請求日志記錄

vacuum = true #當服務器退出的時候自動刪除unix socket文件和pid文件。

listen = 120 #設置socket的監聽隊列大小(默認:100)

pidfile = /var/run/uwsgi.pid #指定pid文件

enable-threads = true 
#允許用內嵌的語言啟動線程。這將允許你在app程序中產生一個子線程

reload-mercy = 8 
#設置在平滑的重啟(直到接收到的請求處理完才重啟)一個工作子進程中,等待這個工作結束的最長秒數。這個配置會使在平滑地重啟工作子進程中,如果工作進程結束時間超過了8秒就會被強行結束(忽略之前已經接收到的請求而直接結束)

max-requests = 5000 
#為每個工作進程設置請求數的上限。當一個工作進程處理的請求數達到這個值,那么該工作進程就會被回收重用(重啟)。你可以使用這個選項來默默地對抗內存泄漏

limit-as = 256 
#通過使用POSIX/UNIX的setrlimit()函數來限制每個uWSGI進程的虛擬內存使用數。這個配置會限制uWSGI的進程占用虛擬內存不超過256M。如果虛擬內存已經達到256M,并繼續申請虛擬內存則會使程序報內存錯誤,本次的http請求將返回500錯誤。

harakiri = 60 
#一個請求花費的時間超過了這個harakiri超時時間,那么這個請求都會被丟棄,并且當前處理這個請求的工作進程會被回收再利用(即重啟)

nginx配置

安裝nginx

#安裝nginx
sudo apt install nginx

#測試是否安裝成功
sudo /etc/init.d/nginx start
#訪問域名或地址,出現歡迎界面


#重啟
sudo /etc/init.d/nginx restart

#重載
sudo /etc/init.d/nginx reload

#停止
sudo /etc/init.d/nginx stop

配置文件

在在前面自定義的 script 目錄下創建blogzjl_nginx.conf(文件名以nginx結尾),同時做一個軟連接,把此文件生成一個快捷方式到/etc/nginx/site-enabled/目錄下

#nginx ifconfig_file
server {
  # 監聽端口
  listen   80;

  # 服務器的域名 或ip
  server_name .blogzjl.site; # substitute your machine's IP address or FQDN
  charset   utf-8;

  #存放日志文件
  access_log /var/log/nginx/blogzjl_access.log;
  #error_log /var/log/nginx/blogzjl_error.log error;
  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; # 支持壓縮的類型
  # 最大上傳
  client_max_body_size 75M;  


  # Django 媒體相關文件
  # location /media {
  #   alias /; # your Django project's media files - amend as required
  # }
  
  #Django 靜態相關文件 
  location /static/ {
    alias /home/zjl/sites/blogzjl.site/blogzjl/BlogProject/static/; # your Django project's static files - amend as required
    #index index.html index.htm;
    expires 30d;
  }

  # 所有非媒體、靜態相關通過uwsgi 交給Django服務器 處理
  location / {
    include  uwsgi_params; # the uwsgi_params file you installed
    uwsgi_read_timeout 60;
    uwsgi_send_timeout 60;
    uwsgi_pass unix:/home/zjl/sites/blogzjl.site/blogzjl/script/uwsgi.sock;
  }
}

創建軟連接

ln -s /home/zjl/sites/blogzjl.site/blogzjl/script/blogzjl_nginx.conf /etc/nginx/site-enabled
# ln -s 源文件絕對 目標文件絕對路徑
#到 /etc/nginx/site-enabled/ 目錄下將 default 文件刪除防止其覆蓋 blogzjl_nginx.conf 中的配置

啟動 nginx 和 uwsgi

在啟動前最好查看端口號,將相關進程關掉

#查看端口
netstat -nultp

#關掉相關進程,最好關徹底,相關端口被占用的都關掉,或自行換一個端口
killall -9 uwsgi 
killall -9 nginx

#對于還沒有關掉的
kill -9 進程號

最后啟動 uwsgi 和 nginx

#在項目目錄下執行
#啟動uwsgi
uwsgi --ini ../script/blogzjl-uwsgi.ini

#啟動nginx
/etc/init.d/nginx start

關于“如何部署Django uwsgi Nginx的生產環境”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

隆子县| 永新县| 凤阳县| 都江堰市| 玉树县| 泰州市| 阿图什市| 玉田县| 格尔木市| 武山县| 南雄市| 泰安市| 鄂托克旗| 屏边| 沂南县| 和政县| 封丘县| 铜川市| 奉化市| 漳浦县| 桑植县| 东兰县| 大关县| 富川| 朝阳区| 上饶市| 安阳县| 三门峡市| 进贤县| 永泰县| 浑源县| 大安市| 闵行区| 乌拉特中旗| 河北省| 昌江| 龙山县| 镇赉县| 饶阳县| 凭祥市| 阿城市|