现在我的工作所接触的服务器和操作系统都是国产信创环境的,用起来跟用 CentOS 没什么不同。由于一直在用堡垒机来来部署环新系统的环境,玩不了 ansible(都白名单了)也不敢玩脚本,所以很多配置基本都是手敲(手敲好啊,我最喜欢在办公室敲键盘比大家说话还大声,慢慢部署还能凑工时)。但我记性不是很好,有新的云主机布置环境还要查这查那,所以还是写一份备忘录比较好。

操作系统

我一般都在用 银河麒麟服务器端 V10 SP3 做底层系统,操作上跟 CentOS 没有明显区别。

# 关闭图形化界面(有些同事分配机器默认给我装了图形化界面,但我不需要)
systemctl set-default multi-user.target
reboot

# 设置文件最大数(防某些业务 too many open files)
vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
* soft nproc 4096
* hard nproc 4096
:wq
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
echo "fs.file-max=655350" >> /etc/sysctl.conf
echo "fs.nr_open=655340" >> /etc/sysctl.conf
sysctl -p

# 关闭虚拟内存(防内存 OOM 拖慢性能)
swapoff -a # 临时
vi /etc/fstab
用 dd 剔掉有 swap 分区的一行
# 或者直接设置需要使用 swap 的内存阈值
echo "vm.swappiness = 0">> /etc/sysctl.conf
sysctl -p

# 自动同步时间(业务对时间的准确性比较重视)
vi /etc/chronyd.conf
# 如果是公网环境就直接退吧,我要配置内网 NTP 服务器
在第二行插入 server ntp服务器IP iburst
:wq
systemctl start chronyd
systemctl enable chronyd

# 挂载数据库的分区,用noatime 可以提升性能(但我觉得心理作用)
vi /etc/fstab
UUID=xxxxxxxxxx /data xfs defaults,noatime    0 0

# 由于纯内网用不上 IPv6,所以禁用 IPv6 (以前同事说 ipv6 用不上也有被渗透的风险,不知真假)
echo "net.ipv6.conf.all.disable_ipv6 = 1">> /etc/sysctl.conf
sysctl -p

# 内网环境下基本用不上域名解析,SSH 连接很慢,因为SSH在别名解析所以登录很慢
vi /etc/ssh/sshd_config
找到以下内容,取消注释
GSSAPIAuthentication no
UseDns no
重启 sshd 服务

# 关闭我用不上的默认服务(麒麟默认不开启的)
systemctl stop postfix && systemctl disable postfix

容器

很可惜,我还是没玩过 k8s,所以一直在用容器。我这边还是没有公网环境,所以需要离线部署 docker。

# 在 https://download.docker.com/linux/static/stable/x86_64/ 找一个比较新版本的 tgz 包,解压到目录。
tar -xvzf docker-25.0.2.tgz
cp docker/* /usr/bin/
# 测试命令是否正常
docker version
# 添加服务
vi /usr/lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target

[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target

# 别急,我提前把容器日志限额和容器网卡的默认网段改了,因为网内也有 IP 跟容器的IP是冲突的
mkdir /etc/docker
vi /etc/docker/daemon.json
{
    "default-address-pools":[
        {
            "base":"172.100.0.0/16",
            "size":24
        }
    ],
    "log-driver":"json-file",
    "log-opts":{
        "max-size":"500m",
        "max-file":"3"
    }
}
:wq

# 开服务
systemctl daemon-reload
systemctl start docker
systemctl enable docker

# 看一眼 IP,如果 IP 端没变的话,就删网卡重启容器进程
ip link delete docker0
systemctl restart docker

由于我自己开发有时候会打包容器成镜像,所以。

# 编写 Dockerfile,然后自动创建新镜像
docker build -t 定一个镜像名 .
# 导出镜像,windows 不加 -o 的话导出的 tar 是有问题的。
docker save -o 文件名.tar 镜像名 
# 导入镜像
docker load -i 文件名.tar

使用第三方容器的话,需要经常用的参数(为什么不用 docker-composer,主要是不想折腾)

docker run -d --name xxxx \
-v /etc/localtime:/etc/localtime:ro \ # 同步系统时间
--restart=unless-stopped \ # 避免故障来了频繁重启
镜像名

另外如果我用映射端口的话,容器就不受 firewalld 的策略控制,需要在 iptables -L DOCKER-USER 中加策略才行。

待补全

下班了,懒得上堡垒机了,下次部署的时候再写吧