Full stack per GOAL.md / TODO.md:
- checker (Go): fetch sources, canonicalize/dedup (whitelist+sort, & fixes),
validity check (connect+latency+speed gates), geoip by exit IP, session model
("only working / last completed session"), global lock, manual run/stop,
Telegram start/finish notifications. Reuses tessero-checker dialers
(vless/vmess/trojan/ss), upstream parser, geoip, fetcher.
- api (Go): admin auth (single operator), dashboard stats, proxies
list/filter/export/bulk, subscriptions CRUD, sources CRUD, settings, checker
control, and dynamic public /sub endpoints with unique_ips + plain/base64/
clash/singbox rendering.
- frontend (React+Vite+TS+Tailwind): telemetry-console SPA — Dashboard, Proxies,
Subscriptions, Settings.
- postgres schema, docker-compose (postgres/checker/api/web-nginx), Dockerfiles,
Gitea Actions CI.
Verified end-to-end via Docker: pipeline, all sub formats, unique_ips collapse,
and all four panel tabs (Playwright).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014TtR4PP2JM9KadaBkhPGAE
22 lines
592 B
Bash
22 lines
592 B
Bash
# Copy to .env and adjust. `docker compose up -d --build` reads this file.
|
|
|
|
# --- PostgreSQL ---
|
|
POSTGRES_USER=perchik
|
|
POSTGRES_PASSWORD=change-me-db
|
|
POSTGRES_DB=perchik
|
|
|
|
# --- Admin panel (single operator) ---
|
|
ADMIN_USER=admin
|
|
ADMIN_PASSWORD=change-me-admin
|
|
# HMAC key that signs session tokens — use a long random string.
|
|
SESSION_SECRET=change-me-to-a-long-random-secret
|
|
|
|
# --- Runtime ---
|
|
LOG_LEVEL=info
|
|
# Host port the panel is served on (http://localhost:8088 by default).
|
|
WEB_PORT=8088
|
|
|
|
# --- Image tagging (used by CI / registry pushes) ---
|
|
# REGISTRY=git.qomar.pw/omar
|
|
# TAG=latest
|