- 前情回顾
- 先画个
- 主要任务
- uwsgi搭建HTTP网站
- uwsgi + python
- 1. 配置环境
- 2. 命令行输入
- uwsgi + flask + python
- 1. 配置环境
- 2. 新建uwsgi.ini与.py文件
- 3. 初始化uwsgi.ini
- uWSGI常用的命令
- Q:那--http 和 --socket 这两个选项究竟有何不同呢?
- uwsgi + nginx + flask + python
- 写在前面
- nginx常用的命令及杀死进程方法
- 配置文件等修改
- 正式搭建nginx+uwsgi工程
先画个【第3.5期】nginx、uwsgi、flask、django的关系
本节主要内容是复盘下自己寒假期间摸索过的nginx的一些使用指南,为了之后把数据库部署到云端 (或许第五期?
我会简单介绍一下nginx和云服务器上的操作,本片的目的是完成当时困扰我快一个月(毫不夸张,我是笨讀!
主要任务【flask+宝塔】我在云服务器上,想做一个https协议的“https://域名:端口号”这样的网站,最好是在宝塔面板上设置
https://ask.csdn.net/questions/7646927
在3.5期提到的,只用uwsgi也能完成服务器搭建
uwsgi搭建HTTP网站首先,记得开放对应端口的安全组
⚠️本文已经在安全组开放端口"6111"
通过virtualenv配置环境
virtual -p python3 【任意名字】 # 创建环境 source 【上述名字】/bin/activate # 进入环境 # 安装依赖 pip3 install --default-timeout=1000 uwsgi -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com pip3 install --default-timeout=1000 flask -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
测试效果:
python3 test1.py
可以正常运行即可
2. 命令行输入运行简单的uWSGI程序,用于测试uWSGI,这里走的是HTTP链接:
直接在命令行输入:
uwsgi --http :6111 --wsgi-file test1.py
http :6111: 使用http协议,端口6111
wsgi-file test1.py: 加载指定的文件,test1.py
(若使用其他端口需要配置安全组)
附代码
test1.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"] # python3
uwsgi + flask + python
开放方法参考
1. 配置环境微信小程序+nginx+php+mysql实现数据库管理【第3.5期】
通过virtualenv配置环境
2. 新建uwsgi.ini与.py文件需要配置uwsgi.ini
有注释版
[uwsgi] # 一定要写这个标题,不然识别不到 chdir=/www/wwwroot/test # 工程目录 home=/www/wwwroot/test/.env # 虚拟环境目录 module=test # 启动flask应用的文件名,不用加.py # wsgi-file = test.py # 与上一行功能相近 callable=app # 应用名,与我们hell master=true processes=2 # worker的进程个数 chmod-socket=666 logfile-chmod=644 procname-prefix-spaced=test # uwsgi的进程名称前缀,启动后可通过ps -ef | grep test查找到这个进程 py-autoreload=1 # py文件修改,自动加载,也就是设置热启动了 http=0.0.0.0:6111 # 监听端口,测试时使用 vacuum=true # 退出uwsgi是否清理中间文件,包含pid、sock和status文件 socket=%(chdir)/uwsgi/uwsgi.sock # socket文件,配置nginx时候使用 stats=%(chdir)/uwsgi/uwsgi.status # status文件,可以查看uwsgi的运行状态 pidfile=%(chdir)/uwsgi/uwsgi.pid # pid文件,通过该文件可以控制uwsgi的重启和停止 daemonize=%(chdir)/uwsgi/uwsgi.log # 设置后台模式,然后将日志输出到uwsgi.log。当调试时,可先注释掉此内容
无注释版
[uwsgi] chdir=/www/wwwroot/test home=/www/wwwroot/test/.env module=test # wsgi-file = test.py callable=app master=true processes=2 chmod-socket=666 logfile-chmod=644 procname-prefix-spaced=test py-autoreload=1 http=0.0.0.0:6111 vacuum=true socket=%(chdir)/uwsgi/uwsgi.sock stats=%(chdir)/uwsgi/uwsgi.status pidfile=%(chdir)/uwsgi/uwsgi.pid daemonize=%(chdir)/uwsgi/uwsgi.log
test.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def helloWorld():
return "Hel World"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=6111, debug=True)
3. 初始化uwsgi.ini
uwsgi --ini uwsgi.ini
效果如下图:
完成之后,查看当前正在运行的uwsgi进程:
ps -ef | grep 【关键词】
最好test.py和uwsgi.ini中的端口数要一样
虽然理论上test.py的端口不影响
在这一步卡了很长时间!
uWSGI常用的命令
如下:
uwsgi --ini uwsgi.ini # 启动 uwsgi --reload uwsgi/uwsgi.pid # 重启 uwsgi --stop uwsgi/uwsgi.pid # 关闭
参考文章
Q:那–http 和 --socket 这两个选项究竟有何不同呢?flask重录制版本❀
Python 使用uwsgi部署flask项目
使用uwsgi + flask部署web应用
flask框架使用uWSGI部署服务
为什么出现这种思考呢?就是我用–socket 启动了uWSGI之后,通过浏览器并不能访问。这是因为,–socket使用的协议并不是http/https。
uwsgi + nginx + flask + python 写在前面flask + nginx + uWSGI部署
项目部署:nginx+uwsgi+flask:
参照这篇文章,在我入门是给了我很大帮助
flask重录制版本
以及他在B站上传的视频
flask部署 ngnix+uwsgi+flask搭建网站
nginx也是一个服务器,可以分配不同的uwsgi【个人理解】
nginx常用的命令及杀死进程方法对于nginx.conf的结构,可以在网上找到很多教程
大概常用的是location/【重定向】和“ssl相关配置【域名】”
注意区分uwsgi_pass和socket
-
nginx -c XXX.conf
以自定义的conf启动nginx文件 -
nginx -s reload
重启nginx -
nginx -s stop
停止nginx -
ps -ef | grep nginx
pkill -9 nginx
强制删除停止nginx
(或者下面这个,亲测更有效)
killall -s INT nginx
- 把nginx文件夹下的conf文件夹下的nginx.conf复制到当前文件夹下
可通过下图中的文件找到
- 修改text.py
(加一个分路径) - 修改uwsgi.ini
(修改3处;注释掉http,注释掉socket,重新添加socket)
- 修改nginx.conf的内容:
添加如下字段
location /111 { # 此处的"/111"必须要和.py处一致!
include uwsgi_params;
# proxy_pass http://0.0.0.0:6111; # 用不了,An error occurred
# proxy_pass http://【公网IP】:6111; # 用不了,An error occurred
uwsgi_pass 0.0.0.0:6111; # 可以使用,记得配置uwsgi.ini两处改动
# uwsgi_pass 【公网IP】:6111; # 可以使用,记得配置uwsgi.ini两处改动
# uwsgi_pass unix:/root/hitsz/uwsgi_useless/uwsgi/uwsgi.sock;
# 测试了一下,下面三行注释掉好像也能跑,但是最好加上
uwsgi_param UWSGI_PYHOME /root/hitsz/rubbish_uwsgi; # 虚拟环境所在文件夹
uwsgi_param UWSGI_CHDIR /root/hitsz/uwsgi_useless; # 主文件夹
uwsgi_param UWSGI_SCRIPT test:app; # 左test:test.py 右app:test.py里Flask的对象
}
⚠️此处的"/111"必须要和.py处一致!
同时,修改如下字段
server_name处是公网ip【使用https协议时,还有域名】
- 在安全组里添加6112端口
回头看一下nginx.conf文件:
只有这两个location,当遇到"/111"时进入下面的,只输入端口号时,进入index.html nginx的欢迎界面、别的是404(404界面在下面注释那里也有写,可以解注释看看效果)
欢迎界面
正式搭建nginx+uwsgi工程
- 启动uwsgi
uwsgi --ini uwsgi.ini
最好通过ps -ef | grep uWSGI指令,保证所有的uwsgi没有启动;nginx也是
- 启动nginx
熟练运用nginx -c 【自定义.conf文件】、nginx -s stop、 nginx -s reload功能(可以叠加,-c -s同时使用)
配置过程中可能遇到的问题如图:(解决方法也如图)
- 效果验收:
输入公网IP:nginx端口(6112)/111查看效果,应该与上一版一致。
以上是http协议,关于https协议还需要ssl证书等内容,等第【4.5期】解答
连续搞了两天,终于把寒假期间坐大牢的东西搞明白了
前几期写的东西有点乱,之后还要整理(立flag



