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

TRUSTED_PROXIES=YOURREVERSEPROXYSERVERADRESSE #eg 192.168.1.101

3️⃣ Docker Compose file (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:
      - lychee6_db
      - lychee6_redis
    networks:
      - 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

TRUSTED_PROXIES=YOURREVERSEPROXYSERVERADRESSE #eg 192.168.1.101

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:
      - lychee6_db
      - lychee6_redis
    networks:
      - lychee6_net
    restart: unless-stopped

networks:
  lychee6_net:
    name: lychee6_net

4️⃣ Déploiement avec Portainer

  1. Portainer → Stacks → Add Stack

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

  3. Nommer la stack : lychee6

  4. DĂŠployer.


5️⃣ Création de l’admin

  • AccĂŠder d’abord en local :
    http://IP-serveur:7997
    → Créer le compte admin ici.

  • Ensuite seulement, se connecter via :
    https://lychee.domain.tld


💻Custom CSS

Pour ajouter des icĂ´nes cliquables vers Facebook, Instagram et ton site internet dans le footer de Lychee via les champs CSS et JS, voici une solution simple et efficace. Tu peux coller ces codes directement dans les champs correspondants de ta configuration Lychee.


1. Code CSS (Ă  coller dans le champ CSS)

Ce code stylise les icĂ´nes et les positionne en bas de page (footer).

/* Style pour le footer */
.lychee-footer {
    text-align: center;
    padding: 10px;
    background-color: rgba(0, 0, 0, 0.1);
    position: fixed;
    bottom: 0;
    width: 100%;
    z-index: 1000;
}

/* Conteneur des icĂ´nes */
.social-icons-container {
    display: flex;
    justify-content: center;
    align-items: center;
    gap: 15px; /* Espacement entre les icĂ´nes */
    margin: 0 auto;
    max-width: fit-content;
}

/* Style des icĂ´nes */
.social-icon {
    font-size: 24px;
    color: #555;
    transition: color 0.3s;
}

.social-icon:hover {
    opacity: 0.8;
}

/* Couleurs spĂŠcifiques pour chaque icĂ´ne */
.social-icon.facebook { color: #3b5998; }
.social-icon.facebook:hover { color: #2d4373; }

.social-icon.instagram { color: #E1306C; }
.social-icon.instagram:hover { color: #8a3ab9; }

.social-icon.website { color: #4285F4; }
.social-icon.website:hover { color: #3367d6; }

2. Code JavaScript (Ă  coller dans le champ JS)

Ce code ajoute les icônes au footer et gère les liens cliquables.

// Attendre que la page soit chargĂŠe
document.addEventListener('DOMContentLoaded', function() {
    // CrĂŠer un conteneur pour les icĂ´nes
    const footer = document.querySelector('.lychee-footer') || document.body;
    const socialContainer = document.createElement('div');
    socialContainer.className = 'social-icons-container';
    socialContainer.style.marginTop = '10px';

    // Ajouter les icĂ´nes avec leurs liens
    const facebookIcon = createSocialIcon('facebook', 'https://www.facebook.com/TON_PROFIL', 'fab fa-facebook');
    const instagramIcon = createSocialIcon('instagram', 'https://www.instagram.com/TON_PROFIL', 'fab fa-instagram');
    const websiteIcon = createSocialIcon('website', 'https://ton-site-web.com', 'fas fa-globe');

    // Ajouter les icĂ´nes au conteneur
    socialContainer.appendChild(facebookIcon);
    socialContainer.appendChild(instagramIcon);
    socialContainer.appendChild(websiteIcon);

    // Ajouter le conteneur au footer
    footer.appendChild(socialContainer);

    // Fonction pour crĂŠer une icĂ´ne
    function createSocialIcon(className, href, iconClass) {
        const link = document.createElement('a');
        link.href = href;
        link.target = '_blank';
        link.rel = 'noopener noreferrer';

        const icon = document.createElement('i');
        icon.className = `social-icon ${className} ${iconClass}`;

        link.appendChild(icon);
        return link;
    }
});