当前位置: 首页 > news >正文

python(43) : docker compose部署python服务

1.前言

docker compose基于python镜像启动容器, 支持多实例

2.环境信息

系统: Alibaba Cloud Linux release 3 (OpenAnolis Edition)

架构: x86_64

docker版本: Docker version 26.1.3, build b72abbb

3.部署文件

3.1.Dockerfile

FROM python:3.10-slim# 设置工作目录
WORKDIR /app# 设置环境变量
ENV PYTHONPATH=/app
ENV PYTHONUNBUFFERED=1# 复制应用代码(从项目根目录复制)
COPY . .# 防止.env.prod不存在报错
RUN touch /app/.env.prod 
# 删除原有.env文件(如果存在),并将.env.prod重命名为.env
RUN rm -f /app/.env && \if [ -f /app/.env.prod ]; then mv /app/.env.prod /app/.env; fi# 更新pip
RUN python -m pip install --upgrade pip  -i https://mirrors.aliyun.com/pypi/simple/ requests# 根据requirements.txt文件安装依赖(可选)
RUN pip install --no-cache-dir -r requirements.txt  -i https://mirrors.aliyun.com/pypi/simple/ requests# 安装其他依赖(可选)
#RUN pip install --upgrade Flask -i https://mirrors.aliyun.com/pypi/simple/ requests# 设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone# 创建日志目录
RUN mkdir -p /app/logs# 设置非root用户
RUN useradd --create-home --shell /bin/bash app && \chown -R app:app /app
USER app# 暴露端口(如果需要的话)
#EXPOSE 8888# 启动命令
CMD ["python", "main.py"]

3.2.docker-compose.yml

{SERVER_CODE} 需要替换为服务编码

services:{SERVER_CODE}:build:context: .dockerfile: Dockerfilerestart: unless-stoppedvolumes:- ./logs:/app/logs  # 挂载日志卷networks:- {SERVER_CODE}_networkhealthcheck:test: ["CMD", "python", "-c", "import sys; sys.exit(0)"]interval: 30stimeout: 10sretries: 3start_period: 40snetworks:{SERVER_CODE}_network:driver: bridge

3.3.deploy.sh

#!/bin/bash# 使用方法: ./deploy.sh [start|stop|restart|status|logs|scale]set -e# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color# 服务名称
SERVER_NAME="xxx"
# 服务编码
SERVER_CODE="test_xxx"# 日志函数
log_info() {echo -e "${BLUE}[INFO]${NC} $1"
}log_success() {echo -e "${GREEN}[SUCCESS]${NC} $1"
}log_warning() {echo -e "${YELLOW}[WARNING]${NC} $1"
}log_error() {echo -e "${RED}[ERROR]${NC} $1"
}# 检查Docker和Docker Compose是否安装
check_dependencies() {log_info "检查依赖..."if ! command -v docker &> /dev/null; thenlog_error "Docker未安装,请先安装Docker"exit 1fiif ! command -v docker compose &> /dev/null; thenlog_error "Docker Compose未安装,请先安装Docker Compose"exit 1filog_success "依赖检查通过"
}# 启动服务
start_services() {# 在 docker-compose.yml 所在目录执行mkdir -p ./logs# 775不行chmod 777 ./logslog_info "启动${SERVER_NAME}..."check_dependencies# 构建镜像log_info "构建Docker镜像..."docker compose build --no-cache# 启动服务log_info "启动服务..."docker compose up -d# 等待服务启动log_info "等待服务启动..."sleep 3log_success "服务启动完成!"
}# 停止服务
stop_services() {log_info "停止${SERVER_NAME}..."docker compose downlog_success "服务已停止"
}# 重启服务
restart_services() {log_info "重启${SERVER_NAME}..."stop_servicessleep 5start_services
}# 显示服务状态
show_status() {log_info "${SERVER_NAME}状态:"docker compose psecho ""log_info "${SERVER_NAME}日志 (最近50行):"docker compose logs --tail=50
}# 显示实时日志
show_logs() {log_info "显示${SERVER_NAME}实时日志 (按Ctrl+C退出):"docker compose logs -f
}# 扩缩容
scale_services() {if [ -z "$2" ]; thenlog_error "请指定实例数量,例如: ./deploy.sh scale 3"exit 1filocal instances=$2log_info "扩缩容到 $instances 个实例..."# 更新环境变量if grep -q "WORKER_INSTANCES=" .env; thensed -i "s/WORKER_INSTANCES=.*/WORKER_INSTANCES=$instances/" .envelseecho "WORKER_INSTANCES=$instances" >> .envfi# 重新启动服务docker compose downdocker compose up -d --scale ${SERVER_CODE}=$instanceslog_success "扩缩容完成,当前实例数: $instances"
}# 清理资源
cleanup() {log_info "清理Docker资源..."docker compose down -vdocker system prune -flog_success "清理完成"
}# 显示帮助信息
show_help() {echo "${SERVER_NAME}部署脚本"echo ""echo "使用方法:"echo "  $0 start     - 启动服务"echo "  $0 stop      - 停止服务"echo "  $0 restart   - 重启服务"echo "  $0 status    - 查看服务状态"echo "  $0 logs      - 查看实时日志"echo "  $0 scale N   - 扩缩容到N个实例"echo "  $0 cleanup   - 清理Docker资源"echo "  $0 help      - 显示帮助信息"echo ""echo "示例:"echo "  $0 start                    # 启动服务"echo "  $0 scale 5                  # 扩容到5个实例"echo "  $0 logs                     # 查看日志"
}# 主函数
main() {case "${1:-help}" instart)start_services;;stop)stop_services;;restart)restart_services;;status)show_status;;logs)show_logs;;scale)scale_services "$@";;cleanup)cleanup;;help|--help|-h)show_help;;*)log_error "未知命令: $1"show_helpexit 1;;esac
}# 执行主函数
main "$@"

