Files
homelab-configs/nextcloud-to-ocis-migration-plan.md
T
jgitta 7cb2ebed2d Sync workspace with Gitea: merge June/July session docs
- 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
2026-07-08 14:12:05 -05:00

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)