在 威联通 NAS(用 Docker/Container Station) 上可以用已有的 MySQL 来部署 Umami。
- Umami 支持的数据库:PostgreSQL、MySQL(≥ 8.0)和 MariaDB(≥ 10.5)。也可以用已运行的 MySQL。
- Umami 的数据库连接 用环境变量
DATABASE_URL
,MySQL 的示例格式是:
DATABASE_URL=mysql://用户名:密码@主机:3306/数据库名
。
一、在 NAS 上部署流程
数据库配置
- 在 MySQL 上建库和专用用户 (替换
umamiuser
/password
/umami
):
sql
CREATE DATABASE umami CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'umamiuser'@'%' IDENTIFIED BY 'StrongPasswordHere';
GRANT ALL PRIVILEGES ON umami.* TO 'umamiuser'@'%';
FLUSH PRIVILEGES;
- 确认 MySQL 版本(确保 ≥ 8.0;若是 MariaDB 请 ≥10.5,且某些 MariaDB 版本需要额外修补/设置)。若有 MariaDB 的问题,社区有相关修复建议。
二、网络配置
- 先创建 macvlan 网络(在 NAS 上的终端/SSH 执行)
下面命令中假设 NAS 的物理接口名为 eth0(在 QNAP 上可能是 eth0、bond0、br0 等)。如果不确定,请先运行 ip addr 找到对应用于 LAN 的接口名称,然后替换 eth0。网络子网使用 192.168.1.0/24,网关 192.168.1.1
bush
# 在 QNAP / NAS 的 Shell 上执行(以 root 或有 docker 权限用户)
# 1) 确认宿主机上用于 LAN 的接口(如 eth0)。若不确定,先运行 `ip addr`.
# 2) 创建 macvlan 网络(名字叫 umami_macvlan),并在其中保留 IP 池(这里示例)
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 \
umami_macvlan
我这里已经建有另一个macvlan网络dify_lan我就直接用了
- 选定ip
确认 192.168.1.230 没被占用(一定要运行):
bush
# 若能收到响应说明该 IP 已被占用 --- 若被占用请先换 IP
ping -c 3 192.168.1.230
# 检查局域网 ARP(若无响应也可能未配置)
arping -c 3 192.168.1.230 || true
如果 ping 有响应,请换一个未占用的 IP(例如 .231 / .232 等)。
3.测试连接在 dify_lan 网络上测试 MySQL 连接
使用一个临时容器(mysql 客户端镜像)连到 dify_lan 网络并测试连接 MySQL:
bush
docker run --rm --network=dify_lan mysql:8.0 \
mysql -h192.168.1.6 -P3306 -uumamiuser -pStrongPasswordHere -e "SELECT VERSION();"
-
成功:会输出 MySQL 版本。表示网络与凭证 OK。
-
失败:会报超时或认证失败,按错误信息排查(MySQL 是否允许远程、用户权限、NAS 防火墙、端口监听等)。
三、 在 NAS 的 Docker(或 Container Station)里运行 Umami 镜像:
可以直接使用官方带 MySQL 的镜像 tag umami:mysql-latest
,或使用通用镜像并把 DATABASE_URL
指向外部 MySQL。下面给出一个 docker-compose.yml
示例,把下面文件放到 ~/umami/docker-compose.yml(或特定的目录),并替换 DATABASE_URL / APP_SECRET / HASH_SALT 为真实值,然后在该目录运行 docker-compose up -d。
yaml
version: "3.8"
services:
umami:
image: docker.1ms.run/umamisoftware/umami:mysql-latest
container_name: umami
restart: unless-stopped
ports:
- "3000:3000" # 若不想映射宿主端口可删掉此行
environment:
# 请替换为你的 MySQL 信息(替换信息)
DATABASE_URL: "mysql://umamiuser:StrongPasswordHere@192.168.1.x:3306/umami"
# 请替换为强随机字符串(替换信息)
APP_SECRET: "replace_with_a_long_random_string_here"
HASH_SALT: "replace_with_some_random_salt"
volumes:
- ./umami-uploads:/usr/src/app/public/uploads
networks:
dify_lan_net:
ipv4_address: 192.168.1.230
networks:
dify_lan_net:
external: true
name: dify_lan
-
关于
<MYSQL_HOST>
的选择:- 如果 MySQL 就运行在 NAS 主机(非容器),把
<MYSQL_HOST>
填成 NAS 的内网 IP(例如192.168.1.100
)或127.0.0.1
(注意:在容器中127.0.0.1
指容器自身,通常不能用于访问宿主机 MySQL,除非做了特殊网络配置)。 - 如果 MySQL 以容器形式运行并在同一个 Docker 网络里,填容器名(例如
mysql
),并确保两个容器在同一网络/compose 下。
- 如果 MySQL 就运行在 NAS 主机(非容器),把
我这里可能是网络问题要改成bridge模式才能访问到mysql,没有这个问题的跳过,有问题的可以在参考下面:
四、访问服务
在浏览器打开 http://<NAS_IP>:3000
在 Umami 中,初始账号和密码默认是:
- 用户名:admin
- 密码:umami
然后就可以开始愉快的使用了,要发布公网服务的记得做端口转发
使用教程看这里-> umami使用