Skip to content

Self-host Lychee

updated Sep 2026prices checked · Jul 2026Install verified on Ubuntu 26.04 · Sep 2026 · how we test
We earn commissions when you shop through the links below. Full disclosure →

A photo-management web app for uploading, organizing and sharing photos in albums from your own server.

Key facts

LicenseMIT
StackPHP, Laravel, Vue
Min RAM1024 MB
Official imageyes
Measured idle RAM279 MB
Difficulty

What you need

  • Any VPS with at least 1024 MB of RAM
  • A domain you control — most self-hosted setups need HTTPS in front of them
  • Under an hour if you've used Docker before
Where to host itaffiliate disclosure
Hetzner Cloudrun it on
From $23.59/mo · 2 vCPU / 4 GB / 80 GB · EU + US
Get Hetzner Cloud (opens in new tab)
Kamaterafree trial
From $4/mo · 1 vCPU / 1 GB / 20 GB · US + EU + Asia
Start free on Kamatera → (opens in new tab)
DigitalOceanalso works on
From $6/mo · 1 vCPU / 1 GB / 25 GB · US + EU + Asia
Deploy on DigitalOcean → (opens in new tab)

Paid link — we earn a commission if you shop through it.

Install

Run these commands on your server:

# Lychee + MariaDB — the README's Docker (Recommended) compose, with APP_KEY and DB passwords generated
mkdir -p lychee && cd lychee
DB_PW=$(openssl rand -hex 16)
cat > docker-compose.yml <<EOF
services:
  lychee:
    image: ghcr.io/lycheeorg/lychee:latest
    ports: ["8000:8000"]
    volumes:
      - ./lychee/uploads:/app/public/uploads
      - ./lychee/logs:/app/storage/logs
      - ./lychee/tmp:/app/storage/tmp
    environment:
      APP_URL: http://SERVER_IP:8000
      APP_KEY: "base64:$(openssl rand -base64 32)"
      DB_CONNECTION: mysql
      DB_HOST: lychee_db
      DB_PORT: 3306
      DB_DATABASE: lychee
      DB_USERNAME: lychee
      DB_PASSWORD: $DB_PW
    depends_on: { lychee_db: { condition: service_healthy } }
    restart: unless-stopped
  lychee_db:
    image: mariadb:11
    environment:
      MYSQL_DATABASE: lychee
      MYSQL_USER: lychee
      MYSQL_PASSWORD: $DB_PW
      MYSQL_ROOT_PASSWORD: $(openssl rand -hex 16)
    volumes: ["lychee_db:/var/lib/mysql"]
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      interval: 5s
      retries: 10
    restart: unless-stopped
volumes:
  lychee_db:
EOF
docker compose up -d
# open http://SERVER_IP:8000 — the first visit asks you to create the admin account

More in Photo backup & gallery

We use analytics cookies (Google Analytics, PostHog) to see which guides are useful. No ad networks, no cross-site tracking. See our privacy policy.