一句话概括
对前段时间花了一些功夫在一台服务器上搭建的一个实验和应用环境过程和遇到的问题做一个记录
服务器配置如下
| 配置项 | 模式 | 大小 |
|---|---|---|
| 硬盘 | raid5 | 11T |
| 内存 | 64GB |
这个服务器用来跑机器学习的实验可能不太合适,毕竟没有合适的显卡,因此我主要打算把它用来做一个其他实验的环境机器以及 git 服务器和本地网盘
- 实验环境基础为 —— kvm 和 docker
- git 服务器 —— gogs
- 本地网盘 —— nextcloud 云盘
阶段
主要过程分成了三个阶段
- 安装服务器 server 系统
- 安装 kvm docker 实验环境
- 安装 git 服务器和本地网盘
安装 Ubuntu server 18.04
本来是不想装这么新的系统的,但是奈何我本人比较喜欢新的东西,于是选择了 18.04 这个版本,有一些小坑暂时不表,这个过程相对比较常规,与在一台台式机上安装 Linux 系统无太大出入,只有一点不太一样,那就是硬盘的设置,服务器一般都有 raid 卡,需要对硬盘进行 raid 配置才能正常使用,有关这部分的内容我在这篇里有专门的讲述过,这里不再赘述。
还有一点即是网络的配置,我本来是想直接修改 /etc/network/interface,然而我在 18.04 的系统下并没有看到这个文件,于是进行了一番检索之后才发现 18.04 的网络配置方式已经发生了改变,它使用了一种叫 netplan 的网络管理方式,有关于这个新的配置方式,我在另一篇中有讲解,其静态 IP 的配置如下1
2
3
4
5
6
7
8
9
10
11
12
13
14#本段程序适用于 Ubuntu 18.04
$ cd /etc/netplan
$ vi 50-cloud-init.yaml
对文件进行如下修改
network:
version: 2
ethernets:
eth0:
dhcp4: no
addresses: [192.168.0.3/24] # 更换为你的 ip 地址
gateway4: 192.168.0.1 # 更换为你的网关地址
nameservers:
addresses: [114.114.114.114]
optional: true
安装完成 server 系统并配置好网络之后,就没再去过机房里了,以下操作都是在工位的电脑上用 ssh 连上去进行的操作。
安装 kvm 和 docker 环境
这个部分的目标有如下几个
- 配置 Ubuntu centos win7 docker 四种环境的虚拟机模板
- 配置外部网络对于 kvm 虚拟机的直接访问
- 配置外部网络对于 docker 容器的访问
解释一下,这里说的 docker 环境有两种,一种是直接搭建在宿主机上的,另一种是搭建在 kvm 虚拟机中的,前者我用来配置了 nextcloud 网盘服务,后者作为实验环境
这个部分算是相对来说有些难度的一块了,倒不是因为说安装 kvm 和 docker 这两个环境困难,而是因为在安装完这两个环境之后需要进行的远程连接配置相对比较麻烦
安装过程
网络配置过程
这里分为两个部分,一个是保证工位机器能够直接 ssh 连上 kvm 虚拟机,二是将 docker 的端口映射到虚拟机上,先说后面的需求,这个相对简单
docker 端口访问配置
由于 docker 上面难免会配置一些诸如网络应用的服务,因此我们将需要外部访问的内容映射到虚拟机的端口上即可,如需进一步映射到宿主机的某个端口上,可以参见 kvm 虚拟机端口映射部分来实现1
docker run -p 8080:80 //这样就把容器的 80 端口映射到虚拟机的 8080 端口
kvm 端口访问配置
kvm 虚拟机的端口映射到宿主机的端口需要用到端口转发,而 NAT 模式默认每次虚拟机重启之后分配的 IP 地址是随机的,因此,需要在 kvm 虚拟机中设置 IP 为静态 IP,方式如下1
2
3
4
5
6
7
8
9
10#本段程序适用于 Ubuntu 16.04
$ cd /etc/network/
$ vim interfaces
在该文件下加上如下内容
auto eth0
iface eth0 inet static
address 192.168.0.3
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameserver 114.114.114.114
由于 Ubuntu 18 已经使用了新的网络管理方式 netplan,因此在 Ubuntu 18 上我们使用 netplan 进行修改1
2
3
4
5
6
7
8
9
10
11
12
13
14#本段程序适用于 Ubuntu 18.04
$ cd /etc/netplan
$ vi 50-cloud-init.yaml
对文件进行如下修改
network:
version: 2
ethernets:
eth0:
dhcp4: no
addresses: [192.168.0.3/24]
gateway4: 192.168.0.1
nameservers:
addresses: [114.114.114.114]
optional: true
实现了静态 IP 的修改之后,再进行端口转发的工作就相对比较便捷,直接修改 iptables 的规则进行转发操作1
2
3
4
5
6
7
8
9# 修改 iptables 规则
# 修改 INPUT 链规则,开放 10000 端口
iptalbes -A INPUT -p tcp --dport 10000 -j ACCEPT
# 修改 nat 表 PREROUTING 链规则,将 1000 端口转发至内网 IP 192.168.0.3 的 22 端口
iptables -A PREROUTING -d 10.10.20.46/32 -p tcp --dport 10000 -j DNAT --to 192.168.0.3:22
# 修改 FORWARD 链规则,用来允许目的地址为 10.10.20.0/24 的连接
iptables -A FORWARD -d 10.10.20.0/24 -o virbr0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
# 修改 FORWARD 链规则,用来允许源地址为 10.10.20.0/24 的连接
iptables -A FORWARD -s 10.10.20.0/24 -i virbr0 -j ACCEPT
这些内容都配置完成之后,服务器上的环境实际上已经相对很齐全了,下面是对于 git 服务器和网盘的配置
gogs 服务器 + nextcloud 网盘
- gogs 安装,这个我是二进制安装的
- nextcloud 安装,这个我是 docker 安装的
这里我就不详细叙述了,两者官网上面都有很详细的教程