需要复制文件 → 上传服务器 → 一条命令启动,全程不用改代码

最终部署结构(服务器上)

plaintext

/opt/myapp/
├── docker-compose.yml   # 核心编排文件
├── .env                 # 所有配置(数据库/Redis)
├── app/                 # 你的 Python 代码
└── db-init/             # MySQL 初始化 SQL(建库建表)

一、先给你 完整成品文件(直接复制用)

1. docker-compose.yml(生产版)

yaml

version: '3.8'

services:
  # Python 应用
  python-app:
    build: ./app          # 从 app 目录构建镜像
    restart: always       # 崩溃自动重启
    env_file: .env        # 读取配置
    volumes:
      - ./app:/app        # 代码挂载(开发/调试方便)
    ports:
      - "8000:8000"       # 你的 Python 端口
    depends_on:
      - mysql
      - redis

  # MySQL 数据库
  mysql:
    image: mysql:8.0
    restart: always
    env_file: .env
    volumes:
      - mysql_data:/var/lib/mysql          # 数据持久化(永不丢)
      - ./db-init:/docker-entrypoint-initdb.d  # 自动初始化 SQL
    ports:
      - "3306:3306"

  # Redis 缓存
  redis:
    image: redis:7
    restart: always
    volumes:
      - redis_data:/data                   # Redis 持久化
    ports:
      - "6379:6379"

volumes:
  mysql_data:
  redis_data:

2. .env 配置文件(所有密码都在这里)

env

# ======================
# Python 应用配置
# ======================
APP_PORT=8000
DEBUG=False

# ======================
# MySQL 配置
# ======================
MYSQL_ROOT_PASSWORD=root123456
MYSQL_DATABASE=mydb
MYSQL_USER=myuser
MYSQL_PASSWORD=mypassword
MYSQL_HOST=mysql          # 容器内服务名,不用改!
MYSQL_PORT=3306

# ======================
# Redis 配置
# ======================
REDIS_HOST=redis          # 容器内服务名,不用改!
REDIS_PORT=6379
REDIS_DB=0

3. 你的 Python 代码里读取配置(零改动兼容)

你原来怎么读 .env,现在还怎么读!

示例(Python 读取 MySQL + Redis):

python

运行

# app/main.py
import os
from dotenv import load_dotenv  # 你本地已有的 python-dotenv
import pymysql
import redis

# 直接读取 .env 即可
load_dotenv()

# MySQL 连接
db = pymysql.connect(
    host=os.getenv("MYSQL_HOST"),
    user=os.getenv("MYSQL_USER"),
    password=os.getenv("MYSQL_PASSWORD"),
    database=os.getenv("MYSQL_DATABASE")
)

# Redis 连接
r = redis.Redis(
    host=os.getenv("REDIS_HOST"),
    port=os.getenv("REDIS_PORT"),
    db=os.getenv("REDIS_DB")
)

4. MySQL 自动初始化(db-init/init.sql)

sql

-- 第一次启动自动执行
CREATE TABLE IF NOT EXISTS users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    age INT
);

INSERT INTO users (name, age) VALUES ('张三', 20);

二、Linux Docker CE 服务器一键部署步骤

1. 安装 Docker + Compose(Ubuntu 执行)

bash

运行

sudo apt update
sudo apt install -y docker.io docker-compose-plugin
sudo systemctl enable docker
sudo systemctl start docker

2. 上传文件到服务器

把你本地的:

  • docker-compose.yml
  • .env
  • app/
  • db-init/

全部上传到服务器:

plaintext

/opt/myapp/

3. 进入目录,一条命令启动

bash

运行

cd /opt/myapp
docker compose up -d

4. 查看运行状态

bash

运行

docker compose ps    # 看是否都正常运行
docker compose logs -f  # 实时日志

三、从 Docker Desktop 迁移数据(1 分钟)

本地导出 MySQL

bash

运行

docker exec 你的本地mysql容器名 mysqldump -u root -p mydb > backup.sql

服务器导入

bash

运行

docker cp backup.sql myapp-mysql-1:/backup.sql
docker exec myapp-mysql-1 mysql -u root -p mydb < backup.sql

四、生产环境必须做的安全设置

bash

运行

# 配置文件权限加固
chmod 600 /opt/myapp/.env

# 防火墙只开放业务端口
ufw allow 8000

五、你只需要记住 4 条命令

bash

运行

docker compose up -d     # 启动
docker compose down      # 停止(不删数据)
docker compose logs -f   # 看日志
docker compose restart   # 重启
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