跳至主要內容

Docker Copmpose部署

五六零网校大约 3 分钟

部署教程

创建Docker compose部署文件

docker-compose.yml 配置:

version: "3.5"  # 使用的Docker Compose文件格式版本

services:
  # Tailchat核心服务
  service-core:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICES: core/gateway,core/user/*.service.js,core/group/*.service.js,core/chat/*.service.js,core/file,core/plugin/registry,core/config
      PORT: 3000
    depends_on:
      - mongo
      - redis
      - minio
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.api-gw.rule=PathPrefix(`/`)"
      - "traefik.http.services.api-gw.loadbalancer.server.port=3000"
    networks:
      - internal

  # 开放平台服务
  service-openapi:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICES: openapi/app,openapi/bot,openapi/integration,openapi/oidc/oidc
      OPENAPI_PORT: 3003
      OPENAPI_UNDER_PROXY: "true"
    depends_on:
      - mongo
      - redis
      - minio
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.openapi-oidc.rule=PathPrefix(`/open`)"
      - "traefik.http.services.openapi-oidc.loadbalancer.server.port=3003"
    networks:
      - internal

  # 插件服务(所有插件)
  service-all-plugins:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICEDIR: plugins
    depends_on:
      - mongo
      - redis
      - minio
    networks:
      - internal

  # 数据库
  mongo:
    image: mongo:4
    restart: on-failure
    volumes:
      - ./data:/data/db  # 更改数据存储位置为相对于 YAML 文件的路径
    networks:
      - internal

  # 数据缓存和传输器
  redis:
    image: redis:alpine
    restart: on-failure
    networks:
      - internal

  # 持久存储
  minio:
    image: minio/minio
    restart: on-failure
    networks:
      - internal
    environment:
      MINIO_ROOT_USER: tailchat
      MINIO_ROOT_PASSWORD: com.msgbyte.tailchat
    volumes:
      - ./storage:/data  # 更改持久存储位置为相对于 YAML 文件的路径
    command: minio server /data --console-address ":9001"

  # 路由器
  traefik:
    image: traefik:v2.1
    restart: unless-stopped
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entryPoints.web.address=:80"
      - "--entryPoints.web.forwardedHeaders.insecure"
    ports:
      - 56010:80  # 容器端口80映射到主机端口56010
      - 127.0.0.1:11001:8080
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    networks:
      - internal
      - default

networks:
  internal:
    name: tailchat-internal

volumes:
  data:
  storage:

修改部分:

ports:
      - 56000:80 

将56000改为你想部署的网页端口,记得反向代理该端口


docker-compose.env 配置

# 是否启用日志记录
LOGGER=true

# 日志级别(例如: info, debug, error)
LOGLEVEL=info

# 服务目录(服务的存储位置)
SERVICEDIR=services

# 数据传输器配置,使用Redis作为传输器
TRANSPORTER=redis://redis:6379

# Redis数据库连接信息
REDIS_URL=redis://redis:6379

# MongoDB数据库连接信息
MONGO_URL=mongodb://mongo/tailchat

# 用于加密和验证的密钥
SECRET=KJUYqm9rHaHQQqujCtPtzAsf

# 文件服务相关配置
API_URL=https://t.sap560.com

# Minio对象存储相关配置
MINIO_URL=minio:9000
MINIO_USER=tailchat
MINIO_PASS=com.msgbyte.tailchat


# SMTP电子邮件发送器配置
SMTP_SENDER="五六零网校 sap560@163.com"
SMTP_URI=smtps://sap560:GSHQYFAWWD@smtp.163.com:465/?pool=true


# 度量标准(Metrics)相关配置
PROMETHEUS=1

# 管理员用户和密码
ADMIN_USER=sap560
ADMIN_PASS=k7V8tp3YBXXX

#关禁止用户创建群组
DISABLE_CREATE_GROUP=1

#设置上传附件大小
FILE_LIMIT= 5242880 

#禁止游客访问
DISABLE_GUEST_LOGIN=1

#自动加入网校群组
AUTOJOIN_GROUP_ID=653cd2589c5ccd4b5c6f7f53

修改部分:

  • SECRET=KJUYqm9rHaHQQqujCtPtzAsf #修改为你自己的秘钥,建议设置随机的字符串
  • API_URL=https://t.sap560.com #修改为你的网址
  • SMTP_SENDER="五六零网校 sap560@163.com" #修改为你的邮箱,前面中文为收件人看到的信件名
  • SMTP_URI=smtps://sap560: GSHQYFAWWD@smtp.163.com:465/?pool=true #此处配置的是163邮箱,注意用户名不需要加@163.com;密码为SMTP密码,并非登录密码。

admin.yml 配置

version: "3.3"  # 使用的Docker Compose文件格式版本

services:
  # 后台应用
  tailchat-admin:
    build:
      context: ../  # 使用上级目录作为构建上下文
    image: tailchat  # 使用名为 "tailchat" 的镜像
    restart: unless-stopped  # 遇到错误时重启容器
    env_file: docker-compose.env  # 从环境文件加载环境变量
    depends_on:
      - mongo  # 依赖于名为 "mongo" 的服务
      - redis  # 依赖于名为 "redis" 的服务
    labels:
      - "traefik.enable=true"  # 启用Traefik反向代理
      - "traefik.http.routers.admin.rule=PathPrefix(`/admin`)"  # 使用路径前缀匹配到后端服务
      - "traefik.http.services.admin.loadbalancer.server.port=3000"  # 定义后端服务端口
    networks:
      - internal  # 连接到名为 "internal" 的Docker网络
    command: pnpm start:admin  # 启动命令,使用pnpm启动后台应用

一键部署命令

docker pull moonrailgun/tailchat 
&& 
docker tag moonrailgun/tailchat tailchat 
&& 
docker-compose -f docker-compose.yml -f admin.yml up -d

宝塔开启方向代理

Alt text
Alt text