Skip to main content

Lychee 6

🇬🇧 Lychee 6 Docker Guide (on Debian + Portainer)

1️⃣ Folder structure

Create a clean Docker layout:

#-mkdir ------------------------------------------p /srv/dev-disk-by-uuid-76493abc-7cd4-4b00-927c-8b2bef740dd4/Files/Lychee6/{conf,uploads,sym,logs,tmp,db,cache}
cd /srv/dev-disk-by-uuid-76493abc-7cd4-4b00-927c-8b2bef740dd4/Files/Lychee6

2️⃣ Environment file (stack.env)

PUID=998
PGID=100
TIMEZONE=Europe/Paris
APP_URL=https://lychee.domain.tld
APP_FORCE_HTTPS=true

# Database
DB_DATABASE=lychee
DB_USERNAME=lychee
DB_PASSWORD=lychee_pass
DB_ROOT_PASSWORD=root_lychee_pass

# Redis
CACHE_DRIVER=redis
REDIS_HOST=lychee6_redis
REDIS_PORT=6379
REDIS_PASSWORD= # leave empty
REDIS_USERNAME=default

3️⃣ Docker Compose #file @RobLandry(docker-compose.yml)

# Repo : https://github.com/LycheeOrg/Lychee-Docker #-------------------------------------------
version: '3'"3.8"

services:
  lychee_db:lychee6_redis:
    image: redis:alpine
    container_name: lychee_dblychee6_redis
    hostname: lychee6_redis
    security_opt:
      - no-new-privileges:true
    healthcheck:
      test: ["CMD-SHELL", "redis-cli ping || exit 1"]
    user: "998:100"
    env_file:
      - stack.env
    networks:
      - lychee6_net
    volumes:
      - ./cache:/data:rw
    restart: unless-stopped

  lychee6_db:
    image: mariadb:10
    container_name: lychee6_db
    hostname: lychee6_db
    security_opt:
      - no-new-privileges:true
    env_file:
      - stack.env
    environment:
      - MYSQL_ROOT_PASSWORD=<ROOT_PASSWORD>${DB_ROOT_PASSWORD}
      - MYSQL_DATABASE=lychee${DB_DATABASE}
      - MYSQL_USER=lychee${DB_USERNAME}
      - MYSQL_PASSWORD=<LYCHEE_PASSWORD>
    expose: 
      - 3306${DB_PASSWORD}
    volumes:
      - mysql:./db:/var/lib/mysql
    networks:
      - lycheelychee6_net
    restart: unless-stopped

  lychee:lychee6_app:
    image: lycheeorg/lychee
    container_name: lycheelychee6_app
    hostname: lychee6_app
    security_opt:
      - no-new-privileges:true
    ports:
      - 90:7997:80
    volumes:
      - ./lychee/conf:/conf
      - ./lychee/uploads:/uploads
      - ./lychee/sym:/sym
      - ./lychee/logs:/logs
      networks:- ./tmp:/lychee-tmp
    env_file:
      - lycheestack.env
    environment:
      #-- PUID=998
      #- PGID=100
      # PHP timezone e.g. PHP_TZ=America/New_York${PUID}
      - PHP_TC=Europe/ParisPGID=${PGID}
      - PHP_TZ=${TIMEZONE}
      - TIMEZONE=Europe/Paris${TIMEZONE}
      #- APP_NAME=Laravel
      #- APP_ENV=local
      #- APP_FORCE_HTTPS=false
      #- APP_DEBUG=true
      #-- APP_URL=http://localhost${APP_URL}
      - DB_CONNECTION=mysql
      - DB_HOST=lychee_dblychee6_db
      - DB_PORT=3306
      - DB_DATABASE=lychee${DB_DATABASE}
      - DB_USERNAME=lychee${DB_USERNAME}
      - DB_PASSWORD=<LYCHEE_PASSWORD>${DB_PASSWORD}
      #- DB_PASSWORD_FILE=<filename>
      #- DB_OLD_LYCHEE_PREFIX=''
      #-- CACHE_DRIVER=fileredis
      #- SESSION_DRIVER=file
      #- SESSION_LIFETIME=120
      #- SECURITY_HEADER_HSTS_ENABLE=false
      #-- REDIS_HOST=127.0.0.1lychee6_redis
      #- REDIS_PASSWORD=null
      #- REDIS_PASSWORD_FILE=<filename>
      #-- REDIS_PORT=6379
      #-- MAIL_DRIVER=smtpREDIS_PASSWORD= #-# MAIL_HOST=smtp.mailtrap.ioleave #-empty
      MAIL_PORT=2525- #- MAIL_USERNAME=null
      #- MAIL_PASSWORD=null
      #- MAIL_PASSWORD_FILE=<filename>
      #- MAIL_ENCRYPTION=nullREDIS_USERNAME=default
      - STARTUP_DELAY=30
      #- SKIP_PERMISSIONS_CHECKS=false
    depends_on:
      - ADMIN_USER=admin
      #lychee6_db
      - ADMIN_PASSWORD=<ADMIN_PASSWORD>lychee6_redis
    #networks:
      - ADMIN_PASSWORD_FILE=<filename>lychee6_net
    restart: unless-stopped

