- README + siklos-docker-services: add authentik/searxng/beszel rows, photos VM section, 2026-06-24 cleanup notes, 2026-07-03 Portainer conversion note (jgpc naming preserved) - Add: authentik setup docs, frigate docs/config, OCIS migration docs, AdventureLog bug report, install-native-apps.sh, workstation-disk-analysis.md - Remove obsolete: cgitta-nextcloud-zip-analysis.md, kopia-restore-guide.md - .gitignore: ocis-credentials.md (secrets stay local), *.bak
261 lines
8.4 KiB
Markdown
261 lines
8.4 KiB
Markdown
# Nextcloud → ownCloud Infinite Scale (OCIS) Migration
|
|
|
|
**Date:** 2026-06-09
|
|
**Status:** 🟡 Migration in progress — data transfer running, cutover pending
|
|
**Author:** Joe Gitta
|
|
|
|
---
|
|
|
|
## What Was Done (Summary)
|
|
|
|
VM 114 (`ocis`, 192.168.88.63) was created on Proxmox and OCIS v8.0.4 was deployed as a native binary (systemd service). Both Nextcloud users (`jgitta` 89 GB / `cgitta` 210 GB) were recreated in OCIS and rclone migrations launched. Prometheus monitoring was added. Nextcloud (VM 103) remains running — no cutover yet.
|
|
|
|
---
|
|
|
|
## Deployed Architecture
|
|
|
|
```
|
|
Internet / LAN
|
|
│
|
|
▼
|
|
Caddy (192.168.88.110)
|
|
│
|
|
├── next.jgitta.com → VM 103 (Nextcloud, 192.168.88.62) ← still running
|
|
│
|
|
└── cloud.jgitta.com → VM 114 (OCIS, 192.168.88.63:9200)
|
|
│
|
|
└── Local SSD: /mnt/ocis-data (500 GB, Proxmox SSD-2)
|
|
```
|
|
|
|
---
|
|
|
|
## VM 114 (ocis) Specs
|
|
|
|
| Item | Value |
|
|
|---|---|
|
|
| VM ID | 114 |
|
|
| VM Name | ocis |
|
|
| IP | 192.168.88.63 |
|
|
| SSH | `ssh jgitta@192.168.88.63` |
|
|
| vCPU | 4 cores |
|
|
| RAM | 8 GB |
|
|
| OS Disk | 64 GB (local SSD) |
|
|
| Data Disk | 500 GB SSD (Proxmox SSD-2) → `/mnt/ocis-data` |
|
|
| OS | Debian 13 (cloned from VM 9000 template) |
|
|
| OCIS Version | 8.0.4 |
|
|
| Binary | `/usr/local/bin/ocis` |
|
|
| Service | `systemctl {start|stop|restart|status} ocis` |
|
|
| Config | `/mnt/ocis-data/config/ocis.yaml` (auto-generated on first run) |
|
|
| Env file | `/mnt/ocis-data/config/ocis.env` |
|
|
| Systemd unit | `/etc/systemd/system/ocis.service` |
|
|
|
|
**Note:** Local disk was chosen over TrueNAS NFS so that PBS full-VM backups capture both OS and data together, providing an extra layer of redundancy.
|
|
|
|
---
|
|
|
|
## OCIS Configuration
|
|
|
|
`/mnt/ocis-data/config/ocis.env`:
|
|
```
|
|
OCIS_URL=https://cloud.jgitta.com
|
|
OCIS_BASE_DATA_PATH=/mnt/ocis-data
|
|
OCIS_CONFIG_DIR=/mnt/ocis-data/config
|
|
PROXY_TLS=false
|
|
OCIS_LOG_LEVEL=info
|
|
OCIS_LOG_COLOR=false
|
|
PROXY_ENABLE_BASIC_AUTH=true
|
|
```
|
|
|
|
> **Why `PROXY_ENABLE_BASIC_AUTH=true`?** OCIS v8 disables basic auth by default (OIDC only). This flag re-enables it so that rclone WebDAV and desktop/mobile sync clients can authenticate with username + password.
|
|
|
|
---
|
|
|
|
## Accounts
|
|
|
|
See `ocis-credentials.md` for full credential details.
|
|
|
|
| Username | Display Name | Use |
|
|
|---|---|---|
|
|
| admin | Admin | Administration only |
|
|
| jgitta | Joe Gitta | Primary account |
|
|
| cgitta | Cynthia Gitta | Secondary account |
|
|
|
|
Accounts were created via direct LDAP manipulation (OCIS v8 has no CLI user-create tool). The libregraph LDAP sysuser (`uid=libregraph,ou=sysusers,o=libregraph-idm`) was used for write access; passwords set with `ldappasswd` over LDAPS on `127.0.0.1:9235`.
|
|
|
|
---
|
|
|
|
## Data Migration Status
|
|
|
|
rclone is copying files directly from Nextcloud's filesystem on VM 103 (avoiding WebDAV overhead) and pushing to OCIS via WebDAV. Both processes run as background jobs on VM 103.
|
|
|
|
```bash
|
|
# Monitor from Nextcloud VM (192.168.88.62):
|
|
sudo tail -f /tmp/rclone-jgitta.log
|
|
sudo tail -f /tmp/rclone-cgitta.log
|
|
|
|
# Check if still running:
|
|
ps aux | grep rclone | grep -v grep
|
|
```
|
|
|
|
| User | Source | Data | Status |
|
|
|---|---|---|---|
|
|
| jgitta | `/mnt/nextcloud-data/jgitta/files/` | ~35 GB | 🔄 In progress |
|
|
| cgitta | `/mnt/nextcloud-data/cgitta/files/` | ~210 GB | 🔄 In progress (ETA many hours) |
|
|
|
|
**Expected errors:** Some files show `Failed to copy: object not found` — these are files present in Nextcloud's database but missing from disk (DB/filesystem desync in Nextcloud). Non-fatal; rclone skips and continues.
|
|
|
|
### rclone Config on VM 103
|
|
|
|
`/root/.config/rclone/rclone.conf` contains two WebDAV remotes:
|
|
- `ocis_jgitta` → `https://cloud.jgitta.com/remote.php/dav/files/jgitta/`
|
|
- `ocis_cgitta` → `https://cloud.jgitta.com/remote.php/dav/files/cgitta/`
|
|
|
|
### Re-run Migration (if needed)
|
|
|
|
```bash
|
|
# SSH to Nextcloud VM
|
|
ssh jgitta@192.168.88.62
|
|
|
|
# Re-run jgitta (rclone copy is idempotent — safe to re-run)
|
|
sudo nohup rclone copy /mnt/nextcloud-data/jgitta/files/ ocis_jgitta: \
|
|
--transfers 4 --checkers 8 \
|
|
--log-file /tmp/rclone-jgitta.log --log-level INFO --stats 120s &
|
|
|
|
# Re-run cgitta
|
|
sudo nohup rclone copy /mnt/nextcloud-data/cgitta/files/ ocis_cgitta: \
|
|
--transfers 4 --checkers 8 \
|
|
--log-file /tmp/rclone-cgitta.log --log-level INFO --stats 120s &
|
|
```
|
|
|
|
---
|
|
|
|
## Caddy Config
|
|
|
|
Added to `/etc/caddy/sites/media.caddy` on Caddy VM (192.168.88.110):
|
|
|
|
```caddy
|
|
cloud.jgitta.com {
|
|
import web_secure
|
|
reverse_proxy 192.168.88.63:9200 {
|
|
import proxy_timeouts
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Monitoring
|
|
|
|
- **node-exporter** running on OCIS VM as Docker container, port **9101** (port 9100 is taken by OCIS itself)
|
|
- **Prometheus** on siklos scrapes `192.168.88.63:9101`, labeled as instance `ocis`
|
|
- PBS backup job `backup-5d4b43bd-7988` uses `all=1` — VM 114 is automatically included, no changes needed
|
|
|
|
---
|
|
|
|
## Pending Steps (Manual)
|
|
|
|
### 1. Add Cloudflare DNS record ⚠️ REQUIRED for external access
|
|
|
|
Log into Cloudflare dashboard → jgitta.com DNS zone → Add A record:
|
|
- **Name:** `cloud`
|
|
- **Content:** your WAN IP
|
|
- **Proxy:** Grey cloud (DNS only)
|
|
|
|
Internal access via `cloud.jgitta.com` works already (MikroTik wildcard → Caddy).
|
|
|
|
### 2. Verify files after migration completes
|
|
|
|
Once rclone logs show completion:
|
|
1. Log into https://cloud.jgitta.com as `jgitta` and `cgitta`
|
|
2. Spot-check files in the web UI — confirm folder structure looks right
|
|
3. Check error count in logs: `sudo grep ERROR /tmp/rclone-jgitta.log | wc -l`
|
|
|
|
### 3. Change default passwords
|
|
|
|
Log into https://cloud.jgitta.com and change passwords for both accounts (see `ocis-credentials.md` for current values).
|
|
|
|
### 4. Reconnect desktop/mobile sync clients
|
|
|
|
- Desktop: Add account pointing to `https://cloud.jgitta.com` in ownCloud or Nextcloud desktop client
|
|
- Mobile: Add account in ownCloud app (iOS/Android) — same URL
|
|
|
|
### 5. OnlyOffice integration (optional, can defer)
|
|
|
|
OCIS uses WOPI for document editing. The existing OnlyOffice at `https://office.jgitta.com` supports WOPI.
|
|
In OCIS Admin Settings → Apps, configure the WOPI server URL.
|
|
|
|
---
|
|
|
|
## Cutover Procedure (when ready)
|
|
|
|
Once files are verified and clients reconnected:
|
|
|
|
1. **Enable Nextcloud maintenance mode** (prevents new uploads):
|
|
```bash
|
|
ssh jgitta@192.168.88.62
|
|
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on
|
|
```
|
|
|
|
2. **Run a final rclone sync** to catch any files changed since the initial copy:
|
|
```bash
|
|
sudo rclone copy /mnt/nextcloud-data/jgitta/files/ ocis_jgitta: --transfers 4 --stats-log-level NOTICE
|
|
sudo rclone copy /mnt/nextcloud-data/cgitta/files/ ocis_cgitta: --transfers 4 --stats-log-level NOTICE
|
|
```
|
|
|
|
3. **Redirect Caddy** — update `next.jgitta.com` in Caddy to redirect to OCIS:
|
|
```caddy
|
|
next.jgitta.com {
|
|
redir https://cloud.jgitta.com{uri} permanent
|
|
}
|
|
```
|
|
|
|
4. **Stop VM 103** in Proxmox — do NOT delete it yet
|
|
|
|
5. **After 4 weeks with no issues** — delete VM 103
|
|
|
|
---
|
|
|
|
## Service Management Quick Reference
|
|
|
|
```bash
|
|
# OCIS status / logs
|
|
ssh jgitta@192.168.88.63 "sudo systemctl status ocis"
|
|
ssh jgitta@192.168.88.63 "sudo journalctl -u ocis -f"
|
|
|
|
# Restart OCIS
|
|
ssh jgitta@192.168.88.63 "sudo systemctl restart ocis"
|
|
|
|
# Check migration logs (run on Nextcloud VM)
|
|
ssh jgitta@192.168.88.62 "sudo tail -50 /tmp/rclone-jgitta.log"
|
|
ssh jgitta@192.168.88.62 "sudo tail -50 /tmp/rclone-cgitta.log"
|
|
|
|
# Check OCIS disk usage
|
|
ssh jgitta@192.168.88.63 "df -h /mnt/ocis-data"
|
|
```
|
|
|
|
---
|
|
|
|
## Checklist
|
|
|
|
- [x] VM 114 created on Proxmox (Debian 13, 4 vCPU, 8 GB RAM)
|
|
- [x] Static IP 192.168.88.63 configured
|
|
- [x] 500 GB data disk partitioned and mounted at `/mnt/ocis-data`
|
|
- [x] OCIS v8.0.4 binary installed at `/usr/local/bin/ocis`
|
|
- [x] OCIS systemd service configured and running
|
|
- [x] `cloud.jgitta.com` added to Caddy config and reloaded
|
|
- [x] OCIS users created: `admin`, `jgitta`, `cgitta`
|
|
- [x] rclone configured on VM 103 with both user remotes
|
|
- [x] Data migration launched (background, running)
|
|
- [x] node-exporter deployed on VM 114 (port 9101)
|
|
- [x] Prometheus scraping VM 114 confirmed (`up`)
|
|
- [x] PBS backup covers VM 114 automatically (`all=1`)
|
|
- [ ] **Cloudflare DNS A record for `cloud`** ← add manually
|
|
- [ ] Verify files in OCIS web UI after migration completes
|
|
- [ ] Change passwords from defaults
|
|
- [ ] Reconnect desktop/mobile sync clients
|
|
- [ ] OnlyOffice WOPI integration (optional)
|
|
- [ ] Final sync + enable Nextcloud maintenance mode
|
|
- [ ] Redirect `next.jgitta.com` → `cloud.jgitta.com` in Caddy
|
|
- [ ] Stop VM 103
|
|
- [ ] Delete VM 103 (after 4-week verification)
|