Compare commits
10 Commits
43517b36cc
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fc1cac8e5a | ||
|
|
5d610b9177 | ||
|
|
8096d8985b | ||
|
|
8462b10e3b | ||
|
|
6bdd8e918c | ||
|
|
44ec0a004a | ||
|
|
c403419ea1 | ||
|
|
a1b51599c6 | ||
|
|
123f7b6a9c | ||
|
|
f02c9b36b2 |
17
.dockerignore
Normal file
17
.dockerignore
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# Données Nextcloud
|
||||||
|
data/
|
||||||
|
db/
|
||||||
|
backups/
|
||||||
|
logs/
|
||||||
|
|
||||||
|
# Docker
|
||||||
|
docker-compose*.yml
|
||||||
|
.env*
|
||||||
|
|
||||||
|
# Git
|
||||||
|
.git/
|
||||||
|
.gitignore
|
||||||
|
|
||||||
|
# Documentation
|
||||||
|
README.md
|
||||||
|
*.md
|
||||||
7
Dockerfile
Normal file
7
Dockerfile
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
FROM nextcloud:latest
|
||||||
|
|
||||||
|
# Installer ffmpeg pour les previews vidéo
|
||||||
|
RUN apt-get update && \
|
||||||
|
apt-get install -y --no-install-recommends \
|
||||||
|
ffmpeg \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
76
README.md
76
README.md
@@ -16,12 +16,13 @@ Déploiement Nextcloud avec Docker Compose comprenant MariaDB 10.11, Redis (cach
|
|||||||
|
|
||||||
## Architecture
|
## Architecture
|
||||||
|
|
||||||
Le déploiement comprend 4 services:
|
Le déploiement comprend 5 services:
|
||||||
|
|
||||||
- **nextcloud**: Application Nextcloud (port 127.0.0.1:8888:80)
|
- **nextcloud**: Application Nextcloud avec image personnalisée (inclut ffmpeg) - port 127.0.0.1:8888:80
|
||||||
- **db**: MariaDB 10.11 avec healthcheck
|
- **db**: MariaDB 10.11 avec healthcheck
|
||||||
- **redis**: Cache Redis avec politique LRU (512MB max)
|
- **redis**: Cache Redis avec politique LRU (512MB max)
|
||||||
- **cron**: Tâches planifiées Nextcloud (préviews, nettoyage, etc.)
|
- **cron**: Tâches planifiées Nextcloud (préviews, nettoyage, etc.)
|
||||||
|
- **backup-cron**: Système de backup automatisé (quotidien)
|
||||||
|
|
||||||
**Réseaux**:
|
**Réseaux**:
|
||||||
|
|
||||||
@@ -113,6 +114,72 @@ Les paramètres PHP sont préconfigurés dans docker-compose.yml:
|
|||||||
|
|
||||||
Ces valeurs permettent l'upload de fichiers jusqu'à 2GB.
|
Ces valeurs permettent l'upload de fichiers jusqu'à 2GB.
|
||||||
|
|
||||||
|
### Image Docker personnalisée
|
||||||
|
|
||||||
|
Le projet utilise une image Docker personnalisée basée sur `nextcloud:latest` qui inclut **ffmpeg** pour la génération de previews vidéo (.mov, .mp4, etc.).
|
||||||
|
|
||||||
|
**Dockerfile:**
|
||||||
|
```dockerfile
|
||||||
|
FROM nextcloud:latest
|
||||||
|
|
||||||
|
# Installer ffmpeg pour les previews vidéo
|
||||||
|
RUN apt-get update && \
|
||||||
|
apt-get install -y --no-install-recommends \
|
||||||
|
ffmpeg \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
```
|
||||||
|
|
||||||
|
**Builder l'image:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Builder l'image custom
|
||||||
|
docker compose build nextcloud
|
||||||
|
|
||||||
|
# Ou forcer le rebuild
|
||||||
|
docker compose build --no-cache nextcloud
|
||||||
|
```
|
||||||
|
|
||||||
|
**Vérifier ffmpeg:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose exec nextcloud ffmpeg -version
|
||||||
|
```
|
||||||
|
|
||||||
|
**Activer les previews vidéo:**
|
||||||
|
|
||||||
|
Après le premier démarrage, activez les providers de preview pour les vidéos:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose exec -u www-data nextcloud php occ config:system:set enabledPreviewProviders 0 --value="OC\\Preview\\Movie"
|
||||||
|
docker compose exec -u www-data nextcloud php occ config:system:set enabledPreviewProviders 1 --value="OC\\Preview\\PNG"
|
||||||
|
docker compose exec -u www-data nextcloud php occ config:system:set enabledPreviewProviders 2 --value="OC\\Preview\\JPEG"
|
||||||
|
docker compose exec -u www-data nextcloud php occ config:system:set enabledPreviewProviders 3 --value="OC\\Preview\\GIF"
|
||||||
|
docker compose exec -u www-data nextcloud php occ config:system:set enabledPreviewProviders 4 --value="OC\\Preview\\BMP"
|
||||||
|
|
||||||
|
# Générer les previews pour un utilisateur
|
||||||
|
docker compose exec -u www-data nextcloud php occ preview:generate-all nom_utilisateur
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note:** L'image est buildée localement et taguée `nextcloud-custom:latest`. Lors des mises à jour Nextcloud, pensez à rebuild l'image.
|
||||||
|
|
||||||
|
# Server Transport Traefik
|
||||||
|
|
||||||
|
Ajouter à traefik.yml :
|
||||||
|
```yml
|
||||||
|
serversTransport:
|
||||||
|
nextcloud-transport:
|
||||||
|
forwardingTimeouts:
|
||||||
|
dialTimeout: 30s
|
||||||
|
responseHeaderTimeout: 0s
|
||||||
|
idleConnTimeout: 3600s
|
||||||
|
```
|
||||||
|
OU au docker-compose.yml
|
||||||
|
```yml
|
||||||
|
command:
|
||||||
|
- "--serverstransport.forwardingtimeouts.dialtimeout=30s"
|
||||||
|
- "--serverstransport.forwardingtimeouts.responseheadertimeout=0"
|
||||||
|
- "--serverstransport.forwardingtimeouts.idleconntimeout=3600s"
|
||||||
|
```
|
||||||
### Configuration Apache pour Traefik
|
### Configuration Apache pour Traefik
|
||||||
|
|
||||||
Le fichier `apache/nextcloud.conf` configure Apache pour fonctionner correctement derrière le reverse proxy Traefik.
|
Le fichier `apache/nextcloud.conf` configure Apache pour fonctionner correctement derrière le reverse proxy Traefik.
|
||||||
@@ -164,6 +231,9 @@ docker compose logs nextcloud --tail=20
|
|||||||
### Première installation
|
### Première installation
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
# Builder l'image personnalisée (inclut ffmpeg)
|
||||||
|
docker compose build nextcloud
|
||||||
|
|
||||||
# Démarrer tous les services
|
# Démarrer tous les services
|
||||||
make up
|
make up
|
||||||
|
|
||||||
@@ -269,7 +339,7 @@ make update
|
|||||||
1. 💾 **Backup automatique de sécurité**
|
1. 💾 **Backup automatique de sécurité**
|
||||||
- Exécute `scripts/backup.sh` complet
|
- Exécute `scripts/backup.sh` complet
|
||||||
- Archive créée dans `./backups/`
|
- Archive créée dans `./backups/`
|
||||||
2. 📥 Télécharge la nouvelle image Docker Nextcloud
|
2. 🔨 Rebuild l'image personnalisée avec la nouvelle version Nextcloud
|
||||||
3. ⏸️ Active le mode maintenance
|
3. ⏸️ Active le mode maintenance
|
||||||
4. 🔄 Redémarre les containers avec `--force-recreate`
|
4. 🔄 Redémarre les containers avec `--force-recreate`
|
||||||
5. ⏳ Attend que Nextcloud soit prêt (health check jusqu'à 60s)
|
5. ⏳ Attend que Nextcloud soit prêt (health check jusqu'à 60s)
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# Active les modules Apache nécessaires pour Nextcloud derrière Traefik
|
|
||||||
|
|
||||||
a2enmod headers
|
|
||||||
a2enmod rewrite
|
|
||||||
a2enmod dir
|
|
||||||
a2enmod mime
|
|
||||||
a2enmod remoteip # Pour récupérer les vraies IPs clients
|
|
||||||
a2enmod env # Pour SetEnvIf (détection HTTPS)
|
|
||||||
|
|
||||||
# Redémarre Apache
|
|
||||||
apache2ctl graceful
|
|
||||||
16
apache/mpm_prefork.conf
Normal file
16
apache/mpm_prefork.conf
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# prefork MPM
|
||||||
|
# StartServers: number of server processes to start
|
||||||
|
# MinSpareServers: minimum number of server processes which are kept spare
|
||||||
|
# MaxSpareServers: maximum number of server processes which are kept spare
|
||||||
|
# ServerLimit: maximum value for MaxRequestWorkers (must be set before MaxRequestWorkers)
|
||||||
|
# MaxRequestWorkers: maximum number of server processes allowed to start
|
||||||
|
# MaxConnectionsPerChild: maximum number of requests a server process serves
|
||||||
|
|
||||||
|
<IfModule mpm_prefork_module>
|
||||||
|
ServerLimit 400
|
||||||
|
StartServers 10
|
||||||
|
MinSpareServers 10
|
||||||
|
MaxSpareServers 20
|
||||||
|
MaxRequestWorkers 400
|
||||||
|
MaxConnectionsPerChild 1000
|
||||||
|
</IfModule>
|
||||||
@@ -1,5 +1,10 @@
|
|||||||
# Configuration pour reverse proxy Traefik
|
# Configuration pour reverse proxy Traefik
|
||||||
# Récupération de l'IP réelle du client via X-Forwarded-For
|
# Récupération de l'IP réelle du client via X-Forwarded-For
|
||||||
|
ServerName cloud.agence66.fr
|
||||||
|
|
||||||
|
# Autoriser les caractères spéciaux encodés dans les noms de fichiers
|
||||||
|
AllowEncodedSlashes NoDecode
|
||||||
|
|
||||||
RemoteIPHeader X-Forwarded-For
|
RemoteIPHeader X-Forwarded-For
|
||||||
RemoteIPTrustedProxy 172.16.0.0/12
|
RemoteIPTrustedProxy 172.16.0.0/12
|
||||||
RemoteIPTrustedProxy 10.0.0.0/8
|
RemoteIPTrustedProxy 10.0.0.0/8
|
||||||
|
|||||||
@@ -13,3 +13,6 @@ binlog_format = ROW
|
|||||||
|
|
||||||
# Connections
|
# Connections
|
||||||
max_connections = 200
|
max_connections = 200
|
||||||
|
|
||||||
|
# Gros fichiers - augmenter la taille max des paquets
|
||||||
|
max_allowed_packet = 1G
|
||||||
|
|||||||
@@ -1,12 +1,21 @@
|
|||||||
services:
|
services:
|
||||||
nextcloud:
|
nextcloud:
|
||||||
image: nextcloud:latest
|
build: .
|
||||||
|
image: nextcloud-custom:latest
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
ports:
|
||||||
- "127.0.0.1:8888:80"
|
- "127.0.0.1:8888:80"
|
||||||
volumes:
|
volumes:
|
||||||
- ./data:/var/www/html
|
- ./data:/var/www/html
|
||||||
- ./apache/nextcloud.conf:/etc/apache2/conf-enabled/nextcloud.conf:ro
|
- ./apache/nextcloud.conf:/etc/apache2/conf-enabled/nextcloud.conf:ro
|
||||||
|
- ./apache/mpm_prefork.conf:/etc/apache2/mods-available/mpm_prefork.conf:ro
|
||||||
|
- ./logs/apache:/var/log/apache2
|
||||||
|
logging:
|
||||||
|
driver: "json-file"
|
||||||
|
options:
|
||||||
|
max-size: "10m"
|
||||||
|
max-file: "3"
|
||||||
|
tag: "nextcloud"
|
||||||
environment:
|
environment:
|
||||||
# Database
|
# Database
|
||||||
- MYSQL_HOST=db
|
- MYSQL_HOST=db
|
||||||
@@ -24,16 +33,16 @@ services:
|
|||||||
- REDIS_HOST_PASSWORD=${REDIS_HOST_PASSWORD}
|
- REDIS_HOST_PASSWORD=${REDIS_HOST_PASSWORD}
|
||||||
# PHP
|
# PHP
|
||||||
- PHP_MEMORY_LIMIT=4096M
|
- PHP_MEMORY_LIMIT=4096M
|
||||||
- PHP_UPLOAD_MAX_FILESIZE=2G
|
- PHP_UPLOAD_MAX_FILESIZE=10G
|
||||||
- PHP_POST_MAX_SIZE=2G
|
- PHP_POST_MAX_SIZE=10G
|
||||||
- PHP_MAX_EXECUTION_TIME=1800
|
- PHP_MAX_EXECUTION_TIME=7200
|
||||||
- PHP_MAX_INPUT_TIME=1800
|
- PHP_MAX_INPUT_TIME=7200
|
||||||
# - PHP_UPLOAD_MAX_FILESIZE=1024G
|
# - PHP_UPLOAD_MAX_FILESIZE=1024G
|
||||||
# - PHP_POST_MAX_SIZE=1024G
|
# - PHP_POST_MAX_SIZE=1024G
|
||||||
# - PHP_MAX_EXECUTION_TIME=86400
|
# - PHP_MAX_EXECUTION_TIME=86400
|
||||||
# - PHP_MAX_INPUT_TIME=86400
|
# - PHP_MAX_INPUT_TIME=86400
|
||||||
# Apache
|
# Apache
|
||||||
- APACHE_BODY_LIMIT=2147483648
|
- APACHE_BODY_LIMIT=0
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "curl", "-f", "http://localhost/status.php"]
|
test: ["CMD", "curl", "-f", "http://localhost/status.php"]
|
||||||
interval: 30s
|
interval: 30s
|
||||||
@@ -47,16 +56,32 @@ services:
|
|||||||
networks:
|
networks:
|
||||||
- nextcloud-net
|
- nextcloud-net
|
||||||
- traefik-net
|
- traefik-net
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
# Router configuration
|
||||||
|
- "traefik.http.routers.cloud.rule=Host(`${NEXTCLOUD_DOMAIN}`)"
|
||||||
|
- "traefik.http.routers.cloud.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.cloud.tls.certresolver=letsencrypt"
|
||||||
|
- "traefik.http.routers.cloud.middlewares=nextcloud-headers,nextcloud-redirect"
|
||||||
|
# Service configuration
|
||||||
|
- "traefik.http.services.cloud.loadbalancer.server.port=80"
|
||||||
|
- "traefik.http.services.cloud.loadbalancer.serverstransport=nextcloud-transport"
|
||||||
|
# Middleware: Headers
|
||||||
|
- "traefik.http.middlewares.nextcloud-headers.headers.customrequestheaders.X-Forwarded-Proto=https"
|
||||||
|
- "traefik.http.middlewares.nextcloud-headers.headers.customresponseheaders.Strict-Transport-Security=max-age=15552000"
|
||||||
|
# Middleware: Redirect pour CalDAV/CardDAV
|
||||||
|
- "traefik.http.middlewares.nextcloud-redirect.redirectregex.regex=https://(.*)/.well-known/(card|cal)dav"
|
||||||
|
- "traefik.http.middlewares.nextcloud-redirect.redirectregex.replacement=https://$$1/remote.php/dav/"
|
||||||
|
- "traefik.http.middlewares.nextcloud-redirect.redirectregex.permanent=true"
|
||||||
redis:
|
redis:
|
||||||
image: redis:alpine
|
image: redis:alpine
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
command: redis-server --requirepass ${REDIS_HOST_PASSWORD} --maxmemory 512mb --maxmemory-policy allkeys-lru
|
command: redis-server --requirepass ${REDIS_HOST_PASSWORD} --maxmemory 2gb --maxmemory-policy allkeys-lru
|
||||||
networks:
|
networks:
|
||||||
- nextcloud-net
|
- nextcloud-net
|
||||||
|
|
||||||
cron:
|
cron:
|
||||||
image: nextcloud:latest
|
image: nextcloud-custom:latest
|
||||||
restart: always
|
restart: always
|
||||||
volumes_from:
|
volumes_from:
|
||||||
- nextcloud
|
- nextcloud
|
||||||
|
|||||||
@@ -80,10 +80,16 @@ cp docker-compose.yml "$COMPOSE_BACKUP" || {
|
|||||||
}
|
}
|
||||||
log "INFO" "docker-compose.yml sauvegardé: $COMPOSE_BACKUP"
|
log "INFO" "docker-compose.yml sauvegardé: $COMPOSE_BACKUP"
|
||||||
|
|
||||||
# Pull nouvelle image
|
# Pull nouvelle image de base et rebuild image custom
|
||||||
log "INFO" "Téléchargement de la nouvelle version..."
|
log "INFO" "Téléchargement de la nouvelle version de base..."
|
||||||
if ! docker-compose pull nextcloud 2>&1 | tee -a "$LOG_FILE"; then
|
if ! docker pull nextcloud:latest 2>&1 | tee -a "$LOG_FILE"; then
|
||||||
log "ERROR" "Erreur lors du téléchargement de l'image"
|
log "ERROR" "Erreur lors du téléchargement de l'image de base"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
log "INFO" "Rebuild de l'image personnalisée (avec ffmpeg)..."
|
||||||
|
if ! docker-compose build --no-cache nextcloud 2>&1 | tee -a "$LOG_FILE"; then
|
||||||
|
log "ERROR" "Erreur lors du rebuild de l'image personnalisée"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user