Private
Public Access
1
0

Initial commit: complete WebsiteBox project

Docker-based self-hosted WordPress deployment system with:
- Four-container stack (nginx, wordpress/php-fpm, mariadb, certbot)
- Automatic SSL via Let's Encrypt with self-signed fallback
- First-boot WordPress setup via WP-CLI (GeneratePress + child theme, plugins)
- Interactive setup wizard and one-line install script
- Backup, update, healthcheck, and SSL renewal scripts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
constantprojects
2026-02-20 15:24:23 -07:00
commit a440026701
32 changed files with 3397 additions and 0 deletions

69
scripts/backup.sh Executable file
View File

@@ -0,0 +1,69 @@
#!/bin/bash
set -eo pipefail
# WebsiteBox Manual Backup Script
# Usage: ./scripts/backup.sh [--prune-only]
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
BACKUP_DIR="${PROJECT_DIR}/websitebox-data/backups"
# Load .env
if [ -f "${PROJECT_DIR}/.env" ]; then
# shellcheck disable=SC1091
source "${PROJECT_DIR}/.env"
fi
RETENTION_DAYS="${BACKUP_RETENTION_DAYS:-30}"
prune_old_backups() {
echo "Pruning backups older than ${RETENTION_DAYS} days..."
if [ -d "${BACKUP_DIR}" ]; then
find "${BACKUP_DIR}" -type f -mtime "+${RETENTION_DAYS}" -delete 2>/dev/null || true
echo "Pruning complete."
else
echo "Backup directory does not exist: ${BACKUP_DIR}"
fi
}
if [ "$1" = "--prune-only" ]; then
prune_old_backups
exit 0
fi
echo "═══════════════════════════════════════════════════════════"
echo " WebsiteBox Manual Backup"
echo "═══════════════════════════════════════════════════════════"
# Check that containers are running
if ! docker compose -f "${PROJECT_DIR}/docker-compose.yml" ps --status running | grep -q websitebox-wordpress; then
echo "ERROR: WordPress container is not running."
echo "Start it with: docker compose up -d"
exit 1
fi
# Create database dump
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
echo "Creating database backup..."
docker compose -f "${PROJECT_DIR}/docker-compose.yml" exec -T db \
mariadb-dump -u"${DB_USER:-websitebox}" -p"${DB_PASSWORD}" "${DB_NAME:-websitebox}" \
> "${BACKUP_DIR}/db_${TIMESTAMP}.sql"
echo "Database backup saved: websitebox-data/backups/db_${TIMESTAMP}.sql"
# Create files backup
echo "Creating files backup..."
tar czf "${BACKUP_DIR}/files_${TIMESTAMP}.tar.gz" \
-C "${PROJECT_DIR}/websitebox-data" \
--exclude='backups' \
--exclude='database' \
wordpress/ certs/
echo "Files backup saved: websitebox-data/backups/files_${TIMESTAMP}.tar.gz"
# Prune old backups
prune_old_backups
echo ""
echo "Backup complete!"
echo "Files stored in: websitebox-data/backups/"