Docker 部署
官方镜像发布到 Docker Hub:https://hub.docker.com/r/mlogclub/bbs-go
方式一:内置 MySQL
默认使用 mlogclub/bbs-go:latest 镜像。启动后访问 http://localhost:3000,按页面提示完成安装。
默认 docker-compose.yml 内置 MySQL。安装引导中的数据库配置会被锁定,系统自动使用容器内的 MySQL 配置:
- 主机:
mysql - 端口:
3306 - 数据库:
bbsgo - 用户名:
bbsgo
默认 docker-compose.yml 会启动两个服务:
mysql:MySQL 8.4,数据保存在 Docker volumemysql-databbs-go:应用服务,单镜像内同时运行 Go API 和 React Router SSR;容器内 API 监听8082,Web SSR 监听并暴露3000
docker-compose.yml
将以下内容保存为 docker-compose.yml:
x-builtin-mysql-env: &builtin-mysql-env
MYSQL_DATABASE: ${BBSGO_DOCKER_MYSQL_DATABASE:-bbsgo}
MYSQL_USER: ${BBSGO_DOCKER_MYSQL_USER:-bbsgo}
MYSQL_PASSWORD: ${BBSGO_DOCKER_MYSQL_PASSWORD:-bbsgo_password}
services:
mysql:
image: mysql:8.4
restart: unless-stopped
environment:
<<: *builtin-mysql-env
MYSQL_ROOT_PASSWORD: ${BBSGO_DOCKER_MYSQL_ROOT_PASSWORD:-bbsgo_root_password}
TZ: Asia/Shanghai
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
volumes:
- mysql-data:/var/lib/mysql
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -u\"$${MYSQL_USER}\" -p\"$${MYSQL_PASSWORD}\" --silent"]
interval: 10s
timeout: 5s
retries: 10
bbs-go:
image: mlogclub/bbs-go:${BBSGO_IMAGE_TAG:-latest}
restart: unless-stopped
depends_on:
mysql:
condition: service_healthy
volumes:
- app-data:/app/data
- app-logs:/app/logs
- app-uploads:/app/res/uploads
ports:
- "3000:3000"
environment:
BBSGO_ENV: prod
NODE_ENV: production
PORT: 3000
BBSGO_SERVER_URL: http://127.0.0.1:8082
BBSGO_INSTALL_DOCKER_BUILTIN_MYSQL: "true"
BBSGO_DOCKER_BUILTIN_MYSQL_HOST: mysql
BBSGO_DOCKER_BUILTIN_MYSQL_PORT: "3306"
BBSGO_DOCKER_BUILTIN_MYSQL_DATABASE: ${BBSGO_DOCKER_MYSQL_DATABASE:-bbsgo}
BBSGO_DOCKER_BUILTIN_MYSQL_USERNAME: ${BBSGO_DOCKER_MYSQL_USER:-bbsgo}
BBSGO_DOCKER_BUILTIN_MYSQL_PASSWORD: ${BBSGO_DOCKER_MYSQL_PASSWORD:-bbsgo_password}
TZ: Asia/Shanghai
volumes:
mysql-data:
app-data:
app-logs:
app-uploads:参数说明
| 配置项 | 说明 |
|---|---|
BBSGO_IMAGE_TAG | BBS-GO 镜像 tag,默认 latest。 |
BBSGO_DOCKER_MYSQL_DATABASE | 内置 MySQL 初始化数据库名,默认 bbsgo。 |
BBSGO_DOCKER_MYSQL_USER | 内置 MySQL 普通用户名,默认 bbsgo。 |
BBSGO_DOCKER_MYSQL_PASSWORD | 内置 MySQL 普通用户密码,默认 bbsgo_password。 |
BBSGO_DOCKER_MYSQL_ROOT_PASSWORD | 内置 MySQL root 密码,默认 bbsgo_root_password,生产环境必须修改。 |
BBSGO_INSTALL_DOCKER_BUILTIN_MYSQL | 启用 Docker 内置 MySQL 安装模式;安装页会锁定数据库配置。 |
BBSGO_DOCKER_BUILTIN_MYSQL_HOST | 应用连接 MySQL 的主机名;compose 内固定为服务名 mysql。 |
BBSGO_DOCKER_BUILTIN_MYSQL_PORT | 应用连接 MySQL 的端口,默认 3306。 |
BBSGO_DOCKER_BUILTIN_MYSQL_DATABASE | 应用连接的数据库名,和 BBSGO_DOCKER_MYSQL_DATABASE 保持一致。 |
BBSGO_DOCKER_BUILTIN_MYSQL_USERNAME | 应用连接 MySQL 的用户名,和 BBSGO_DOCKER_MYSQL_USER 保持一致。 |
BBSGO_DOCKER_BUILTIN_MYSQL_PASSWORD | 应用连接 MySQL 的密码,和 BBSGO_DOCKER_MYSQL_PASSWORD 保持一致。 |
BBSGO_ENV | 运行环境,Docker 部署使用 prod。 |
NODE_ENV | Web SSR 运行环境,生产环境使用 production。 |
PORT | Web SSR 对外监听端口,默认 3000。 |
BBSGO_SERVER_URL | Web SSR 访问容器内 Go API 的地址,默认 http://127.0.0.1:8082。 |
TZ | 容器时区,默认 Asia/Shanghai。 |
ports: "3000:3000" | 将宿主机 3000 端口映射到容器 Web SSR 服务。 |
mysql-data | MySQL 数据持久化 volume。 |
app-data | 应用配置、SQLite 数据库、搜索索引等运行数据 volume。 |
app-logs | 应用日志 volume。 |
app-uploads | 上传文件和自动下载的 IP 库 volume。 |
healthcheck | 等待 MySQL 可用后再启动应用服务。 |
启动命令:
docker compose up -d默认无需设置 BBSGO_IMAGE_TAG,直接执行 docker compose up -d 会使用 latest。如需使用其他版本,再指定镜像 tag:
BBSGO_IMAGE_TAG=<版本号> docker compose up -d方式二:单容器运行
docker run -d \
--name bbs-go \
--restart unless-stopped \
-p 3000:3000 \
-e BBSGO_ENV=prod \
-e NODE_ENV=production \
-e PORT=3000 \
-e BBSGO_SERVER_URL=http://127.0.0.1:8082 \
-e TZ=Asia/Shanghai \
-v bbs-go-data:/app/data \
-v bbs-go-logs:/app/logs \
-v bbs-go-uploads:/app/res/uploads \
mlogclub/bbs-go:latest启动后访问 http://localhost:3000,在安装引导中手动填写外部 MySQL 配置,或选择 SQLite。这个模式不编排 MySQL 服务,因此不需要额外的 compose 文件。
默认使用 mlogclub/bbs-go:latest。如需使用其他版本,将 latest 替换为对应版本号,例如 mlogclub/bbs-go:v4.3.5。
持久化数据
两种运行方式都建议持久化以下目录:
/app/data:配置文件、SQLite 数据库、搜索索引等运行数据/app/logs:服务日志/app/res/uploads:上传文件和自动下载的 IP 库
内置 MySQL 版本额外持久化:
/var/lib/mysql:MySQL 数据
镜像内置默认配置文件,首次启动时会自动复制到 /app/data/bbs-go.yaml。容器启动目录下的 /app/bbs-go.yaml 会指向这个持久化配置文件,因此应用仍按默认规则读取启动目录中的 bbs-go.yaml。安装流程会写回该文件,例如 installed、站点配置等;单容器运行模式还会写入用户填写的数据库配置。
修改默认密码
正式部署前可通过环境变量修改内置 MySQL 密码:
BBSGO_DOCKER_MYSQL_ROOT_PASSWORD=your_root_password \
BBSGO_DOCKER_MYSQL_PASSWORD=your_password \
docker compose up -d也可以同时设置:
BBSGO_DOCKER_MYSQL_DATABASE:数据库名,默认bbsgoBBSGO_DOCKER_MYSQL_USER:数据库用户名,默认bbsgoBBSGO_DOCKER_MYSQL_PASSWORD:数据库密码,默认bbsgo_passwordBBSGO_DOCKER_MYSQL_ROOT_PASSWORD:root 密码,默认bbsgo_root_password
内置 MySQL 模式下,后端会从这些环境变量自动组装数据库连接,不需要修改 /app/data/bbs-go.yaml 的 db.url。
常用命令
docker compose logs -f bbs-go
docker compose restart bbs-go
docker compose down如需同时删除数据库和上传文件等 volume:
docker compose down -v

