服务器配置uWSGI+Nginx+Django

5 篇文章 0 订阅
2 篇文章 0 订阅

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,有需要的小伙伴可以去看看,链接在最顶部

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
uwsgi + nginx是一种常见的服务器架构,用于部署Python Web应用程序。uwsgi是一个Web服务器,它可以处理Python应用程序的请求,并将其传递给后端的应用程序。nginx是一个高性能的反向代理服务器,它可以接收客户端的请求,并将其转发给uwsgi服务器处理。 在配置uwsginginx时,需要进行以下步骤: 1. 首先,确保uwsgi已经启动并正在运行。可以使用命令"ps aux | grep uwsgi.ini"来查看uwsgi进程是否在运行。\[1\] 2. 如果需要停止uwsgi进程,可以使用命令"uwsgi --stop uwsgi.pid"来停止运行。如果需要重新加载uwsgi配置文件,可以使用命令"uwsgi --reload uwsgi.pid"。\[1\] 3. 安装nginx,并验证nginx配置文件是否正确。可以使用命令"nginx -t"来验证nginx配置文件是否正确。\[2\] 4. 修改uwsgi配置文件,将uwsginginx连接的IP地址和端口配置为正确的值。\[3\] 5. 修改nginx配置文件,将请求转发给uwsgi服务器处理。可以使用以下配置将请求转发给uwsgi服务器: ``` server { location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8000; } } ``` 6. 如果需要配置静态文件的访问,可以在nginx配置文件中添加以下配置: ``` location /static { alias /var/www/static/; } ``` 这样,当访问/static路径时,nginx会将请求转发到指定的静态文件目录。 总结起来,uwsgi + nginx是一种常见的服务器架构,用于部署Python Web应用程序。uwsgi处理Python应用程序的请求,而nginx作为反向代理服务器将请求转发给uwsgi服务器处理,并可以配置静态文件的访问。 #### 引用[.reference_title] - *1* *2* [uwsgi + nginx 部署Django 项目](https://blog.csdn.net/yuelai_217/article/details/129861924)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Nginx+uWSGI部署](https://blog.csdn.net/qq_41341757/article/details/113825603)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学编程的小猫猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值