Docker部署Leantime项目管理(Ubuntu、威联通NAS、Docker)

官网 GitHub - Leantime/leantime: Leantime is a goals focused project management system for non-project managers. Building with ADHD, Autism, and dyslexia in mind.
image

序言

性能占用
leantime 主体:150MB
mysql:470MB
合计:620MB

我们在 Docker Hub 上维护了一个官方的 Docker 镜像 。要运行该镜像,请输入您的 MySQL 凭据并执行命令。您可以从 .env 文件中传入所有配置变量。

docker run -d --restart unless-stopped -p 8080:8080 --network leantime-net \
-e LEAN_DB_HOST=mysql_leantime \
-e LEAN_DB_USER=admin \
-e LEAN_DB_PASSWORD=321.qwerty \
-e LEAN_DB_DATABASE=leantime \
-e LEAN_EMAIL_RETURN=changeme@local.local \
--name leantime leantime/leantime:latest

除非您在其他地方定义了数据库,否则您应该使用我们的 docker-compose 文件 。

启动后,您可以访问 <yourdomain.com>/install 并运行安装脚本。

重要提示:如果您计划使用插件,则需要挂载插件文件夹 plugins:/var/www/html/app/Plugins 并确保 www-data 用户拥有访问权限。否则,安装可能会失败,或者插件会在重启后被移除。

Docker 安装说明

如果您打算将 Leantime 部署在反向代理(例如 nginx)之后,以处理自定义域名解析和 SSL 卸载,则需要在 Docker 中设置以下环境变量。

-e LEAN_APP_URL=https://yourdomain.com \
  • 将 yourdomain.com 替换为您的自定义域名。

安装

创建文件夹

需要指定的基目录 /opt/docker-stacks/Leantime/ 创建 4 个子文件夹:

  1. db_data (用于数据库)

  2. public_userfiles (用于上传的文件)

  3. plugins (用于插件)

  4. logs (用于日志)

# -p 会自动创建父目录 /opt/docker-stacks/Leantime
sudo mkdir -p /opt/docker-stacks/Leantime/{db_data,public_userfiles,plugins,logs}

创建yaml文件

touch ~/docker/leantime/docker-compose.yml

修改文件权限

新创建的目录所有者是 rootLeantime 容器(以 www-data, UID 33 运行)无法写入。必须执行

# 把这些目录的所有权交给容器内的 www-data 用户 (UID 33)
sudo chown -R 33:33 /opt/docker-stacks/Leantime/public_userfiles
sudo chown -R 33:33 /opt/docker-stacks/Leantime/plugins
sudo chown -R 33:33 /opt/docker-stacks/Leantime/logs

(db_data 目录通常由 MySQL 容器自己处理,一般不用管。)

启动服务: cd ~/docker/leantime && docker-compose up -d
但是部分情况下无法执行,会权限报错。

