接到了从零开始配置一台服务器的单子,起飞~ 与 VPS 运维札记 不同,本文重点关注物理服务器(包括机房网络拓扑、防火墙、ESXi 虚拟机平台等)的搭建。

架构简介

目前的架构非常简单:防火墙持有公网 IP,并挡在最前面提供流量过滤和 NAT 服务;服务器在防火墙后面,运行 ESXi 虚拟化平台。所有虚拟机共享一个 10.x.x.x 的大内网,其中一台虚拟机挡在其它虚拟机前面、提供反向代理的服务(「时空枢纽」虚拟机)。

防火墙使用安恒信息的明御安全网关。

虚拟机中走代理

服务器目前的 IP 只能访问教育网内的地址,因此需要一个跳板才能正常下载各种安装脚本。在终端中执行:

1
2
export http_proxy="http://10.x.x.x:7890"
export https_proxy="http://10.x.x.x:7890"

即可设置临时全局代理。

Docker 镜像源

参见 USTC 反代 Docker Hub 的帮助页

Clash 代理

上述 7890 端口的代理服务,由 Docker 中的 Clash 提供。

本体

将 CFW 的配置文件复制出来,把 port 改名为 mixed-port、将 external-controller 的值改为 0.0.0.0:9090,并上传到服务器某目录的 config.yaml。在该目录下运行:

1
2
sudo docker pull dreamacro/clash:latest
sudo docker run -d --name=clash -v "$PWD/config.yaml:/root/.config/clash/config.yaml" -p "7890:7890" -p "9090:9090" --restart=unless-stopped dreamacro/clash

GUI

1
sudo docker run -p PORT:80 -d --name yacd --restart=always haishanh/yacd

ESXi

更改虚拟磁盘类型

本节试图将虚拟机磁盘从厚置备切换为精简置备。

按照官方教程使用「迁移」功能是会失败的,提示「Disk ‘2000’ is not moving, so any transform requests will not be honored.」/「磁盘“2000”没有移动,所以任何转换请求都不会被接受。」。

解决办法是使用克隆功能,并在克隆时选择新磁盘为「精简置备」,后再删掉原虚拟机即可。

选择精简置备

更多信息可参阅更改虚拟磁盘的厚置备或精简置备 - VMWare

硬盘直通与 Synology

虽然最后并没有装成功,搜都搜了,就放在这里吧…

网络拓扑

防火墙

添加端口映射

先在「策略配置 - NAT 转换策略 - 目的 NAT」中新建一条端口转发策略,再在 IPv4 控制策略里放行刚刚新添加的端口。

ESXi 内虚拟机的 IP 由硬件 NAT 分配

我们希望在服务器机房组成一个「大内网」(比如 10.x.x.x),其中的虚拟机都能获得属于自己的一个 IP。而不是被困在 VMWare 的 NAT 网络之中。这样,即便后续添置新的物理服务器,也能实现机房内所有物理/虚拟机器的互访。

ESXi 侧配置

在 ESXi 中添加虚拟交换机,上行链路选择连接到物理 NAT 设备上的网口。添加端口组,虚拟交换机选择刚刚创建的交换机即可。

物理 NAT 设备侧配置

在连接到 ESXi 服务器的网口上配置 DHCP 服务。一个可以参考的配置如下:

  • 子网/掩码:10.0.0.0/16
  • 网关:10.0.0.1
  • DNS 服务器:10.0.0.1

在「网络配置-接口配置」中,将对应接口的 IP 地址设置为:10.0.0.1/16

iSCSI

群晖 NAS 上开启 iSCSI 资源池

ESXi 上连接 iSCSI 资源池

应用程序:ownCloud

分区并挂载

执行下述指令可以看到所有的物理磁盘,如本例中 iSCSI 的虚拟磁盘是 /dev/sda

1
sudo fdisk --list

执行下面的指令进入 fdisk 命令行:

1
sudo fdisk /dev/sda

输入 n 以创建新分区,按照指引分完后,输入 w 以保存分区表修改。退出 fdisk 后,可用下述指令查看分区,如本例中的新分区为 /dev/sda1

1
sudo fdisk -l | grep dev

先格式化之:

1
sudo mkfs.ext4 /dev/sda1

后挂载之:

1
sudo mount /dev/sdb1 /mnt/sda1

启动 ownCloud

完整的 docker-compose.yml 请参见官方教程,下面的只是截取了我做出修改的部分。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
version: "3"

volumes:
mysql:
driver: local
redis:
driver: local

services:
owncloud:
# ...
volumes:
- /mnt/sda1/owncloud/files:/mnt/data

mariadb:
# ...
volumes:
- mysql:/var/lib/mysql

redis:
# ...
volumes:
- redis:/data

当然也别忘了官方教程里面提到的 .env 文件。

启动容器:

1
sudo docker-compose up -d

停止并删除容器:

1
sudo docker-compose down -v