Sanitized mirror from private repository - 2026-04-20 01:32:01 UTC
This commit is contained in:
30
hosts/vms/matrix-ubuntu-vm/scripts/backup.sh
Executable file
30
hosts/vms/matrix-ubuntu-vm/scripts/backup.sh
Executable file
@@ -0,0 +1,30 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
BACKUP_DIR="/backup/$(date +%Y%m%d_%H%M%S)"
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
|
||||
echo "=== Homelab Backup ==="
|
||||
echo "Backup directory: $BACKUP_DIR"
|
||||
|
||||
# Backup PostgreSQL databases
|
||||
echo "[1/4] Backing up PostgreSQL databases..."
|
||||
sudo -u postgres pg_dump mattermost > "$BACKUP_DIR/mattermost.sql"
|
||||
sudo -u postgres pg_dump synapse > "$BACKUP_DIR/synapse.sql"
|
||||
sudo -u postgres pg_dump mastodon_production > "$BACKUP_DIR/mastodon.sql"
|
||||
|
||||
# Backup Mastodon media
|
||||
echo "[2/4] Backing up Mastodon media..."
|
||||
tar -czf "$BACKUP_DIR/mastodon_media.tar.gz" -C /opt/mastodon public/system 2>/dev/null || true
|
||||
|
||||
# Backup Mattermost data
|
||||
echo "[3/4] Backing up Mattermost data..."
|
||||
tar -czf "$BACKUP_DIR/mattermost_data.tar.gz" -C /opt/mattermost data config 2>/dev/null || true
|
||||
|
||||
# Backup Matrix/Synapse
|
||||
echo "[4/4] Backing up Matrix data..."
|
||||
tar -czf "$BACKUP_DIR/synapse_data.tar.gz" -C /opt synapse 2>/dev/null || true
|
||||
|
||||
echo ""
|
||||
echo "Backup complete: $BACKUP_DIR"
|
||||
ls -lh "$BACKUP_DIR"
|
||||
69
hosts/vms/matrix-ubuntu-vm/scripts/setup.sh
Executable file
69
hosts/vms/matrix-ubuntu-vm/scripts/setup.sh
Executable file
@@ -0,0 +1,69 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "=== Ubuntu VM Homelab Setup ==="
|
||||
echo "This script sets up Mastodon, Mattermost, and Matrix/Element"
|
||||
|
||||
# Check if running as root
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo "Please run as root (sudo ./setup.sh)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Update system
|
||||
echo "[1/8] Updating system..."
|
||||
apt-get update && apt-get upgrade -y
|
||||
|
||||
# Install dependencies
|
||||
echo "[2/8] Installing dependencies..."
|
||||
apt-get install -y \
|
||||
docker.io docker-compose-v2 \
|
||||
nginx \
|
||||
postgresql postgresql-contrib \
|
||||
curl wget git
|
||||
|
||||
# Start services
|
||||
echo "[3/8] Starting services..."
|
||||
systemctl enable --now docker
|
||||
systemctl enable --now postgresql
|
||||
systemctl enable --now nginx
|
||||
|
||||
# Setup PostgreSQL
|
||||
echo "[4/8] Setting up PostgreSQL..."
|
||||
sudo -u postgres psql -c "CREATE USER mmuser WITH PASSWORD 'REDACTED_PASSWORD';" 2>/dev/null || true
|
||||
sudo -u postgres psql -c "CREATE DATABASE mattermost OWNER mmuser;" 2>/dev/null || true
|
||||
sudo -u postgres psql -c "CREATE USER synapse WITH PASSWORD 'REDACTED_PASSWORD';" 2>/dev/null || true
|
||||
sudo -u postgres psql -c "CREATE DATABASE synapse OWNER synapse ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C' template=template0;" 2>/dev/null || true
|
||||
sudo -u postgres psql -c "CREATE USER mastodon WITH PASSWORD 'REDACTED_PASSWORD' CREATEDB;" 2>/dev/null || true
|
||||
sudo -u postgres psql -c "CREATE DATABASE mastodon_production OWNER mastodon;" 2>/dev/null || true
|
||||
|
||||
# Configure PostgreSQL for Docker access
|
||||
echo "[5/8] Configuring PostgreSQL..."
|
||||
echo "host all all 172.17.0.0/16 md5" >> /etc/postgresql/*/main/pg_hba.conf
|
||||
echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/*/main/pg_hba.conf
|
||||
sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/" /etc/postgresql/*/main/postgresql.conf
|
||||
systemctl restart postgresql
|
||||
|
||||
# Setup directories
|
||||
echo "[6/8] Creating directories..."
|
||||
mkdir -p /opt/mastodon /opt/mattermost /opt/synapse /opt/element/web
|
||||
|
||||
# Copy nginx configs
|
||||
echo "[7/8] Setting up Nginx..."
|
||||
cp nginx/*.conf /etc/nginx/sites-available/
|
||||
ln -sf /etc/nginx/sites-available/mastodon.conf /etc/nginx/sites-enabled/
|
||||
ln -sf /etc/nginx/sites-available/mattermost.conf /etc/nginx/sites-enabled/
|
||||
ln -sf /etc/nginx/sites-available/matrix.conf /etc/nginx/sites-enabled/
|
||||
nginx -t && systemctl reload nginx
|
||||
|
||||
echo "[8/8] Setup complete!"
|
||||
echo ""
|
||||
echo "Next steps:"
|
||||
echo "1. Copy docker-compose files to /opt directories"
|
||||
echo "2. Configure environment files with actual secrets"
|
||||
echo "3. Run migrations and start services"
|
||||
echo ""
|
||||
echo "Ports:"
|
||||
echo " - Mastodon: 8082"
|
||||
echo " - Mattermost: 8081"
|
||||
echo " - Matrix/Element: 8080"
|
||||
96
hosts/vms/matrix-ubuntu-vm/scripts/update.sh
Executable file
96
hosts/vms/matrix-ubuntu-vm/scripts/update.sh
Executable file
@@ -0,0 +1,96 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Homelab Update Script
|
||||
# Updates Mastodon, Mattermost, Matrix Synapse, and system packages
|
||||
|
||||
echo "=== Homelab Update Script ==="
|
||||
echo "Started at: $(date)"
|
||||
echo ""
|
||||
|
||||
# Update Mastodon
|
||||
echo "[1/5] Updating Mastodon..."
|
||||
cd /opt/mastodon
|
||||
docker compose pull
|
||||
docker compose down
|
||||
docker compose run --rm web bundle exec rails db:migrate
|
||||
docker compose up -d
|
||||
echo "✅ Mastodon updated!"
|
||||
echo ""
|
||||
|
||||
# Update Mattermost
|
||||
echo "[2/5] Updating Mattermost..."
|
||||
cd /opt/mattermost
|
||||
docker compose pull
|
||||
docker compose down
|
||||
docker compose up -d
|
||||
echo "✅ Mattermost updated!"
|
||||
echo ""
|
||||
|
||||
# Update Matrix Synapse
|
||||
echo "[3/5] Updating Matrix Synapse..."
|
||||
cd /opt/synapse
|
||||
source venv/bin/activate
|
||||
|
||||
# Get current version
|
||||
CURRENT_VERSION=$(python -m synapse.app.homeserver --version 2>&1 | head -1)
|
||||
echo "Current version: $CURRENT_VERSION"
|
||||
|
||||
# Upgrade
|
||||
pip install --upgrade matrix-synapse
|
||||
|
||||
# Get new version
|
||||
NEW_VERSION=$(python -m synapse.app.homeserver --version 2>&1 | head -1)
|
||||
echo "New version: $NEW_VERSION"
|
||||
|
||||
# Restart both Synapse instances
|
||||
echo "Restarting Synapse instances..."
|
||||
pkill -f 'synapse.app.homeserver' || true
|
||||
sleep 2
|
||||
|
||||
# Start mx.vish.gg (primary)
|
||||
sudo -u synapse /opt/synapse/venv/bin/python -m synapse.app.homeserver \
|
||||
--config-path=/opt/synapse-mx/homeserver.yaml --daemonize
|
||||
echo " - mx.vish.gg started on port 8018"
|
||||
|
||||
# Start legacy vish
|
||||
sudo -u synapse /opt/synapse/venv/bin/python -m synapse.app.homeserver \
|
||||
--config-path=/opt/synapse/homeserver.yaml --daemonize
|
||||
echo " - vish (legacy) started on port 8008"
|
||||
|
||||
deactivate
|
||||
echo "✅ Matrix Synapse updated!"
|
||||
echo ""
|
||||
|
||||
# Update TURN server
|
||||
echo "[4/5] Updating TURN server (coturn)..."
|
||||
sudo apt-get update -qq
|
||||
sudo apt-get install -y coturn 2>/dev/null && echo "✅ Coturn updated!" || echo "⚠️ Coturn update skipped"
|
||||
sudo systemctl restart coturn 2>/dev/null || true
|
||||
echo ""
|
||||
|
||||
# Update system packages
|
||||
echo "[5/5] Updating system packages..."
|
||||
sudo apt-get update
|
||||
sudo apt-get upgrade -y
|
||||
sudo apt-get autoremove -y
|
||||
echo "✅ System packages updated!"
|
||||
echo ""
|
||||
|
||||
# Verification
|
||||
echo "=== Verification ==="
|
||||
echo ""
|
||||
echo "Mastodon:"
|
||||
docker compose -f /opt/mastodon/docker-compose.yml ps --format "table {{.Name}}\t{{.Status}}" 2>/dev/null | head -5
|
||||
|
||||
echo ""
|
||||
echo "Mattermost:"
|
||||
docker ps --filter "name=mattermost" --format "table {{.Names}}\t{{.Status}}"
|
||||
|
||||
echo ""
|
||||
echo "Matrix Synapse:"
|
||||
curl -s http://localhost:8018/_matrix/federation/v1/version 2>/dev/null && echo " (mx.vish.gg)" || echo "❌ mx.vish.gg not responding"
|
||||
curl -s http://localhost:8008/_matrix/federation/v1/version 2>/dev/null && echo " (vish legacy)" || echo "❌ vish not responding"
|
||||
|
||||
echo ""
|
||||
echo "=== Update Complete ==="
|
||||
echo "Finished at: $(date)"
|
||||
Reference in New Issue
Block a user