Files
docudjeex/content/fr/3.serveex/6.cloud/2.nextcloud.md
T

243 lines
7.4 KiB
Markdown

---
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/<slug>/.well-known/openid-configuration` comme Discovery endpoint, puis renseignez le Client ID et le Client Secret.
::