网站建站公司广州新乡网站设计公司
2026/5/21 10:34:21 网站建设 项目流程
网站建站公司广州,新乡网站设计公司,wordpress用户中心api,网站建设方案书组网方案程序员都遇到过上线部署项目的问题#xff0c;那么在python中怎么部署一个应用呢#xff1f;其实现在大家都用docker打包后进行部署。 为什么要用Docker#xff1f; 同事是个老程序员#xff0c;什么都喜欢手动#xff0c;后来部署python应用他就出现了这些问题#xff1…程序员都遇到过上线部署项目的问题那么在python中怎么部署一个应用呢其实现在大家都用docker打包后进行部署。为什么要用Docker同事是个老程序员什么都喜欢手动后来部署python应用他就出现了这些问题开发环境Python 3.9服务器是3.6某个语法不支持本地用SQLite线上用MySQL连接方式完全不一样依赖库版本对不上一个隐蔽的bug只在生产环境出现他折腾了几天。如果用Docker这些问题根本不会出现。第一步在打包之前先整理检查一下你的应用。以我的manyan项目为例manyan/ ├── app.py # 主程序 ├── requirements.txt # 依赖清单 ├── config/ # 配置文件 ├── logs/ # 日志目录 └── migrations/ # 数据库迁移关键检查点所有依赖都在requirements.txt里吗用pip freeze requirements.txt检查敏感信息密码、API密钥从代码里剥离了吗日志是写到文件还是标准输出容器里建议用标准输出第二步写Dockerfile配置文件就是告诉Docker怎么打包你的应用。这是我给manyan项目写的# 选择基础镜像Python 3.9的轻量版 FROM python:3.9-slim # 设置工作目录容器里的/app目录 WORKDIR /app # 先复制依赖文件这样能利用Docker的缓存层 COPY requirements.txt . # 安装依赖清华源加速 RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple # 复制整个项目代码 COPY . . # 设置时区避免日志时间不对 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 创建一个非root用户运行应用安全考虑 RUN useradd -m -u 1000 appuser chown -R appuser:appuser /app USER appuser # 告诉Docker怎么启动应用 CMD [gunicorn, --bind, 0.0.0.0:8080, --workers, 3, app:app]关键点分阶段复制先复制requirements.txt这样改代码时不用重新安装依赖非root用户用root跑应用是大忌国内镜像源加速安装过程第三步打包前先本地测试# 1. 构建镜像最后的点表示当前目录docker build -t manyan:latest.# 2. 运行容器-d后台运行-p端口映射docker run -d --name manyan-test -p8000:8080 manyan:latest# 3. 测试访问curlhttp://localhost:8000/health# 4. 查看日志docker logs manyan-test# 5. 进入容器看看调试用dockerexec-it manyan-test /bin/bash如果一切正常你会看到应用在容器里欢快地跑着。第四步正确设置和读取配置文件。别把数据库密码写在代码里然后打包进镜像了…正确做法环境变量 配置文件挂载# app.py里这样读取配置importosfromdotenvimportload_dotenv load_dotenv()# 加载.env文件DATABASE_URLos.getenv(DATABASE_URL,sqlite:///local.db)DEBUGos.getenv(DEBUG,False).lower()true然后在运行容器时传入docker run -d\--name manyan\-p8000:8080\-eDATABASE_URLmysql://user:passdb:3306/manyan\-eDEBUGFalse\-v$(pwd)/config:/app/config\manyan:latest或者用.env文件# .env文件DATABASE_URLmysql://user:passdb:3306/manyanDEBUGFalseREDIS_URLredis://redis:6379/0# 运行docker run --env-file .env -p8000:8080 manyan:latest第五步多服务协作真实应用很少单打独斗。manyan需要PostgreSQL数据库和Redis缓存# docker-compose.ymlversion:3.8services:# 主应用manyan:build:.ports:-8000:8080environment:-DATABASE_URLpostgresql://manyan_user:passworddb:5432/manyan_db-REDIS_URLredis://redis:6379/0depends_on:-db-redisvolumes:-./logs:/app/logs# 日志持久化restart:unless-stopped# 自动重启# 数据库db:image:postgres:13environment:POSTGRES_USER:manyan_userPOSTGRES_PASSWORD:passwordPOSTGRES_DB:manyan_dbvolumes:-postgres_data:/var/lib/postgresql/data# Redisredis:image:redis:6-alpinecommand:redis-server--appendonly yesvolumes:-redis_data:/datavolumes:postgres_data:redis_data:启动整个栈docker-compose up -d一行命令三个服务全部启动网络自动配置好。第六步本地测试好了现在要上线。方案A简单直接适合小项目# 1. 把代码传到服务器scp-r manyan userserver:/app/# 2. 在服务器上构建和运行sshuserservercd/app/manyan docker-compose up -d方案B镜像仓库更正规# 1. 推送到Docker Hubdocker tag manyan:latest yourname/manyan:1.0 docker push yourname/manyan:1.0# 2. 服务器拉取并运行docker pull yourname/manyan:1.0 docker run -d --name manyan -p8000:8080 yourname/manyan:1.0方案C自动化部署GitHub Actionsname:自动部署on:[push]jobs:deploy:runs-on:ubuntu-lateststeps:-name:部署到服务器uses:appleboy/ssh-actionv0.1.4with:host:${{secrets.SERVER_HOST}}username:${{secrets.SERVER_USER}}key:${{secrets.SSH_KEY}}script:|cd /app/manyan git pull docker-compose down docker-compose build docker-compose up -d生产环境优化默认配置能用但生产环境需要更多考虑资源限制——防止一个容器吃光所有内存manyan:deploy:resources:limits:cpus:1memory:512Mreservations:memory:256M健康检查——让Docker知道应用是否健康HEALTHCHECK --interval30s --timeout3s --start-period5s --retries3 \ CMD curl -f http://localhost:8080/health || exit 1日志驱动——更好的日志管理docker run --log-driverjson-file --log-opt max-size10m --log-opt max-file3...常见坑和填坑指南坑1容器时区不对解决Dockerfile里设置时区或者运行容器时加-e TZAsia/Shanghai坑2应用写文件重启后没了解决用volumes挂载需要持久化的目录坑3性能比直接部署慢解决可能是虚拟化开销对于性能敏感应用考虑–networkhost模式坑4镜像太大传输慢解决用alpine基础镜像多阶段构建清理不必要的文件监控和维护上线只是开始应用跑起来后# 查看状态docker-composeps# 查看日志docker-compose logs -f manyan# 进入容器调试docker-composeexecmanyan /bin/bash# 更新应用docker-compose pull manyan docker-compose up -d# 备份数据docker-composeexecdb pg_dumpall -U postgresbackup.sql什么时候不该用DockerDocker不是万能的。如果你的应用对性能极端敏感高频交易系统需要特殊硬件访问GPU直通只是简单的脚本跑完就结束团队完全不懂容器技术那可能直接部署更合适。说点实在的我第一次用Docker部署时花了三天时间。现在从零部署一个Python应用到上线大概30分钟。关键不是技术多先进而是形成流程写代码 → 2. 写Dockerfile → 3. 本地测试 → 4. 推仓库 → 5. 服务器拉取运行这套流程熟了之后部署从玄学变成机械操作。再也不用说“我本地跑得好好的”了因为本地和线上环境一模一样。你的下一个Python项目试试用Docker打包。第一次可能有点磕绊但一旦跑通你就回不去了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询