網站首頁 編程語言 正文
centos7 服務器配置uWSGI+Nginx+Django
本篇文章參考uWSGI官網Setting up Django and your web server with uWSGI and nginx英語不錯的的小伙伴可以自行閱讀
1. 配置環境
-
創建虛擬環境
conda create -n django-env python=3.6 # 創建名為django-env,python版本為3.6的虛擬環境 conda activate django-env # 進入虛擬環境
-
下載Django
conda install django # 下載django
-
下載uwsgi
pip install uwsgi # 下載uwsgi (conda 下不了)
2. the web client <-> uWSGI <-> python
-
創建test.py文件
vi test.py i(進入編輯) # test.py def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return [b"Hello World"] # python3 #return ["Hello World"] # python2 esc(退出編輯) :wq!(保存并強制退出(!強制 w保持 q退出)) # 提示:cmd退出正在運行的項目Ctrl + c
-
運行uwsgi
uwsgi --http :8000 --wsgi-file test.py
配置項解釋:
-
--http :8000
:使用http協議連接,連接端口為8000 -
--wsgi-file
:加載指定的文件
注意:
-
如果你是遠程服務器運行,訪問地址:http://ip:8000,訪問不了看看防火墻有沒有開放指定端口
-
防火墻開發指定端口
firewall-cmd --zone=public --add-port=8000/tcp --permanent # --add-port=要開放的端口號 firewall-cmd --relo # 防火墻重新加載
-
-
如果你是本機訪問,訪問地址:http://loaclhost:8000
如果在網頁上看到了你看到了
Hello World
恭喜你the web client <-> uWSGI <-> Python
在個流程沒問題了 -
3. the web client <-> uWSGI <-> Django
-
創建Django項目
# 先將uwsgi程序退出 (Ctrl + c) django-admin startproject mysite
-
配置項目
cd mysite/mysite # 進入項目目錄 vi setting.py # 進入配置文件 修改: 1. 數據庫從sqlite3改為mysql DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '數據庫名', # 建議與項目名一致 'USER': '數據庫用戶', 'PASSWORD': '數據庫密碼', 'HOST': '數據庫連接地址', 'PORT': '3306', } } 2. 語言從英語改成中文(可以不改) LANGUAGE_CODE = 'en-us' ---> LANGUAGE_CODE = 'zh-hans' 3. 時間標準從國際協調時間改為亞洲上海時間(可以不改) TIME_ZONE = 'UTC' ---> TIME_ZONE = 'Asia/Shanghai' esc(退出編輯) :wq!(保存并強制退出(!強制 w保持 q退出))
-
創建數據庫
進入mysql: create database 數據庫名 # 切記要和配置文件中的數據庫名一致 退出mysql # 先回到項目目錄下(有manage.py文件) python manage.py migrate
-
runserver 運行Django項目
python manage.py runserver 0.0.0.0:8000 運行django項目
注意:
-
如果你是遠程服務器運行,訪問地址:http://ip:8000,并且網站顯示
Invalid HTTP_HOST header: 'ip:8000'. You may need to add 'ip' to ALLOWED_HOSTS.
提示# 進入setting.py在ALLOWED_HOSTS配置項中加入它提示的ip ALLOWED_HOSTS = [] ---> ALLOWED_HOSTS = ['ip',]
-
如果你是本機訪問,訪問地址:http://loaclhost:8000
如果你看到了Django運行成功的小火箭,就說明沒問題了,加入下一步
-
-
uwsgi運行Django項目
# 先將runserver 啟動的Django程序退出 (Ctrl + c)
uwsgi --http :8000 --module mysite.wsgi
配置項解釋:
? --module
:加載指定的wsgi模塊
接下來你去刷新一下剛才
runserver
時打開的網頁,如果還是小火箭,恭喜你the web client <-> uWSGI <-> Django
這個流程沒問題了
the web client <-> the web server
安裝啟動Nginx
? (看我文章Nginx安裝)
默認配置啟動Nginx后,Nginx監聽80端口
- 如果你是遠程服務器運行,訪問地址:http://ip:80
- 如果你是本機訪問,訪問地址:http://loaclhost:80
如果看到的是Nginx的歡迎頁面, 頁面上有加粗的
Welcome to nginx!
,恭喜你the web client <-> the web server
流程沒有問題
the web client <-> the web server <-> the socket <-> uWSGI <-> Python
配置Nginx和uWSGI需要一個
uwsgi_params
文件,這個文件Nginx自帶在/usr/local/nginx/conf
里面
-
配置Nginx
-
接下來創建一個配置文件
mysite_nginx.conf
:# 官方給的配置文件(我們需要修改一下) # mysite_nginx.conf upstream django { # server unix:///path/to/your/mysite/mysite.sock; server 127.0.0.1:8001; } server { listen 8000; server_name example.com; charset utf-8; client_max_body_size 75M; location /media { alias /path/to/your/mysite/media; } location /static { alias /path/to/your/mysite/static; } location / { uwsgi_pass django; include /path/to/your/mysite/uwsgi_params; } } # 將配置文件中的 /path/to/your/mysite 改為你的項目文件路徑(manage.py上級目錄) /home/python/project/django/mysite # uwsgi_params除外,把這個的 /path/to/your/mysite 修改為 /usr/local/nginx/conf # 將 server_name example.com; 改為 server_name ip地址; # ip地址: 本機localhost或127.0.0.1、服務器:服務器IP upstream django { # server unix:///home/python/project/django/mysite/mysite.sock; server 127.0.0.1:8001; } server { listen 8000; server_name ip地址; charset utf-8; client_max_body_size 75M; location /media { alias /home/python/project/django/mysite/media; } location /static { alias /home/python/project/django/mysite/static; } location / { uwsgi_pass django; include /usr/local/nginx/conf/uwsgi_params; } }
-
在項目目錄下創建文件夾
media
在下面放一張圖片,用于別是否成功連接 -
接下來將配置文件
mysite_nginx.conf
引入Nginx默認配置nginx.conf
# 在nginx.conf末尾加上 include /usr/local/nginx/conf/sites-available/*.conf; # include指令用于從外部文件中引入配置參數 # *.conf 引入該文件夾下的所有以.conf結尾的文件 # "/usr/local/nginx/conf/sites-available/"是我創建配置文件的路徑
-
然后我們重啟Nginx,瀏覽器訪問http://ip:8000/media/圖片名稱.后綴名(
ip
同上)注:訪問如果出現
403 Forbidden
,需要修改Nginx配置文件# user nobody # 改為 media 文件夾的所有用戶,我的是python # 不知道的去media的父級目錄使用命令 ll 查看 user python
修改完畢后重啟Nginx,如果你看到了你的圖片,恭喜你現在nginx沒有問題了
-
-
配置Django
- 配置靜態文件
# 在setting.py文件中加入配置項(建議加在 STATIC_URL 配置項后面) STATIC_ROOT = os.path.join(BASE_DIR, "static/") # 運行 python manage.py collectstatic # 將靜態文件加載到static文件夾中
- 配置靜態文件
-
nginx + uwsgi + test.py
-
還記得一開始的
test.py
嗎,讓我們先用它測試一下# 先進入test.py所在的文件夾 # 運行 uwsgi --socket :8001 --wsgi-file test.py
配置項解釋:
socket :8001
:使用協議 uwsgi,端口 8001如果你看的了
Hello World
,恭喜你,the web client <-> the web server <-> the socket <-> uWSGI <-> Python
流程沒有問題了
-
使用套接字Unix 啟動項目而不是端口
-
修改配置文件
大家記得配置文件
mysite_nginx.conf
有一行注釋server unix:///home/python/project/django/mysite/mysite.sock;
我們去打開它,然后將server 127.0.0.1:8001;
注釋server unix:///home/python/project/django/mysite/mysite.sock; # server 127.0.0.1:8001;
-
重啟nginx
-
再次運行 uWSGI
uwsgi --socket mysite.sock --wsgi-file test.py
如果網頁顯示
502 Bad Gateway
,我們去看一下錯誤如果是看我的Nginx安裝博客的小伙伴,錯誤日志位置/usr/local/nginx/logs
,我們使用cat
命令看一下,錯誤日志cat error.log
,如果你看到了connect() to unix:///home/python/project/django/mysite/mysite.sock failed
首先看一下
unix:///home/python/project/django/mysite/mysite.sock
是否是你test.py
文件所在的地址,如果是那么我們可能需要管理套接字上的權限,以便允許nginx使用它。初始使用一下命令啟動:
uwsgi --socket mysite.sock --wsgi-file test.py --chmod-socket=666
還是不行,嘗試這個
uwsgi --socket mysite.sock --wsgi-file test.py --chmod-socket=664
最后:你看到了
Hello World
,恭喜你成功使用Unix套接字
啟動了python文件
使用uwsgi和nginx運行Django應用程序
-
確認nginx配置文件
mysite_nginx.conf
里unix:mysite.sock地址
是否在項目文件下,不是請更改 -
運行命令啟動項目
uwsgi --socket mysite.sock --module mysite.wsgi --chmod-socket=664
看到小火箭,恭喜你成功了
-
配置uWSGI,使用
.ini
啟動文件-
創建文件
mysite_uwsgi.ini
,文件要創建在項目目錄下和manage.py
同目錄# 官方提供配置文件 # mysite_uwsgi.ini [uwsgi] chdir = /path/to/your/project module = project.wsgi home = /path/to/virtualenv master = true processes = 10 socket = /path/to/your/project/mysite.sock vacuum = true # 將 /path/to/your/project 修改為 項目目錄/path/to/your/project # module project項目名 # home 的值填python環境的目錄 /home/python/miniconda3/envs/django-env [uwsgi] chdir = /home/python/project/django/mysite module = mysite.wsgi home = /home/python/miniconda3/envs/django-env master = true processes = 10 socket = /home/python/project/django/mysite/mysite.sock vacuum = true
-
uwsgi啟動xm
uwsgi --ini mysite_uwsgi.ini
回刷新頁面,如果還是小火箭,就大功告成了
-
提示
官網文檔上在后面還講了怎么設置全局的uwsgi,有需要的小伙伴可以去看看,鏈接在最頂部
?
原文鏈接:https://blog.csdn.net/weixin_45479740/article/details/125918713
相關推薦
- 2022-04-02 IDEA集成Docker實現打包的方法_docker
- 2022-08-03 python自動化測試用例全對偶組合與全覆蓋組合比較_python
- 2022-08-16 Hive常用日期格式轉換語法_數據庫其它
- 2022-05-05 C語言的三種條件判斷語句你都了解嗎_C 語言
- 2022-09-05 卷積層計算量(FLOPS)和參數量的計算
- 2022-07-13 JMeter主要元件_線程組的使用方法
- 2023-03-15 pandas創建DataFrame對象失敗的解決方法_python
- 2022-04-11 Nginx性能優化之Gzip壓縮設置詳解(最大程度提高頁面打開速度)_nginx
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支