公众号旧文

为什么我不怕服务器商家跑路?

作者:胖子阅读 —

刚整理服务器时,意识到一个问题:

我当前的很多代码和脚本,只存在于服务器上。

例如:

/opt/cluster
/opt/ytdlp
/opt/log-analyzer

这些目录里放着我平时写的运维脚本、监控工具和网站程序。

平时用着没什么感觉,但仔细一想,如果哪天商家跑路。

这些代码将瞬间消失。

于是我决定把服务器上的核心脚本纳入 Git 管理。

一、我的思路

一开始我考虑按项目建立仓库:

ytdlp
log-analyzer
status-web

后来决定先按服务器来。

原因很简单:真正会被重装的是某一台服务器。

例如:

JP-IIJ
LAX
US-GCP
US-GCP2

如果 JP-IIJ 被重装,我希望能够直接把最重要的脚本全部恢复出来。

因此我先建立了一个 GitHub 私有仓库:

JP-IIJ

专门保存这台服务器上的核心资产。

二、盘点服务器

在上传之前,我对服务器进行了一次审计。

执行:

mkdir -p ~/server-audit && \
{
echo "===== HOST ====="
hostnamectl
echo
echo "===== DISK ====="
df -h
echo
echo "===== NETWORK ====="
ip -brief addr
echo
echo "===== CRONTAB(ROOT) ====="
crontab -l 2>/dev/null
echo
echo "===== SYSTEMD ENABLED ====="
systemctl list-unit-files --state=enabled --no-pager
echo
echo "===== /OPT ====="
find /opt -maxdepth 2 -type d 2>/dev/null
} > ~/server-audit/audit.txt

这样可以快速知道:

  • 这台机器跑了什么项目
  • 有哪些定时任务
  • 有哪些服务
  • 哪些目录值得备份

三、找出有价值的内容

以我的 JP-IIJ 为例:

/opt/cluster
├── hosts.txt
├── files
└── scripts

其中 hosts.txt 保存着服务器清单。

files 保存着:

bashrc
motd
vimrc
profile

等标准配置模板。

而 scripts 里面则是我平时积累的运维脚本:

check-cluster.sh
check-ip.sh
sync-hosts.sh
push-motd.sh
clean-ytdlp-auto.sh

这些脚本才是真正的资产。

四、初始化 Git 仓库

进入目录:

cd /opt/cluster

初始化:

git init

五、创建 .gitignore

有些文件属于运行时数据,不需要上传。

例如:

audit/*.txt
tmp/*
backup/*

因此创建:

cat > .gitignore << 'EOF'
audit/*.txt
tmp/*
backup/*
__pycache__/
*.pyc
*.log
*.swp
EOF

这样 Git 只会跟踪真正需要保存的文件。

六、检查待提交文件

执行:

git status

确认 Git 准备上传的是:

hosts.txt
files/
scripts/
audit/audit.sh

而不是日志、缓存和备份文件。

七、提交到本地仓库

git add .
git commit -m "Initial cluster backup"

此时代码已经进入 Git 历史。

八、配置 GitHub SSH Key

服务器直接连接 GitHub。

生成密钥:

ssh-keygen -t ed25519

查看公钥:

cat ~/.ssh/id_ed25519.pub

复制内容,然后进入 GitHub:

Settings
→ SSH and GPG Keys
→ New SSH Key

添加公钥。

测试:

ssh -T git@github.com

看到:

Hi username! You've successfully authenticated

说明连接成功。

九、关联 GitHub 仓库

添加远程仓库:

git remote add origin git@github.com:用户名/JP-IIJ.git

查看:

git remote -v

确认无误。

十、推送到 GitHub

第一次推送:

git branch -M main
git push -u origin main

成功后:

To github.com:用户名/JP-IIJ.git
 * [new branch] main -> main

说明仓库已经同步完成。

十一、后续维护非常简单

以后修改脚本:

vim scripts/check-cluster.sh

查看变化:

git diff

提交:

git add .
git commit -m "Update cluster check logic"
git push

即可完成备份。

这样我就再也不用怕商家跑路了。