最近经常配置 VPS 和 LXC 之类的,需要从头配置系统,写个文档简单记录一下。
警告
声明:本文内容为笔者个人经验记录,仅供参考和学习交流,笔者不承担因遵循本文指引而产生的任何技术问题或损失的责任。请读者在实际操作前仔细评估风险,本文不作为任何形式的技术指导或建议。
注意
配置过程中需要主机具备可以连接 GitHub 的能力,如果服务器位于中国大陆境内,请自行解决连接问题,比如使用镜像服务(如 mirror.ghproxy.com)等。
安装系统
从各大云服务商买来的预装系统一般都带有各种监控软件,无法保证系统纯净性,所以首先用 dd 重装官方系统,这边用的是 leitbogioro 的 reinstall 脚本。
1
2
| sudo -s # 或 su - 切换到 root 账户
wget --no-check-certificate -qO InstallNET.sh 'https://raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh' && chmod a+x InstallNET.sh
|
下面的命令安装 Debian 12 系统,并设置 SSH 端口为 25022
,root 密码为 YOUR_ROOT_PASSWORD
,主机名为 Aries
。
1
| bash InstallNET.sh -debian 12 -port 25022 -password "YOUR_ROOT_PASSWORD" -hostname "Aries"
|
可以使用 -mirror
参数指定镜像,例如 bash InstallNET.sh -debian 12 -mirror "http://ftp.hk.debian.org/debian/"
(不推荐使用中国大陆的镜像),更多说明参考文档: Advanced usage。
提示
请仔细确认 dd 脚本是否正确设置了所有必要项目,部分云服务器使用内网需要额外配置 IP 等,注意核对和备份相关设置。
重启执行安装:
系统配置
安装基本软件包
1
2
| apt update && apt upgrade
apt install -y build-essential sudo vim curl wget ufw autojump git tmux zsh tree zstd zip unzip lsof
|
技巧
如果无法连接官方软件源,可以使用镜像源(非必要不更换)。
1
2
3
4
5
6
7
8
9
10
11
| # 科大源
sed -i.bak 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
# 清华源
sed -i.bak 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
# 阿里源
sed -i.bak 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list
# 腾讯源
sed -i.bak 's/deb.debian.org/mirrors.tencent.com/g' /etc/apt/sources.list
|
设置主机名和用户
主机名以 Aries(白羊座),用户名以 cyrus 为例,自行替换
设置主机名
1
| hostnamectl set-hostname Aries
|
设置用户
1
2
3
4
5
6
7
8
| # 设置一个用户名变量,方便后面使用
USERNAME=cyrus
# 添加用户
useradd -m $USERNAME
# 加入 sudo 组
usermod -aG sudo $USERNAME
# 设置密码
passwd $USERNAME
|
如果希望用户在 sudo 操作的时候不需要输入密码,执行 visudo
,并且在最后添加以下内容,保存退出。注意要加在组规则的后面,否则会被组规则覆盖掉。
1
| cyrus ALL=(ALL) NOPASSWD: ALL
|
时区和 NTP 配置
设置时区
1
| timedatectl set-timezone Asia/Hong_Kong
|
配置 NTP 时间同步
为确保服务器时间准确,需要配置 NTP 时间同步。可以用 systemd-timesyncd 或者 ntp,需要注意两者并不兼容,需要二选一,这里用 ntp。
1
2
| timedatectl set-ntp false # 禁用 timesyncd 服务
apt install -y ntp
|
在 /etc/ntpsec/ntp.conf
中,ntp 默认配置了以下几个 ntp pool,如果没有指定服务器的需求可以直接用。
1
2
3
4
| pool 0.debian.pool.ntp.org iburst
pool 1.debian.pool.ntp.org iburst
pool 2.debian.pool.ntp.org iburst
pool 3.debian.pool.ntp.org iburst
|
如果需要指定 NTP 服务器,用 #
注释掉以上的 pool,并添加服务器,例如:
1
2
3
4
| server 0.pool.ntp.org iburst
server time.cloudflare.com iburst
server time.apple.com iburst
server time1.google.com iburst
|
更多公共服务可以参考 国内外常用公共NTP网络时间同步服务器地址
配置完成后重启服务,可以使用 ntpq -p
查看同步状态。
UTF-8 和中文支持
刚安装完的系统由于尚未配置为支持 UTF-8编码的中文字符集,可能无法显示中文字符,这里配置一下。
技巧
该部分可以通过 dpkg-reconfigure locales
交互式配置,或者使用以下命令设置,请确保理解其含义。
配置字符集
1
2
3
| sed -i '/^#.*en_US.UTF-8 UTF-8/s/^#//' /etc/locale.gen
sed -i '/^#.*zh_CN.UTF-8 UTF-8/s/^#//' /etc/locale.gen
locale-gen
|
配置默认语言
如果想要使用中文,将下面命令的 en_US
替换为 zh_CN
:
1
2
| echo 'LANG=en_US.UTF-8' > /etc/default/locale
source /etc/default/locale
|
配置 Swap(虚拟内存)
许多小内存机器内存不够用,需要配置交换空间缓解一定的内存压力。
首先使用 free -h
确定是否开启了 Swap,如果最后一行输出是 Swap 0 0 0
,说明没有开启,继续后续步骤。
1
2
3
| total used free shared buff/cache available
Mem: 960Mi 608Mi 88Mi 1.6Mi 423Mi 352Mi
Swap: 0 0 0
|
创建一个 4G 的 Swap 文件,如果要调整大小,修改对应的值即可。
1
| fallocate -l 4G /swapfile
|
建立 Swap 文件系统
1
2
| chmod 600 /swapfile
mkswap /swapfile
|
开启 Swap
再次使用 free -h
确认 Swap 开启状态,应当为对应设置的大小。
1
2
3
| total used free shared buff/cache available
Mem: 960Mi 608Mi 88Mi 1.6Mi 423Mi 352Mi
Swap: 4.0Gi 569Mi 3.4Gi
|
swapon
开启的 Swap 重启后会失效,为了开机启动时自动开启 Swap,需要在 /etc/fstab
中进行配置。
1
2
3
| # 备份 fstab
cp /etc/fstab /etc/fstab.bak
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
|
安装 Docker 和 docker-compose
安装 Docker 并配置用户权限
使用官方安装脚本安装 docker,并将自己的用户添加到 docker 组:
1
2
| curl -fsSL https://get.docker.com | bash -s docker
usermod -aG docker $USERNAME
|
安装 docker-compose
安装 docker-compose:
1
2
3
4
| COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep 'tag_name' | cut -d\" -f4)
sh -c "curl -L https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose"
chmod +x /usr/local/bin/docker-compose
sh -c "curl -L https://raw.githubusercontent.com/docker/compose/${COMPOSE_VERSION}/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose"
|
防火墙配置
使用 UFW 配置防火墙,可参考 UFW - Community Help Wiki。
警告
配置防火墙需谨慎,并放通 SSH 端口后再启用防火墙,否则可能会导致失联。
放通端口的基本命令格式 : ufw allow <port>/<optional: protocol>
限定 IP 访问指定端口:ufw allow proto tcp from 10.0.0.1 to any port 22
基本配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # 放通 SSH 端口,自行修改对应端口
ufw allow 25022/tcp
# 放通 Web 服务端口(80/tcp 443/tcp)
ufw allow 'WWW Full'
# 启用日志
ufw logging on
# 启用防火墙
ufw enable
# 查看状态
ufw status verbose
|
仅允许 CF 访问 Web
如果整站都在 CF 后面,安全起见可以只允许 CF 访问 80/443 端口,可以使用如下脚本配置。脚本会从 https://www.cloudflare.com/ips-v4
和 https://www.cloudflare.com/ips-v6
获取 CF 的 IP 范围,添加到 UFW 规则中并 reload UFW。还会配置每周一零点的定时任务,刷新 IP 段。
1
2
3
4
| wget -O ~/.cloudflare-ufw.sh https://gist.githubusercontent.com/Xm798/12560579ce11f62027ea8da1fae37456/raw/b07ac8cfe09badf02fc70e2d8bc2da68cabbda50/cloudflare-ufw.sh
chmod +x ~/.cloudflare-ufw.sh
~/.cloudflare-ufw.sh
(crontab -l 2>/dev/null; echo "0 0 * * 1 /root/.cloudflare-ufw.sh > /dev/null 2>&1") | crontab -
|
用户配置
上面配置完了系统部分,下面切换到用户配置部分。用户名以 cyrus
为例。
1
2
| # 切换用户(注意是 su - xx,而不是 su xx,su 不会切换环境变量)
su - cyrus
|
SSH 配置
这里会配置 SSH 密钥登录,并且禁用密码登录和 root 账户登录。
准备公钥
默认已经准备好了 SSH 密钥,如果没有,可以使用 ssh-keygen -t ed25519
生成,并拷贝公钥。
1
2
3
4
5
| mkdir -p ~/.ssh && chmod 700 ~/.ssh && cd ~/.ssh
# 添加公钥
echo 'ssh-ed25519 XXXXXXXXXXXXXXXXX' > authorized_keys
# 修改权限
chmod 600 ~/.ssh/authorized_keys
|
关闭密码和 root 登录
1
2
3
4
| sudo sed -ri "s/^#? *PasswordAuthentication *yes.*/PasswordAuthentication no/" /etc/ssh/sshd_config
sudo sed -ri "s/^#? *PermitRootLogin *yes.*/PermitRootLogin no/" /etc/ssh/sshd_config
# 检查一下配置对不对
cat /etc/ssh/sshd_config | grep -E '^PasswordAuthentication|^PermitRootLogin'
|
重新加载 SSH 配置
危险
操作前,请务必测试使用对应账户和公钥能够正常登录系统,否则可能导致无法登录的后果!
1
2
3
| # 测试并重启服务
sudo sshd -t
sudo service sshd restart
|
ZSH 配置
1
| sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
|
安装&配置插件
安装 zsh-autosuggestions、zsh-syntax-highlighting 和 autojump:
1
2
3
4
5
| git clone https://github.com/zsh-users/zsh-autosuggestions.git ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting
sudo apt install -y autojump
echo ". /usr/share/autojump/autojump.sh" >> ~/.zshrc
|
启用一些插件:
1
| sed -i.bak 's/plugins=(\(.*\))/plugins=(\1 autojump zsh-autosuggestions zsh-syntax-highlighting z extract sudo cp aliases docker docker-compose)/' ~/.zshrc
|
配置主题
安装 p10k 主题:
1
2
| git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
sed -i 's#robbyrussell#powerlevel10k/powerlevel10k#g' ~/.zshrc
|
这里提供一个预先配置好的 p10k 主题,想偷懒的话可运行以下命令:
1
| wget -O ~/.p10k.zsh https://gist.githubusercontent.com/Xm798/9afccda2e2b26b913854d36c96438344/raw/9acd0a1316895b6bc5485af043d38025f54926bd/.p10k.zsh
|
应用配置
应用完成后会进入 p10k 的配置过程,根据向导设置自己喜欢的主题即可。推荐终端安装并使用 Nerd-Fonts 字体,获得最佳图标显示效果。如果想要重新配置主题,使用 p10k configure
命令。
结束
到此配置已经基本可用了,后续可以进行进一步的配置和服务搭建等。
参考资料