# 完全开放权限
sudo chmod 777 /opt/docker-stacks/Leantime/*

使用yaml安装

可以使用portainer.io面板安装,通过堆栈创建。

使用命令安装

使用 docker-compose up -d 命令启动 docker-compose。

访问: 在你的宿主机浏览器上访问 http://192.168.37.100:9011

docker-compose.yml

version: '3.8'

services:
  # 1. 数据库服务 (官方推荐的 MySQL 8.4)
  leantime_db:
    image: mysql:8.4
    container_name: mysql_leantime
    restart: unless-stopped
    networks:
      - leantime-net
    environment:
      # --- (A) 在这里设置你的数据库凭据 ---
      MYSQL_ROOT_PASSWORD: pxxxMyRootPassword!@# # (A-1: 新的 root 密码)
      MYSQL_DATABASE: leantime
      MYSQL_USER: leantime
      MYSQL_PASSWORD: pxxxMySecretPass!123 # (A-2: 新的应用密码)
    volumes:
      # 使用路径挂载 (./db_data),数据会存在当前目录,方便管理
      - /opt/docker-stacks/Leantime/db_data:/var/lib/mysql
    command: --character-set-server=UTF8MB4 --collation-server=UTF8MB4_unicode_ci
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 30s
      timeout: 10s
      retries: 3

  # 2. Leantime 主程序
  leantime:
    image: leantime/leantime:latest
    container_name: leantime
    restart: unless-stopped
    ports:
      # 主机端口 9011 -> 容器端口 8080 (官方的容器端口是 8080)
      - "9011:8080"
    networks:
      - leantime-net
    environment:
      # --- (B) Leantime 的数据库连接设置 ---
      # 必须和上面 (A) 部分的凭据 *完全一致*
      - LEAN_DB_HOST=leantime_db  # (这是数据库的服务名,不要改)
      - LEAN_DB_DATABASE=leantime
      - LEAN_DB_USER=leantime
      - LEAN_DB_PASSWORD=pxxxMySecretPass!123 # (B-1: 必须和 A-2 完全一样)
      
      # --- (C) 你的服务器访问地址 ---
      # !! 把 [YOUR_UBUNTU_IP] 替换成你服务器的IP
      - LEAN_APP_URL=http://192.168.37.100:9011 # (B-2: 换成你的IP)
    volumes:
      # 官方推荐的全部挂载点,全部使用路径挂载
      - /opt/docker-stacks/Leantime/public_userfiles:/var/www/html/public/userfiles
      - /opt/docker-stacks/Leantime/plugins:/var/www/html/app/Plugins  # 插件
      - /opt/docker-stacks/Leantime/logs:/var/www/html/storage/logs    # 日志
    depends_on:
      leantime_db:
        # 等待数据库健康检查通过后再启动,非常重要!
        condition: service_healthy

# 3. 定义网络
networks:
  leantime-net:

威联通container Station

由于MySQL内存开销较大,因此采用MariaDB分支替代。

推送到私有仓库(可以直接访问可跳过)

步骤 C: 打标签 (Tag)

在 Ubuntu Server 上执行:

# 格式: docker tag [源镜像名] [NAS_IP:端口/镜像名]
docker pull mariadb:latest

docker tag mariadb:latest 你的私有仓库地址:端口/mariadb:latest

docker pull leantime/leantime:latest
docker tag leantime/leantime:latest 你的私有仓库地址:端口/leantime/leantime:latest

步骤 D: 推送 (Push) 到私有仓库

docker push 你的私有仓库地址:端口/mariadb:latest

docker push 你的私有仓库地址:端口/leantime/leantime:latest

创建应用

通过Container Station分别创建容器

完全绕开了“堆栈(Stack)”和“SSH 权限”这两个最大的障碍。

  • 关于权限(第1点): 如果通过 QNAP 的图形界面 (GUI) 去创建容器,并在“存储”那里指定挂载目录,QNAP 的 GUI 会在后台自动帮你处理好读写权限 (RW)。这完美绕过了 SSH。
  • 关于网络(第2点):MariaDB 数据库 的端口暴露(映射) 到 NAS 主机上,然后让 leantime 容器去连接 NAS 的局域网 IP 注意,主机地址要固定!

创建文件夹

  1. 打开 "File Station"。
  2. 在你用于 Docker 的共享文件夹中,创建一个新文件夹 leantime
  3. leantime 文件夹内,再创建 5 个子文件夹:
db_data #用于数据库
config
userfiles
plugins
logs

创建 MariaDB 数据库容器

  1. 应用名称: mariadb:latest

  2. 镜像: 127.0.0.1:57080/mariadb:latest
    image
    配置容器页面中:
    设置名称:leantime-mariadb
    重新启动策略:停止时除外
    高级设置中:

  3. 环境 (添加以下4个变量):
    左边变量 = 右边值

    • MARIADB_ROOT_PASSWORD = 设置一个你自己的root密码 pxxxMyRootPassword!@#

    • MARIADB_DATABASE = leantime (数据库名称)

    • MARIADB_USER = leantime (数据库用户名)

    • MARIADB_PASSWORD = 设置一个你自己的用户密码 pxxxMySecretPass!123

  4. 网络 (关键步骤):

    • 网络模式: 默认(NAT)
    • 端口转发: 点击 “新增
      • 主机端口: 33060 (你可以自定义,但要记住)
      • 容器端口: 3306 (这是 MariaDB 的默认端口,不要改)
        image
  5. 存储 (关键步骤):

    • 挂载点: 点击 “新增

      • 主机路径: 选择你刚才创建的 /Custom_program/docker_data/leantime/db_data 文件夹。

      • 容器路径: /var/lib/mysql

      • 权限: 确保 "读/写" (RW) 是勾选的。

  6. 点击 “创建”。等待它启动并显示为“运行中”。


步骤2:创建 Leantime 应用容器

  1. 回到 "Container Station" >容器> “创建”。
  2. 应用名称: leantime/leantime:latest
  3. 镜像: 127.0.0.1:57080/leantime/leantime:latest

配置容器页面中:
设置名称:leantime-leantime
重新启动策略:停止时除外

高级设置中:
4. 环境 (关键步骤,添加以下4个变量):

- `LEAN_DB_HOST` = `192.168.50.201` ( **必须**是你的 NAS 主机 IP)
    
- `LEAN_DB_PORT` = `33060` ( **必须**是上一步中你设置的**主机端口**)
    
- `LEAN_DB_DATABASE` = `leantime` (与上一步一致)
    
- `LEAN_DB_USER` = `leantime` (与上一步一致)
    
- `LEAN_DB_PASSWORD` = `你设置的用户密码` (与上一步MARIADB_PASSWORD一致) pxxxMySecretPass!123
  1. 网络:
  • 网络模式: 默认(NAT)
    • 端口转发: 点击 “新增
      • 主机端口: 8052 (这是你最终的访问端口)

      • 容器端口: 8080 (这是 Leantime 默认端口,不要改)

  1. 存储 (添加 4 个挂载点):
    添加卷--绑定装载主机路径
    • 第1个:

      • 主机路径: /Custom_program/docker_data/leantime/config

      • 容器路径: /var/www/html/config

    • 第2个:

      • 主机路径: /Custom_program/docker_data/leantime/userfiles

      • 容器路径: /var/www/html/userfiles

    • 第3个:

      • 主机路径: /Custom_program/docker_data/leantime/plugins

      • 容器路径: /var/www/html/plugins

    • 第4个:

      • 主机路径: /Custom_program/docker_data/leantime/logs

      • 容器路径: /var/www/html/logs
        image

  2. 点击 “创建”。

步骤3:访问和安装

  1. 等待 leantime 容器启动并显示为“运行中”。

  2. 打开浏览器,访问: http://192.168.50.201:8052

  3. 按照屏幕提示创建你的管理员账户。

  4. 完成后,你就可以通过 http://192.168.50.201:8052 正常使用了。

可以FRP,远程管理。
image

posted @ 2025-11-12 13:13  舟清颺  阅读(55)  评论(0)    收藏  举报