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;
}
});
💻 Additional text of the footer
Will work:
<a href="https://photo.stephanebonduel.com" target="_blank"><i class="fa fa-globe" style="font-size: 2em;"></i></a>
Wish would work but is too long:
<a href="https://mon-site.com" target="_blank"><i class="fa fa-globe" style="font-size: 2em;"></i></a><a href="https://facebook.com/mon-profil" target="_blank"><i class="fa fa-facebook" style="font-size: 2em;"></i></a><a href="https://instagram.com/mon-profil" target="_blank"><i class="fa fa-instagram" style="font-size: 2em;"></i></a>
No comments to display
No comments to display