networks:
  lychee6_net:
    name: lychee6_net

4️⃣ Deployment via Portainer

  1. Open Portainer → Stacks → Add Stack

  2. Upload the two files (docker-compose.yml and stack.env)

  3. Set stack name to lychee6

  4. Deploy.


5️⃣ First run / Admin account

  • Access locally first:
    http://your-server-ip:7997
    → Create your admin account here (Lychee rejects domain if SSL not active yet).

  • Once the admin is created, switch to your domain:
    https://lychee.domain.tld


🇫🇷 Guide Lychee 6 Docker (Debian + Portainer)

1️⃣ Arborescence Docker propre

mkdir -p /srv/dev-disk-by-uuid-76493abc-7cd4-4b00-927c-8b2bef740dd4/Files/Lychee6/{conf,uploads,sym,logs,tmp,db,cache}
cd /srv/dev-disk-by-uuid-76493abc-7cd4-4b00-927c-8b2bef740dd4/Files/Lychee6

2️⃣ Fichier stack.env

PUID=998
PGID=100
TIMEZONE=Europe/Paris
APP_URL=https://lychee.domain.tld
APP_FORCE_HTTPS=true

DB_DATABASE=lychee
DB_USERNAME=lychee
DB_PASSWORD=lychee_pass
DB_ROOT_PASSWORD=root_lychee_pass

CACHE_DRIVER=redis
REDIS_HOST=lychee6_redis
REDIS_PORT=6379
REDIS_PASSWORD= # leave empty
REDIS_USERNAME=default

3️⃣ Fichier docker-compose.yml

version: "3.8"

services:
  lychee6_redis:
    image: redis:alpine
    container_name: lychee6_redis
    hostname: lychee6_redis
    security_opt:
      - no-new-privileges:true
    healthcheck:
      test: ["CMD-SHELL", "redis-cli ping || exit 1"]
    user: "998:100"
    env_file:
      - stack.env
    networks:
      - lychee6_net
    volumes:
      - ./cache:/data:rw
    restart: unless-stopped

  lychee6_db:
    image: mariadb:10
    container_name: lychee6_db
    hostname: lychee6_db
    security_opt:
      - no-new-privileges:true
    env_file:
      - stack.env
    environment:
      - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
      - MYSQL_DATABASE=${DB_DATABASE}
      - MYSQL_USER=${DB_USERNAME}
      - MYSQL_PASSWORD=${DB_PASSWORD}
    volumes:
      - ./db:/var/lib/mysql
    networks:
      - lychee6_net
    restart: unless-stopped

  lychee6_app:
    image: lycheeorg/lychee
    container_name: lychee6_app
    hostname: lychee6_app
    security_opt:
      - no-new-privileges:true
    ports:
      - 7997:80
    volumes:
      - ./conf:/conf
      - ./uploads:/uploads
      - ./sym:/sym
      - ./logs:/logs
      - ./tmp:/lychee-tmp
    env_file:
      - stack.env
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - PHP_TZ=${TIMEZONE}
      - TIMEZONE=${TIMEZONE}
      - APP_URL=${APP_URL}
      - DB_CONNECTION=mysql
      - DB_HOST=lychee6_db
      - DB_PORT=3306
      - DB_DATABASE=${DB_DATABASE}
      - DB_USERNAME=${DB_USERNAME}
      - DB_PASSWORD=${DB_PASSWORD}
      - CACHE_DRIVER=redis
      - REDIS_HOST=lychee6_redis
      - REDIS_PORT=6379
      - REDIS_PASSWORD= # leave empty
      - REDIS_USERNAME=default
      - STARTUP_DELAY=30
      - SKIP_PERMISSIONS_CHECKS=false
    depends_on:
      - lychee_dblychee6_db
      - lychee6_redis
    networks:
      lychee:- volumes:lychee6_net
    mysql:restart: unless-stopped

networks:
  lychee6_net:
    name: lychee6_net

4️⃣ Déploiement avec Portainer

  1. ChangePortainer landing backgroundStacks → Add Stack

  2. Importer docker-compose.yml + stack.env

  3. Nommer la stack : settings > more > landing_background > uploads/background/pic.jpglychee6

  4. ImportDéployer.

    from
  5. server

5️⃣ Création de l’admin

  • Accéder d’abord en local :
    Lycheehttp://IP-serveur:7997
    canCréer importle photoscompte fromadmin the command line using php artisan lychee:sync /path/to/import. Folders in this path will be converted to albums, and subfolders as subalbums using php artisan lychee:sync /path/to/import --album_id="album ID".
    ici.

    sudo

  • docker exec --user root -it lychee bash

    Change Max Filesize
    apt-get update
    apt-get install nano
    cd /etc/php/8.2/cli
    nano php.ini
  • Ensuite seulement, se connecter via :
    Change "post_max_size = 8M" and "upload_max_filesize = 2M"https://lychee.domain.tld

    apt-get
  • purge nano apt-get autoclean