Run the CodeLeague server with just Docker — no Infinity Tools required.
install-codeleague.sh writes a minimal docker-compose.yml, pulls the image,
and starts CodeLeague in Community mode. You activate your license inside
the app afterwards.
The script on the main branch is always the current installer, so this is the
URL to link to:
curl -fsSLO https://raw.githubusercontent.com/smartinventure/codeleague-installer/main/install-codeleague.sh
bash install-codeleague.shThat opens the interactive menu (install / register for a license / status / uninstall). To skip the menu and install straight away:
bash install-codeleague.sh --installDownloading before running, rather than piping into bash, is deliberate: the
installer drives Docker on your machine, so it is worth being able to read it
first.
main is the newest installer, not a fixed release — to pin a version, swap
main in the URL for a release tag or commit SHA. Re-running the installer
updates in place.
- Docker Engine + Docker Compose v2 (
docker compose) openssl(for generating secrets)
./install-codeleague.shRe-running it updates in place: it pulls the latest image and reuses the secrets and machine id from the previous install (so nobody is signed out and stored Git tokens stay readable).
Options (environment variables):
| Variable | Default | Purpose |
|---|---|---|
CODELEAGUE_PORT |
3000 |
Host port (HTTP) |
CODELEAGUE_DIR |
./codeleague |
Install / data directory |
CODELEAGUE_IMAGE |
ghcr.io/…/codeleague:latest-release |
Override the image tag |
CODELEAGUE_PORT=8080 CODELEAGUE_DIR=/opt/codeleague ./install-codeleague.sh
./install-codeleague.sh --status
./install-codeleague.sh --uninstall # keeps your data unless you confirm deletionA container can't recreate itself, so the installer also sets up a small host
updater on install: codeleague-update.sh plus a watcher (a systemd path-unit
when run as root with systemd, otherwise a 1-minute cron poll). It writes a marker
(<dir>/data/.host-update-enabled) that the app detects.
When a new version is available, CodeLeague shows an update banner → Update…
modal. If the host updater is present you get an Update now button: the app
writes <dir>/data/.update-request, the host watcher runs codeleague-update.sh
(docker compose pull && up -d), and the container comes back on the new image
(~30–60 s downtime; data preserved). If no host updater is installed, the modal
shows the manual command instead:
./install-codeleague.sh --install # pull the new image + recreate in placeDuring an interactive install (./install-codeleague.sh) the installer asks
whether you already have a CodeLeague license. If not, it can sign you up for a
free Code League Community license on the spot: you enter your email and
pick your country (searched from the live country list), accept the terms,
and it submits the request to https://license.speedbits.io. You then get a
verification email, and once verified your license key is emailed to you —
activate it in-app (below).
Re-running --register with an address that already has a Community license
simply re-sends that same key by email; there is no second verification step.
Paid Desktop and Server licenses are not issued this way — those come from the shop, a voucher, or Smart In Venture directly.
You can also run it directly at any time:
./install-codeleague.sh --registerRegistration needs curl (and uses jq for the searchable country picker when
present; without jq you just type the country name or 2-letter code). If
self-service registration is unavailable, it points you to the web form at
https://license.speedbits.io/register/codeleague-community.
Sign-ups are rate-limited to five per hour per IP address, so everyone sharing your connection counts toward it. If you hit the limit the installer tells you roughly how long to wait — re-running immediately will not help.
The container starts in Community mode. To unlock premium features (AI analysis, etc.):
- Open CodeLeague at
http://<host>:<port>→ Settings → License (a first-run screen also prompts you). - Enter your Server license email + key (
COSE-…). - Restart the container to finish unlocking premium:
The edition switches immediately; the premium modules load on that restart.
cd <install-dir> && docker compose restart
The installer exposes plain HTTP. For TLS, put your own reverse proxy
(nginx / Caddy / Traefik) in front of http://127.0.0.1:<port>.
Everything lives under your install directory on the host:
data/— the database, license, and machine id (data/codingfame.db,data/.machine_id, …).repos/— a place to keep git clones. Keep clones on a host-mounted path (thisrepos/, or underdata/) so they survive image updates — CodeLeague retains commits from deleted feature branches in the local clone, so losing the clone loses that history.docker-compose.yml— holdsJWT_SECRETandCF_ENC_KEY(chmod600). Keep it safe and never changeCF_ENC_KEYafter first run, or stored Git tokens become undecryptable.
Back up the whole install directory to preserve your database, secrets, and clones.
./install-codeleague.sh --uninstallStops and removes the container. Your data/ is kept unless you confirm deletion.