在部署 Flask 服务时,您可以使用 反向代理 来隐藏服务器的域名。反向代理可以将外部请求路由到内部的 Flask 服务,而用户只会看到代理服务器的域名或 IP,而不会直接访问您的 Flask 服务所在的服务器。
1.使用Nginx做反向代理
1.安装 Nginx:
sudo apt update
sudo apt install nginx
2.配置 Nginx 作为反向代理:
sudo vim /etc/nginx/sites-available/default
添加以下配置,将请求转发到 Flask 应用所在的服务器:
server {
listen 80; # 监听80端口,处理HTTP请求
server_name yourdomain.com; # 您的域名
location / {
proxy_pass http://localhost:5000; # Flask 应用运行在本地的5000端口
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;
}
}
proxy_pass http://localhost:5000;
:Nginx 将所有请求转发到运行在localhost:5000
的 Flask 应用。server_name yourdomain.com;
:指定您希望用户访问的域名。
3.测试 Nginx 配置并重启:
测试 Nginx 配置文件是否正确:
sudo nginx -t
如果配置正确,重启 Nginx:
sudo systemctl restart nginx
或者:
service nginx restart
启动 Flask 应用:
使用 gunicorn
或其他 WSGI 服务器启动 Flask 应用,而不是直接用 Flask 的内置开发服务器。
gunicorn --bind 0.0.0.0:5000 app:app
**如果你的 Flask 文件是 ****flask_server_app.py**
,并且应用实例的名称还是 app
,命令应修改为:
gunicorn --bind 127.0.0.1:5000 flask_server_app:app
后台启动:
nohup gunicorn --bind 0.0.0.0:5000 flask_server_app:app &
nohup gunicorn --bind 0.0.0.0:5000 flask_server_app:app >nohup.out 2>&1 &
server_url = 'http://yourdomain.com:5000/api'
2. 使用 Apache 作为反向代理
步骤:
- 安装 Apache:
sudo apt update
sudo apt install apache2
2.启用必要的模块:
sudo a2enmod proxy
sudo a2enmod proxy_http
3.配置 Apache 虚拟主机:
sudo vim /etc/apache2/sites-available/000-default.conf
配置反向代理:
<VirtualHost *:80>
ServerName yourdomain.com # 你的域名
ProxyPreserveHost On
ProxyPass / http://localhost:5000/
ProxyPassReverse / http://localhost:5000/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
4.重启 Apache:
sudo systemctl restart apache2
Docker
在 Docker 容器中后台启动 Flask 服务并确保容器可以自动重启 ,结合nohup命令和docker自启动策略
比如程序启动命令为
nohup gunicorn --bind 0.0.0.0:5000 flask_server_app:app &
然后 在 Docker 中设置自动重启
- 编辑
Dockerfile
FROM python:3.10-slim
WORKDIR /app
# 复制项目文件
COPY . .
# 安装依赖
RUN pip install -r requirements.txt
# 启动 Flask 应用的命令
CMD ["nohup", "gunicorn", "--bind", "0.0.0.0:5000", "flask_server_app:app", "&"]
CMD是docker启动后程序执行的命令,如果直接启动python程序,就是
CMD [“python3”,“app.py”]
- docker-build将镜像打出来,
docker build -f Dockerfile -t 镜像名:tag .
**-f Dockerfile**
:
-f
参数指定 Dockerfile 的路径。
-t
参数用于为构建的 Docker 镜像打标签(Tag)。
**.**
(当前目录):
- 镜像打出来之后,就可以运行容器,docker部署了
docker run -d --restart always -p 5000:5000 镜像名:tag