• 简体中文
  • Docker 部署

    Firmiana 包含多阶段 Dockerfile 和 docker-compose 配置,支持容器化部署。

    快速开始

    docker compose up -d

    这将构建镜像并在端口 8899 上启动服务器。

    Dockerfile

    Dockerfile 使用多阶段构建:

    阶段 1 — 构建:Maven 3.9 + GraalVM JDK 21 编译项目。

    阶段 2 — 运行时:GraalVM JDK 21 运行时以非 root 用户运行应用。

    # 阶段 1:构建
    FROM maven:3.9-eclipse-temurin-21 AS build
    WORKDIR /app
    COPY pom.xml .
    RUN mvn dependency:go-offline -B
    COPY src ./src
    RUN mvn package -DskipTests -B
    
    # 阶段 2:运行时
    FROM eclipse-temurin:21-jre-alpine
    WORKDIR /app
    RUN addgroup -S firmiana && adduser -S firmiana -G firmiana
    COPY --from=build /app/target/matrix-client-0.0.1.jar app.jar
    RUN mkdir -p /app/data && chown -R firmiana:firmiana /app
    USER firmiana
    VOLUME /app/data
    EXPOSE 8899
    ENTRYPOINT ["java", "-jar", "app.jar"]

    Docker Compose

    version: '3.8'
    services:
      firmiana:
        build: .
        container_name: firmiana
        ports:
          - "8899:8899"
        volumes:
          - firmiana-data:/app/data
        environment:
          - JWT_SECRET=${JWT_SECRET:-...}
          - JWT_REFRESH_SECRET=${JWT_REFRESH_SECRET:-...}
          - DB_URL=${DB_URL:-jdbc:h2:./data/matrix;DB_CLOSE_DELAY=-1}
          - DB_USERNAME=${DB_USERNAME:-sa}
          - DB_PASSWORD=${DB_PASSWORD:-}
        restart: unless-stopped
        healthcheck:
          test: ["CMD", "wget", "--spider", "-q", "http://localhost:8899/_matrix/client/versions"]
          interval: 30s
          timeout: 10s
          retries: 3
    
    volumes:
      firmiana-data:

    环境变量

    变量默认值说明
    JWT_SECRET(开发默认值)JWT 签名密钥
    JWT_REFRESH_SECRET(开发默认值)刷新令牌签名密钥
    DB_URLjdbc:h2:./data/matrix;DB_CLOSE_DELAY=-1JDBC 连接 URL
    DB_USERNAMEsa数据库用户名
    DB_PASSWORD(空)数据库密码

    操作命令

    docker compose up -d        # 构建并启动
    docker compose down          # 停止
    docker compose logs -f       # 查看日志
    docker compose ps            # 查看状态
    docker compose restart       # 重启

    数据持久化

    H2 数据库存储在 Docker 卷(firmiana-data)中,挂载到 /app/data。这确保了数据在容器重启和重建后仍然保留。

    健康检查

    compose 文件包含健康检查,会 ping /_matrix/client/versions。检查状态:

    docker inspect --format='{{.State.Health.Status}}' firmiana