OVHserver/opt/infrastructure-docs/scripts/modules/generate-databases.sh
SamoilenkoVadym a987d45fbc chore: initial infrastructure setup with Syncthing, Git and documentation
Set up three-tier synchronization: Syncthing (real-time), GitHub (version control), rsync (disaster recovery). Includes complete documentation for future Claude sessions.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-05 16:41:12 +00:00

121 lines
3.1 KiB
Bash
Executable file
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Module 5: Databases
cat << 'EOF'
---
## 5⃣ DATABASES
### Database Storage
**Primary Location:** `/mnt/psql-data/`
All PostgreSQL databases are stored on a dedicated disk for performance and data isolation.
EOF
echo "### Database Directories"
echo ""
if [[ -d /mnt/psql-data ]]; then
for db_dir in /mnt/psql-data/*; do
if [[ -d "$db_dir" ]]; then
DB_NAME=$(basename "$db_dir")
DB_SIZE=$(du -sh "$db_dir" 2>/dev/null | cut -f1)
FILE_COUNT=$(find "$db_dir" -type f 2>/dev/null | wc -l)
LAST_MODIFIED=$(stat -c %y "$db_dir" 2>/dev/null | cut -d' ' -f1)
cat << DBINFO
#### 📁 **$DB_NAME**
- **Path:** \`$db_dir\`
- **Size:** $DB_SIZE
- **Files:** $FILE_COUNT
- **Last Modified:** $LAST_MODIFIED
- **Backup Command:**
\`\`\`bash
docker exec postgres-main pg_dump -U aimpress_admin -d <database_name> | \
gzip > /mnt/backups/${DB_NAME}-\$(date +%Y%m%d).sql.gz
\`\`\`
DBINFO
fi
done
else
echo "⚠️ Database directory /mnt/psql-data not found"
fi
cat << 'EOF'
### PostgreSQL Management Commands
```bash
# Connect to PostgreSQL
docker exec -it postgres-main psql -U aimpress_admin
# Inside psql:
\l # List all databases
\du # List all users
\dt # List tables in current database
\c database_name # Connect to database
\q # Exit
# Backup single database
docker exec postgres-main pg_dump -U aimpress_admin <database> | \
gzip > /mnt/backups/db-$(date +%Y%m%d).sql.gz
# Backup ALL databases
docker exec postgres-main pg_dumpall -U aimpress_admin | \
gzip > /mnt/backups/postgres-all-$(date +%Y%m%d).sql.gz
# Restore database
gunzip < /mnt/backups/backup.sql.gz | \
docker exec -i postgres-main psql -U aimpress_admin -d <database>
# Check database sizes
docker exec postgres-main psql -U aimpress_admin -c \
"SELECT pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) \
FROM pg_database ORDER BY pg_database_size(pg_database.datname) DESC;"
```
### Database Users
| Role | Attributes |
|------|------------|
EOF
# List database users in Markdown table format
docker exec postgres-main psql -U aimpress_admin -c "\du" --csv 2>/dev/null | tail -n +2 | while IFS=',' read -r role attrs; do
# Clean up attributes
attrs=$(echo "$attrs" | sed 's/"//g')
[[ -z "$attrs" ]] && attrs="-"
echo "| **$role** | $attrs |"
done
cat << 'EOF'
### Change Database Password
```bash
# 1. Generate strong password
NEW_PASS=$(openssl rand -base64 32)
echo "New password: $NEW_PASS"
# 2. Change in PostgreSQL
docker exec postgres-main psql -U aimpress_admin -c \
"ALTER USER <username> WITH PASSWORD '$NEW_PASS';"
# 3. Save to Vault
export VAULT_ADDR="http://127.0.0.1:8200"
export VAULT_TOKEN="hvs.jYguDdf2IzobXG8b9QWyATV8"
vault kv put aimpress/postgres/<service> password="$NEW_PASS"
# 4. Update application config
cd /opt/<service-path>
nano docker-compose.yml # Update DB_PASSWORD or DATABASE_PASSWORD
# 5. Restart application
docker-compose restart
```
EOF