
本文介绍如何将本地开发的 flask 应用部署到免费云平台(如 render),并将其与你在 godaddy 等平台购买的自有域名绑定,全程无需额外付费,兼顾易用性与生产可用性。
Flask 是轻量级 Python Web 框架,适合快速开发,但其内置服务器(flask run)仅用于开发调试,不可用于生产环境。要对外提供服务并绑定自有域名,需借助支持 Python 的托管平台,并完成 WSGI 部署、端口监听、反向代理与 DNS 配置等关键步骤。
✅ 推荐方案:Render.com(免费 Tier + 域名支持)
Render 是目前对 Flask 友好、零配置成本且原生支持自定义域名(HTTPS 自动启用) 的主流免费平台之一。它提供:
- 每月 750 小时免费运行时(足够小流量应用常驻)
- GitHub/GitLab 自动部署(代码推送即上线)
- 内置 PostgreSQL(可选)、环境变量管理、日志查看
- 支持 requirements.txt 和 Procfile,兼容标准 Flask 生产部署流程
? 部署步骤(以 GitHub 项目为例):
-
准备项目结构(关键!)
确保根目录含以下文件:myflaskapp/ ├── app.py # 主应用入口(含 create_app 或 app = Flask(__name__)) ├── requirements.txt ├── Procfile # Render 识别启动命令 └── runtime.txt (可选) # 指定 Python 版本,如: python-3.11.8
-
编写 Procfile(必需)
web: gunicorn --bind $PORT --workers 1 --worker-tmp-dir /dev/shm app:app
✅ 注意:app:app 表示 app.py 文件中的 app 实例;若使用工厂模式(create_app()),改写为 app:create_app(),并确保 app.py 可直接导入。
-
安装 Gunicorn(生产 WSGI 服务器)
在 requirements.txt 中加入:Flask==2.3.3 gunicorn==21.2.0 # 其他依赖...
-
在 Render 控制台创建 Web Service
- 连接 GitHub 仓库 → 选择分支
- 设置环境:PYTHON_VERSION=3.11(与 runtime.txt 一致)
- 构建命令:pip install -r requirements.txt(默认)
- 启动命令:由 Procfile 自动读取
- 端口设置:Render 会自动注入 $PORT 环境变量,Flask 必须监听该端口(见下方代码调整)
-
修改 app.py 适配生产环境
from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return "Hello from Flask on Render!" # ✅ 关键:不调用 app.run(),交由 Gunicorn 启动 if __name__ == "__main__": # 仅本地调试用(可选) app.run()⚠️ 错误示范:app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 5000))) —— Render 不执行此行,Procfile 中的 gunicorn 才是真正启动器。
-
绑定自有域名(GoDaddy 示例)
- 在 Render 服务页 → “Custom Domains” → 添加你的域名(如 myapp.example.com)
- Render 提供 CNAME 记录值(形如 myapp.onrender.com)
- 登录 GoDaddy DNS 管理 → 新增 CNAME 记录:
Host: myapp # 子域名(或 @ 表示根域,但根域推荐用 ALIAS/ANAME,GoDaddy 支持) Value: myapp.onrender.com TTL: 1 hour
- 等待 DNS 生效(通常
❌ 为什么 Netlify 不适用?
Netlify 是静态站点与 Serverless 函数平台,原生不支持长期运行的 Python 进程。它无法托管 Flask 的 WSGI 应用(无 gunicorn、无持久端口监听),仅能通过边缘函数(Edge Functions)做简单路由转发——但需重写逻辑、不兼容 Flask 的 session、request 对象及中间件,故出现 404 属正常限制。
? 备选免费方案对比
| 平台 | 免费额度 | Flask 支持 | 自定义域名 | 备注 |
|---|---|---|---|---|
| Render.com | ✅ 750h/月 | ✅ 原生 | ✅ 免费 HTTPS | 推荐首选,文档清晰,CI/CD 流畅 |
| PythonAnywhere | ✅ 微型免费账户 | ✅(Web tab 配置) | ⚠️ 仅子域名(yourname.pythonanywhere.com),不支持自有域名 | 适合学习,生产受限 |
| Railway.app | ✅ $5/月抵扣(新用户) | ✅ | ✅(需验证域名) | 免费额度有限,超量计费,适合短期测试 |
✅ 总结与建议
- 不要尝试用 flask run 直接暴露公网端口:存在严重安全与稳定性风险;
- 始终使用 Gunicorn/Uvicorn 作为生产 WSGI/ASGI 服务器;
- 域名解析务必使用 CNAME(子域)或 ALIAS(根域)指向平台提供的地址,避免 A 记录硬编码 IP(平台 IP 可能变更);
- 免费服务适用于个人项目、Demo 或低流量 MVP;若需高可用、定时任务、WebSockets 或大流量,建议升级至付费计划或选用 VPS(如 DigitalOcean $5/mo)自行部署 Nginx + Gunicorn。
按以上流程操作,你可在 30 分钟内将 Flask 应用通过自有域名(如 app.yourdomain.com)稳定对外服务,零额外费用,且完全可控。










