0%

DX4600安装虚拟机

绿联NAS DX4600安装虚拟机,非官方教程。基于docker,不会修改系统任何数据。本文在BV1iB421k7Xe的基础上,对网络、配置文件持久化、反向代理等方面进行了完善。

环境准备

  1. SSH登录DX4600,DX4600开启ssh
  2. 安装 docker-compose
  3. 切换到桥接模式
  4. 在某个地方创建2个目录,存放配置文件和ISO镜像。webvirtcloud/configwebvirtcloud/iso
  5. 复制操作系统镜像文件(例如Ubuntu、Windows等)到webvirtcloud/iso

备份配置文件

下载镜像linkease/webvirtcloud:0.2。创建一个不启动的容器,从里面复制配置文件。需要备份/etc/libvirt/etc/nginx/conf.d/webvirtcloud.conf

1
2
3
4
5
docker pull linkease/webvirtcloud:0.2
docker container create --name temp_webvirt linkease/webvirtcloud:0.2
docker container cp temp_webvirt:/etc/libvirt M2_2/docker/webvirtcloud/etc
docker container cp temp_webvirt:/etc/nginx/conf.d/webvirtcloud.conf M2_2/docker/webvirtcloud
docker container rm -f temp_webvirt

网络的配置放在 /etc/libvirt/qemu/networks,实例的配置放在 /etc/libvirt/qemu,存储池的配置放在 /etc/libvirt/storage

修改 webvirtcloud.conf,将监听端口从80改为6009。因为只想通过域名访问,所以只监听一个IP地址,而不是所有IP。IP地址192.168.0.1是Docker NAT IP,而不是路由器的IP,nginx容器在这个网段。

1
2
3
4
server {
listen 192.168.0.1:6009;
....
}

配置反向代理

首先配置好域名解析。这里使用的是Nginx Proxy Manager。填写webvirtcloud监听的IP地址端口,设置好SSL。

Advanced选项卡下面配置好如下指令。主要是对这三个路径配置websocket反向代理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
client_max_body_size 1024M;
location /novncd {
include conf.d/include/proxy.conf;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}

location /socket.io/ {
include conf.d/include/proxy.conf;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}

location /websockify {
include conf.d/include/proxy.conf;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}

启动容器

使用docker compose启动容器。

1
docker compose -f M2_2/docker-compose/dx4600.inc/webvirtcloud/webvirtcloud.yml up &

compose文件如下。关键点,privileged: truenetwork_mode: host

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
version: "3.9"
services:
webvirtcloud:
image: 'linkease/webvirtcloud:0.2'
container_name: webvirtcloud
privileged: true
network_mode: host
volumes:
- '/home/pkemb/M2_2/docker/webvirtcloud/config:/srv/webvirtcloud/dbconfig'
- '/home/pkemb/M2_2/docker/webvirtcloud/iso:/var/lib/libvirt/iso'
- '/home/pkemb/M2_2/docker/webvirtcloud/etc:/etc/libvirt'
- '/home/pkemb/M2_2/docker/webvirtcloud/webvirtcloud.conf:/etc/nginx/conf.d/webvirtcloud.conf:ro'
- '/sys/fs/cgroup:/sys/fs/cgroup'
tmpfs:
- /run/lock
- /run
- /tmp
cgroup: host
tty: true
stdin_open: true
restart: always

初始化服务

第一次启动容器需要初始化服务。docker exec进入容器内部,执行如下命令启动服务,并向local_settings.py添加DEBUG=True。域名替换成实际解析的域名。这个步骤只需要做一次。cloud.dx4600.inc是反向代理的域名,443是https端口。如果不想要https,可以设置为80。修改local_settings.py中域名的配置,http替换为https,删除:443

1
2
3
4
docker exec -it webvirtcloud /bin/bash
/srv/startup.sh cloud.dx4600.inc 443
sed -i -e 's/http:/https:/' -e 's/:443//' /srv/webvirtcloud/dbconfig/local_settings.py
echo "DEBUG=True" >> /srv/webvirtcloud/dbconfig/local_settings.py

如果local_settings.py中,CSRF_TRUSTED_ORIGINS配置的域名与实际访问的域名不一样,会出现如下错误。

退出容器shell,重启容器。因为网络模式是host,容器会在主机创建virbr0虚拟网卡。启动容器之前,需要先删除网卡。

1
2
3
4
docker compose -f M2_2/docker-compose/dx4600.inc/webvirtcloud/webvirtcloud.yml down
ifconfig virbr0 down
ip link delete virbr0
docker compose -f M2_2/docker-compose/dx4600.inc/webvirtcloud/webvirtcloud.yml up -d

基础配置

浏览输入cloud.dx4600.inc 访问控制台,默认的用户名和密码都是admin。关于节点、存储的创建,可以参考B站视频 绿联NAS如何安装虚拟机,DX4600全系列支持

网络

创建一个桥接网络,网桥名称填br-wan。创建虚拟机时选择这个网络,这样虚拟机可以拿到路由器分配的IP地址,方便访问虚拟机。

nat 网络使用自带的default

如果重启了容器,在启动容器之前,要先删除虚拟网卡。不然网络会异常。

1
2
ifconfig virbr0 down
ip link delete virbr0

创建虚拟机

具体步骤可以参考B站视频绿联NAS如何安装虚拟机,DX4600全系列支持。这里提一下我安装虚拟机遇到的坑:

  • Ubuntu 20.04 server:可以直接安装成功
  • Ubuntu 22.04 server:可以直接安装成功。不要安装22.10,已经EOL了。安装22.10的过程中会crash。
  • win10:默认创建的磁盘总线是virtio,Windows不认,会找不到磁盘。需要手工添加一个sata总线的磁盘。
  • win7:磁盘的问题和win10一样,手工添加一个sata硬盘。win7镜像自带的安装程序走到创建分区这一步时,创建分区失败。我的解决方法是找一个PE ISO镜像,先进入PE,在PE安装win7。

ubuntu20.04

ubuntu22.04

win7

win10

太卡了。