Skip to content

Docker 部署

概述

Docker 部署方式支持使用 Docker 容器运行沐霖工时管理系统应用,数据库和 Redis 使用外部独立部署的服务。

优势

  • 应用容器化: 应用运行环境标准化
  • 外部数据库: 使用独立的 MySQL 和 Redis 服务
  • 灵活配置: 支持云数据库或自建数据库
  • 易于维护: 应用更新只需替换容器
  • 资源隔离: 应用与系统环境隔离

适用场景

  • 已有独立的 MySQL 和 Redis 服务
  • 使用云数据库服务(如阿里云 RDS、腾讯云 Redis)
  • 需要标准化应用运行环境
  • 多实例部署和负载均衡

前置要求

  • Docker: 20.10+
  • MySQL: 5.7+ 或 8.0+(外部服务)
  • Redis: 6.0+(外部服务)

部署步骤

第一步:准备外部服务

确保以下服务已经运行并可访问:

  • MySQL: 5.7+ 或 8.0+
  • Redis: 6.0+

第二步:创建数据库

sql
-- 登录 MySQL
mysql -u root -p

-- 创建数据库
CREATE DATABASE mulin_cost DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 退出
exit;

第三步:下载 Docker 部署包

从公众号获取 Docker 部署包,或者从release页面下载。

公众号获取

关注「沐霖工时管理系统」微信公众号,在菜单栏选择**"沐霖工时系统下载"**,选择 Docker 部署包下载。

公众号信息

  • 公众号ID: wuyusoft

二维码

公众号二维码

操作步骤

  1. 使用微信扫描下方二维码
  2. 关注公众号
  3. 在底部菜单栏选择"沐霖工时系统下载"
  4. 选择"Docker 部署包"
  5. 根据提示获取最新版本

第四步:创建目录并解压

bash
# 创建项目目录
mkdir -p /opt/mulin-cost
cd /opt/mulin-cost

# 将下载的部署包解压到该目录
# 假设下载的文件名为 mulin-cost-docker.tar.gz
tar -xzf mulin-cost-docker.tar.gz -C /opt/mulin-cost

# 创建必要的子目录
mkdir -p data/uploads
mkdir -p logs

目录结构如下:

/opt/mulin-cost/
├── mulin                    # 二进制程序
├── application.yaml         # 配置文件
├── data/
│   └── uploads/            # 上传文件目录
└── logs/                   # 日志目录

第五步:修改配置文件

编辑 /opt/mulin-cost/application.yaml

yaml
# 服务器配置
server:
  port: 8080
  mode: release

# 数据库配置(修改为实际的外部数据库地址)
db:
  host: your-mysql-host  # 修改为实际的 MySQL 地址
  port: 3306
  user: root
  password: your-password  # 修改为实际的密码
  name: mulin_cost
  maxIdleConns: 10
  maxOpenConns: 100

# Redis 配置(修改为实际的 Redis 地址)
redis:
  host: your-redis-host  # 修改为实际的 Redis 地址
  port: 6379
  password: ""  # 如果有密码则填写
  db: 0

# 日志配置
log:
  level: info
  file: logs/app.log
  max_size: 100
  max_backups: 10
  max_age: 30

第六步:启动容器

使用 Alpine Linux 容器直接运行二进制程序:

bash
docker run -d \
  --name mulin_app \
  -p 8080:8080 \
  -v /opt/mulin-cost/data/uploads:/app/uploads \
  -v /opt/mulin-cost/logs:/app/logs \
  -v /opt/mulin-cost/application.yaml:/app/application.yaml \
  -v /opt/mulin-cost/mulin:/app/mulin \
  -v /etc/localtime:/etc/localtime \
  -e TZ=Asia/Shanghai \
  --restart always \
  alpine:latest \
  /app/mulin

参数说明

参数说明示例
-p 8080:8080端口映射-p 8080:8080-p 9090:8080
-v uploads上传文件目录/opt/mulin-cost/data/uploads:/app/uploads
-v logs日志目录/opt/mulin-cost/logs:/app/logs
-v application.yaml配置文件/opt/mulin-cost/application.yaml:/app/application.yaml
-v mulin二进制程序/opt/mulin-cost/mulin:/app/mulin
-v /etc/localtime时区同步保持容器与宿主机时间一致
-e TZ时区环境变量Asia/Shanghai
alpine:latest基础镜像轻量级 Linux 发行版
/app/mulin启动命令直接运行二进制程序
--restart重启策略alwaysunless-stopped

第七步:验证部署

查看容器状态

bash
docker ps

应该能看到 mulin_app 容器正在运行。

查看容器日志

bash
docker logs -f mulin_app

访问系统

打开浏览器访问:

http://your-server-ip:8080

默认管理员账号:

  • 用户名: admin
  • 密码: 12345678

注意:首次登录后请立即修改密码!

何时使用 Docker vs Docker Compose

使用 Docker 单独部署

  • ✅ 已有外部 MySQL 和 Redis 服务
  • ✅ 使用云数据库(RDS、Redis 云服务等)
  • ✅ 需要灵活的网络配置
  • ✅ 与其他服务混合部署

使用 Docker Compose 部署

  • ✅ 需要一键启动所有服务(包括数据库和 Redis)
  • ✅ 开发环境和测试环境
  • ✅ 不想单独安装 MySQL 和 Redis
  • ✅ 需要快速搭建完整环境

常用操作

停止容器

bash
docker stop mulin_app

启动容器

bash
docker start mulin_app

重启容器

bash
docker restart mulin_app

删除容器

bash
docker stop mulin_app
docker rm mulin_app

查看日志

bash
# 查看实时日志
docker logs -f mulin_app

# 查看最近 100 行日志
docker logs --tail 100 mulin_app

# 查看指定时间范围的日志
docker logs --since 2024-01-01T00:00:00 mulin_app

进入容器

bash
docker exec -it mulin_app /bin/sh

更新应用

bash
# 1. 停止旧容器
docker stop mulin_app
docker rm mulin_app

# 2. 替换二进制文件
cp new-mulin /opt/mulin-cost/conf/mulin

# 3. 重新构建镜像
cd /opt/mulin-cost/conf
docker build -t mulin-cost:latest .

# 4. 启动新容器
docker run -d \
  --name mulin_app \
  -p 8080:8080 \
  -v /opt/mulin-cost/data/uploads:/app/uploads \
  -v /opt/mulin-cost/logs:/app/logs \
  -v /opt/mulin-cost/conf/application.yaml:/app/application.yaml \
  -v /etc/localtime:/etc/localtime \
  -e TZ=Asia/Shanghai \
  --restart always \
  mulin-cost:latest

配置 Nginx 反向代理(可选)

如果需要通过域名访问,可以配置 Nginx:

nginx
server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://localhost:8080;
        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;
    }
}

数据备份

备份 MySQL 数据库

bash
# 备份到本地(使用外部 MySQL 命令)
mysqldump -h your-mysql-host -u root -p mulin_cost > backup_$(date +%Y%m%d).sql

# 压缩备份
mysqldump -h your-mysql-host -u root -p mulin_cost | gzip > backup_$(date +%Y%m%d).sql.gz

恢复数据库

bash
# 从备份恢复
mysql -h your-mysql-host -u root -p mulin_cost < backup_20240101.sql

# 从压缩备份恢复
gunzip < backup_20240101.sql.gz | mysql -h your-mysql-host -u root -p mulin_cost

备份上传文件

bash
tar -czf uploads_backup_$(date +%Y%m%d).tar.gz /path/to/uploads/

下一步

Released under the MIT License.