Add deployment files and marketing content
- deploy.sh: Zero-downtime deployment script for HOALedgerIQ - content/: Generated content files (blog outlines, social posts, images) - marketing/: Marketing content and daily summaries - marketing-content/: Archived marketing content with research and tracking - marketing-content-2026-03-25.md: Initial marketing content archive
This commit is contained in:
94
deploy.sh
Normal file
94
deploy.sh
Normal file
@@ -0,0 +1,94 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# HOALedgerIQ_Website Deployment Script
|
||||
#
|
||||
# This script performs a zero-downtime deployment by:
|
||||
# 1. Pulling latest code from git
|
||||
# 2. Clearing application cache
|
||||
# 3. Restarting the service
|
||||
#
|
||||
# Usage: ./deploy.sh [environment]
|
||||
# Example: ./deploy.sh production
|
||||
#
|
||||
|
||||
set -e
|
||||
|
||||
# =============================================================================
|
||||
# CONFIGURABLE VARIABLES - Edit these for your server setup
|
||||
# =============================================================================
|
||||
|
||||
# Git configuration
|
||||
GIT_REMOTE="${GIT_REMOTE:-origin}"
|
||||
GIT_BRANCH="${GIT_BRANCH:-main}"
|
||||
|
||||
# Deployment directory (where the app lives)
|
||||
DEPLOY_DIR="${DEPLOY_DIR:-/home/ubuntu/www}"
|
||||
|
||||
# Service name (the Debian service that wraps your app)
|
||||
SERVICE_NAME="${SERVICE_NAME:-hoaledgeriq}"
|
||||
|
||||
# Cache clearing command (adjust based on your framework)
|
||||
# Examples:
|
||||
# - Laravel: php artisan cache:clear && php artisan config:clear && php artisan view:clear
|
||||
# - Django: python manage.py clear_cache
|
||||
# - Generic: rm -rf cache/* || true
|
||||
CACHE_CLEAR_CMD="${CACHE_CLEAR_CMD:-rm -rf ${DEPLOY_DIR}/cache/* || true}"
|
||||
|
||||
# Git repository URL (for initial clone or if remote needs reset)
|
||||
GIT_REPO_URL="${GIT_REPO_URL:-}"
|
||||
|
||||
# =============================================================================
|
||||
# DEPLOYMENT LOGIC
|
||||
# =============================================================================
|
||||
|
||||
log() {
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
|
||||
}
|
||||
|
||||
error() {
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] ERROR: $1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Check if running as correct user
|
||||
if [ "$(id -un)" != "ubuntu" ]; then
|
||||
error "This script should be run as 'ubuntu' user"
|
||||
fi
|
||||
|
||||
# Navigate to deployment directory
|
||||
log "Navigating to deployment directory: ${DEPLOY_DIR}"
|
||||
if [ ! -d "${DEPLOY_DIR}" ]; then
|
||||
error "Deployment directory does not exist: ${DEPLOY_DIR}"
|
||||
fi
|
||||
cd "${DEPLOY_DIR}"
|
||||
|
||||
# Verify git repository exists
|
||||
if [ ! -d ".git" ]; then
|
||||
error "Not a git repository. Please clone the repository first."
|
||||
fi
|
||||
|
||||
# Pull latest code
|
||||
log "Pulling latest code from ${GIT_REMOTE}/${GIT_BRANCH}"
|
||||
git fetch "${GIT_REMOTE}" "${GIT_BRANCH}"
|
||||
git reset --hard "${GIT_REMOTE}/${GIT_BRANCH}"
|
||||
|
||||
# Clear cache
|
||||
log "Clearing application cache"
|
||||
eval "${CACHE_CLEAR_CMD}"
|
||||
|
||||
# Restart service
|
||||
log "Restarting service: ${SERVICE_NAME}"
|
||||
if ! systemctl is-active --quiet "${SERVICE_NAME}"; then
|
||||
log "Service ${SERVICE_NAME} is not running, attempting to start it"
|
||||
fi
|
||||
sudo systemctl restart "${SERVICE_NAME}"
|
||||
|
||||
# Verify service is running
|
||||
sleep 2
|
||||
if systemctl is-active --quiet "${SERVICE_NAME}"; then
|
||||
log "✅ Deployment successful! Service ${SERVICE_NAME} is running."
|
||||
else
|
||||
error "❌ Service ${SERVICE_NAME} failed to start. Check journalctl -u ${SERVICE_NAME} for details."
|
||||
fi
|
||||
|
||||
log "Deployment completed at $(date)"
|
||||
Reference in New Issue
Block a user