logo
1
1
Login
添加定时重启工作区功能,支持手动触发和每日2点、14点自动重启

MySQL + PostgreSQL + Redis 三数据库 + FRP 内网穿透项目(frp还没写)

这是一个基于Docker的三数据库项目,同时运行MySQL、PostgreSQL和Redis数据库,配合frp内网穿透服务,实现远程数据库访问。

⚠️ 重要提醒

** 重要提醒**:本项目仅用于开发和测试环境,生产环境请使用专业的数据库服务和备份方案。 ** 重要提醒**:本项目仅用于开发和测试环境,生产环境请使用专业的数据库服务和备份方案。 ** 重要提醒**:本项目仅用于开发和测试环境,生产环境请使用专业的数据库服务和备份方案。

CNB机制限制

  • 最长运行时间18小时
  • 凌晨4点会清理长时间不在线的开发环境
  • 当前配置COS份机制,sync进行数据同步和恢复

定时重启:(还没写)

  • 系统已配置自动重启任务,每天在 2点、14点 自动重新开启环境
  • 环境重启时有约60秒的空窗期,数据库连接会中断
  • 已实现COS数据同步和备份方案

项目结构

/workspace/ ├── mysql/ # MySQL服务配置目录 │ ├── docker-compose.yml # MySQL容器配置 │ ├── config/ # MySQL配置文件目录 │ └── data/ # MySQL数据持久化目录 ├── postgresql/ # PostgreSQL服务配置目录 │ ├── docker-compose.yml # PostgreSQL容器配置 │ ├── postgres-config/ # PostgreSQL自定义配置 │ │ ├── postgresql.conf # PostgreSQL主配置文件 │ │ └── pg_hba.conf # 访问控制配置 │ └── data/ # PostgreSQL数据持久化目录 ├── redis/ # Redis服务配置目录 │ ├── docker-compose.yml # Redis容器配置 │ ├── config/ # Redis配置文件目录 │ │ └── redis.conf # Redis配置文件 │ └── data/ # Redis数据持久化目录 ├── .cnb.yml # CNB构建配置文件 ├── .gitignore # Git忽略文件 └── README.md # 项目说明文档

服务配置

1. 定时任务密钥配置

同组织下创建 keys 仓库,文件名为 api-token.yml

UCNB_TOKEN: "<PASSWORD>"

2. MySQL 数据库配置

同组织下创建 database-key 仓库,文件名为 mysql.yml

MYSQL_VERSION: "自定义版本" # 如: 8.0 MYSQL_ROOT_PASSWORD: "root密码"

3. PostgreSQL 数据库配置

同组织下创建 database-key 仓库,文件名为 postgresql.yml

POSTGRES_VERSION: "自定义版本" # 如: 15 POSTGRES_USER: "用户名" # 数据库名与用户名相同 POSTGRES_PASSWORD: "密码"

4. Redis 数据库配置

同组织下创建 database-key 仓库,文件名为 redis.yml

REDIS_VERSION: "自定义版本" # 如: 7-alpine REDIS_PASSWORD: "密码"

5. COS 数据备份配置

同组织下创建 keys 仓库,文件名为 cos.yml

SECRET_ID: "腾讯云访问密钥ID" SECRET_KEY: "腾讯云访问密钥Key" BUCKET: "COS存储桶名称" REGION: "COS地域" # 如: ap-beijing

6. FRP 内网穿透配置(当前库还没配置)

同组织下创建 database-key 仓库,文件名为 frpc.yml

frpc_content: | # 日志配置 log.level = "info" log.to = "/app/frpc.log" # 服务端配置 serverAddr = "frps服务器ip" serverPort = frps的端口 auth.token = "frps的密码" # MySQL代理配置 [[proxies]] name = "mysql" type = "tcp" localIP = "172.17.0.1" localPort = 3306 remotePort = 3306 # PostgreSQL代理配置 [[proxies]] name = "postgres" type = "tcp" localIP = "172.17.0.1" localPort = 5432 remotePort = 5432 # Redis代理配置 [[proxies]] name = "redis" type = "tcp" localIP = "172.17.0.1" localPort = 6379 remotePort = 6379

服务端口

数据库本地端口远程端口容器名称
MySQL33063306mysql
PostgreSQL54325432postgres
Redis63796379redis_server

快速开始

  1. database-key 仓库中创建 mysql.yml 配置文件
  2. database-key 仓库中创建 postgresql.yml 配置文件
  3. database-key 仓库中创建 redis.yml 配置文件
  4. keys 仓库中创建 cos.yml 配置文件(用于数据备份和恢复)
  5. database-key 仓库中创建 frpc.yml 配置文件(可选)
  6. 系统会自动启动MySQL、PostgreSQL和Redis服务,并支持数据备份恢复

配置说明

MySQL配置

  • 配置文件目录: /workspace/mysql/config/
  • 数据目录: /workspace/mysql/data/
  • 自定义配置可放置在 /workspace/mysql/config/ 目录下

PostgreSQL配置

  • 主配置文件: /workspace/postgresql/postgres-config/postgresql.conf
  • 访问控制: /workspace/postgresql/postgres-config/pg_hba.conf
  • 数据目录: /workspace/postgresql/data/dbdata/

Redis配置

  • 配置文件: /workspace/redis/config/redis.conf
  • 数据目录: /workspace/redis/data/
  • 持久化文件: /workspace/redis/data/dump.rdb

COS数据备份配置

  • 备份文件存储在腾讯云COS中
  • 数据恢复:环境启动时自动从COS恢复
  • 数据备份:环境关闭时自动备份到COS
  • 备份格式:压缩包(mysql.tar.gz、postgresql.tar.gz、redis.tar.gz)
  • 备份路径:cos://bucket/仓库/分支/数据库/

