nas安装宝塔流程

群晖 DSM 7.2 使用 Container Manager 安装宝塔面板:独立内网 IP,不占用群晖端口

这篇教程记录一下在群晖 NAS 上通过 Container Manager 安装宝塔面板,并让宝塔容器使用独立内网 IP 的方法。

最终效果是:宝塔面板不和群晖 DSM 共用同一个 IP,也不占用群晖本机端口。

本文使用的是宝塔官方 NAS 镜像:

btpanel/baota:nas

网络模式使用:

macvlan

项目管理方式使用:

Container Manager 项目 / Compose

一、先说明一下最终效果

假设你的局域网是 192.168.xx.0/24,群晖和宝塔可以这样分配:

群晖 DSM IP:192.168.xx.xx
宝塔面板 IP:192.168.xx.xx
网关 IP:192.168.xx.xx
网段:192.168.xx.0/24
Docker 网络:macvlan
宝塔镜像:btpanel/baota:nas
访问地址:http://192.168.xx.xx:8888/btpanel

这里的 192.168.xx.xx 都需要替换成你自己的实际 IP。

比如:

群晖 DSM IP:你的群晖内网 IP
宝塔面板 IP:你准备分配给宝塔容器的独立 IP
网关 IP:你的路由器网关 IP
网段:你的局域网网段
网卡名:ovs_eth0 或 eth0,以实际查询结果为准

二、为什么不用 bridge 或 host

Container Manager 里常见的网络方式主要有两种:bridgehost

1. bridge 模式

bridge 模式需要做端口映射,比如:

群晖IP:8888 -> 容器:8888

这种方式宝塔还是会占用群晖的端口。

如果群晖 DSM、反向代理、Web Station 或其他容器已经用了 80、443、8888 等端口,就容易冲突。

2. host 模式

host 模式会让容器直接使用群晖主机网络。

也就是说:

群晖:192.168.xx.xx
宝塔:192.168.xx.xx

宝塔和群晖共用同一个 IP,也会抢群晖的端口。

3. macvlan 模式

macvlan 可以让容器在局域网里拥有独立 IP。

最终效果类似这样:

群晖:192.168.xx.xx
宝塔:192.168.xx.xx

宝塔的端口都属于宝塔自己的 IP,比如:

192.168.xx.xx:80
192.168.xx.xx:443
192.168.xx.xx:8888
192.168.xx.xx:3306

不会占用群晖 DSM 的端口。


三、准备工作

需要准备:

群晖 DSM 7.x
Container Manager
FinalShell 或其他 SSH 工具
一个没有被占用的局域网 IP

本文示例中,所有 IP 都用占位格式表示:

群晖 IP:192.168.xx.xx
宝塔 IP:192.168.xx.xx
网关 IP:192.168.xx.xx
网段:192.168.xx.0/24

实际操作时一定要替换成你自己的网络参数。


四、FinalShell 连接群晖

用 FinalShell 通过 SSH 连接群晖,然后切换到 root:

sudo -i

查看 DSM 版本:

cat /etc.defaults/VERSION

查看网卡信息:

ip -br addr

查看网关:

ip route

查看 Docker 版本:

docker version

查看 Docker 网络:

docker network ls

也可以一次性执行:

echo "===== DSM VERSION ====="
cat /etc.defaults/VERSION

echo "===== NETWORK INTERFACES ====="
ip -br addr

echo "===== ROUTE / GATEWAY ====="
ip route

echo "===== DOCKER VERSION ====="
docker version

echo "===== DOCKER NETWORKS ====="
docker network ls

重点看这几个信息:

群晖当前 IP
默认网关
当前使用的网卡名
局域网网段

如果你的群晖启用了 Open vSwitch,网卡名很可能是:

ovs_eth0

如果没有启用 Open vSwitch,也可能是:

eth0

后面创建 macvlan 时,parent 参数要用这里查到的实际网卡名。


五、确认宝塔要使用的独立 IP

先找一个没有被占用的 IP 给宝塔使用。

例如准备给宝塔使用:

192.168.xx.xx

可以在局域网电脑上测试:

ping 192.168.xx.xx

如果没有设备响应,说明这个 IP 大概率可以使用。

建议在路由器 DHCP 设置里把这个 IP 做保留,或者放到 DHCP 地址池外,避免以后被其他设备占用。


六、创建 macvlan 网络

下面命令里的参数需要按你的实际网络修改。

需要修改的地方:

--subnet=192.168.xx.0/24       改成你的局域网网段
--gateway=192.168.xx.xx        改成你的网关 IP
--ip-range=192.168.xx.xx/32    改成宝塔容器 IP
-o parent=ovs_eth0             改成你的实际网卡名

创建 macvlan 网络:

