5.2 KiB
title, description
| title | description |
|---|---|
| Nextcloud | Install Nextcloud to self-host your files, photos, and calendar — a privacy-friendly alternative to Google Drive, OneDrive, and iCloud. |
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
Nextcloud
::note 🎯 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
::note
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
::note
If you’re using a NAS or network-shared drive via Samba, replace /docker/nextcloud/data with 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.
::caution
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.
::note
We assume you have a subdomain nextcloud.yourdomain.com with a CNAME pointing to yourdomain.com in your DNS zone. And unless you’re using Cloudflare Zero Trust, port 443 on your router must be forwarded to port 443 on 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
::note
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:
::tip ✨ 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.
::tip ✨ Tip: You can natively protect this app with Authentik by following these instructions. ::
