Add deployment, backup, and project documentation
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
APP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
cd "$APP_DIR"
|
||||
|
||||
PHP_BIN="${PHP_BIN:-php}"
|
||||
BACKUP_ROOT="${BACKUP_ROOT:-$APP_DIR/storage/app/backups-manual}"
|
||||
TIMESTAMP="$(date '+%Y-%m-%d-%H%M%S')"
|
||||
RETENTION_DAYS="${RETENTION_DAYS:-14}"
|
||||
|
||||
log() {
|
||||
printf '\n[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$1"
|
||||
}
|
||||
|
||||
abort() {
|
||||
printf '\n[ERROR] %s\n' "$1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
[[ -f .env ]] || abort "File .env tidak ditemukan."
|
||||
[[ -f artisan ]] || abort "File artisan tidak ditemukan. Jalankan dari root project Laravel."
|
||||
|
||||
mkdir -p "$BACKUP_ROOT/database"
|
||||
mkdir -p "$BACKUP_ROOT/storage"
|
||||
mkdir -p "$BACKUP_ROOT/env"
|
||||
|
||||
DB_CONNECTION=$(grep '^DB_CONNECTION=' .env | cut -d '=' -f2- | tr -d '"')
|
||||
DB_HOST=$(grep '^DB_HOST=' .env | cut -d '=' -f2- | tr -d '"')
|
||||
DB_PORT=$(grep '^DB_PORT=' .env | cut -d '=' -f2- | tr -d '"')
|
||||
DB_DATABASE=$(grep '^DB_DATABASE=' .env | cut -d '=' -f2- | tr -d '"')
|
||||
DB_USERNAME=$(grep '^DB_USERNAME=' .env | cut -d '=' -f2- | tr -d '"')
|
||||
DB_PASSWORD=$(grep '^DB_PASSWORD=' .env | cut -d '=' -f2- | tr -d '"')
|
||||
|
||||
[[ -n "$DB_CONNECTION" ]] || abort "DB_CONNECTION tidak ditemukan di .env"
|
||||
[[ "$DB_CONNECTION" == "mysql" ]] || abort "backup.sh saat ini hanya mendukung DB_CONNECTION=mysql"
|
||||
[[ -n "$DB_DATABASE" ]] || abort "DB_DATABASE tidak ditemukan di .env"
|
||||
[[ -n "$DB_USERNAME" ]] || abort "DB_USERNAME tidak ditemukan di .env"
|
||||
|
||||
DB_HOST="${DB_HOST:-127.0.0.1}"
|
||||
DB_PORT="${DB_PORT:-3306}"
|
||||
|
||||
DB_FILE="$BACKUP_ROOT/database/${DB_DATABASE}-${TIMESTAMP}.sql"
|
||||
STORAGE_FILE="$BACKUP_ROOT/storage/storage-public-${TIMESTAMP}.tar.gz"
|
||||
ENV_FILE="$BACKUP_ROOT/env/env-${TIMESTAMP}.backup"
|
||||
|
||||
log "Backup database: $DB_DATABASE"
|
||||
MYSQL_PWD="$DB_PASSWORD" mysqldump \
|
||||
--host="$DB_HOST" \
|
||||
--port="$DB_PORT" \
|
||||
--user="$DB_USERNAME" \
|
||||
--single-transaction \
|
||||
--quick \
|
||||
--skip-lock-tables \
|
||||
"$DB_DATABASE" > "$DB_FILE"
|
||||
|
||||
log "Backup storage/app/public"
|
||||
tar -czf "$STORAGE_FILE" storage/app/public
|
||||
|
||||
log "Backup file .env"
|
||||
cp .env "$ENV_FILE"
|
||||
chmod 600 "$ENV_FILE" || true
|
||||
|
||||
log "Hapus backup lama di atas ${RETENTION_DAYS} hari"
|
||||
find "$BACKUP_ROOT" -type f -mtime +"$RETENTION_DAYS" -delete || true
|
||||
|
||||
log "Backup selesai"
|
||||
printf '\nHasil backup:\n'
|
||||
printf -- '- Database: %s\n' "$DB_FILE"
|
||||
printf -- '- Storage : %s\n' "$STORAGE_FILE"
|
||||
printf -- '- .env : %s\n' "$ENV_FILE"
|
||||
Reference in New Issue
Block a user