#!/bin/bash # Load parameters ACTION=$1 ENV_FILE=".env" # Detect docker compose command (cross-platform compatibility) if command -v docker-compose >/dev/null 2>&1; then DOCKER_COMPOSE="docker-compose" elif command -v docker >/dev/null 2>&1 && docker compose version >/dev/null 2>&1; then DOCKER_COMPOSE="docker compose" else echo "Error: Neither docker-compose nor docker compose found!" exit 1 fi # Check if .env file exists if [[ ! -f $ENV_FILE ]]; then echo "Configuration file $ENV_FILE not found. Let's create it!" echo "" # Default values DEFAULT_DEV_URL="dev.linuxak.com" DEFAULT_EXTERNAL_NETWORK="traefiknet" DEFAULT_FORCE_HTTPS_REDIRECT="true" echo "Please provide the following configuration values:" echo "(Press Enter to use default values shown in brackets)" echo "" # Ask for domain name read -p "Development domain name [$DEFAULT_DEV_URL]: " input_dev_url DEV_URL="${input_dev_url:-$DEFAULT_DEV_URL}" # Ask for external network read -p "External Docker network name [$DEFAULT_EXTERNAL_NETWORK]: " input_external_network EXTERNAL_NETWORK="${input_external_network:-$DEFAULT_EXTERNAL_NETWORK}" # Ask for HTTPS redirect echo "" echo "Force HTTPS redirect? (true/false)" read -p "HTTPS redirect [$DEFAULT_FORCE_HTTPS_REDIRECT]: " input_force_https FORCE_HTTPS_REDIRECT="${input_force_https:-$DEFAULT_FORCE_HTTPS_REDIRECT}" # Validate HTTPS redirect value if [[ "$FORCE_HTTPS_REDIRECT" != "true" && "$FORCE_HTTPS_REDIRECT" != "false" ]]; then echo "Invalid value for HTTPS redirect. Using 'true' as default." FORCE_HTTPS_REDIRECT="true" fi # Create .env file echo "" echo "Creating $ENV_FILE with the following configuration:" echo " DEV_URL=$DEV_URL" echo " EXTERNAL_NETWORK=$EXTERNAL_NETWORK" echo " FORCE_HTTPS_REDIRECT=$FORCE_HTTPS_REDIRECT" echo "" cat > $ENV_FILE << EOF DEV_URL=$DEV_URL EXTERNAL_NETWORK=$EXTERNAL_NETWORK FORCE_HTTPS_REDIRECT=$FORCE_HTTPS_REDIRECT EOF echo "Configuration file $ENV_FILE created successfully!" echo "" fi # Load environment variables source $ENV_FILE case "$ACTION" in "up") # Create network if it doesn't exist (cross-platform) if ! docker network ls | grep -q "${EXTERNAL_NETWORK}"; then docker network create "${EXTERNAL_NETWORK}" >/dev/null 2>&1 || true fi # Check HTTPS redirect setting if [[ "${FORCE_HTTPS_REDIRECT}" == "true" ]]; then MSG="Starting with HTTPS redirect enabled..." ${DOCKER_COMPOSE} -f docker-compose.yml -f docker-compose.https-redirect.yml up -d else MSG="Starting without HTTPS redirect..." ${DOCKER_COMPOSE} up -d fi echo "" echo "${MSG}" sleep 2 echo "" echo "Available services:" echo "Traefik: https://traefik.${DEV_URL}" echo "Portainer: https://portainer.${DEV_URL}" ;; "restart") ${DOCKER_COMPOSE} restart ;; "down") ${DOCKER_COMPOSE} down ;; *) echo "Usage: $0 [up|restart|down]" exit 1 ;; esac