Skip to content

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 volume mysql-data
  • bbs-go:应用服务,单镜像内同时运行 Go API 和 React Router SSR;容器内 API 监听 8082,Web SSR 监听并暴露 3000

docker-compose.yml

将以下内容保存为 docker-compose.yml

yaml
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_TAGBBS-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_ENVWeb SSR 运行环境,生产环境使用 production
PORTWeb SSR 对外监听端口,默认 3000
BBSGO_SERVER_URLWeb SSR 访问容器内 Go API 的地址,默认 http://127.0.0.1:8082
TZ容器时区,默认 Asia/Shanghai
ports: "3000:3000"将宿主机 3000 端口映射到容器 Web SSR 服务。
mysql-dataMySQL 数据持久化 volume。
app-data应用配置、SQLite 数据库、搜索索引等运行数据 volume。
app-logs应用日志 volume。
app-uploads上传文件和自动下载的 IP 库 volume。
healthcheck等待 MySQL 可用后再启动应用服务。

启动命令:

bash
docker compose up -d

默认无需设置 BBSGO_IMAGE_TAG,直接执行 docker compose up -d 会使用 latest。如需使用其他版本,再指定镜像 tag:

bash
BBSGO_IMAGE_TAG=<版本号> docker compose up -d

方式二:单容器运行

bash
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 密码:

bash
BBSGO_DOCKER_MYSQL_ROOT_PASSWORD=your_root_password \
BBSGO_DOCKER_MYSQL_PASSWORD=your_password \
docker compose up -d

也可以同时设置:

  • BBSGO_DOCKER_MYSQL_DATABASE:数据库名,默认 bbsgo
  • BBSGO_DOCKER_MYSQL_USER:数据库用户名,默认 bbsgo
  • BBSGO_DOCKER_MYSQL_PASSWORD:数据库密码,默认 bbsgo_password
  • BBSGO_DOCKER_MYSQL_ROOT_PASSWORD:root 密码,默认 bbsgo_root_password

内置 MySQL 模式下,后端会从这些环境变量自动组装数据库连接,不需要修改 /app/data/bbs-go.yamldb.url

常用命令

bash
docker compose logs -f bbs-go
docker compose restart bbs-go
docker compose down

如需同时删除数据库和上传文件等 volume:

bash
docker compose down -v

Released under the GPL License.

微信微信
商务咨询
微信二维码
QQQQ群
BBS-GO交流群
QQ二维码