目录
1. 安装nginx,虚拟环境,flask
8.检查 Gunicorn 是否在监听正确的端口(失败的解决方案)
1. 安装nginx,虚拟环境,flask
提前准备,安装好nginx,并能运行,centos建议安装最新版
如果没有装nginx可通过一下命令行安装
sudo yum update -y
sudo yum install epel-release -y
sudo yum install python3 python3-pip nginx -y
安装nginx,
安装python
2. 创建和配置 Flask 应用
创建一个新的目录来存放你的 Flask 项目,并在其中初始化 Flask 应用程序。
mkdir ~/my_flask_app
cd ~/my_flask_app
创建一个虚拟环境,并激活它
python3 -m venv venv
source venv/bin/activate
安装 Flask:
pip3 install flask gunicorn
创建一个简单的 Flask 应用程序。新建文件 app.py
,内容如下:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run()
3. 使用 Gunicorn 部署 Flask
在 Flask 项目目录下,使用 Gunicorn 启动你的 Flask 应用程序:
gunicorn --workers 3 --bind 127.0.0.1:8000 wsgi:app
在此之前,请确保你创建了一个 wsgi.py
文件,它将导入你的 Flask 应用:
from app import app
if __name__ == "__main__":
app.run()
4. 配置 Nginx
编辑 Nginx 配置文件以反向代理到 Gunicorn。打开 Nginx 配置文件:
sudo nano /etc/nginx/nginx.conf
或者你可以为你的 Flask 应用创建单独的配置文件:
sudo nano /etc/nginx/conf.d/my_flask_app.conf
在配置文件中添加如下内容:
server {
listen 80;
server_name your_domain_or_ip;你的IP或域名
location / {
proxy_pass http://localhost:8000; 改为本地会好一些
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
5. 启动和启用 Nginx
启动 Nginx 服务并将其设置为开机自启动:
sudo systemctl start nginx
sudo systemctl enable nginx
6. 配置防火墙,检查 SELinux 配置
如果你启用了防火墙,需要允许 HTTP 流量通过:
sudo firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd --reload
检查 SELinux 配置
检查SELinux配置
如果你的 CentOS 系统启用了 SELinux,可能会阻止 Nginx 访问 Gunicorn 的 socket。可以临时禁用 SELinux 进行测试:
sudo setenforce 0
7. 测试你的应用程序
现在,访问你服务器的 IP 地址或域名:
http://your_domain_or_ip
你应该会看到 "Hello, World!" 消息,表示你的 Flask 应用运行成功。
8.检查 Gunicorn 是否在监听正确的端口(失败的解决方案)
确认 Gunicorn 正在监听 127.0.0.1:8000
。你可以使用以下命令查看是否有应用在监听该端口:
为了确保 Gunicorn 在服务器重启时自动启动,创建一个 Systemd 服务文件:
sudo netstat -plnt | grep 8000
这条命令应该显示类如下的输出:
tcp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN 12345/gunicorn
如果没有显示任何内容,可能是 Gunicorn 没有启动或者绑定了错误的地址和端口。
9.测试直接访问 Gunicorn
为了排除 Nginx 配置问题,尝试直接访问 Gunicorn 服务。因为 Gunicorn 默认绑定的是 127.0.0.1
,你不能直接从外部访问它。所以你可以使用 curl
命令在服务器上直接测试:
curl http://127.0.0.1:8000/
测试直接访问 Gunicorn
如果 Gunicorn 正常工作,你应该看到 Hello, World!
。
. 10.使用 Systemd 管理 Gunicorn
sudo vi /etc/systemd/system/my_flask_app.service
添加以下内容:
[Unit]
Description=Gunicorn instance to serve my_flask_app
After=network.target
[Service]
User=your_username
Group=nginx
WorkingDirectory=/home/your_username/my_flask_app
Environment="PATH=/home/your_username/my_flask_app/venv/bin"
ExecStart=/home/your_username/my_flask_app/venv/bin/gunicorn --workers 3 --bind 127.0.0.1:8000 wsgi:app
[Install]
WantedBy=multi-user.target
注意:将 your_username
替换为你的系统用户名。
保存并退出文件后,重新加载 Systemd 并启动服务:
sudo systemctl daemon-reload
sudo systemctl start my_flask_app
sudo systemctl enable my_flask_app