3.4.deploy_readme.md

# AI图像超高清中转服务部署文档## 项目概述这是一个基于Docker的AI图像超高清处理服务,提供图像上传、处理和结果查询的REST API接口。服务使用Flask框架构建,支持文件上传、任务调度和结果查询功能。## 服务信息- **服务名称**: xxx
- **服务代码**: test_xxx
- **端口**: 5000
- **基础镜像**: python:3.10-slim## 系统要求### 必需依赖
- Docker (最新版本)
- Docker Compose (最新版本)
- 至少 2GB 可用内存
- 至少 1GB 可用磁盘空间### 检查依赖
```bash
# 检查Docker是否安装
docker --version# 检查Docker Compose是否安装
docker compose version
```## 快速开始### 1. 克隆项目
```bash
git clone <repository-url>
cd test_xxx
```### 2. 启动服务
```bash
# 给脚本执行权限
chmod +x deploy.sh# 启动服务
./deploy.sh start
```### 3. 验证服务
```bash
# 检查服务状态
./deploy.sh status# 查看服务日志
./deploy.sh logs
```## 部署脚本使用说明### 基本命令| 命令 | 描述 | 示例 |
|------|------|------|
| `start` | 启动服务 | `./deploy.sh start` |
| `stop` | 停止服务 | `./deploy.sh stop` |
| `restart` | 重启服务 | `./deploy.sh restart` |
| `status` | 查看服务状态 | `./deploy.sh status` |
| `logs` | 查看实时日志 | `./deploy.sh logs` |
| `scale N` | 扩缩容到N个实例 | `./deploy.sh scale 3` |
| `cleanup` | 清理Docker资源 | `./deploy.sh cleanup` |
| `help` | 显示帮助信息 | `./deploy.sh help` |### 详细使用说明#### 启动服务
```bash
./deploy.sh start
```
- 检查Docker和Docker Compose依赖
- 创建日志目录并设置权限
- 构建Docker镜像(无缓存)
- 启动服务容器
- 等待服务启动完成#### 停止服务
```bash
./deploy.sh stop
```
- 停止所有相关容器
- 清理容器资源#### 重启服务
```bash
./deploy.sh restart
```
- 先停止服务
- 等待5秒
- 重新启动服务#### 查看服务状态
```bash
./deploy.sh status
```
- 显示容器运行状态
- 显示最近50行日志#### 查看实时日志
```bash
./deploy.sh logs
```
- 实时显示服务日志
- 按Ctrl+C退出#### 服务扩缩容
```bash
./deploy.sh scale 5
```
- 扩容到5个实例
- 自动更新环境变量
- 重新启动服务#### 清理资源
```bash
./deploy.sh cleanup
```
- 停止并删除容器
- 清理Docker系统资源
- 删除未使用的镜像和卷## 服务配置### Docker配置
- **工作目录**: `/app`
- **时区**: Asia/Shanghai
- **用户**: app (非root用户)
- **健康检查**: 每30秒检查一次
- **重启策略**: unless-stopped### 环境变量
```bash
PYTHONPATH=/app
PYTHONUNBUFFERED=1
TZ=Asia/Shanghai
```### 网络配置
- **网络名称**: test_xxx_network
- **网络类型**: bridge
- **端口映射**: 5000:5000## 日志管理### 日志位置
- **容器内**: `/app/logs`
- **宿主机**: `./logs`### 日志权限
```bash
chmod 777 ./logs
```### 查看日志
```bash
# 查看服务日志
./deploy.sh logs# 查看Docker日志
docker compose logs# 查看特定容器日志
docker logs <container_name>
```## 故障排除### 常见问题#### 1. Docker未安装
```bash
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install docker.io docker-compose# CentOS/RHEL
sudo yum install docker docker-compose
```#### 2. 权限问题
```bash
# 添加用户到docker组
sudo usermod -aG docker $USER
# 重新登录或执行
newgrp docker
```#### 3. 端口冲突
```bash
# 检查端口占用
netstat -tulpn | grep 5000
# 或修改docker-compose.yml中的端口映射
```#### 4. 内存不足
```bash
# 检查系统资源
free -h
df -h
# 清理Docker资源
./deploy.sh cleanup
```### 调试命令#### 查看容器状态
```bash
docker compose ps
```#### 进入容器
```bash
docker compose exec test_xxx bash
```#### 查看容器资源使用
```bash
docker stats
```#### 查看详细日志
```bash
docker compose logs --tail=100 -f
```## 生产环境部署### 安全配置
1. 修改OSS配置中的密钥
2. 设置防火墙规则
3. 使用HTTPS证书
4. 配置反向代理### 性能优化
1. 调整容器资源限制
2. 配置负载均衡
3. 使用CDN加速
4. 优化数据库连接### 监控告警
1. 配置健康检查
2. 设置日志监控
3. 配置资源告警
4. 设置自动重启## 维护操作### 定期维护
```bash
# 清理未使用的资源
./deploy.sh cleanup# 更新镜像
docker compose pull
./deploy.sh restart# 备份数据
docker compose exec test_xxx tar -czf /tmp/backup.tar.gz /app/uploads
```### 版本升级
```bash
# 停止服务
./deploy.sh stop# 更新代码
git pull# 重新构建并启动
./deploy.sh start
```## 联系支持如遇到问题,请检查:
1. 系统日志: `./deploy.sh logs`
2. 服务状态: `./deploy.sh status`
3. 系统资源使用情况
4. 网络连接状态---**注意**: 请确保在生产环境中修改所有默认配置,包括OSS密钥、数据库连接等敏感信息。

