4.7 KiB
4.7 KiB
VM Redeployment Guide
This guide covers rebuilding all apps from scratch on a new VM after a total loss of 192.168.16.130.
What you need before starting:
- Access to your Gitea server (
git.yoda.ddnsgeek.com) - The latest backup archive from
/opt/backups/vm-apps/on the VPS - The backup encryption password (if you set one)
- A fresh Ubuntu VM
Step 1 — Prepare the new VM
# Install Docker
sudo apt-get update
sudo apt-get install -y docker.io docker-compose-plugin
sudo systemctl enable --now docker
sudo usermod -aG docker $USER
# Log out and back in after this
# Install Git
sudo apt-get install -y git
# Create app directories
sudo mkdir -p /opt/rv50x-manager /opt/switch-config-manager /opt/lldp-mapper /opt/stunnel
sudo chown $USER:$USER /opt/rv50x-manager /opt/switch-config-manager /opt/lldp-mapper /opt/stunnel
Step 2 — Set up SSH key for Gitea
ssh-keygen -t ed25519 -C "new-vm" -f ~/.ssh/id_ed25519 -N ""
cat ~/.ssh/id_ed25519.pub
Add the public key to Gitea: https://git.yoda.ddnsgeek.com/user/settings/keys
Add the SSH config:
cat >> ~/.ssh/config << 'EOF'
Host git.yoda.ddnsgeek.com
HostName git.yoda.ddnsgeek.com
User git
Port 2222
IdentityFile ~/.ssh/id_ed25519
EOF
Test:
ssh -T git@git.yoda.ddnsgeek.com
# Should print: Hi there, dcstephenson! You've successfully authenticated...
Step 3 — Clone all repositories
cd /opt/rv50x-manager
git clone git@git.yoda.ddnsgeek.com:dcstephenson/rv50x-manager.git .
cd /opt/switch-config-manager
git clone git@git.yoda.ddnsgeek.com:dcstephenson/switch-config-manager.git .
cd /opt/lldp-mapper
git clone git@git.yoda.ddnsgeek.com:dcstephenson/lldp-mapper.git .
cd /opt/stunnel
git clone git@git.yoda.ddnsgeek.com:dcstephenson/stunnel.git .
Step 4 — Restore from backup
Copy the latest backup archive from the VPS:
scp root@git.yoda.ddnsgeek.com:/opt/backups/vm-apps/vm-apps-backup_YYYYMMDD_HHMMSS.tar.gz.enc /tmp/
Decrypt and extract:
# If encrypted:
openssl enc -d -aes-256-cbc -pbkdf2 -iter 100000 \
-in /tmp/vm-apps-backup_YYYYMMDD_HHMMSS.tar.gz.enc \
-out /tmp/vm-apps-backup.tar.gz \
-pass pass:"YOUR_BACKUP_PASSWORD"
# Extract
mkdir /tmp/restore
tar -xzf /tmp/vm-apps-backup.tar.gz -C /tmp/restore
Restore secrets:
cp /tmp/restore/secrets/rv50x-manager.env /opt/rv50x-manager/.env
cp /tmp/restore/secrets/switch-config-manager-config.py /opt/switch-config-manager/config.py
cp /tmp/restore/secrets/lldp-mapper-config.py /opt/lldp-mapper/config.py
mkdir -p /opt/rv50x-manager/certs
cp /tmp/restore/secrets/cert.pem /opt/rv50x-manager/certs/
cp /tmp/restore/secrets/key.pem /opt/rv50x-manager/certs/
Restore rv50x-manager runtime data:
cp /tmp/restore/rv50x-manager/rv50x.db /opt/rv50x-manager/
cp /tmp/restore/rv50x-manager/at_presets.json /opt/rv50x-manager/
cp -r /tmp/restore/rv50x-manager/xml_templates /opt/rv50x-manager/
Restore switch configs:
cp -r /tmp/restore/switch-config-manager/configs /opt/switch-config-manager/
Restore lldp-mapper topology data:
cp -r /tmp/restore/lldp-mapper/data /opt/lldp-mapper/
Step 5 — Start the rv50x stack and restore NocoDB database
cd /opt/rv50x-manager
# Start postgres and nocodb only (not the app yet)
docker compose up -d postgres
# Wait for postgres to be healthy
docker compose up -d nocodb
Restore the PostgreSQL dump:
docker exec -i rv50x-postgres psql -U nocodb nocodb < /tmp/restore/rv50x-manager/nocodb_postgres.sql
Start the full stack:
docker compose up -d
Verify:
docker compose ps
# All three containers should be running/healthy
Step 6 — Start remaining apps
cd /opt/switch-config-manager
docker compose up -d --build
cd /opt/lldp-mapper
docker compose up -d --build
cd /opt/stunnel
docker compose up -d --build
Step 7 — Verify everything is working
| App | URL |
|---|---|
| rv50x-manager | http://NEW-VM-IP:8002 |
| rv50x-nocodb | http://NEW-VM-IP:8090 |
| switch-config-manager | http://NEW-VM-IP:8003 |
| lldp-mapper | http://NEW-VM-IP:5000 |
| stunnel | https://NEW-VM-IP:4500 (through to first switch) |
Check rv50x-manager loads devices from NocoDB — if devices appear, the Postgres restore worked.
Step 8 — Clean up
rm -rf /tmp/restore /tmp/vm-apps-backup*
Backup location on VPS
Backups are stored at:
root@git.yoda.ddnsgeek.com:/opt/backups/vm-apps/
The last 7 backups are kept. To list them:
ssh root@git.yoda.ddnsgeek.com "ls -lht /opt/backups/vm-apps/"
Running a backup
On this VM:
/opt/backup.sh