Colderleo's blog Colderleo's blog
首页
Linux
C++
Python
前端
工具软件
mysql
索引
关于
GitHub (opens new window)

Colder Leo

热爱代码的打工人
首页
Linux
C++
Python
前端
工具软件
mysql
索引
关于
GitHub (opens new window)
  • 1-django使用
  • centos部署Nginx+uwsgi+django - blog
    • 参考
    • 1. 首先通过django直接运行项目-调试模式
    • 2. 然后通过uwsgi运行项目-不走nginx
    • 3. 最后通过nginx + wsgi 运行项目
    • 4. 设置开机自启动
  • django-admin完全自定义某个模块的页面
  • easy_select2 编辑页面添加外键选择搜索
  • 使用vscode开发python
  • python自定义异常处理with,上下文context管理器
  • python读写excel,xlsx 模块选择
  • python多线程多进程协程
  • TemporaryFile
  • threading用法
  • ubantu设置python优先级
  • conda anacodna 命令行用法
  • 我写的常用工具函数
  • 0-python常用函数
  • smtp发送邮件
  • pandas用法
  • datetime类,时间差
  • format
  • enumerate遍历数组时获取index
  • argv
  • generator 生成器
  • GIL锁、多线程
  • linux用源文件安装python3
  • list sort排序
  • logging日志
  • mulitporcessing共享变量
  • OrderedDict
  • path
  • pip用法
  • pymysql用法 - python连接mysql
  • python bash解释器,脚本前两行,
  • python docstring格式 PEP 257
  • python logging获取logger信息
  • python交互式窗口如何进行多行输入
  • virtualenv用法
  • 标准差
  • 单例模式
  • 函数中定义static变量
  • 切片
  • 去掉字符串中emoji字符
  • 去掉字符串中的空行
  • 全局变量、global和nonlocal
  • 文字识别pytesseract
  • 析构函数和del
  • 用python制作游戏外挂
  • 正则表达式,函数替换字符串
  • 装饰器
  • pycharm中运行pyqt时不报错
  • python 写文件
  • Python
gaoliu
2021-10-06
目录

centos部署Nginx+uwsgi+django - blog

# 参考

  • https://blog.csdn.net/yilovexing/article/details/82969103
  • djanog-2.2
  • uwsgi-2.0.19
# 注:据说通过Gunicorn启动uwsgi比较方便,看了一下差不多。

# 1. 首先通过django直接运行项目-调试模式

先在服务器上放上网站项目代码,然后python manage.py runserver 0.0.0.0:80,打开浏览器看能否访问。注意开启防火墙,包括云服务器防火墙,linux防火墙。

# 2. 然后通过uwsgi运行项目-不走nginx

关掉上面的manage.py, python下安装uwsgi,通过uwsgi运行项目

# 检查项目中wsgi.py是否存在

参考django官方文档,https://docs.djangoproject.com/en/2.2/howto/deployment/wsgi/uwsgi/ , 用django start-project 命令创建的项目会在创建时自带 wsgi.py

假设项目根目录为/www/myadmin, 创建项目时在此目录下执行django-admin startproject server .,默认会创建/www/myadmin/server/uwsgi.py。如果不存在则需手动创建,方法参考上面的django官方文档。

# 在项目文件夹根目录下新建uwsgi.ini配置文件。

; run: uwsgi --ini uwsgi.ini
; reload: uwsgi --reload uwsgi.pid
; stop: uwsgi --stop uwsgi.pid

[uwsgi]
chdir=/www/your_websit
pidfile = /www/your_website/uwsgi.pid
daemonize = /www/your_website/running.log ;记录日志的位置

module=server.wsgi:application
master=True
vacuum=True
max-requests=5000
py-autoreload = 1 ;修改py文件后自动重启uwsgi
processes=4 ;根据实际cpu数量酌情配置
disable-logging = true ;正常的request不记录,只记录异常

http-socket = :8090 ;网页直接访问,可用于测试没有nginx时是否正常运行。
socket = 127.0.0.1:30888 ;和nginx相连时的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  • 配置daemonize = *.log,会使任务在后台运行。
  • 配置logto = *.log, 会使任务在前台运行。
  • 网上说的后台运行方法uwsgi -d --ini uwsgi.ini,可能是老版本的,这个命令在2.2版本会创建一个名为--ini的文件作为日志文件,命令后面的uwsgi.ini会被被忽略。