4.启动

sh deploy.sh start

5.停止

sh deploy.sh stop

6.重启

sh deploy.sh restart

http://www.dtcms.com/a/411767.html

相关文章:

  • app网站如何做推广企业网站建设成本费用
  • 构建智能投资视野:用Python打造个性化股票分析系统
  • 动画特效介绍
  • opendds初入门之考虑为什么要用opendds
  • 嵌入式学习Linux内核驱动1--基本概念
  • 南昌公司做网站需要多少钱外贸网站建设流程
  • 宁波手机网站开发公司开封做网站的公司
  • 图片格式缺失修复方案:预览故障率降至0.2%
  • 【SpringBoot】前后端联动实现条件查询操作
  • 江苏恒健建设集团有限公司网站深圳做网页的公司
  • Element UI 自定义el-cascader多选组件
  • 保定网站开发培训网站运营推广方案设计
  • 轻量级文本嵌入模型 - EmbeddingGemma
  • 双三次插值(BiCubic Interpolation)超分算法详解
  • 标准盒模型和怪异盒模型
  • 南昌做网站哪个好百度网站验证是
  • 分类网站 制作专业网站建设设计装饰
  • 嵌入式设备通信--UART
  • 甘肃道路运输安全员考试考什么
  • 制作一个网站的流程有哪些营销网站做推广公司
  • 做网站是用ps还是ai衡阳企业网站排名优化
  • 那里有个人做网站的公司排名seo
  • 医院网站建设招标说明网站seo标准
  • 若依是什么
  • 网站策划过程软件资源网站推荐
  • N-157基于springboot,vue服装商城系统
  • 做外贸上阿里巴巴什么网站电商平台用户数量排名
  • 杭州市建设信用网网站wordpress添加邮件发送
  • 免费创建网站 优帮云企业解决方案能力介绍
  • 没有建设的网站不能申请微信支付吗dw做网站导航条