FRP配置

  • 配置文件: frpc/frpc.toml
  • 日志文件: /app/frpc.log

维护命令

# 查看MySQL服务状态 cd mysql && docker-compose ps # 查看PostgreSQL服务状态 cd postgresql && docker-compose ps # 查看Redis服务状态 cd redis && docker-compose ps # 查看MySQL日志 cd mysql && docker-compose logs -f mysql-db # 查看PostgreSQL日志 cd postgresql && docker-compose logs -f postgres # 查看Redis日志 cd redis && docker-compose logs -f redis # 查看FRP日志 docker-compose logs -f frpc # 停止MySQL服务 cd mysql && docker-compose down # 停止PostgreSQL服务 cd postgresql && docker-compose down # 停止Redis服务 cd redis && docker-compose down # 重启MySQL服务 cd mysql && docker-compose restart mysql-db # 重启PostgreSQL服务 cd postgresql && docker-compose restart postgres # 重启Redis服务 cd redis && docker-compose restart redis # 启动所有服务 docker compose -f ./mysql/docker-compose.yml up -d docker compose -f ./postgresql/docker-compose.yml up -d docker compose -f ./redis/docker-compose.yml up -d # 手动数据备份(可选记得修改cnb.yml,目前是同步后删除压缩文件) docker compose -f ./mysql/docker-compose.yml stop docker compose -f ./postgresql/docker-compose.yml stop docker compose -f ./redis/docker-compose.yml stop tar -czf /workspace/tmp/mysql.tar.gz -C /workspace/mysql data tar -czf /workspace/tmp/postgresql.tar.gz -C /workspace/postgresql data tar -czf /workspace/tmp/redis.tar.gz -C /workspace/redis data # 手动数据恢复(可选记得修改cnb.yml,目前是同步后删除压缩文件) tar -xzf /workspace/tmp/mysql.tar.gz -C /workspace/mysql tar -xzf /workspace/tmp/postgresql.tar.gz -C /workspace/postgresql tar -xzf /workspace/tmp/redis.tar.gz -C /workspace/redis

📊 数据备份和恢复

自动备份机制

已集成COS数据备份功能

  • 环境启动时:自动从COS恢复数据库数据
  • 环境关闭时:自动将数据库数据备份到COS
  • 备份内容:MySQL、PostgreSQL、Redis的完整数据
  • 备份格式:压缩包存储,节省空间

备份流程

  1. 启动环境

    • 从COS下载压缩包到 /workspace/tmp/
    • 解压到对应的数据目录
    • 启动数据库服务
  2. 关闭环境

    • 停止数据库服务
    • 压缩数据目录为tar.gz文件
    • 上传到COS存储桶

COS配置要求

需要配置以下参数:

  • SECRET_ID:腾讯云访问密钥ID
  • SECRET_KEY:腾讯云访问密钥Key
  • BUCKET:COS存储桶名称
  • REGION:COS地域(如:ap-beijing)

⚠️ 数据安全警告

重要提醒

  1. COS备份保障 - 环境重启会自动从COS恢复数据
  2. 定时重启影响 - 每天2点、14点自动重启,约60秒服务中断
  3. 备份依赖COS - 请确保COS配置正确且存储空间充足
  4. 首次部署无数据 - 首次启动时无历史数据,需要手动初始化

注意事项

  • COS存储产生费用,请留意用量
  • 备份数据包含完整数据库,请确保COS安全性
  • 大数据量备份可能需要较长时间

建议解决方案

  • 使用外部数据库服务(如云数据库)
  • 实现定时数据导出到外部存储
  • 配置数据同步到其他持久化存储
  • 考虑使用云存储作为数据备份方案
  • 实施数据库复制和容灾机制

安全建议

  1. 密码安全

    • 使用强密码作为数据库root密码和PostgreSQL密码
    • 定期更换数据库密码
    • 不要在代码中硬编码密码
  2. 网络安全

    • 在生产环境中限制网络访问权限
    • 不要在公网直接暴露数据库服务
    • 务必通过FRP等安全隧道访问
  3. 维护更新

    • 定期更新MySQL、PostgreSQL和Redis版本
    • 监控数据库性能和安全漏洞
    • 定期检查和优化数据库配置
    • 监控COS存储使用量和费用
    • 定期验证备份数据的完整性
  4. 访问控制

    • 配置适当的用户权限
    • 使用防火墙限制访问
    • 监控数据库访问日志

故障排除

常见问题

  1. 数据库连接失败:检查端口占用和网络配置
  2. 权限问题:确认用户权限和密码配置
  3. 数据丢失:重启环境前备份数据
  4. Redis连接失败:检查Redis密码配置和网络设置
  5. COS备份失败:检查COS配置和网络连通性,确认密钥权限正确
  6. 数据恢复失败:检查COS中是否存在备份文件,确认文件路径正确
  7. FRP连接失败:检查frps服务器配置和网络连通性

日志查看

  • MySQL容器日志:cd mysql && docker-compose logs mysql-db
  • PostgreSQL容器日志:cd postgresql && docker-compose logs postgres
  • FRP客户端日志:查看 /app/frpc.log

** 重要提醒**:本项目仅用于开发和测试环境,生产环境请使用专业的数据库服务和备份方案。 ** 重要提醒**:本项目仅用于开发和测试环境,生产环境请使用专业的数据库服务和备份方案。 ** 重要提醒**:本项目仅用于开发和测试环境,生产环境请使用专业的数据库服务和备份方案。