Add health check utility, logger, metrics, backup, and SMTP toggle scripts
- Implemented a comprehensive health check utility to monitor system dependencies including NocoDB, SMTP, Represent API, disk space, and memory usage. - Created a logger utility using Winston for structured logging with daily rotation and various log levels. - Developed a metrics utility using Prometheus client to track application performance metrics such as email sends, HTTP requests, and user activity. - Added a backup script for automated backups of NocoDB data, uploaded files, and environment configurations with optional S3 support. - Introduced a toggle script to switch between development (MailHog) and production (ProtonMail) SMTP configurations.
This commit is contained in:
306
influence/scripts/backup.sh
Executable file
306
influence/scripts/backup.sh
Executable file
@@ -0,0 +1,306 @@
|
||||
#!/bin/bash
|
||||
|
||||
##############################################################################
|
||||
# Influence App Backup Script
|
||||
# Automated backup for NocoDB data, uploaded files, and configurations
|
||||
##############################################################################
|
||||
|
||||
set -e # Exit on error
|
||||
|
||||
# Configuration
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
APP_DIR="$(dirname "$SCRIPT_DIR")"
|
||||
BACKUP_DIR="${BACKUP_BASE_DIR:-$APP_DIR/backups}"
|
||||
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
||||
BACKUP_NAME="influence_backup_${TIMESTAMP}"
|
||||
BACKUP_PATH="$BACKUP_DIR/$BACKUP_NAME"
|
||||
|
||||
# Retention settings
|
||||
RETENTION_DAYS=${BACKUP_RETENTION_DAYS:-30}
|
||||
|
||||
# S3/External storage settings (optional)
|
||||
USE_S3=${USE_S3_BACKUP:-false}
|
||||
S3_BUCKET=${S3_BACKUP_BUCKET:-""}
|
||||
S3_PREFIX=${S3_BACKUP_PREFIX:-"influence-backups"}
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Logging functions
|
||||
log_info() {
|
||||
echo -e "${GREEN}[INFO]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1"
|
||||
}
|
||||
|
||||
log_warn() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1"
|
||||
}
|
||||
|
||||
# Check if required commands exist
|
||||
check_dependencies() {
|
||||
local missing_deps=()
|
||||
|
||||
for cmd in tar gzip du; do
|
||||
if ! command -v $cmd &> /dev/null; then
|
||||
missing_deps+=($cmd)
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$USE_S3" = "true" ]; then
|
||||
if ! command -v aws &> /dev/null; then
|
||||
missing_deps+=(aws-cli)
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ${#missing_deps[@]} -ne 0 ]; then
|
||||
log_error "Missing dependencies: ${missing_deps[*]}"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Create backup directory
|
||||
create_backup_dir() {
|
||||
log_info "Creating backup directory: $BACKUP_PATH"
|
||||
mkdir -p "$BACKUP_PATH"
|
||||
}
|
||||
|
||||
# Backup uploaded files
|
||||
backup_uploads() {
|
||||
log_info "Backing up uploaded files..."
|
||||
|
||||
local uploads_dir="$APP_DIR/public/uploads"
|
||||
|
||||
if [ -d "$uploads_dir" ]; then
|
||||
local size=$(du -sh "$uploads_dir" | cut -f1)
|
||||
log_info "Uploads directory size: $size"
|
||||
|
||||
tar -czf "$BACKUP_PATH/uploads.tar.gz" -C "$APP_DIR/public" uploads
|
||||
log_info "Uploads backed up successfully"
|
||||
else
|
||||
log_warn "Uploads directory not found, skipping"
|
||||
fi
|
||||
}
|
||||
|
||||
# Backup environment configuration (encrypted)
|
||||
backup_env_config() {
|
||||
log_info "Backing up environment configuration..."
|
||||
|
||||
local env_file="$APP_DIR/.env"
|
||||
|
||||
if [ -f "$env_file" ]; then
|
||||
# Copy .env file (will be encrypted later)
|
||||
cp "$env_file" "$BACKUP_PATH/.env"
|
||||
|
||||
# Encrypt if encryption key is provided
|
||||
if [ -n "${BACKUP_ENCRYPTION_KEY}" ]; then
|
||||
log_info "Encrypting environment file..."
|
||||
openssl enc -aes-256-cbc -salt -pbkdf2 \
|
||||
-in "$BACKUP_PATH/.env" \
|
||||
-out "$BACKUP_PATH/.env.encrypted" \
|
||||
-k "${BACKUP_ENCRYPTION_KEY}"
|
||||
rm "$BACKUP_PATH/.env" # Remove unencrypted version
|
||||
log_info "Environment file encrypted"
|
||||
else
|
||||
log_warn "BACKUP_ENCRYPTION_KEY not set, .env file not encrypted"
|
||||
fi
|
||||
else
|
||||
log_warn ".env file not found, skipping"
|
||||
fi
|
||||
}
|
||||
|
||||
# Backup NocoDB data (if accessible)
|
||||
backup_nocodb() {
|
||||
log_info "Checking NocoDB backup capability..."
|
||||
|
||||
# Load environment variables
|
||||
if [ -f "$APP_DIR/.env" ]; then
|
||||
source "$APP_DIR/.env"
|
||||
fi
|
||||
|
||||
# If NocoDB is accessible via API, export data
|
||||
if [ -n "$NOCODB_API_URL" ] && [ -n "$NOCODB_API_TOKEN" ]; then
|
||||
log_info "Exporting NocoDB metadata..."
|
||||
|
||||
# Export project metadata
|
||||
curl -s -H "xc-token: $NOCODB_API_TOKEN" \
|
||||
"$NOCODB_API_URL/api/v1/db/meta/projects" \
|
||||
-o "$BACKUP_PATH/nocodb_projects.json" || log_warn "Failed to export NocoDB projects"
|
||||
|
||||
log_info "NocoDB metadata exported"
|
||||
else
|
||||
log_warn "NocoDB credentials not available, skipping data export"
|
||||
fi
|
||||
}
|
||||
|
||||
# Backup logs
|
||||
backup_logs() {
|
||||
log_info "Backing up log files..."
|
||||
|
||||
local logs_dir="$APP_DIR/logs"
|
||||
|
||||
if [ -d "$logs_dir" ]; then
|
||||
# Only backup logs from last 7 days
|
||||
find "$logs_dir" -name "*.log" -mtime -7 -print0 | \
|
||||
tar -czf "$BACKUP_PATH/logs.tar.gz" --null -T -
|
||||
log_info "Logs backed up successfully"
|
||||
else
|
||||
log_warn "Logs directory not found, skipping"
|
||||
fi
|
||||
}
|
||||
|
||||
# Create backup manifest
|
||||
create_manifest() {
|
||||
log_info "Creating backup manifest..."
|
||||
|
||||
cat > "$BACKUP_PATH/manifest.txt" << EOF
|
||||
Influence App Backup
|
||||
====================
|
||||
Backup Date: $(date)
|
||||
Backup Name: $BACKUP_NAME
|
||||
Server: $(hostname)
|
||||
|
||||
Contents:
|
||||
$(ls -lh "$BACKUP_PATH")
|
||||
|
||||
Total Size: $(du -sh "$BACKUP_PATH" | cut -f1)
|
||||
EOF
|
||||
|
||||
log_info "Manifest created"
|
||||
}
|
||||
|
||||
# Compress entire backup
|
||||
compress_backup() {
|
||||
log_info "Compressing backup..."
|
||||
|
||||
cd "$BACKUP_DIR"
|
||||
tar -czf "${BACKUP_NAME}.tar.gz" "$BACKUP_NAME"
|
||||
|
||||
# Remove uncompressed directory
|
||||
rm -rf "$BACKUP_NAME"
|
||||
|
||||
local size=$(du -sh "${BACKUP_NAME}.tar.gz" | cut -f1)
|
||||
log_info "Backup compressed: ${BACKUP_NAME}.tar.gz ($size)"
|
||||
}
|
||||
|
||||
# Upload to S3 (if enabled)
|
||||
upload_to_s3() {
|
||||
if [ "$USE_S3" != "true" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [ -z "$S3_BUCKET" ]; then
|
||||
log_error "S3_BUCKET not set, cannot upload to S3"
|
||||
return 1
|
||||
fi
|
||||
|
||||
log_info "Uploading backup to S3..."
|
||||
|
||||
aws s3 cp "${BACKUP_DIR}/${BACKUP_NAME}.tar.gz" \
|
||||
"s3://${S3_BUCKET}/${S3_PREFIX}/${BACKUP_NAME}.tar.gz" \
|
||||
--storage-class STANDARD_IA
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
log_info "Backup uploaded to S3 successfully"
|
||||
|
||||
# Optionally remove local backup after successful S3 upload
|
||||
if [ "${REMOVE_LOCAL_AFTER_S3:-false}" = "true" ]; then
|
||||
log_info "Removing local backup after S3 upload"
|
||||
rm "${BACKUP_DIR}/${BACKUP_NAME}.tar.gz"
|
||||
fi
|
||||
else
|
||||
log_error "Failed to upload backup to S3"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Clean old backups
|
||||
cleanup_old_backups() {
|
||||
log_info "Cleaning up backups older than $RETENTION_DAYS days..."
|
||||
|
||||
# Clean local backups
|
||||
find "$BACKUP_DIR" -name "influence_backup_*.tar.gz" -mtime +$RETENTION_DAYS -delete
|
||||
|
||||
# Clean S3 backups (if enabled)
|
||||
if [ "$USE_S3" = "true" ] && [ -n "$S3_BUCKET" ]; then
|
||||
log_info "Cleaning old S3 backups..."
|
||||
|
||||
# This requires AWS CLI with proper permissions
|
||||
aws s3 ls "s3://${S3_BUCKET}/${S3_PREFIX}/" | \
|
||||
while read -r line; do
|
||||
createDate=$(echo $line | awk '{print $1" "$2}')
|
||||
createDateSec=$(date -d "$createDate" +%s)
|
||||
olderThan=$(date -d "-${RETENTION_DAYS} days" +%s)
|
||||
|
||||
if [ $createDateSec -lt $olderThan ]; then
|
||||
fileName=$(echo $line | awk '{print $4}')
|
||||
if [ -n "$fileName" ]; then
|
||||
aws s3 rm "s3://${S3_BUCKET}/${S3_PREFIX}/${fileName}"
|
||||
log_info "Deleted old S3 backup: $fileName"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
log_info "Cleanup completed"
|
||||
}
|
||||
|
||||
# Verify backup integrity
|
||||
verify_backup() {
|
||||
log_info "Verifying backup integrity..."
|
||||
|
||||
if tar -tzf "${BACKUP_DIR}/${BACKUP_NAME}.tar.gz" > /dev/null 2>&1; then
|
||||
log_info "Backup integrity verified successfully"
|
||||
return 0
|
||||
else
|
||||
log_error "Backup integrity check failed!"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Main backup process
|
||||
main() {
|
||||
log_info "Starting Influence App backup..."
|
||||
log_info "Backup path: $BACKUP_PATH"
|
||||
|
||||
# Check dependencies
|
||||
check_dependencies
|
||||
|
||||
# Create backup directory
|
||||
create_backup_dir
|
||||
|
||||
# Perform backups
|
||||
backup_uploads
|
||||
backup_env_config
|
||||
backup_nocodb
|
||||
backup_logs
|
||||
|
||||
# Create manifest
|
||||
create_manifest
|
||||
|
||||
# Compress backup
|
||||
compress_backup
|
||||
|
||||
# Verify backup
|
||||
if ! verify_backup; then
|
||||
log_error "Backup verification failed, aborting"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Upload to S3
|
||||
upload_to_s3 || log_warn "S3 upload failed or skipped"
|
||||
|
||||
# Cleanup old backups
|
||||
cleanup_old_backups
|
||||
|
||||
log_info "Backup completed successfully: ${BACKUP_NAME}.tar.gz"
|
||||
log_info "Backup size: $(du -sh "${BACKUP_DIR}/${BACKUP_NAME}.tar.gz" | cut -f1)"
|
||||
}
|
||||
|
||||
# Run main function
|
||||
main "$@"
|
||||
204
influence/scripts/toggle-smtp.sh
Executable file
204
influence/scripts/toggle-smtp.sh
Executable file
@@ -0,0 +1,204 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Toggle SMTP Configuration Script
|
||||
# Switches between development (MailHog) and production (ProtonMail) SMTP settings
|
||||
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
ENV_FILE="$SCRIPT_DIR/../.env"
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
echo -e "${BLUE}"
|
||||
cat << "EOF"
|
||||
╔══════════════════════════════════════════════════╗
|
||||
║ SMTP Configuration Toggle Tool ║
|
||||
║ Influence Campaign Application ║
|
||||
╚══════════════════════════════════════════════════╝
|
||||
EOF
|
||||
echo -e "${NC}"
|
||||
|
||||
# Check if .env file exists
|
||||
if [ ! -f "$ENV_FILE" ]; then
|
||||
echo -e "${RED}Error: .env file not found at $ENV_FILE${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Detect current mode
|
||||
if grep -q "^SMTP_HOST=mailhog" "$ENV_FILE"; then
|
||||
CURRENT_MODE="development"
|
||||
CURRENT_HOST="mailhog"
|
||||
elif grep -q "^SMTP_HOST=smtp.protonmail.ch" "$ENV_FILE"; then
|
||||
CURRENT_MODE="production"
|
||||
CURRENT_HOST="smtp.protonmail.ch"
|
||||
else
|
||||
CURRENT_MODE="unknown"
|
||||
CURRENT_HOST=$(grep "^SMTP_HOST=" "$ENV_FILE" | cut -d'=' -f2)
|
||||
fi
|
||||
|
||||
echo -e "${YELLOW}Current Configuration:${NC}"
|
||||
echo -e " Mode: ${BLUE}$CURRENT_MODE${NC}"
|
||||
echo -e " SMTP Host: ${BLUE}$CURRENT_HOST${NC}"
|
||||
echo -e " Email Test Mode: ${BLUE}$(grep "^EMAIL_TEST_MODE=" "$ENV_FILE" | cut -d'=' -f2)${NC}"
|
||||
echo -e " Node Environment: ${BLUE}$(grep "^NODE_ENV=" "$ENV_FILE" | cut -d'=' -f2)${NC}"
|
||||
echo ""
|
||||
|
||||
# Ask user what mode they want
|
||||
echo "Select SMTP configuration mode:"
|
||||
echo " 1) Development (MailHog - emails captured locally)"
|
||||
echo " 2) Production (ProtonMail - emails sent to real recipients)"
|
||||
echo " 3) Cancel"
|
||||
echo ""
|
||||
read -p "Enter your choice (1-3): " choice
|
||||
|
||||
case $choice in
|
||||
1)
|
||||
TARGET_MODE="development"
|
||||
;;
|
||||
2)
|
||||
TARGET_MODE="production"
|
||||
;;
|
||||
3)
|
||||
echo -e "${YELLOW}Cancelled. No changes made.${NC}"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo -e "${RED}Invalid choice. Exiting.${NC}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Confirm if already in target mode
|
||||
if [ "$CURRENT_MODE" = "$TARGET_MODE" ]; then
|
||||
echo -e "${GREEN}Already in $TARGET_MODE mode. No changes needed.${NC}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Create backup
|
||||
BACKUP_FILE="${ENV_FILE}.backup_$(date +%Y%m%d_%H%M%S)"
|
||||
cp "$ENV_FILE" "$BACKUP_FILE"
|
||||
echo -e "${GREEN}✓ Backup created: $BACKUP_FILE${NC}"
|
||||
|
||||
# Apply configuration based on target mode
|
||||
if [ "$TARGET_MODE" = "development" ]; then
|
||||
echo ""
|
||||
echo -e "${BLUE}Switching to DEVELOPMENT mode...${NC}"
|
||||
echo ""
|
||||
|
||||
# Comment out production SMTP settings
|
||||
sed -i 's/^SMTP_HOST=smtp.protonmail.ch/# SMTP_HOST=smtp.protonmail.ch/' "$ENV_FILE"
|
||||
sed -i 's/^SMTP_PORT=587$/# SMTP_PORT=587/' "$ENV_FILE"
|
||||
sed -i 's/^SMTP_SECURE=false$/# SMTP_SECURE=false/' "$ENV_FILE"
|
||||
sed -i 's/^SMTP_USER=cmlite@bnkops.ca/# SMTP_USER=cmlite@bnkops.ca/' "$ENV_FILE"
|
||||
sed -i 's/^SMTP_PASS=QMLDV1E2MWDHNJMY/# SMTP_PASS=QMLDV1E2MWDHNJMY/' "$ENV_FILE"
|
||||
sed -i 's/^SMTP_FROM_EMAIL=cmlite@bnkops.ca/# SMTP_FROM_EMAIL=cmlite@bnkops.ca/' "$ENV_FILE"
|
||||
sed -i 's/^SMTP_FROM_NAME="BNKops Influence Campaign"$/# SMTP_FROM_NAME="BNKops Influence Campaign"/' "$ENV_FILE"
|
||||
|
||||
# Uncomment development SMTP settings
|
||||
sed -i 's/^# SMTP_HOST=mailhog-changemaker$/SMTP_HOST=mailhog-changemaker/' "$ENV_FILE"
|
||||
sed -i 's/^# SMTP_PORT=1025$/SMTP_PORT=1025/' "$ENV_FILE"
|
||||
sed -i 's/^# SMTP_SECURE=false$/SMTP_SECURE=false/' "$ENV_FILE"
|
||||
sed -i 's/^# SMTP_USER=test$/SMTP_USER=test/' "$ENV_FILE"
|
||||
sed -i 's/^# SMTP_PASS=test$/SMTP_PASS=test/' "$ENV_FILE"
|
||||
sed -i 's/^# SMTP_FROM_EMAIL=dev@albertainfluence.local$/SMTP_FROM_EMAIL=dev@albertainfluence.local/' "$ENV_FILE"
|
||||
sed -i 's/^# SMTP_FROM_NAME="BNKops Influence Campaign (DEV)"$/SMTP_FROM_NAME="BNKops Influence Campaign (DEV)"/' "$ENV_FILE"
|
||||
|
||||
# Update other settings
|
||||
sed -i 's/^NODE_ENV=production$/NODE_ENV=development/' "$ENV_FILE"
|
||||
sed -i 's/^EMAIL_TEST_MODE=false$/EMAIL_TEST_MODE=true/' "$ENV_FILE"
|
||||
sed -i 's|^APP_URL=https://influence.cmlite.org$|APP_URL=http://localhost:3333|' "$ENV_FILE"
|
||||
|
||||
echo -e "${GREEN}✓ Configured for DEVELOPMENT mode${NC}"
|
||||
echo ""
|
||||
echo -e "${YELLOW}Development Configuration:${NC}"
|
||||
echo " • SMTP: MailHog (mailhog-changemaker:1025)"
|
||||
echo " • Web UI: http://localhost:8025"
|
||||
echo " • Email Test Mode: Enabled"
|
||||
echo " • Node Environment: development"
|
||||
echo " • App URL: http://localhost:3333"
|
||||
echo ""
|
||||
echo -e "${YELLOW}Next Steps:${NC}"
|
||||
echo " 1. Ensure MailHog is running (from root directory):"
|
||||
echo -e " ${BLUE}cd .. && docker compose up -d mailhog${NC}"
|
||||
echo ""
|
||||
echo " 2. Start the Influence app:"
|
||||
echo -e " ${BLUE}docker compose up -d${NC}"
|
||||
echo ""
|
||||
echo " 3. Access MailHog UI to view captured emails:"
|
||||
echo -e " ${BLUE}http://localhost:8025${NC}"
|
||||
|
||||
elif [ "$TARGET_MODE" = "production" ]; then
|
||||
echo ""
|
||||
echo -e "${BLUE}Switching to PRODUCTION mode...${NC}"
|
||||
echo ""
|
||||
|
||||
# Confirm production switch
|
||||
echo -e "${RED}⚠️ WARNING: Production mode will send REAL emails!${NC}"
|
||||
read -p "Are you sure you want to switch to production? (yes/no): " confirm
|
||||
|
||||
if [ "$confirm" != "yes" ]; then
|
||||
echo -e "${YELLOW}Cancelled. Restoring backup...${NC}"
|
||||
mv "$BACKUP_FILE" "$ENV_FILE"
|
||||
echo -e "${GREEN}✓ Original configuration restored${NC}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Comment out development SMTP settings
|
||||
sed -i 's/^SMTP_HOST=mailhog-changemaker$/# SMTP_HOST=mailhog-changemaker/' "$ENV_FILE"
|
||||
sed -i 's/^SMTP_PORT=1025$/# SMTP_PORT=1025/' "$ENV_FILE"
|
||||
sed -i 's/^SMTP_SECURE=false$/# SMTP_SECURE=false/' "$ENV_FILE"
|
||||
sed -i 's/^SMTP_USER=test$/# SMTP_USER=test/' "$ENV_FILE"
|
||||
sed -i 's/^SMTP_PASS=test$/# SMTP_PASS=test/' "$ENV_FILE"
|
||||
sed -i 's/^SMTP_FROM_EMAIL=dev@albertainfluence.local$/# SMTP_FROM_EMAIL=dev@albertainfluence.local/' "$ENV_FILE"
|
||||
sed -i 's/^SMTP_FROM_NAME="BNKops Influence Campaign (DEV)"$/# SMTP_FROM_NAME="BNKops Influence Campaign (DEV)"/' "$ENV_FILE"
|
||||
|
||||
# Uncomment production SMTP settings
|
||||
sed -i 's/^# SMTP_HOST=smtp.protonmail.ch$/SMTP_HOST=smtp.protonmail.ch/' "$ENV_FILE"
|
||||
sed -i 's/^# SMTP_PORT=587$/SMTP_PORT=587/' "$ENV_FILE"
|
||||
sed -i 's/^# SMTP_SECURE=false$/SMTP_SECURE=false/' "$ENV_FILE"
|
||||
sed -i 's/^# SMTP_USER=cmlite@bnkops.ca$/SMTP_USER=cmlite@bnkops.ca/' "$ENV_FILE"
|
||||
sed -i 's/^# SMTP_PASS=QMLDV1E2MWDHNJMY$/SMTP_PASS=QMLDV1E2MWDHNJMY/' "$ENV_FILE"
|
||||
sed -i 's/^# SMTP_FROM_EMAIL=cmlite@bnkops.ca$/SMTP_FROM_EMAIL=cmlite@bnkops.ca/' "$ENV_FILE"
|
||||
sed -i 's/^# SMTP_FROM_NAME="BNKops Influence Campaign"$/SMTP_FROM_NAME="BNKops Influence Campaign"/' "$ENV_FILE"
|
||||
|
||||
# Update other settings
|
||||
sed -i 's/^NODE_ENV=development$/NODE_ENV=production/' "$ENV_FILE"
|
||||
sed -i 's/^EMAIL_TEST_MODE=true$/EMAIL_TEST_MODE=false/' "$ENV_FILE"
|
||||
sed -i 's|^APP_URL=http://localhost:3333$|APP_URL=https://influence.cmlite.org|' "$ENV_FILE"
|
||||
|
||||
echo -e "${GREEN}✓ Configured for PRODUCTION mode${NC}"
|
||||
echo ""
|
||||
echo -e "${YELLOW}Production Configuration:${NC}"
|
||||
echo " • SMTP: ProtonMail (smtp.protonmail.ch)"
|
||||
echo " • Email Test Mode: Disabled"
|
||||
echo " • Node Environment: production"
|
||||
echo " • App URL: https://influence.cmlite.org"
|
||||
echo ""
|
||||
echo -e "${RED}⚠️ IMPORTANT: Emails will be sent to REAL recipients!${NC}"
|
||||
echo ""
|
||||
echo -e "${YELLOW}Next Steps:${NC}"
|
||||
echo " 1. Restart the application:"
|
||||
echo -e " ${BLUE}docker compose down && docker compose up -d${NC}"
|
||||
echo ""
|
||||
echo " 2. Verify SMTP connection:"
|
||||
echo -e " ${BLUE}docker compose logs -f${NC}"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}════════════════════════════════════════════════${NC}"
|
||||
echo -e "${GREEN}✓ Configuration updated successfully!${NC}"
|
||||
echo -e "${GREEN}════════════════════════════════════════════════${NC}"
|
||||
echo ""
|
||||
echo "Current settings:"
|
||||
grep "^SMTP_HOST=" "$ENV_FILE"
|
||||
grep "^NODE_ENV=" "$ENV_FILE"
|
||||
grep "^EMAIL_TEST_MODE=" "$ENV_FILE"
|
||||
grep "^APP_URL=" "$ENV_FILE"
|
||||
echo ""
|
||||
echo -e "Backup saved at: ${BLUE}$BACKUP_FILE${NC}"
|
||||
Reference in New Issue
Block a user