Sign inSign up

louismanson/stargate

By louismanson

•Updated 1 day ago

Simple Web App Launcher. Perfect for mounting on NAS units

Image
Networking
Developer tools
Web servers
0

72

louismanson/stargate repository overview

⁠Stargate

A self-hosted start page for your homelab. Stargate shows the apps on your network as a grid of icons over an animated space background. You manage the list from a small admin panel.

  • One container, no setup. SQLite is built in. Migrations, the first admin account and the secret keys are all created on the first start.
  • Icons included. It ships icons for 96 popular self-hosted apps (Jellyfin, Home Assistant, Immich, Nextcloud, Proxmox, Pi-hole, Vaultwarden…). You can also upload your own as SVG, PNG or WebP.
  • Light on slow screens. From the admin you can stop the animations, remove the black hole that follows the pointer, or turn off the space background.
  • Postgres if you want it. Set DATABASE_URL and Stargate uses Postgres instead of SQLite.
  • Runs on linux/amd64 and linux/arm64: NAS boxes (UGREEN, Synology, TrueNAS), mini PCs and Raspberry Pi.

⁠Quick start

docker run -d --name stargate \
  -p 4015:4015 \
  -e [email protected] \
  -v stargate_data:/app/data \
  --restart unless-stopped \
  louismanson/stargate:latest

Open http://<server-ip>:4015. Without ADMIN_PASSWORD, Stargate generates a password and prints it once in the logs:

docker logs stargate | grep "Generated password"

⁠Docker Compose

services:
  app:
    image: louismanson/stargate:latest
    restart: unless-stopped
    ports:
      - "4015:4015"
    environment:
      ADMIN_EMAIL: [email protected]
      # 12+ characters. Leave empty to have one generated and shown in the logs.
      ADMIN_PASSWORD: ""
    volumes:
      - stargate_data:/app/data

volumes:
  stargate_data:
docker compose up -d
⁠With Postgres
services:
  app:
    image: louismanson/stargate:latest
    restart: unless-stopped
    depends_on:
      db:
        condition: service_healthy
    ports:
      - "4015:4015"
    environment:
      ADMIN_EMAIL: [email protected]
      ADMIN_PASSWORD: ""
      DATABASE_URL: ecto://stargate:change-me@db/stargate
    volumes:
      - stargate_data:/app/data

  db:
    image: postgres:17
    restart: unless-stopped
    environment:
      POSTGRES_USER: stargate
      POSTGRES_PASSWORD: change-me
      POSTGRES_DB: stargate
    volumes:
      - stargate_db:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U stargate -d stargate"]
      interval: 5s
      timeout: 5s
      retries: 10

volumes:
  stargate_data:
  stargate_db:

Switching between SQLite and Postgres does not move your data. Stargate starts with an empty database and creates the admin again.

⁠Environment variables

VariableDefaultDescription
ADMIN_EMAIL[email protected]Email of the admin account created on first start.
ADMIN_PASSWORD(generated)Admin password, 12+ characters. If empty, one is generated and printed once in the logs. Ignored once the admin exists.
PORT4015Port the app listens on inside the container.
DATABASE_URL(empty)ecto://USER:PASSWORD@HOST/DATABASE. When set, Postgres is used instead of SQLite.
DATABASE_PATH/app/data/stargate.dbLocation of the SQLite file.
POOL_SIZE5 (SQLite), 10 (Postgres)Database connection pool size.
ECTO_IPV6(empty)true to connect to Postgres over IPv6.
PHX_HOST(empty)Restricts the app to this host name. Access by IP stops working. Also makes generated URLs use https.
PHX_SCHEMEhttp, or https with PHX_HOSTScheme used in generated URLs.
PHX_URL_PORTPORT, or 443 over httpsPublic port used in generated URLs.
SECRET_KEY_BASE(generated)Key that signs sessions. If unset, a random one is created and stored in /app/data/secret_key_base.
RELEASE_COOKIE(generated)Erlang distribution cookie. If unset, a random one is created and stored in /app/data/release_cookie.

⁠Data and volumes

Everything Stargate keeps lives in /app/data:

  • stargate.db: the SQLite database, unless you use Postgres
  • uploads/: icons you upload
  • secret_key_base and release_cookie: generated once per install

Mount a named volume there so the data survives updates. If you bind-mount a host folder instead, the container's nobody user must be able to write to it.

⁠Reverse proxy and HTTPS

Stargate works behind Nginx Proxy Manager, Traefik, Caddy or your NAS's own proxy. It reads the public scheme, host and port from the X-Forwarded-* headers. Point the proxy at http://<server-ip>:4015 and turn on WebSocket support, since the interface uses it.

⁠Updating

docker compose pull && docker compose up -d

Migrations run automatically on startup.

⁠Tags

  • latest: the most recent build.
  • Versioned tags (such as 0.1.0): use one to pin a specific release.

Every tag is a multi-arch image for linux/amd64 and linux/arm64.

Tag summary

Content type

Image

Digest

sha256:f236bc2d6…

Size

57.8 MB

Last updated

1 day ago

docker pull louismanson/stargate