码迷,mamicode.com
首页 > 其他好文 > 详细

virtualvenv+django+uWSGI+nginx部署

时间:2019-02-20 09:54:39      阅读:368      评论:0      收藏:0      [点我收藏+]

标签:system   can   sign   href   dea   master   操作   quic   错误   

1. virtualvenv

2. django

3. uWSGI

4. nginx

1. virtualvenv

virtualvenv install

首先要安装python3

因为系统已经装了 python3.6 所以接下来直接装虚拟环境 virtualvenv

mkdir yourwebproject folder
cd yourwebproject
/usr/python3.6/bin/python3.6 -m venv venv   #建立一个独立于系统的虚拟环境 不会跟系统环境混淆
source venv/bin/activate                    #运行环境
deactivate                                  #退出环境

2. django

  • 运行虚拟环境,在环境中安装django
pip install django
  • 新建项目
   1). django-admin startproject proName        
   2). cd proName
   3). python manage.py runserver   # run
  • 新建app
    不用也可以进行接下来的操作

3. uWSGI

官网: https://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html#installing-uwsgi-with-python-support

安装

在虚拟环境中

pip install uwsgi

检测 uwsgi 是否正常工作

  • 在与venv同目录下写一个模拟站点文件 test.py
# test.py
def application(env, start_response):
    start_response(‘200 OK‘, [(‘Content-Type‘,‘text/html‘)])
    return [b"Hello World"]     # python3
  • 运行
uwsgi --http :8080 --wsgi-file test.py  # 假设访问端口号8080
  • 浏览器访问
http://serverIP:8080

若显示站点文件中的输出,说明uwsgi生效

路径 web client <-> uwsgi <-> python

部署 django

  • 首先运行django确保django能正常工作
python manage.py runserver 0.0.0.0:8000
  • 在manage.py同级目录下运行
uwsgi --http :8080 --module djangoProName.wsgi

--module djangoProName.wsgi 代表 djangoProName 目录下的 wsgi.py 文件

  • 浏览器访问
http://serverIP:8080

4. uWSGI

官网: https://www.nginx.com/resources/wiki/start/topics/tutorials/install/

不在虚拟环境中安装
由于服务器上已经安装了 nginx 所以安装步骤省略,只需要在 nginx.conf 中添加配置即可。

  • 配置 nginx

nginx.conf 结构:

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
    worker_connections 768;
}

http {
   # server{ ... }
}

添加 server

   server {
        listen       98 default_server;   # 访问时输入的端口 本地和外部浏览器后面都要加这个端口号
        server_name  10.41.95.85;          # 自己网站的域名

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
        
        location / {                      # location : 文件系统配置 去应答一些要服务器资源的请求
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:9898;    # 与ini文件对接端口 与上面的 93 端口没有关系
        }
    }
  • 配置 uwsgi

将配置项全部写入ini文件
在venv同目录下自己新建uwsgi的ini文件

[uwsgi]
socket = 127.0.0.1:9898                               ; 与 nginx 对接 IP
; django pro dir
chdir = /root/Odin/TrackManagement/TrackManagement/   ; django project dir
wsgi-file = TrackManagement/wsgi.py                   ; 代表 TrackManagement 目录下的 wsgi.py 文件
; module = TrackManagement.wsgi                       ; 有上面的wsgi配置这个就不用写了

processes = 2                                         ; 进程
threads = 1                                           ; 线程
stats = 127.0.0.1:9696                                ; 内部配置访问ip 与socket区别开
  • 浏览器访问
http://10.41.95.85:98

若显示django画面 则 uwsgi+nginx生效

路径 web client <-> nginx <-> uwsgi <-> django


接下来是过程中踩的坑