# 通过uwsgi启动项目

cd到项目根目录下,先测试没有nginx时uwsgi是否正常运行:

# 激活虚拟环境
conda activate your_env

# 启动wsgi,该命令相当于上面的 python manage.py runserver 
uwsgi --ini uwsgi.ini
1
2
3
4
5

浏览器访问服务器8090端口。因为配置文件中设置了http-socket=8090,所以此时应该能访问网站,但是静态文件打不开(注意防火墙开放端口)。

# 错误排查

如果不能访问,可查看uwsgi的日志排查错误,/www/your_website/running.log。

# 3. 最后通过nginx + wsgi 运行项目

# 安装nginx

参考 https://www.jianshu.com/p/8a6d923cda9f

# 添加nginx存储库
sudo yum install epel-release

# 使用yum安装Nginx
sudo yum install nginx

# 也可以试试这个:https://www.jianshu.com/p/c22faafc7b8b 
yum install nginx --enablerepo=epel

# 设置nginx开机自启动
systemctl enable nginx

# 重启nginx
systemctl restart nginx
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 配置nginx

  • ubuntu Nginx 默认的配置文件在 /etc/nginx 目录下

  • centos 发行版的配置文件是在 /etc/nginx/nginx.conf

  • server_name可以区分从不同hostname网址来的请求,比如两个网址都解析到了该主机,那么设置server_name可以将其区分。设置为_表示所有如果没有其他适配的,就到这里。

  • client_max_body_size,前端上传文件大小限制,nginx默认是1m

  • 可以设置多个server,实现一台主机上部署多个网站。通过listen不同的端口,设置不同的server_name来区别不同的请求。

...

http {
    ...
    server {
	    listen 80;
	    client_max_body_size 200m;  
	    
	    server_name  _;
        
        #... 其他配置

        #配置uwsgi转发,需要和上面uwsgi.ini中的端口对应
        location / {
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:30888; 
        }

        # serve静态文件
        location /static {
            autoindex on; 
            alias /www/myadmin/static/; 
        }
        
        #... 其他配置
    }
    

    server {
	    listen 80;
	    listen 8090;
	    client_max_body_size 200m; 
	    server_name  www.aaa.com www.bbb.com;
        #... 其他配置
    }
    
    

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

重启nginx使配置生效:

systemctl restart nginx
1

uwsgi可能也需要重启:

# 先激活python虚拟环境,再执行下面语句
uwsgi --stop uwsgi.pid
uwsgi --ini uwsgi.ini

#或者使用reload
uwsgi --reload uwsgi.pid
1
2
3
4
5
6

# 测试和错误排查

此时访问服务器的80端口,应该能正常访问网站,包括静态资源。

如果不行,可能需要关闭SELinux。 临时关闭:输入命令setenforce 0,永久关闭,vi /etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled

另外可查看nginx中配置中error_log的位置,检查nginx的error_log。默认路径为/var/log/nginx/error.log

# 4. 设置开机自启动

创建sh脚本,脚本中激活anaconda,然后启动uwsgi服务。

# #!/bin/sh
# #this script will run in background

systemctl start nginx

source /root/anaconda3/bin/activate syadmin

uwsgi --ini /www/syadmin/uwsgi.ini

# nohup python /www/your_webst/manage.py start_circle_task >/dev/null 2>&1 &

1
2
3
4
5
6
7
8
9
10
11

有了上面的sh脚本后,可以将其加入/etc/rc.d/rc.local中实现开机自启动。

也可以用systemctl启动。参考下面的方法(这个没有实践):

  • https://blog.csdn.net/huaishuming/article/details/79794637
  • https://blog.csdn.net/sinat_41292836/article/details/103764842

创建systemctl服务,指定Type=forking,systemd认为当该服务fork出子进程并生成PIDFile,且父进程退出后服务启动成功。同时指定 PIDFile=FilePath,以便 systemd 能够跟踪服务的主进程。

编辑 (opens new window)
上次更新: 2021/10/11, 12:43:58
1-django使用
django-admin完全自定义某个模块的页面

← 1-django使用 django-admin完全自定义某个模块的页面→

最近更新
01
通过模板实现结构体成员拷贝-按成员名匹配
05-07
02
c++17通过模板获取类成员的个数
05-01
03
avx-sse切换惩罚
04-30
更多文章>
Theme by Vdoing | Copyright © 2019-2023 Colder Leo | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×