--- title: Nextcloud description: Installer Nextcloud pour auto-héberger vos fichiers, photos et agenda, une alternative respectueuse de la vie privée à Google Drive, OneDrive et iCloud. --- :ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} [Nextcloud](https://nextcloud.com/) est une solution auto-hébergée qui permet d'accéder à vos données et de les synchroniser sur tous vos appareils. Elle inclut aussi des fonctions de collaboration, un agenda, et bien plus. C'est une excellente alternative à des services comme Google Drive, iCloud ou OneDrive. ![Picture](/img/serveex/nextcloud.png) ## Installation ::note{to="https://docs.linuxserver.io/images/docker-nextcloud/"} Nous utiliserons l'image Docker maintenue par **LinuxServer.io** :: ::file-tree --- tree: /: - srv: - docker: - nextcloud: - config/ - data/ - compose.yaml - .env --- :: ::steps{level="3"} ### Déployer la stack Ouvrez Dockge, cliquez sur `compose`, nommez la stack `nextcloud` et collez ce qui suit : ```yaml [compose.yaml] --- services: nextcloud: image: lscr.io/linuxserver/nextcloud:latest container_name: nextcloud environment: - PUID=${PUID} - PGID=${GUID} - TZ=Etc/UTC volumes: - /srv/docker/nextcloud/config:/config - /srv/docker/nextcloud/data:/data ports: - ${PORT}:443 restart: unless-stopped ``` ::note{to="/general/networking/samba"} Si vous utilisez un NAS ou un disque partagé sur le réseau via **Samba**, remplacez `/srv/docker/nextcloud/data` par le chemin de votre dossier partagé. :: ### Renseigner vos variables d'environnement Trouvez vos `PUID` et `GUID` avec la commande suivante : ```bash [Terminal] id utilisateur ``` Remplissez ensuite le fichier `.env` avec le port de votre choix et les valeurs trouvées ci-dessus, par exemple : ```properties [.env] PUID=1000 GUID=1000 PORT=4545 ``` Déployez la stack et visitez `http://ipdevotreserveur:4545` pour terminer la configuration. ### Terminé ! :: ::caution __Si ça ne marche pas :__ vérifiez les règles de votre pare-feu. :: ## Exposer Nextcloud avec Swag L'objectif de cette installation est d'accéder à Nextcloud à distance depuis tous vos appareils. Nous allons utiliser Swag pour exposer l'application. ::note Nous partons du principe que vous avez un sous-domaine `nextcloud.mondomaine.fr` avec un `CNAME` pointant vers `mondomaine.fr` dans votre [zone DNS](/general/networking/dns). Et à moins d'utiliser [Cloudflare Zero Trust](/serveex/security/cloudflare), le port `443` de votre box doit être redirigé vers le port `443` de votre serveur via les [règles NAT](/general/networking/nat). :: ::steps{level="3"} ### Ajouter le réseau de Nextcloud à SWAG Dans Dockge, allez sur votre stack SWAG et modifiez le compose pour y ajouter le réseau de Nextcloud : ```yaml [compose.yaml] --- services: swag: container_name: # ... # ... networks: # ... - nextcloud networks: # ... nextcloud: name: nextcloud_default external: true ``` ::note Nous partons du principe que le réseau de Nextcloud s'appelle `nextcloud_default`. Vous pouvez confirmer la connectivité en visitant le tableau de bord de SWAG sur http://ipdevotreserveur:81. :: Redéployez la stack et attendez que SWAG soit pleinement opérationnel. ### Configurer les proxys de confiance Dans les fichiers de Nextcloud, modifiez le fichier `config.php` : ::tip{icon="" to="/serveex/files/file-browser-quantum"} ✨ __Astuce :__ vous pouvez utiliser **File Browser Quantum** pour naviguer et modifier les fichiers plutôt que des commandes dans le terminal. :: ```bash [Terminal] sudo nano /srv/docker/nextcloud/config/www/nextcloud/config/config.php ``` Collez ce qui suit avant le `);` final : ```php [config.php] 'trusted_proxies' => [gethostbyname('swag')], 'overwrite.cli.url' => 'https://nextcloud.example.com/', 'overwritehost' => 'nextcloud.example.com', 'overwriteprotocol' => 'https', ``` Ajoutez également votre domaine dans la section `array`. Cela devrait ressembler à ceci : ```php [config.php] array ( 0 => '192.168.0.1:444', # Cette ligne peut différer, n'y touchez pas ! 1 => 'nextcloud.mondomaine.fr', # Ajoutez votre domaine ici ), ``` Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter. ### Créer le fichier subdomain.conf Dans les dossiers de Swag, créez le fichier `nextcloud.subdomain.conf` : ```bash [Terminal] sudo nano /srv/docker/swag/config/nginx/proxy-confs/nextcloud.subdomain.conf ``` Collez ce qui suit : ```nginx [nextcloud.subdomain.conf] ## Version 2024/04/25 server { listen 443 ssl; listen [::]:443 ssl; server_name nextcloud.*; include /config/nginx/ssl.conf; client_max_body_size 0; location / { include /config/nginx/proxy.conf; include /config/nginx/resolver.conf; set $upstream_app nextcloud; set $upstream_port 443; set $upstream_proto https; proxy_pass $upstream_proto://$upstream_app:$upstream_port; # Masque les en-têtes de réponse de Nextcloud qui entrent en conflit avec ssl.conf proxy_hide_header Referrer-Policy; proxy_hide_header X-Content-Type-Options; proxy_hide_header X-Frame-Options; proxy_hide_header X-XSS-Protection; # Désactive la mise en tampon du proxy proxy_buffering off; } } ``` Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter. ### Terminé ! :: Et voilà ! Vous avez exposé Nextcloud ! N'oubliez pas d'installer [les applications bureau et mobiles](https://nextcloud.com/install/). ## Protéger Nextcloud avec Pocket ID Nextcloud peut aussi déléguer la connexion à un fournisseur OIDC plutôt qu'à (ou en plus de) ses propres comptes. ::steps{level="3"} ### Installer l'application OpenID Connect Dans Nextcloud, allez dans _Apps > Integration_ et installez __OpenID Connect user backend__ (`user_oidc`). ### Enregistrer Nextcloud comme client OIDC [Enregistrez un client OIDC dans Pocket ID](/serveex/security/pocket-id#registering-an-oidc-client) nommé `Nextcloud`, avec cette URL de callback : ```text https://nextcloud.mondomaine.fr/apps/user_oidc/code ``` ### Ajouter le fournisseur dans Nextcloud Dans Nextcloud, allez dans _Administration > OpenID Connect_, cliquez sur le bouton `+`, et renseignez : | Champ | Valeur | |-------|-------| | Identifier | `PocketID` | | Client ID | Le client ID copié depuis Pocket ID | | Client secret | Le client secret copié depuis Pocket ID | | Discovery endpoint | L'URL de découverte OIDC de Pocket ID | | Scope | `openid email profile groups` | ### Terminé ! :: ::tip{icon="" to="/serveex/advanced/authentik"} ✨ Vous pouvez utiliser **Authentik** plutôt que Pocket ID : 1. Dans Authentik, créez une application et un provider OAuth2/OpenID Connect nommé `Nextcloud`, avec une redirect URI (de type `Strict`) valant `https://nextcloud.mondomaine.fr/apps/user_oidc/code`. 2. Notez les __Client ID__, __Client Secret__ et __Slug__ du provider. 3. Dans les réglages OpenID Connect de Nextcloud, mettez `https://authentik.mondomaine.fr/application/o//.well-known/openid-configuration` comme Discovery endpoint, puis renseignez le Client ID et le Client Secret. ::