Files
gentpan 480a7b551d 服务器与官网:自托管的账号同步服务、GeoLite2 下载配置脚本、隐私页
- server/sync:Go 写的同步服务(GitHub / Google / Apple 登录、PKCE、设置文档存 SQLite),附 systemd 单元、Caddy 片段、install.sh 部署到官网源站、configure.sh 填写各平台密钥
- server/geoip:configure.sh 填 MaxMind 账号与许可证;install.sh 的主机改为官网源站
- 官网新增隐私说明页,首页补隐私条目与 ⌘ 拖动排序的常见问题;部署与发布脚本的默认主机改为 51.38.126.148
2026-09-15 03:37:24 +05:00

69 lines
3.1 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# 把各登录方式的 Client ID / Secret 写到服务器的 /etc/openstats/sync.env 并重启同步服务。
# 值在本机终端里输入(Secret 不回显),只经 ssh 传到服务器,不进仓库、不进日志。
# 留空表示保持服务器上现有的值不变。
#
# ./server/sync/configure.sh
set -euo pipefail
HOST="${SITE_HOST:-debian@51.38.126.148}"
KEY="${SITE_KEY:-$HOME/.ssh/gentpan.pem}"
SSH=(ssh -i "$KEY" -o BatchMode=yes "$HOST")
ask() { # ask 变量名 提示
local value; read -r -p "$2(留空跳过): " value; printf -v "$1" '%s' "$value"
}
ask_secret() { # 不回显
local value; read -r -s -p "$2(留空跳过): " value; echo; printf -v "$1" '%s' "$value"
}
echo "写入 $HOST:/etc/openstats/sync.env"
ask GITHUB_CLIENT_ID "GitHub Client ID"
ask_secret GITHUB_CLIENT_SECRET "GitHub Client Secret"
ask GOOGLE_CLIENT_ID "Google Client ID"
ask_secret GOOGLE_CLIENT_SECRET "Google Client Secret"
ask APPLE_CLIENT_ID "Apple Services ID(例如 com.openstats.web)"
ask APPLE_TEAM_ID "Apple Team ID"
ask APPLE_KEY_ID "Apple Key ID"
ask APPLE_P8 "Apple .p8 文件的本机路径"
APPLE_PRIVATE_KEY_FILE=""
if [ -n "$APPLE_P8" ]; then
[ -r "$APPLE_P8" ] || { echo "读不到 $APPLE_P8" >&2; exit 1; }
scp -i "$KEY" -o BatchMode=yes "$APPLE_P8" "$HOST:/tmp/apple-signin.p8"
"${SSH[@]}" 'sudo install -m 640 -o root -g openstats-sync /tmp/apple-signin.p8 /etc/openstats/apple-signin.p8 && rm -f /tmp/apple-signin.p8'
APPLE_PRIVATE_KEY_FILE=/etc/openstats/apple-signin.p8
fi
export GITHUB_CLIENT_ID GITHUB_CLIENT_SECRET GOOGLE_CLIENT_ID GOOGLE_CLIENT_SECRET \
APPLE_CLIENT_ID APPLE_TEAM_ID APPLE_KEY_ID APPLE_PRIVATE_KEY_FILE
# 本机 python 把要改的键值编成一段远端 python(repr 保证转义),经标准输入交给服务器执行;
# 有值的键覆盖,没值的保留,不出现在任何命令行参数里
python3 - <<'PYEOF' | "${SSH[@]}" 'sudo python3 -'
import os
keys = ["GITHUB_CLIENT_ID", "GITHUB_CLIENT_SECRET", "GOOGLE_CLIENT_ID", "GOOGLE_CLIENT_SECRET",
"APPLE_CLIENT_ID", "APPLE_TEAM_ID", "APPLE_KEY_ID", "APPLE_PRIVATE_KEY_FILE"]
updates = {k: os.environ[k] for k in keys if os.environ.get(k)}
print("""import os, re
path = "/etc/openstats/sync.env"
updates = %r
text = open(path).read() if os.path.exists(path) else ""
lines = text.split("\\n")
seen = set()
for i, line in enumerate(lines):
m = re.match(r"^([A-Z_]+)=", line)
if m and m.group(1) in updates:
lines[i] = m.group(1) + "=" + updates[m.group(1)]
seen.add(m.group(1))
for k, v in updates.items():
if k not in seen:
lines.append(k + "=" + v)
tmp = path + ".new"
with open(tmp, "w") as f:
f.write("\\n".join(lines).rstrip("\\n") + "\\n")
os.chmod(tmp, 0o640)
os.replace(tmp, path)
print("已更新", ", ".join(sorted(updates)) if updates else "(没有改动)")
""" % (updates,))
PYEOF
"${SSH[@]}" 'sudo chgrp openstats-sync /etc/openstats/sync.env && sudo chmod 640 /etc/openstats/sync.env && sudo systemctl restart openstats-sync && sleep 1 && curl -s http://127.0.0.1:8787/api/v1/auth/providers && echo'