215 lines
4.7 KiB
Markdown
215 lines
4.7 KiB
Markdown
# 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
|
|
|
|
```bash
|
|
# 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
|
|
```
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
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:
|
|
```bash
|
|
cat >> ~/.ssh/config << 'EOF'
|
|
Host git.yoda.ddnsgeek.com
|
|
HostName git.yoda.ddnsgeek.com
|
|
User git
|
|
Port 2222
|
|
IdentityFile ~/.ssh/id_ed25519
|
|
EOF
|
|
```
|
|
|
|
Test:
|
|
```bash
|
|
ssh -T git@git.yoda.ddnsgeek.com
|
|
# Should print: Hi there, dcstephenson! You've successfully authenticated...
|
|
```
|
|
|
|
---
|
|
|
|
## Step 3 — Clone all repositories
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
scp root@git.yoda.ddnsgeek.com:/opt/backups/vm-apps/vm-apps-backup_YYYYMMDD_HHMMSS.tar.gz.enc /tmp/
|
|
```
|
|
|
|
Decrypt and extract:
|
|
```bash
|
|
# 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:
|
|
```bash
|
|
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:
|
|
```bash
|
|
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:
|
|
```bash
|
|
cp -r /tmp/restore/switch-config-manager/configs /opt/switch-config-manager/
|
|
```
|
|
|
|
Restore lldp-mapper topology data:
|
|
```bash
|
|
cp -r /tmp/restore/lldp-mapper/data /opt/lldp-mapper/
|
|
```
|
|
|
|
---
|
|
|
|
## Step 5 — Start the rv50x stack and restore NocoDB database
|
|
|
|
```bash
|
|
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:
|
|
```bash
|
|
docker exec -i rv50x-postgres psql -U nocodb nocodb < /tmp/restore/rv50x-manager/nocodb_postgres.sql
|
|
```
|
|
|
|
Start the full stack:
|
|
```bash
|
|
docker compose up -d
|
|
```
|
|
|
|
Verify:
|
|
```bash
|
|
docker compose ps
|
|
# All three containers should be running/healthy
|
|
```
|
|
|
|
---
|
|
|
|
## Step 6 — Start remaining apps
|
|
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
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:
|
|
```bash
|
|
ssh root@git.yoda.ddnsgeek.com "ls -lht /opt/backups/vm-apps/"
|
|
```
|
|
|
|
## Running a backup
|
|
|
|
On this VM:
|
|
```bash
|
|
/opt/backup.sh
|
|
```
|