uwsgi: unrecognized option ‘--http:8089‘ ```(venv) [root@localhost TrackManagement]# uwsgi --http:8089 --module TrackManagement.wsgi uwsgi: unrecognized option ‘--http:8089‘ getopt_long() error ```
#### 原因:
参数格式不对 :8089前面要加空格 uwsgi还在开启
uwsgi: unrecognized option ‘--http‘ ``` (venv) [root@localhost TrackManagement]# uwsgi --http:8089 --module TrackManagement.wsgi uwsgi: unrecognized option ‘--http‘ getopt_long() error ```
#### 原因:
uwsgi还在开启 先杀了进程再重启
uwsgi trkMngm_uwsgi.ini -> invalid request block size: 21573 (max 4096)...skip 启动了之后每次访问 ``` *** Stats server enabled on 127.0.0.1:9295 fd: 12 *** invalid request block size: 21573 (max 4096)...skip invalid request block size: 21573 (max 4096)...skip invalid request block size: 21573 (max 4096)...skip invalid request block size: 21573 (max 4096)...skip invalid request block size: 21573 (max 4096)...skip invalid request block size: 21573 (max 4096)...skip invalid request block size: 21573 (max 4096)...skip invalid request block size: 21573 (max 4096)...skip invalid request block size: 21573 (max 4096)...skip invalid request block size: 21573 (max 4096)...skip invalid request block size: 21573 (max 4096)...skip invalid request block size: 21573 (max 4096)...skip invalid request block size: 21573 (max 4096)...skip invalid request block size: 21573 (max 4096)...skip invalid request block size: 21573 (max 4096)...skip invalid request block size: 21573 (max 4096)...skip invalid request block size: 21573 (max 4096)...skip invalid request block size: 21573 (max 4096)...skip invalid request block size: 21573 (max 4096)...skip invalid request block size: 21573 (max 4096)...skip ```
#### 原因:
trkMngm_uwsgi.ini 文件中有设置nginx的socket
这时候nginx还没加上 所以会有这个错误
ModuleNotFoundError: No module named ‘TrackManagement/TrackManagement/wsgi‘ ``` (venv) [root@localhost TrackManagement]# uwsgi --http :8089 --module TrackManagement/TrackManagement/wsgi.py *** Starting uWSGI 2.0.18 (64bit) on [Tue Feb 19 11:33:20 2019] *** compiled with version: 4.8.5 20150623 (Red Hat 4.8.5-36) on 18 February 2019 05:28:03 os: Linux-3.10.0-957.1.3.el7.x86_64 #1 SMP Thu Nov 29 14:49:43 UTC 2018 nodename: localhost.localdomain machine: x86_64 clock source: unix pcre jit disabled detected number of CPU cores: 4 current working directory: /root/Odin/TrackManagement detected binary path: /root/Odin/TrackManagement/venv/bin/uwsgi uWSGI running as root, you can use --uid/--gid/--chroot options *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** *** WARNING: you are running uWSGI without its master process manager *** your processes number limit is 63229 your memory page size is 4096 bytes detected max file descriptor number: 1024 lock engine: pthread robust mutexes thunder lock: disabled (you can enable it with --thunder-lock) uWSGI http bound on :8089 fd 4 spawned uWSGI http 1 (pid: 33181) uwsgi socket 0 bound to TCP address 127.0.0.1:33454 (port auto-assigned) fd 3 uWSGI running as root, you can use --uid/--gid/--chroot options *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** Python version: 3.6.4 (default, Mar 6 2018, 13:19:57) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] *** Python threads support is disabled. You can enable it with --enable-threads *** Python main interpreter initialized at 0x12acbf0 uWSGI running as root, you can use --uid/--gid/--chroot options *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** your server socket listen backlog is limited to 100 connections your mercy for graceful operations on workers is 60 seconds mapped 72920 bytes (71 KB) for 1 cores *** Operational MODE: single process *** ModuleNotFoundError: No module named ‘TrackManagement/TrackManagement/wsgi‘ unable to load app 0 (mountpoint=‘‘) (callable not found or import error) *** no app loaded. going in full dynamic mode *** uWSGI running as root, you can use --uid/--gid/--chroot options *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** *** uWSGI is running in multiple interpreter mode *** spawned uWSGI worker 1 (and the only) (pid: 33180, cores: 1) ```
#### 原因: 应该在TrackManagement项目里面运行 即这个目录下面
``` (venv) [root@localhost TrackManagement]# ls db.sqlite3 manage.py testUwsgi.py TrackManagement ```
runserver运行django error : Bad Request ``` (venv) [root@localhost TrackManagement]# python manage.py runserver 0.0.0.0:8080 Performing system checks... System check identified no issues (0 silenced). You have 15 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions. Run ‘python manage.py migrate‘ to apply them. February 18, 2019 - 07:47:25 Django version 2.1.7, using settings ‘TrackManagement.settings‘ Starting development server at http://0.0.0.0:8080/ Quit the server with CONTROL-C. Invalid HTTP_HOST header: ‘10.41.95.85:8080‘. You may need to add ‘10.41.95.85‘ to ALLOWED_HOSTS. Bad Request: / [18/Feb/2019 07:47:51] "GET / HTTP/1.1" 400 60826 Invalid HTTP_HOST header: ‘10.41.95.85:8080‘. You may need to add ‘10.41.95.85‘ to ALLOWED_HOSTS. Bad Request: /favicon.ico [18/Feb/2019 07:47:54] "GET /favicon.ico HTTP/1.1" 400 60906 ```
#### solution
django setting.py
``` ALLOWED_HOSTS = [‘*‘] -> ALLOWED_HOSTS = [‘*‘] ```
manage.py语法错误 ``` SyntaxError: invalid syntax [root@localhost TrackManagement]# python manage.py runserver 0.0.0.0:8080 File "manage.py", line 14 ) from exc ```
##### solution
没有运行虚拟环境 外面的环境是python 虚拟环境才是python3 所以会有语法错误

virtualvenv+django+uWSGI+nginx部署

标签:system   can   sign   href   dea   master   操作   quic   错误   

原文地址:https://www.cnblogs.com/JanSN/p/10404480.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!