Docker部署Leantime项目管理(Ubuntu、威联通NAS、Docker)
序言
性能占用
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 个子文件夹:
-
db_data(用于数据库) -
public_userfiles(用于上传的文件) -
plugins(用于插件) -
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
修改文件权限
新创建的目录所有者是 root,Leantime 容器(以 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 注意,主机地址要固定!
创建文件夹
- 打开 "File Station"。
- 在你用于 Docker 的共享文件夹中,创建一个新文件夹
leantime。 - 在
leantime文件夹内,再创建 5 个子文件夹:
db_data #用于数据库
config
userfiles
plugins
logs
创建 MariaDB 数据库容器
-
应用名称:
mariadb:latest -
镜像:
127.0.0.1:57080/mariadb:latest

配置容器页面中:
设置名称:leantime-mariadb
重新启动策略:停止时除外
高级设置中: -
环境 (添加以下4个变量):
左边变量 = 右边值-
MARIADB_ROOT_PASSWORD=设置一个你自己的root密码pxxxMyRootPassword!@# -
MARIADB_DATABASE=leantime(数据库名称) -
MARIADB_USER=leantime(数据库用户名) -
MARIADB_PASSWORD=设置一个你自己的用户密码pxxxMySecretPass!123
-
-
网络 (关键步骤):
- 网络模式:
默认(NAT) - 端口转发: 点击 “新增”
- 主机端口:
33060(你可以自定义,但要记住) - 容器端口:
3306(这是 MariaDB 的默认端口,不要改)

- 主机端口:
- 网络模式:
-
存储 (关键步骤):
-
挂载点: 点击 “新增”
-
主机路径: 选择你刚才创建的
/Custom_program/docker_data/leantime/db_data文件夹。 -
容器路径:
/var/lib/mysql -
权限: 确保 "读/写" (RW) 是勾选的。
-
-
-
点击 “创建”。等待它启动并显示为“运行中”。
步骤2:创建 Leantime 应用容器
- 回到 "Container Station" >容器> “创建”。
- 应用名称:
leantime/leantime:latest - 镜像:
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
- 网络:
- 网络模式:
默认(NAT)- 端口转发: 点击 “新增”
-
主机端口:
8052(这是你最终的访问端口) -
容器端口:
8080(这是 Leantime 默认端口,不要改)
-
- 端口转发: 点击 “新增”
- 存储 (添加 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

-
-
- 点击 “创建”。
步骤3:访问和安装
-
等待
leantime容器启动并显示为“运行中”。 -
打开浏览器,访问:
http://192.168.50.201:8052 -
按照屏幕提示创建你的管理员账户。
-
完成后,你就可以通过
http://192.168.50.201:8052正常使用了。
可以FRP,远程管理。

本文来自博客园,作者:舟清颺,转载请注明原文链接:https://www.cnblogs.com/zqingyang/p/19213631

本文介绍了如何在Ubuntu和威联通NAS中Docker部署Leantime项目管理

浙公网安备 33010602011771号