A CTF contest platform aiming at maximized possibility of customization and a fluid experience for users and developers.
This platform hosts the 3rd PKU GeekGame with ≥2000 users and ≥10000 submissions. The server achieves a peak load_5
of ≤0.5 when all features are turned on.
Backend (in Python) → PKU-GeekGame/gs-backend
Frontend (in React) → PKU-GeekGame/gs-frontend
Live demo → geekgame.pku.edu.cn
Misc files → This repo
Overall backend architecture:
Case study: when a user submits a flag
Set up the backend: refer to README from gs-backend
Set up the frontend: refer to README from gs-frontend
Start the backend processes. We use systemd: example configuration for reducer and worker processes.
Use a reverse proxy (we use nginx
) to proxy requests to backend or frontend: an example configuration file. Remember to also set a large value for both worker_rlimit_nofile
and worker_connections
in nginx.conf
, because each online user will has a websocket connection to the backend.
To register the first user manually, visit /service/auth/manual?identity=<your_name>
.
Manual login should be disabled in production environment by configuring MANUAL_AUTH_ENABLED = False
in src/secret.py
in the backend codebase.
Visit admin panel at /<ADMIN_URL>
.
ADMIN_URL
and IS_ADMIN
can be configured in src/secret.py
in the backend codebase.
Both backend and frontend is distributed under MIT License. See their LICENSE files for more information.