日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

服務器配置uWSGI+Nginx+Django

作者:學編程的小貓貓 更新時間: 2022-07-22 編程語言

centos7 服務器配置uWSGI+Nginx+Django

本篇文章參考uWSGI官網Setting up Django and your web server with uWSGI and nginx英語不錯的的小伙伴可以自行閱讀

1. 配置環境

  1. 創建虛擬環境

    conda create -n django-env python=3.6 # 創建名為django-env,python版本為3.6的虛擬環境
    conda activate django-env	# 進入虛擬環境
    
  2. 下載Django

    conda install django	# 下載django
    
  3. 下載uwsgi

    pip install uwsgi	# 下載uwsgi (conda 下不了)
    

2. the web client <-> uWSGI <-> python

  1. 創建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
    
  2. 運行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

  1. 創建Django項目

    # 先將uwsgi程序退出 (Ctrl + c)
    django-admin startproject mysite
    
  2. 配置項目

    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退出))
    
  3. 創建數據庫

    進入mysql: 
    create database 數據庫名	# 切記要和配置文件中的數據庫名一致
    退出mysql
    # 先回到項目目錄下(有manage.py文件)
    python manage.py migrate
    
  4. 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運行成功的小火箭,就說明沒問題了,加入下一步

  5. 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.confunix: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

欄目分類
最近更新