96 lines
2.5 KiB
Bash
96 lines
2.5 KiB
Bash
#!/bin/bash
|
||
|
||
# ============================================
|
||
# 文件持久化:启动时恢复 + 后台定期同步到命名卷
|
||
# ============================================
|
||
PERSIST_DIR="/root/.hair-keeper-persist"
|
||
PERSIST_FILES=(
|
||
"/root/.claude.json"
|
||
"/root/.zsh_history"
|
||
"/root/.bash_history"
|
||
)
|
||
|
||
mkdir -p "$PERSIST_DIR"
|
||
|
||
# 启动时恢复:持久化目录中的文件优先覆盖到原路径
|
||
for filepath in "${PERSIST_FILES[@]}"; do
|
||
filename=$(basename "$filepath")
|
||
persist_path="$PERSIST_DIR/$filename"
|
||
if [ -f "$persist_path" ] && [ -s "$persist_path" ]; then
|
||
cp "$persist_path" "$filepath"
|
||
fi
|
||
done
|
||
|
||
# 后台定期同步:将原路径文件同步回持久化目录(每60秒)
|
||
(
|
||
while true; do
|
||
sleep 60
|
||
for filepath in "${PERSIST_FILES[@]}"; do
|
||
filename=$(basename "$filepath")
|
||
persist_path="$PERSIST_DIR/$filename"
|
||
if [ -f "$filepath" ]; then
|
||
rsync -a "$filepath" "$persist_path"
|
||
fi
|
||
done
|
||
done
|
||
) &
|
||
|
||
# 设置默认密码
|
||
DEV_PASSWORD=${DEV_PASSWORD:-clouddev}
|
||
|
||
# 设置 root 密码
|
||
echo "root:${DEV_PASSWORD}" | chpasswd
|
||
|
||
# 确保 code-server 配置目录存在
|
||
mkdir -p /root/.local/share/code-server
|
||
|
||
# 创建 code-server 配置文件
|
||
cat > /root/.config/code-server/config.yaml << EOF
|
||
bind-addr: 0.0.0.0:8080
|
||
auth: password
|
||
password: ${DEV_PASSWORD}
|
||
cert: false
|
||
EOF
|
||
|
||
# 启动 SSH 服务
|
||
echo "Starting SSH service..."
|
||
service ssh start
|
||
|
||
# 启动 code-server
|
||
echo "Starting code-server on port 8080..."
|
||
code-server --bind-addr 0.0.0.0:8080 /workspace &
|
||
|
||
|
||
# 输出服务信息
|
||
echo ""
|
||
echo "=========================================="
|
||
echo "Cloud Development Container Started"
|
||
echo "=========================================="
|
||
echo "SSH: Port 22 (user: root, password: ${DEV_PASSWORD})"
|
||
echo "Code Server: Port 8080 (password: ${DEV_PASSWORD})"
|
||
echo "Next.js Dev: Port 3000 (run 'pnpm run dev' to start)"
|
||
echo "=========================================="
|
||
echo ""
|
||
echo "Workspace: /workspace"
|
||
echo "Default Shell: zsh with oh-my-zsh"
|
||
echo ""
|
||
echo "提示: 可通过环境变量 DEV_PASSWORD 自定义密码"
|
||
echo ""
|
||
|
||
# 容器停止时执行最终同步
|
||
cleanup() {
|
||
echo "Syncing persistent files before shutdown..."
|
||
for filepath in "${PERSIST_FILES[@]}"; do
|
||
filename=$(basename "$filepath")
|
||
persist_path="$PERSIST_DIR/$filename"
|
||
if [ -f "$filepath" ]; then
|
||
rsync -a "$filepath" "$persist_path"
|
||
fi
|
||
done
|
||
exit 0
|
||
}
|
||
trap cleanup SIGTERM SIGINT
|
||
|
||
# 保持容器运行
|
||
tail -f /dev/null &
|
||
wait $! |