Compare commits

..

3 Commits

Author SHA1 Message Date
BeauTroll
a1b51599c6 feat: expose Apache logs to host for fail2ban integration
- Mount Apache logs directory to ./logs/apache
- Configure JSON file logging driver with rotation
- Set max log size to 10MB with 3 files retention
- Enable fail2ban to monitor access logs directly
- Prevents need for systemd service to export logs

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-20 21:03:48 +01:00
BeauTroll
123f7b6a9c feat: add custom Docker image with ffmpeg for video previews
- Create Dockerfile extending nextcloud:latest with ffmpeg
- Add .dockerignore to optimize build context
- Update docker-compose.yml to use custom image build
- Modify update.sh to rebuild custom image on updates
- Document custom image setup in README
- Enable video preview generation for .mov, .mp4 files

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-20 13:51:19 +01:00
BeauTroll
f02c9b36b2 chore: remove unused enable-modules.sh script
- Script not mounted in Docker container
- Cannot be executed from container
- Commands already documented in README
- Reduces maintenance overhead

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-20 13:12:56 +01:00
6 changed files with 99 additions and 21 deletions

17
.dockerignore Normal file
View 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
View 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/*

View File

@@ -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,54 @@ 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.
### 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 +213,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 +321,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)

View File

@@ -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

View File

@@ -1,12 +1,20 @@
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
- ./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
@@ -56,7 +64,7 @@ services:
- nextcloud-net - nextcloud-net
cron: cron:
image: nextcloud:latest image: nextcloud-custom:latest
restart: always restart: always
volumes_from: volumes_from:
- nextcloud - nextcloud

View File

@@ -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