docker network create -d macvlan \
  --subnet=192.168.xx.0/24 \
  --gateway=192.168.xx.xx \
  --ip-range=192.168.xx.xx/32 \
  -o parent=ovs_eth0 \
  bt_macvlan

检查是否创建成功:

docker network ls

查看详细信息:

docker network inspect bt_macvlan

正常情况下可以看到:

bt_macvlan    macvlan    local

并且里面应该包含类似信息:

Subnet:192.168.xx.0/24
IPRange:192.168.xx.xx/32
Gateway:192.168.xx.xx
parent:ovs_eth0

如果你的网卡名不是 ovs_eth0,记得把命令里的 ovs_eth0 改成自己的实际网卡名。


七、拉取宝塔官方 NAS 镜像

拉取宝塔官方 NAS 镜像:

docker pull btpanel/baota:nas

查看镜像是否下载成功:

docker images | grep -i baota

正常可以看到类似:

btpanel/baota    nas

可以再检查一下镜像信息:

docker image inspect btpanel/baota:nas --format '
Image={{.RepoTags}}
Architecture={{.Architecture}}
OS={{.Os}}
Created={{.Created}}
Volumes={{json .Config.Volumes}}
ExposedPorts={{json .Config.ExposedPorts}}
Entrypoint={{json .Config.Entrypoint}}
Cmd={{json .Config.Cmd}}
User={{json .Config.User}}
'

正常情况下,宝塔 NAS 镜像会暴露这些端口:

22
80
443
888
8888
3306

由于我们使用的是 macvlan 独立 IP,所以后面不需要做端口映射。


八、创建宝塔数据目录

在群晖上创建宝塔持久化目录:

mkdir -p /volume1/docker/baota/website_data
mkdir -p /volume1/docker/baota/mysql_data
mkdir -p /volume1/docker/baota/vhost

目录用途:

/volume1/docker/baota/website_data  -> 网站目录
/volume1/docker/baota/mysql_data    -> MySQL 数据
/volume1/docker/baota/vhost         -> 站点配置

检查目录:

