---
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.
::
