Linux
Hỗ trợ: kernel 4.4+, các distro dùng glibc có systemd. Đã kiểm tra trên Ubuntu 22.04+, Debian 12, Fedora 39+. Kiến trúc: amd64, arm64.
Cài đặt
Phần tiêu đề “Cài đặt”-
Mở một shell.
-
Chạy trình cài đặt:
Terminal window curl -sSL https://proxy.sotatek.works/releases/download/latest/install.sh | bashexport PATH="$HOME/.local/bin:$PATH" && hash -rScript tải binary phù hợp, xác minh checksum SHA256, đặt binary tại
/usr/local/bin/sotatek-proxy, và đăng ký systemd service toàn máy (script sẽ hỏisudoở bước này). Dịch vụ khởi động ngay và tự chạy khi boot. -
Xác minh daemon đang chạy:
Terminal window sudo sotatek-proxy statuscurl http://127.0.0.1:3817/_proxy/healthz
-
Clone repository:
Terminal window git clone https://github.com/sotatek-dev/sotatek-proxy.gitcd sotatek-proxy -
Build và cài đặt:
Terminal window bash scripts/install-from-source.shScript phát hiện kiến trúc của bạn (amd64 hoặc arm64), chạy
make build-linux-amd64/make build-linux-arm64, sao chép binary tới/usr/local/bin/sotatek-proxy, và đăng ký systemd service toàn máy (sẽ hỏisudo).Các cờ tùy chọn:
Cờ Mô tả --no-serviceChỉ binary — bỏ qua đăng ký systemd unit --prefix DIRGhi đè thư mục cài đặt -
Xác minh daemon đang chạy:
Terminal window sudo sotatek-proxy statuscurl http://127.0.0.1:3817/_proxy/healthz
Cơ chế attribution
Phần tiêu đề “Cơ chế attribution”Daemon xác định process đã gửi request, đọc thư mục làm việc của process đó, rồi chạy git remote -v
hạ quyền xuống đúng uid của user đó — nên nó đọc repo của mỗi user bằng chính quyền của user ấy,
không bao giờ bằng quyền cao hơn. Kết quả được gửi lên upstream qua header X-Git-Remote.
Để làm được điều này, dịch vụ giữ CAP_SYS_PTRACE, CAP_SETUID và CAP_SETGID, chạy trong sandbox
(NoNewPrivileges, ProtectSystem=strict, ProtectHome=read-only) dưới một system user không phải root.
Vị trí các file
Phần tiêu đề “Vị trí các file”| Thành phần | Đường dẫn |
|---|---|
| Binary | /usr/local/bin/sotatek-proxy |
| Config | /etc/sotatek-proxy/config.yaml (tùy chọn) |
| Logs | /var/log/sotatek-proxy/sotatek-proxy.log |
| Unit | /etc/systemd/system/sotatek-proxy.service |
| Chạy dưới | system user sotatek-proxy (nologin) |
Lệnh quản lý dịch vụ
Phần tiêu đề “Lệnh quản lý dịch vụ”sudo sotatek-proxy status # running / stoppedsudo sotatek-proxy start # khởi động ngaysudo sotatek-proxy stop # dừng (giữ trạng thái dừng qua reboot)sotatek-proxy logs # xem 100 dòng log cuốisudo sotatek-proxy uninstall # gỡ dịch vụ, system user, config và logsBạn cũng có thể dùng systemd trực tiếp:
systemctl status sotatek-proxyjournalctl -u sotatek-proxy -fKhi không có systemd (container, WSL, Alpine)
Phần tiêu đề “Khi không có systemd (container, WSL, Alpine)”Ở môi trường không có systemd hoặc không có useradd, việc cài dịch vụ không được hỗ trợ. Thay vào
đó hãy chạy proxy ở foreground — nó tự dùng đường dẫn theo user (~/.config/sotatek-proxy/config.yaml,
~/.local/state/sotatek-proxy/) và không cần root:
sotatek-proxy daemonXử lý sự cố
Phần tiêu đề “Xử lý sự cố”Nếu sotatek-proxy status báo command not found, /usr/local/bin chưa nằm trong PATH.
Thêm vào file rc của shell đúng, rồi nạp lại:
case "$(basename "${SHELL:-bash}")" in zsh) RC="$HOME/.zshrc" ;; *) RC="$HOME/.bashrc" ;;esacLINE='export PATH="/usr/local/bin:$PATH"'grep -qxF "$LINE" "$RC" 2>/dev/null || echo "$LINE" >> "$RC"source "$RC"Một process khác — thường là sotatek-proxy per-user cũ của user khác — đang giữ cổng 3817. Tìm chủ sở hữu:
sudo ss -tlnp 'sport = 3817'Dừng unit cũ của user đó, rồi khởi động system service:
sudo -u <user> systemctl --user disable --now sotatek-proxysudo sotatek-proxy startDaemon không crash-loop khi cổng bận: nó ghi log tên user đang giữ cổng rồi thoát, nên
journalctl -u sotatek-proxy cho biết chính xác ai đang chiếm.
sotatek-proxy logssystemctl status sotatek-proxyjournalctl -u sotatek-proxy --since "10 min ago"sudo sotatek-proxy daemon # chạy foreground để debugNếu request lên upstream không kèm thông tin repository, nhiều khả năng capabilities của dịch vụ không có hiệu lực (kernel đã hardening, container thiếu caps, chính sách MAC). Daemon ghi log việc này ngay khi khởi động:
journalctl -u sotatek-proxy | grep -i "capability self-test"Request vẫn hoạt động bình thường — chỉ mất header attribution.
Gỡ cài đặt
Phần tiêu đề “Gỡ cài đặt”sudo sotatek-proxy uninstallsudo rm /usr/local/bin/sotatek-proxy