公众号旧文
为什么我不怕服务器商家跑路?
刚整理服务器时,意识到一个问题:
我当前的很多代码和脚本,只存在于服务器上。
例如:
/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
即可完成备份。