diff --git a/.gitignore b/.gitignore index b5da28e..4728693 100644 --- a/.gitignore +++ b/.gitignore @@ -37,5 +37,9 @@ services/raven/ services/silver-config silver-observability +# Ignore SeaweedFS configuration with credentials +services/seaweedfs/s3-config.json +services/seaweedfs/.env + # Ignore docker-compose override files services/docker-compose.override.yml \ No newline at end of file diff --git a/scripts/service/cleanup-docker.sh b/scripts/service/cleanup-docker.sh index 235f61d..9e2ad3b 100755 --- a/scripts/service/cleanup-docker.sh +++ b/scripts/service/cleanup-docker.sh @@ -34,11 +34,20 @@ fi # Step 1: Stop all containers using docker compose echo -e "\n${YELLOW}Step 1/3: Stopping Docker containers${NC}" +echo " - Stopping Silver mail services..." (cd "${SERVICES_DIR}" && docker compose down) if [ $? -eq 0 ]; then - echo -e "${GREEN}✓ Containers stopped successfully${NC}" + echo -e "${GREEN} ✓ Silver services stopped successfully${NC}" else - echo -e "${RED}✗ Failed to stop containers${NC}" + echo -e "${RED} ✗ Failed to stop Silver services${NC}" +fi + +echo " - Stopping SeaweedFS services..." +(cd "${SERVICES_DIR}" && docker compose -f docker-compose.seaweedfs.yaml down) +if [ $? -eq 0 ]; then + echo -e "${GREEN} ✓ SeaweedFS services stopped successfully${NC}" +else + echo -e "${RED} ✗ Failed to stop SeaweedFS services${NC}" fi # Step 2: Remove all volumes diff --git a/scripts/service/start-silver.sh b/scripts/service/start-silver.sh index 2b9b80a..d9412ba 100755 --- a/scripts/service/start-silver.sh +++ b/scripts/service/start-silver.sh @@ -92,11 +92,38 @@ fi # ================================ echo -e "\n${YELLOW}Step 3/4: Starting Docker services${NC}" +# Check and setup SeaweedFS S3 configuration +SEAWEEDFS_CONFIG="${SERVICES_DIR}/seaweedfs/s3-config.json" +SEAWEEDFS_EXAMPLE="${SERVICES_DIR}/seaweedfs/s3-config.json.example" + +if [ ! -f "$SEAWEEDFS_CONFIG" ]; then + echo " - SeaweedFS S3 configuration not found. Creating from example..." + if [ -f "$SEAWEEDFS_EXAMPLE" ]; then + cp "$SEAWEEDFS_EXAMPLE" "$SEAWEEDFS_CONFIG" + echo -e "${YELLOW} ⚠ WARNING: Using example S3 credentials. Update ${SEAWEEDFS_CONFIG} with secure credentials!${NC}" + else + echo -e "${RED}✗ SeaweedFS example configuration not found at ${SEAWEEDFS_EXAMPLE}${NC}" + exit 1 + fi +fi + +# Start SeaweedFS services first +echo " - Starting SeaweedFS blob storage..." +(cd "${SERVICES_DIR}" && docker compose -f docker-compose.seaweedfs.yaml up -d) +if [ $? -ne 0 ]; then + echo -e "${RED}✗ SeaweedFS docker compose failed. Please check the logs.${NC}" + exit 1 +fi +echo -e "${GREEN} ✓ SeaweedFS services started${NC}" + +# Start main Silver mail services +echo " - Starting Silver mail services..." (cd "${SERVICES_DIR}" && docker compose up -d) if [ $? -ne 0 ]; then echo -e "${RED}✗ Docker compose failed. Please check the logs.${NC}" exit 1 fi +echo -e "${GREEN} ✓ Silver mail services started${NC}" sleep 1 # Wait a bit for services to initialize diff --git a/scripts/service/stop-silver.sh b/scripts/service/stop-silver.sh index ddfd48c..41a133b 100644 --- a/scripts/service/stop-silver.sh +++ b/scripts/service/stop-silver.sh @@ -6,4 +6,8 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SERVICES_DIR="$(cd "${SCRIPT_DIR}/../../services" && pwd)" # Navigate to services directory and stop docker services -(cd "${SERVICES_DIR}" && docker compose down) \ No newline at end of file +echo "Stopping Silver mail services..." +(cd "${SERVICES_DIR}" && docker compose down) + +echo "Stopping SeaweedFS services..." +(cd "${SERVICES_DIR}" && docker compose -f docker-compose.seaweedfs.yaml down) \ No newline at end of file diff --git a/scripts/utils/generate-rspamd-worker-controller.sh b/scripts/utils/generate-rspamd-worker-controller.sh old mode 100644 new mode 100755 diff --git a/scripts/utils/generate-seaweedfs-credentials.sh b/scripts/utils/generate-seaweedfs-credentials.sh new file mode 100755 index 0000000..93e6e89 --- /dev/null +++ b/scripts/utils/generate-seaweedfs-credentials.sh @@ -0,0 +1,125 @@ +#!/bin/bash + +# ============================================ +# SeaweedFS S3 Credentials Generator +# ============================================ +# This script generates secure S3 credentials +# for SeaweedFS configuration +# ============================================ + +# Colors +CYAN="\033[0;36m" +GREEN="\033[0;32m" +YELLOW="\033[1;33m" +NC="\033[0m" # No Color + +echo -e "${CYAN}" +echo "=========================================" +echo " SeaweedFS S3 Credentials Generator" +echo "=========================================" +echo -e "${NC}" + +# Check if openssl is available +if ! command -v openssl &> /dev/null; then + echo -e "${YELLOW}⚠ Warning: openssl not found. Using basic random generation.${NC}" + ACCESS_KEY=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 20) + SECRET_KEY=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 40) +else + # Generate secure random credentials + ACCESS_KEY=$(openssl rand -base64 32 | tr -d /=+ | cut -c -20) + SECRET_KEY=$(openssl rand -base64 32) +fi + +echo "" +echo -e "${GREEN}Generated Credentials:${NC}" +echo "---------------------------------------------" +echo "Access Key: ${ACCESS_KEY}" +echo "Secret Key: ${SECRET_KEY}" +echo "---------------------------------------------" +echo "" + +# Get the script directory +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +SERVICES_DIR="$(cd "${SCRIPT_DIR}/../../services" && pwd)" +CONFIG_FILE="${SERVICES_DIR}/seaweedfs/s3-config.json" +EXAMPLE_FILE="${SERVICES_DIR}/seaweedfs/s3-config.json.example" +ENV_FILE="${SERVICES_DIR}/seaweedfs/.env" +ENV_EXAMPLE="${SERVICES_DIR}/seaweedfs/.env.example" + +echo "S3 Config file: ${CONFIG_FILE}" +echo "Environment file: ${ENV_FILE}" +echo "" + +# Ask if user wants to update the config files +read -p "Do you want to update configuration files with these credentials? (y/n): " UPDATE_CONFIG + +if [[ "$UPDATE_CONFIG" == "y" || "$UPDATE_CONFIG" == "Y" ]]; then + # Create directory if it doesn't exist + mkdir -p "$(dirname "$CONFIG_FILE")" + + # Create s3-config.json + cat > "$CONFIG_FILE" < "$ENV_FILE" <"$OUTPUT_FILE" < "${DELIVERY_FILE}.tmp" + + cat >> "${DELIVERY_FILE}.tmp" <