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
-
Open Portainer â Stacks â Add Stack
-
Upload the two files (
docker-compose.ymlandstack.env) -
Set stack name to lychee6
-
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
-
Portainer â Stacks â Add Stack
-
Importer
docker-compose.yml+stack.env -
Nommer la stack : lychee6
-
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;
}
});