# Nextcloud AIO

- [Nextcloud AIO](#nextcloud-aio)
  - [Setup](#setup)
  - [Install Docker](#install-docker)
    - [IPV6](#ipv6)
    - [Install](#install)
  - [Backups](#backups)
  - [Maintenace Mode](#maintenace-mode)
  - [Trusted Proxy](#trusted-proxy)
  - [Default phone region](#default-phone-region)
  - [Adding existing files](#adding-existing-files)
  - [Theming](#theming)
  - [Changing the domain](#changing-the-domain)
  - [Uninstall](#uninstall)
  - [Edit QCOW](#edit-qcow)
  - [Stuck in login screen](#stuck-in-login-screen)

<https://github.com/nextcloud/all-in-one>

## Setup

## Install Docker

<https://docs.docker.com/engine/install/fedora/#set-up-the-repository>

### IPV6

```bash
cat <<EOF > /etc/docker/daemon.json
{
  "ipv6": true,
  "fixed-cidr-v6": "fd12:3456:789a:1::/64",
  "experimental": true,
  "ip6tables": true
}
EOF
systemctl restart docker
systemctl enable --now docker
```

```bash
# Enable IPV6
docker network create --subnet="fd12:3456:789a:2::/64" --driver bridge --ipv6 nextcloud-aio
```

### Install

```bash
# Default
# Note: this puts all your nextcloud data in /nextcloud
docker run \
-d \
--init \
--sig-proxy=false \
--name nextcloud-aio-mastercontainer \
--restart always \
--publish 80:80 \
--publish 8080:8080 \
--publish 8443:8443 \
--env NEXTCLOUD_DATADIR="/nextcloud" \
--env NEXTCLOUD_MEMORY_LIMIT=8192M \
--volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \
--volume /var/run/docker.sock:/var/run/docker.sock:ro \
nextcloud/all-in-one:latest

# Reverse Proxy
docker run \
--init \
--sig-proxy=false \
--name nextcloud-aio-mastercontainer \
--restart always \
--publish 8080:8080 \
--env APACHE_PORT=11000 \
--env APACHE_IP_BINDING="::" \
--env NEXTCLOUD_DATADIR="/mnt/ncdata" \
--env NEXTCLOUD_MEMORY_LIMIT=8192M \
--volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \
--volume /var/run/docker.sock:/var/run/docker.sock:ro \
nextcloud/all-in-one:latest
```

## Backups

IMPORTANT: you will need both KEY AND PASSPHRASE to access this repo!
If you used a repokey mode, the key is stored in the repo, but you should back it up separately.
Use "borg key export" to export the key, optionally in printable format.
Write down the passphrase. Store both at safe place(s).

```bash
docker exec nextcloud-aio-borgbackup borg key export /mnt/borgbackup/borg/
```

## Maintenace Mode

```bash
docker stop nextcloud-aio-apache
docker exec -it -u www-data nextcloud-aio-nextcloud ./occ maintenance:mode --on

docker start nextcloud-aio-apache
docker exec -it -u www-data nextcloud-aio-nextcloud ./occ maintenance:mode --off
```

## Trusted Proxy

If running with a reverse proxy.

```bash
docker exec --user www-data -it nextcloud-aio-nextcloud php occ config:system:set trusted_proxies 2 --value="10.1.0.0/16"
docker exec --user www-data -it nextcloud-aio-nextcloud php occ config:system:set trusted_proxies 3 --value="fd00:fd41:d0f1:1010::/64"
```

## Default phone region

```bash
docker exec --user www-data -it nextcloud-aio-nextcloud php occ config:system:set default_phone_region --value="US"
```

## Adding existing files

```bash
docker exec --user www-data -it nextcloud-aio-nextcloud php occ files:scan --path=ducoterra/files
```

## Theming

Red: `#B30000`

## Changing the domain

```bash
docker run -it --rm --volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config:rw alpine sh -c "apk add --no-cache nano && nano /mnt/docker-aio-config/data/configuration.json"
```

## Uninstall

```bash
docker stop $(docker ps -a -q)
docker container prune

# DANGER ZONE
# This deletes all your data
docker volume prune -a -f
```

defaults,_netdev,x-systemd.requires=iscsid.service   0      1

## Edit QCOW

```bash
sudo modprobe nbd
sudo qemu-nbd -c /dev/nbd0 --read-only /path/to/image.qcow2
udisksctl mount -b /dev/nbd0p1
```

## Stuck in login screen

Check logs at `/var/www/html/data/nextcloud.log` in `nextcloud-aio-nextcloud` container.

Sometimes this is caused by a broken app or twofactor. try:

```bash
# Disable two factor
./occ twofactorauth:state <user>
./occ twofactorauth:disable <user> totp
```

```bash
# Disable problem app
./occ app:disable integration_openai
```