ls -ld /volume1/docker/baota
ls -ld /volume1/docker/baota/*

九、创建 compose.yaml

创建 Container Manager 项目使用的 compose 文件。

注意:下面的 ipv4_address 要改成你给宝塔准备的独立 IP。

cat > /volume1/docker/baota/compose.yaml <<'EOF'
version: "3.8"

services:
  baota:
    image: btpanel/baota:nas
    container_name: baota
    restart: unless-stopped
    privileged: true
    shm_size: "1g"
    networks:
      bt_macvlan:
        ipv4_address: 192.168.xx.xx
    volumes:
      - /volume1/docker/baota/website_data:/www/wwwroot
      - /volume1/docker/baota/mysql_data:/www/server/data
      - /volume1/docker/baota/vhost:/www/server/panel/vhost

networks:
  bt_macvlan:
    external: true
    name: bt_macvlan
EOF

查看 compose 文件:

cat /volume1/docker/baota/compose.yaml

完整内容应该类似这样:

version: "3.8"

services:
  baota:
    image: btpanel/baota:nas
    container_name: baota
    restart: unless-stopped
    privileged: true
    shm_size: "1g"
    networks:
      bt_macvlan:
        ipv4_address: 192.168.xx.xx
    volumes:
      - /volume1/docker/baota/website_data:/www/wwwroot
      - /volume1/docker/baota/mysql_data:/www/server/data
      - /volume1/docker/baota/vhost:/www/server/panel/vhost

networks:
  bt_macvlan:
    external: true
    name: bt_macvlan

十、在 Container Manager 创建项目

打开群晖 DSM,进入:

Container Manager -> 项目 -> 新增

填写:

项目名称:baota
路径:/volume1/docker/baota
Compose 文件:/volume1/docker/baota/compose.yaml

选择使用现有 compose 文件,然后启动项目。

如果 Container Manager 页面出现端口映射设置,不需要手动填写端口。

因为这里用的是 macvlan 独立 IP,宝塔的端口都直接属于宝塔自己的 IP,不需要映射到群晖 IP 上。


十一、检查容器状态

回到 FinalShell,执行:

docker ps -a --filter "name=baota"

正常状态类似:

CONTAINER ID   IMAGE               COMMAND               STATUS                    NAMES
xxxxxxxxxxxx   btpanel/baota:nas   "/bin/sh -c /bt.sh"   Up xx seconds (healthy)   baota

查看日志:

docker logs --tail=80 baota

如果看到类似:

cat: /www/server/panel/data/o.pl: No such file or directory
/bt.sh: line 52: /sbin/crond: No such file or directory

先不要急着处理。

只要容器状态是:

Up ... (healthy)

一般就可以继续。


十二、确认容器是否拿到独立 IP

执行:

docker inspect baota --format '
Name={{.Name}}
Status={{.State.Status}}
Health={{if .State.Health}}{{.State.Health.Status}}{{else}}none{{end}}
Networks={{json .NetworkSettings.Networks}}
'

重点确认:

Status=running
Health=healthy
IPAddress=192.168.xx.xx
Gateway=192.168.xx.xx
Network=bt_macvlan

如果 IPAddress 是你给宝塔设置的 IP,就说明 macvlan 生效了。


十三、获取宝塔登录信息

执行:

docker exec -it baota bt default

正常会输出类似:

==================================================================
BT-Panel default info!
==================================================================
外网ipv4面板地址: http://公网IP:8888/btpanel
内网面板地址:     http://192.168.xx.xx:8888/btpanel
username: btpanel
password: xxxxxxxx
==================================================================

这里使用内网面板地址访问即可:

http://192.168.xx.xx:8888/btpanel

如果执行下面命令进入了宝塔菜单:

docker exec -it baota bt

看到:

请输入命令编号:

输入:

0

然后回车退出。


十四、访问宝塔面板

浏览器打开:

http://192.168.xx.xx:8888/btpanel

登录信息:

用户名:btpanel
密码:以 docker exec -it baota bt default 输出为准

首次登录后建议马上做以下操作:

修改面板密码
修改安全入口
关闭不需要的服务
不要直接把 8888、3306、22 等端口暴露到公网
如果必须公网访问,建议使用 VPN、反向代理、白名单或防火墙限制

十五、常用维护命令

查看容器状态:

docker ps -a --filter "name=baota"

查看日志:

docker logs --tail=100 baota

重启容器:

docker restart baota

进入宝塔命令菜单:

docker exec -it baota bt

查看默认登录信息:

docker exec -it baota bt default

进入容器 shell:

docker exec -it baota /bin/bash

如果没有 bash,就用:

docker exec -it baota /bin/sh

查看容器网络:

docker inspect baota --format '{{json .NetworkSettings.Networks}}'

查看 macvlan 网络:

docker network inspect bt_macvlan

十六、更新宝塔镜像

拉取新镜像:

docker pull btpanel/baota:nas

进入项目目录:

cd /volume1/docker/baota

重建容器:

docker compose down
docker compose up -d

检查状态:

docker ps -a --filter "name=baota"
docker logs --tail=80 baota

十七、删除旧镜像

如果之前测试过旧版镜像,比如:

pch18/baota:latest

新版稳定后可以删除:

docker rmi pch18/baota:latest

如果提示镜像被容器占用,先检查旧容器:

docker ps -a | grep pch18

确认不用后再删除对应容器和镜像。


十八、macvlan 注意事项

1. 群晖本机默认不能访问宝塔容器 IP

macvlan 模式下,群晖宿主机默认不能直接访问容器 IP。

所以不要在群晖 SSH 里用下面这种方式判断宝塔是否正常:

curl http://192.168.xx.xx:8888

应该在同一局域网的电脑浏览器里访问:

http://192.168.xx.xx:8888/btpanel

2. 不需要端口映射

compose 文件里没有写:

ports:

这是正常的。

因为宝塔已经有自己的独立 IP:

192.168.xx.xx

所以宝塔端口直接属于这个 IP:

192.168.xx.xx:80
192.168.xx.xx:443
192.168.xx.xx:888
192.168.xx.xx:8888
192.168.xx.xx:3306
192.168.xx.xx:22

3. 路由器里建议保留宝塔 IP

建议在路由器 DHCP 设置里保留宝塔 IP:

192.168.xx.xx

避免以后被其他设备拿走,造成 IP 冲突。


十九、如果网关写错了怎么办

如果 bt_macvlan 创建时网关写错了,不能直接修改,需要删除后重建。

先停止并删除宝塔容器:

docker stop baota
docker rm baota

删除旧网络:

docker network rm bt_macvlan

重新创建 macvlan 网络:

docker network create -d macvlan \
  --subnet=192.168.xx.0/24 \
  --gateway=192.168.xx.xx \
  --ip-range=192.168.xx.xx/32 \
  -o parent=ovs_eth0 \
  bt_macvlan

然后回到 Container Manager,重新启动 baota 项目即可。


二十、最终效果

完成后效果如下:

宝塔不和群晖共用内网 IP
宝塔独立使用 192.168.xx.xx
宝塔端口不占用 DSM
使用宝塔官方 NAS 镜像 btpanel/baota:nas
通过 Container Manager 项目管理
容器状态 healthy
内网访问正常

最终访问地址:

http://192.168.xx.xx:8888/btpanel

这种方式比较适合在群晖 NAS 上部署宝塔面板,既方便 Container Manager 管理,也避免了和 DSM 端口冲突。

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容