5.3 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	navigation, title, main
| navigation | title | main | ||
|---|---|---|---|---|
| true | Nextcloud | 
  | 
:ellipsis{left=0px width=40rem top=10rem blur=140px}
Nextcloud
::alert{type="info"} 🎯 Goals: Install Nextcloud to manage your photos and files across all your devices. ::
Nextcloud is a self-hosted solution that allows you to access and synchronize your data across all your devices. It also includes collaboration features, calendar, and more. It’s a great alternative to services like Google Drive, iCloud, or OneDrive.
Installation
::alert{type="info"} :::list{type="info"}
- We'll be using the Docker image maintained by LinuxServer.io ::: ::
 
File structure:
root
└── docker
    └── nextcloud
        ├── config
        ├── data
        ├── compose.yaml
        └── .env
Open Dockge, click on compose, name the stack nextcloud and paste the following:
---
services:
  nextcloud:
    image: lscr.io/linuxserver/nextcloud:latest
    container_name: nextcloud
    environment:
      - PUID=${PUID}
      - PGID=${GUID}
      - TZ=Etc/UTC
    volumes:
      - /docker/nextcloud/config:/config
      - /docker/nextcloud/data:/data
    ports:
      - ${PORT}:443
    restart: unless-stopped
::alert{type="info"} :::list{type="info"}
- If you’re using a NAS or network-shared drive via Samba, replace 
/docker/nextcloud/datawith the path to your shared folder. ::: :: 
Find your PUID and GUID by running the following command:
id username
Then fill out the .env file with your preferred port and the values found above, for example:
PUID=1000
GUID=1000
PORT=4545
Deploy the stack and visit http://yourserverip:4545 to complete the setup.
::alert{type="danger"} :::list{type="danger"}
- If it fails: check your firewall rules. ::: ::
 
Exposing Nextcloud with Swag
The goal of this setup is to access Nextcloud remotely from all your devices. We’ll use Swag to expose the app.
::alert{type="info"} :::list{type="info"}
- We assume you have a subdomain 
nextcloud.yourdomain.comwith aCNAMEpointing toyourdomain.comin your DNS zone. And unless you’re using Cloudflare Zero Trust, port443on your router must be forwarded to port443on your server using NAT rules. ::: :: 
In Dockge, go to your SWAG stack and edit the compose to add Nextcloud's network:
services:
  swag:
     container_name: # ...
      # ... 
     networks:               
      # ...           
      - nextcloud            
    
networks:                    
  # ...
  nextcloud:                 
    name: nextcloud_default  
    external: true           
::alert{type="info"} :::list{type="info"}
- We assume the Nextcloud network is named 
nextcloud_default. You can confirm connectivity by visiting the SWAG dashboard at http://yourserverip:81. ::: :: 
Redeploy the stack and wait for SWAG to become fully operational.
In Nextcloud’s files, edit the config.php file:
::alert{type="success"} ✨ Tip: You can use File Browser to navigate and edit files instead of using terminal commands. ::
sudo vi /docker/nextcloud/config/www/nextcloud/config/config.php
Enter edit mode with i and paste the following before the final );:
'trusted_proxies' => [gethostbyname('swag')],
'overwrite.cli.url' => 'https://nextcloud.example.com/',
'overwritehost' => 'nextcloud.example.com',
'overwriteprotocol' => 'https',
Also add your domain in the array section. It should look like this:
array (
   0 => '192.168.0.1:444', # This line may differ—don’t change it!
   1 => 'nextcloud.yourdomain.com', # Add your domain here
),
Press Esc, then save and exit by typing :x and hitting Enter.
In Swag’s folders, create the file nextcloud.subdomain.conf:
sudo vi /docker/swag/config/nginx/proxy-confs/nextcloud.subdomain.conf
Enter edit mode with i and paste the following:
## 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;
        # Hide proxy response headers from Nextcloud that conflict with 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;
        # Disable proxy buffering
        proxy_buffering off;
    }
}
Press Esc, save and exit with :x then Enter.
That’s it—you’ve exposed Nextcloud! Don’t forget to install the desktop and mobile apps.
::alert{type="success"} ✨ Tip: You can natively protect this app with Authentik by following these instructions. ::
