diff --git a/.env-core/sh/core/available_projects.sh b/.env-core/sh/core/available_projects.sh index 18a0755..6ef7602 100644 --- a/.env-core/sh/core/available_projects.sh +++ b/.env-core/sh/core/available_projects.sh @@ -7,6 +7,7 @@ export PROJECT_TITLES=( "PHP-Server" "Next.js" "Directus" + "Elastic Stack" "Directus + Next.js" "Next.WP" "Node.js" @@ -18,4 +19,5 @@ export AVAILABLE_PROJECTS=( "php" "nextjs" "directus" + "elasticsearch" ) diff --git a/.env-core/sh/core/core_notice.sh b/.env-core/sh/core/core_notice.sh index 1cc6a3c..3414a3a 100644 --- a/.env-core/sh/core/core_notice.sh +++ b/.env-core/sh/core/core_notice.sh @@ -27,34 +27,71 @@ notice_windows_host() { notice_project_urls() { OPEN_LINK=$1 - get_unique_frontport - ECHO_INFO "Project URLs:" - ECHO_KEY_VALUE "DOMAIN_FULL:" "https://$DOMAIN_FULL" + if [[ "$OPEN_LINK" == 'open' ]]; then + ECHO_INFO "Project URLs:" - if [[ $PORT_FRONT =~ ^[0-9]+$ && $PORT_FRONT -ne 0 ]]; then - ECHO_KEY_VALUE "DOMAIN_FRONT:" "http://localhost:$PORT_FRONT" - fi + URLkeys=("DOMAIN_FULL" "DOMAIN_FRONT" "DOMAIN_ADMIN" "DOMAIN_DB" "DOMAIN_MAIL") + for key in "${URLkeys[@]}"; do + value="${!key}" - if [[ $DOMAIN_ADMIN != "" ]]; then - ECHO_KEY_VALUE "DOMAIN_ADMIN:" "https://$DOMAIN_ADMIN" - fi + if [[ -n "$value" ]]; then + ECHO_KEY_VALUE "$key:" "https://$value" + fi + done - if [[ $DOMAIN_DB != "" ]]; then - ECHO_KEY_VALUE "DOMAIN_DB:" "https://$DOMAIN_DB" - fi + notice_project_ips "$OPEN_LINK" - if [[ $DOMAIN_MAIL != "" ]]; then - ECHO_KEY_VALUE "DOMAIN_MAIL:" "https://$DOMAIN_MAIL" + if command -v google-chrome &>/dev/null; then + google-chrome "https://$DOMAIN_FULL" || true + else + echo "Google Chrome is not installed. Skipping opening URL." + fi fi +} - if [[ $OPEN_LINK == 'open' ]]; then - google-chrome $DOMAIN_FULL || true - fi +notice_project_ips() { + OPEN_LINK=$1 + + ECHO_INFO "Project IPs:" + + case $PROJECT_TYPE in + "wordpress" | "projects") + services=( + "wordpress:" #don't need port here + ) + ;; + "elasticsearch") + services=( + "elasticsearch:9200" + "kibana:5601" + ) + ;; + esac + + for service_info in "${services[@]}"; do + service=${service_info%%:*} + port=${service_info#*:} + + get_docker_ip "$DOMAIN_NAME-$service" + + if [[ -n "$DOCKER_IP" ]]; then + DOMAIN=$(echo "$service" | tr '[:lower:]' '[:upper:]') + + if [ -n "$port" ]; then + URL="$DOCKER_IP:$port" + else + URL="$DOCKER_IP" + fi + ECHO_KEY_VALUE "DOMAIN_$DOMAIN:" "http://$URL" + fi + done + + env_file_load "update" } notice_project_vars() { - OPEN_LINK=$1 + local OPEN_LINK=$1 ECHO_INFO "Project variables:" ECHO_KEY_VALUE "PROJECT_TYPE:" "$PROJECT_TYPE" diff --git a/.env-core/sh/projects/actions/actions_new_project.sh b/.env-core/sh/projects/actions/actions_new_project.sh index 8804f23..df2a201 100644 --- a/.env-core/sh/projects/actions/actions_new_project.sh +++ b/.env-core/sh/projects/actions/actions_new_project.sh @@ -60,6 +60,10 @@ actions_new_project() { docker_create_directus unset_variables "PROJECT_TYPE" ;; + "elasticsearch") + docker_create_elastic + unset_variables "PROJECT_TYPE" + ;; esac ;; esac diff --git a/.env-core/sh/projects/database/database_helpers.sh b/.env-core/sh/projects/database/database_helpers.sh index 80220e8..c150c05 100644 --- a/.env-core/sh/projects/database/database_helpers.sh +++ b/.env-core/sh/projects/database/database_helpers.sh @@ -68,3 +68,16 @@ get_mysql_cmd() { db_file_find_and_replace() { sed -i -e 's/utf8mb4_0900_ai_ci/utf8mb4_unicode_520_ci/g' "$PROJECT_DATABASE_DIR/$DB_FILE" } + +wait_for_db() { + EMPTY_LINE + env_file_load + get_mysql_cmd + + docker exec -i "$DOCKER_CONTAINER_DB" sh -c " + until $MYSQL_CMD -uroot -p\"$MYSQL_ROOT_PASSWORD\" -D $DB_NAME -e '\q'; do + >&2 echo '$MYSQL_CMD is unavailable - waiting...' + sleep 2 + done + " +} diff --git a/.env-core/sh/projects/docker/docker_create/docker_create_bedrock.sh b/.env-core/sh/projects/docker/docker_create/docker_create_bedrock.sh index e388290..4dde42d 100644 --- a/.env-core/sh/projects/docker/docker_create/docker_create_bedrock.sh +++ b/.env-core/sh/projects/docker/docker_create/docker_create_bedrock.sh @@ -16,7 +16,7 @@ docker_create_bedrock() { ECHO_INFO "Setting up Docker containers for $DOMAIN_FULL" #GET PORT - get_unique_port + get_all_ports get_project_dir "skip_question" @@ -26,7 +26,7 @@ docker_create_bedrock() { mkdir -p $PROJECT_ROOT_DIR # Clone templates files - git clone $TEMPLATES_REPO-$PROJECT_TYPE.git $PROJECT_ROOT_DIR --depth 1 + git_clone_templates_files # Rename files replace_templates_files @@ -46,6 +46,11 @@ docker_create_bedrock() { setup_hosts_file add fix_permissions notice_windows_host add + + wait_for_db + wp_core_install + wp_site_empty + docker_restart # TODO: add clone diff --git a/.env-core/sh/projects/docker/docker_create/docker_create_directus.sh b/.env-core/sh/projects/docker/docker_create/docker_create_directus.sh index bfbcea2..7682e83 100644 --- a/.env-core/sh/projects/docker/docker_create/docker_create_directus.sh +++ b/.env-core/sh/projects/docker/docker_create/docker_create_directus.sh @@ -18,10 +18,7 @@ docker_create_directus() { ECHO_INFO "Setting up Docker containers for $DOMAIN_FULL" #GET PORT - get_unique_port - - #GET PORT_FRONT - set_unique_frontport + get_all_ports get_project_dir "skip_question" @@ -31,7 +28,7 @@ docker_create_directus() { mkdir -p $PROJECT_ROOT_DIR # Clone templates files - git clone $TEMPLATES_REPO-$PROJECT_TYPE.git $PROJECT_ROOT_DIR --depth 1 + git_clone_templates_files # Rename files replace_templates_files diff --git a/.env-core/sh/projects/docker/docker_create/docker_create_elastic.sh b/.env-core/sh/projects/docker/docker_create/docker_create_elastic.sh new file mode 100644 index 0000000..bed7644 --- /dev/null +++ b/.env-core/sh/projects/docker/docker_create/docker_create_elastic.sh @@ -0,0 +1,63 @@ +#!/bin/bash + +set -o errexit #to stop the script when an error occurs +set -o pipefail + +docker_create_elastic() { + unset_variables + + if [ $NGINX_EXISTS -eq 1 ]; then + get_domain_name + check_domain_exists + + if [[ $DOMAIN_EXISTS == 0 ]]; then + get_project_dir "" + set_project_args + check_data_before_continue_callback docker_create_elastic + + ECHO_INFO "Setting up Docker containers for $DOMAIN_FULL" + + #GET PORT + get_all_ports + + print_to_file_instances + + # Create DIR + mkdir -p $PROJECT_ROOT_DIR + + # Clone templates files + git_clone_templates_files + + # Rename files + replace_templates_files + + # Replace Variables + replace_variables + + # Load env + env_file_load "create" + + ECHO_GREEN "Docker compose file set and container can be built and started" + ECHO_TEXT "Starting Container" + docker_compose_runner "up -d --build" + + ECHO_SUCCESS "Containers Started" + + setup_hosts_file add + fix_permissions + notice_windows_host add + docker_restart + + edit_file_gitignore + + # Print for user project info + notice_project_vars "open" "ip" + else + ECHO_ERROR "Site already exists" + docker_create_elastic + fi + else + ECHO_ERROR "Nginx container not running" + nginx_actions + fi +} diff --git a/.env-core/sh/projects/docker/docker_create/docker_create_nextjs.sh b/.env-core/sh/projects/docker/docker_create/docker_create_nextjs.sh index ce21a21..8635f17 100644 --- a/.env-core/sh/projects/docker/docker_create/docker_create_nextjs.sh +++ b/.env-core/sh/projects/docker/docker_create/docker_create_nextjs.sh @@ -18,7 +18,7 @@ docker_create_nextjs() { ECHO_INFO "Setting up Docker containers for $DOMAIN_FULL" #GET PORT - get_unique_port + get_all_ports export PORT_FRONT=$PORT get_project_dir "skip_question" @@ -29,7 +29,7 @@ docker_create_nextjs() { mkdir -p $PROJECT_ROOT_DIR # Clone templates files - git clone $TEMPLATES_REPO-$PROJECT_TYPE.git $PROJECT_ROOT_DIR --depth 1 + git_clone_templates_files # Rename files replace_templates_files diff --git a/.env-core/sh/projects/docker/docker_create/docker_create_nodejs.sh b/.env-core/sh/projects/docker/docker_create/docker_create_nodejs.sh index 7ce81fd..f4255a4 100644 --- a/.env-core/sh/projects/docker/docker_create/docker_create_nodejs.sh +++ b/.env-core/sh/projects/docker/docker_create/docker_create_nodejs.sh @@ -14,7 +14,7 @@ docker_create_nodejs() { ECHO_INFO "Setting up Docker containers for $DOMAIN_FULL" #GET PORT - get_unique_port + get_all_ports get_project_dir "skip_question" diff --git a/.env-core/sh/projects/docker/docker_create/docker_create_nodejs_api.sh b/.env-core/sh/projects/docker/docker_create/docker_create_nodejs_api.sh index 98f5991..c0323cc 100644 --- a/.env-core/sh/projects/docker/docker_create/docker_create_nodejs_api.sh +++ b/.env-core/sh/projects/docker/docker_create/docker_create_nodejs_api.sh @@ -14,7 +14,7 @@ docker_create_nodejs_api() { ECHO_INFO "Setting up Docker containers for $DOMAIN_FULL" #GET PORT - get_unique_port + get_all_ports get_project_dir "skip_question" diff --git a/.env-core/sh/projects/docker/docker_create/docker_create_php.sh b/.env-core/sh/projects/docker/docker_create/docker_create_php.sh index fd2d4f9..0cd690f 100644 --- a/.env-core/sh/projects/docker/docker_create/docker_create_php.sh +++ b/.env-core/sh/projects/docker/docker_create/docker_create_php.sh @@ -26,7 +26,7 @@ docker_create_php() { ECHO_INFO "Setting up Docker containers for $DOMAIN_FULL" #GET PORT - get_unique_port + get_all_ports get_project_dir "skip_question" @@ -36,7 +36,7 @@ docker_create_php() { mkdir -p $PROJECT_ROOT_DIR # Clone templates files - git clone $TEMPLATES_REPO-$PROJECT_TYPE.git $PROJECT_ROOT_DIR --depth 1 + git_clone_templates_files # Rename files replace_templates_files diff --git a/.env-core/sh/projects/docker/docker_create/docker_create_wp.sh b/.env-core/sh/projects/docker/docker_create/docker_create_wp.sh index b97b664..38a38d7 100644 --- a/.env-core/sh/projects/docker/docker_create/docker_create_wp.sh +++ b/.env-core/sh/projects/docker/docker_create/docker_create_wp.sh @@ -16,7 +16,7 @@ docker_create_wp() { ECHO_INFO "Setting up Docker containers for $DOMAIN_FULL" #GET PORT - get_unique_port + get_all_ports print_to_file_instances @@ -24,7 +24,7 @@ docker_create_wp() { mkdir -p $PROJECT_ROOT_DIR # Clone templates files - git clone $TEMPLATES_REPO-$PROJECT_TYPE.git $PROJECT_ROOT_DIR --depth 1 + git_clone_templates_files # Rename files replace_templates_files @@ -46,6 +46,7 @@ docker_create_wp() { notice_windows_host add docker_restart + wait_for_db wp_core_install wp_site_empty diff --git a/.env-core/sh/projects/docker/docker_create/docker_create_wp_next.sh b/.env-core/sh/projects/docker/docker_create/docker_create_wp_next.sh index b2a5304..e153249 100644 --- a/.env-core/sh/projects/docker/docker_create/docker_create_wp_next.sh +++ b/.env-core/sh/projects/docker/docker_create/docker_create_wp_next.sh @@ -18,10 +18,7 @@ docker_create_wp_next() { ECHO_INFO "Setting up Docker containers for $DOMAIN_FULL" #GET PORT - get_unique_port - - #GET PORT_FRONT - set_unique_frontport + get_all_ports get_project_dir "skip_question" diff --git a/.env-core/sh/projects/docker/docker_helpers.sh b/.env-core/sh/projects/docker/docker_helpers.sh index 49a6539..cf7f135 100644 --- a/.env-core/sh/projects/docker/docker_helpers.sh +++ b/.env-core/sh/projects/docker/docker_helpers.sh @@ -58,3 +58,9 @@ docker_official_image_exists() { fi fi } + +get_docker_ip() { + if [ -n "$1" ]; then + export DOCKER_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $1) + fi +} diff --git a/.env-core/sh/projects/setup/args_methods.sh b/.env-core/sh/projects/setup/args_methods.sh index c82eebd..adf414e 100644 --- a/.env-core/sh/projects/setup/args_methods.sh +++ b/.env-core/sh/projects/setup/args_methods.sh @@ -63,6 +63,11 @@ get_project_args() { "DIRECTUS_VERSION" ) ;; + 'elasticsearch') + ARGS=( + "ELASTIC_VERSION" + ) + ;; *) echo "Unsupported project type: $PROJECT_TYPE" ;; @@ -110,6 +115,10 @@ set_custom_args() { get_directus_version skip_user_input=true ;; + 'ELASTIC_VERSION') + get_elastic_version + skip_user_input=true + ;; *) echo "Unsupported argument: $arg" ;; @@ -197,6 +206,9 @@ set_project_args() { 'DIRECTUS_VERSION') get_directus_version "default" ;; + 'ELASTIC_VERSION') + get_elastic_version + ;; *) echo "Unsupported argument: $arg" ;; @@ -204,53 +216,10 @@ set_project_args() { done } -set_project_vars() { - get_project_type - - PROJECT_DIR=$PROJECT_TYPE - DOMAIN_NODOT=$(echo "$DOMAIN_NAME" | tr . _) - PROJECT_ROOT_DIR="$ENV_DIR"/"$PROJECT_DIR"/"$DOMAIN_FULL" - PROJECT_ARCHIVE_DIR=$PROJECT_DIR"_""$DOMAIN_FULL" - - set_default_vars - get_compose_project_name - - case $PROJECT_TYPE in - "wordpress" | "projects") - set_wordpress_vars - ;; - "bedrock") - set_bedrock_vars - ;; - "php") - set_php_vars - ;; - "wpnextjs") - set_wpnextjs_vars - ;; - "nodejs") - set_nodejs_vars - ;; - "nextjs") - set_nextjs_vars - ;; - "directus") - set_directus_vars - ;; - "directus_nextjs") - set_directus_nextjs_vars - ;; - *) - echo "Unknown PROJECT_TYPE: $PROJECT_TYPE" - return 1 - ;; - esac -} - get_project_dir() { QUESTION=$1 - DOMAIN_NAME_DEFAULT="dev.$DOMAIN_NAME.local" + get_domain_default_name #Beetroot project - DOMAIN_NAME_DEFAULT [[ "$SETUP_TYPE" -eq 3 ]] && DOMAIN_NAME_DEFAULT="$DOMAIN_NAME.local" diff --git a/.env-core/sh/projects/setup/get_versions.sh b/.env-core/sh/projects/setup/get_versions.sh index d9a7b57..8af7399 100644 --- a/.env-core/sh/projects/setup/get_versions.sh +++ b/.env-core/sh/projects/setup/get_versions.sh @@ -108,3 +108,37 @@ get_directus_version() { fi } + +# Elastic, Logstash, Kibana +get_elastic_version() { + # shellcheck disable=SC2207 + LIST=($(curl -s 'https://hub.docker.com/v2/repositories/library/elasticsearch/tags/?page_size=10' | jq -r '.results[].name' | grep -oP '^[0-9]+\.[0-9]+\.[0-9]+' | sort -Vr | head -n 3)) + + if [ -z "$ELASTIC_VERSION" ]; then + if [[ $QUESTION == "default" ]]; then + ELASTIC_VERSION="${LIST[1]}" + else + ELASTIC_VERSION="${LIST[1]}" + ECHO_ENTER "Enter ELASTIC_VERSION [default '$ELASTIC_VERSION']" + + print_list "${LIST[@]}" + + choice=$(GET_USER_INPUT "select_one_of") + choice=${choice%.*} + + if [ -z "$choice" ]; then + choice=-1 + ELASTIC_VERSION="${LIST[1]}" + else + if (("$choice" > 0 && "$choice" <= ${#LIST[@]})); then + ELASTIC_VERSION="${LIST[$(($choice - 1))]}" + else + ECHO_WARN_RED "Invalid choice or version. Using default version: $ELASTIC_VERSION" + ECHO_GREEN "Set default version: $ELASTIC_VERSION" + EMPTY_LINE + fi + fi + fi + fi + +} diff --git a/.env-core/sh/projects/setup/ports.sh b/.env-core/sh/projects/setup/ports.sh new file mode 100644 index 0000000..76393a9 --- /dev/null +++ b/.env-core/sh/projects/setup/ports.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +set -o errexit #to stop the script when an error occurs +set -o pipefail + +get_unique_port() { + # GET PORT [ count port from 3309 ] + PORT=3309 + while true; do + port_exist=$(awk '/'"$PORT"'/{print $1}' "$FILE_INSTANCES" | head -n 2 | tail -n 1) + + if [[ ! "$port_exist" ]]; then + break + fi + ((PORT++)) + done +} + +get_all_ports() { + get_unique_port + + # [ count port from 5510 ] + PORT_FRONT=$(($PORT + 1700)) + + # [ count port from 9210 ] + ELASTIC_PORT=$(($PORT + 5900)) + + # [ count port from 5610 ] + KIBANA_PORT=$(($PORT + 2300)) + + # [ count port from 9610 ] + LOGSTASH_PORT=$(($PORT + 6300)) + + # [ count port from 8010 ] + MAIL_PORT=$(($PORT + 4700)) +} diff --git a/.env-core/sh/projects/setup/print_edit_file.sh b/.env-core/sh/projects/setup/print_edit_file.sh index 48f926f..b8b6fb9 100644 --- a/.env-core/sh/projects/setup/print_edit_file.sh +++ b/.env-core/sh/projects/setup/print_edit_file.sh @@ -33,16 +33,18 @@ env_file_load() { if [[ $ACTION == '' && -f $PROJECT_DOCKER_DIR/.env ]]; then source $PROJECT_DOCKER_DIR/.env elif [[ $ACTION == 'create' ]]; then + sed -i -e 's/{COMPOSE_PROJECT_NAME}/'$COMPOSE_PROJECT_NAME'/g' $PROJECT_DOCKER_DIR/.env sed -i -e 's/{DOMAIN_NAME}/'$DOMAIN_NAME'/g' $PROJECT_DOCKER_DIR/.env - sed -i -e 's/{TABLE_PREFIX}/'$TABLE_PREFIX'/g' $PROJECT_DOCKER_DIR/.env sed -i -e 's/{DOMAIN_FULL}/'$DOMAIN_FULL'/g' $PROJECT_DOCKER_DIR/.env - sed -i -e 's/{WP_VERSION}/'$WP_VERSION'/g' $PROJECT_DOCKER_DIR/.env sed -i -e 's/{PORT}/'$PORT'/g' $PROJECT_DOCKER_DIR/.env + + #WP + sed -i -e 's/{WP_VERSION}/'$WP_VERSION'/g' $PROJECT_DOCKER_DIR/.env + sed -i -e 's/{TABLE_PREFIX}/'$TABLE_PREFIX'/g' $PROJECT_DOCKER_DIR/.env sed -i -e 's/{WP_VERSION}/'$WP_VERSION'/g' $PROJECT_DOCKER_DIR/.env sed -i -e 's/{WP_USER}/'$WP_USER'/g' $PROJECT_DOCKER_DIR/.env sed -i -e 's/{WP_PASSWORD}/'$WP_PASSWORD'/g' $PROJECT_DOCKER_DIR/.env sed -i -e 's/{PHP_VERSION}/'$PHP_VERSION'/g' $PROJECT_DOCKER_DIR/.env - sed -i -e 's/{COMPOSE_PROJECT_NAME}/'$COMPOSE_PROJECT_NAME'/g' $PROJECT_DOCKER_DIR/.env # Headless CMS sed -i -e 's/{PORT_FRONT}/'$PORT_FRONT'/g' $PROJECT_DOCKER_DIR/.env @@ -55,6 +57,12 @@ env_file_load() { # Directus sed -i -e 's/{DIRECTUS_VERSION}/'$DIRECTUS_VERSION'/g' $PROJECT_DOCKER_DIR/.env + # Elasticsearch + sed -i -e 's/{ELASTIC_VERSION}/'$ELASTIC_VERSION'/g' $PROJECT_DOCKER_DIR/.env + sed -i -e 's/{ELASTIC_PORT}/'$ELASTIC_PORT'/g' $PROJECT_DOCKER_DIR/.env + sed -i -e 's/{KIBANA_PORT}/'$KIBANA_PORT'/g' $PROJECT_DOCKER_DIR/.env + sed -i -e 's/{LOGSTASH_PORT}/'$LOGSTASH_PORT'/g' $PROJECT_DOCKER_DIR/.env + [[ "yes" = "$MULTISITE" ]] && wp_multisite_env #Replace only first occurrence in the file @@ -62,6 +70,11 @@ env_file_load() { # delete .env.example cd "$PROJECT_ROOT_DIR" && rm -rf .env.example && cd ../../ + elif [[ $ACTION == 'update' ]]; then + # Elasticsearch + sed -i "s/^DOMAIN_ELASTIC=.*$/DOMAIN_ELASTIC='$DOMAIN_ELASTIC'/g" "$PROJECT_DOCKER_DIR/.env" + sed -i "s/^DOMAIN_KIBANA=.*$/DOMAIN_KIBANA='$DOMAIN_KIBANA'/g" "$PROJECT_DOCKER_DIR/.env" + else ECHO_YELLOW ".env file not found, creating..." env_file_load "create" diff --git a/.env-core/sh/projects/setup/set_vars.sh b/.env-core/sh/projects/setup/set_vars.sh index a7d877a..da5f630 100644 --- a/.env-core/sh/projects/setup/set_vars.sh +++ b/.env-core/sh/projects/setup/set_vars.sh @@ -3,115 +3,101 @@ set -o errexit #to stop the script when an error occurs set -o pipefail -set_default_vars() { - DOMAIN_DB="$DOMAIN_FULL.phpmyadmin" - DOMAIN_MAIL="$DOMAIN_FULL.mail" - DOCKER_VOLUME_DB="$DOMAIN_NAME"_db_data - DOCKER_CONTAINER_DB="$DOMAIN_NAME-mysql" - DB_TYPE="MYSQL" - - if [[ -z "$PORT_FRONT" ]]; then - PORT_FRONT=0 - fi -} +set_project_vars() { + get_project_type -set_wordpress_vars() { - #WP - DOMAIN_ADMIN="$DOMAIN_FULL/wp-admin" - PROJECT_DOCKER_DIR=$PROJECT_ROOT_DIR/wp-docker - PROJECT_DATABASE_DIR=$PROJECT_ROOT_DIR/wp-database - PROJECT_WP_CONTENT_DIR=$PROJECT_ROOT_DIR/wp-content - DOCKER_CONTAINER_APP="$DOMAIN_NAME-wordpress" - HOST_EXTRA="$DOMAIN_DB $DOMAIN_MAIL" -} + PROJECT_DIR=$PROJECT_TYPE + DOMAIN_NODOT=$(echo "$DOMAIN_NAME" | tr . _) + PROJECT_ROOT_DIR="$ENV_DIR"/"$PROJECT_DIR"/"$DOMAIN_FULL" + PROJECT_ARCHIVE_DIR=$PROJECT_DIR"_""$DOMAIN_FULL" -set_bedrock_vars() { - #BEDROCK - DOMAIN_ADMIN="$DOMAIN_FULL/wp/wp-admin" - PROJECT_DOCKER_DIR=$PROJECT_ROOT_DIR/docker + # Set default variables + DOMAIN_NAME_DEFAULT="dev.$DOMAIN_NAME.local" + DOMAIN_DB="" + DOCKER_VOLUME_DB="$DOMAIN_NAME"_db_data + DOCKER_CONTAINER_DB="$DOMAIN_NAME-mysql" + PROJECT_DOCKER_DIR="$PROJECT_ROOT_DIR/docker" PROJECT_DATABASE_DIR=$PROJECT_ROOT_DIR/database - PROJECT_WP_CONTENT_DIR=$PROJECT_ROOT_DIR/app/web/app - DOCKER_CONTAINER_APP="$DOMAIN_NAME-bedrock" - HOST_EXTRA="$DOMAIN_DB $DOMAIN_MAIL" -} - -set_php_vars() { - #php + DB_TYPE="0" + DB_NAME="db" + DOMAIN_FRONT="" DOMAIN_ADMIN="" - DB_NAME="0" DOMAIN_MAIL="" - PROJECT_DOCKER_DIR=$PROJECT_ROOT_DIR/docker - PROJECT_DATABASE_DIR=$PROJECT_ROOT_DIR/database - PROJECT_WP_CONTENT_DIR=$PROJECT_ROOT_DIR/app - DOCKER_CONTAINER_APP="$DOMAIN_NAME-php" - HOST_EXTRA="" -} -set_wpnextjs_vars() { - #WP-Next - DB_NAME="db" - PROJECT_DOCKER_DIR=$PROJECT_ROOT_DIR/docker PROJECT_BACKEND_DIR=$PROJECT_ROOT_DIR/backend PROJECT_FRONTEND_DIR=$PROJECT_ROOT_DIR/frontend - PROJECT_DATABASE_DIR=$PROJECT_BACKEND_DIR/wp-database - PROJECT_WP_CONTENT_DIR=$PROJECT_BACKEND_DIR/wp-content - DOMAIN_ADMIN="$DOMAIN_FULL/wp-admin" - DOCKER_CONTAINER_APP="$DOMAIN_NAME-wpnextjs" - HOST_EXTRA="$DOMAIN_DB $DOMAIN_MAIL" -} -set_nodejs_vars() { - #nodejs - DB_TYPE="MONGO" - DB_NAME="db" - DOMAIN_MAIL="" - PROJECT_DIR="nodejs" - PROJECT_DOCKER_DIR=$PROJECT_ROOT_DIR/docker - PROJECT_BACKEND_DIR=$PROJECT_ROOT_DIR/backend - PROJECT_FRONTEND_DIR=$PROJECT_ROOT_DIR/frontend - DOCKER_CONTAINER_APP="$DOMAIN_NAME-nodejs" - DOCKER_CONTAINER_DB="$DOMAIN_NAME-mongo" - HOST_EXTRA="" -} + if [[ -z "$PORT_FRONT" ]]; then + PORT_FRONT=0 + fi -set_nextjs_vars() { - #Next.js - DB_TYPE="0" - DB_NAME="0" - PROJECT_DOCKER_DIR=$PROJECT_ROOT_DIR/docker - DOCKER_CONTAINER_APP="$DOMAIN_NAME-nextjs" - DOMAIN_ADMIN="" - DOMAIN_MAIL="" - HOST_EXTRA="" - DOMAIN_DB="" -} + get_compose_project_name -set_directus_vars() { - #Directus - DOMAIN_ADMIN="" - DB_NAME="directus" - DOMAIN_FRONT="" - DOMAIN_DB="$DOMAIN_FULL.pgadmin" - DOCKER_CONTAINER_DB="$DOMAIN_NAME-postgres" - DB_TYPE="POSTGRES" - PROJECT_DOCKER_DIR=$PROJECT_ROOT_DIR/docker - PROJECT_BACKEND_DIR=$PROJECT_ROOT_DIR/backend - PROJECT_DATABASE_DIR=$PROJECT_ROOT_DIR/database - DOCKER_CONTAINER_APP="$DOMAIN_NAME-directus" - DOMAIN_MAIL="" - HOST_EXTRA="$DOMAIN_DB" -} + case $PROJECT_TYPE in + "wordpress" | "projects") + DB_TYPE="MYSQL" + DOMAIN_ADMIN="$DOMAIN_FULL/wp-admin" + PROJECT_DOCKER_DIR=$PROJECT_ROOT_DIR/wp-docker + PROJECT_DATABASE_DIR=$PROJECT_ROOT_DIR/wp-database + PROJECT_WP_CONTENT_DIR=$PROJECT_ROOT_DIR/wp-content + DOCKER_CONTAINER_APP="$DOMAIN_NAME-wordpress" + DOMAIN_DB="$DOMAIN_FULL.phpmyadmin" + DOMAIN_MAIL="$DOMAIN_FULL.mail" + HOST_EXTRA="$DOMAIN_DB $DOMAIN_MAIL" + ;; + "bedrock") + DB_TYPE="MYSQL" + DOMAIN_ADMIN="$DOMAIN_FULL/wp/wp-admin" + PROJECT_WP_CONTENT_DIR=$PROJECT_ROOT_DIR/app/web/app + DOCKER_CONTAINER_APP="$DOMAIN_NAME-bedrock" + DOMAIN_DB="$DOMAIN_FULL.phpmyadmin" + DOMAIN_MAIL="$DOMAIN_FULL.mail" + HOST_EXTRA="$DOMAIN_DB $DOMAIN_MAIL" + ;; + "php") + PROJECT_WP_CONTENT_DIR=$PROJECT_ROOT_DIR/app + DOCKER_CONTAINER_APP="$DOMAIN_NAME-php" + ;; + "wpnextjs") + DB_TYPE="MYSQL" + PROJECT_DATABASE_DIR=$PROJECT_BACKEND_DIR/wp-database + PROJECT_WP_CONTENT_DIR=$PROJECT_BACKEND_DIR/wp-content + DOMAIN_ADMIN="$DOMAIN_FULL/wp-admin" + DOCKER_CONTAINER_APP="$DOMAIN_NAME-wpnextjs" + ;; + "nodejs") + DB_TYPE="MONGO" + PROJECT_DIR="nodejs" + DOCKER_CONTAINER_APP="$DOMAIN_NAME-nodejs" + DOCKER_CONTAINER_DB="$DOMAIN_NAME-mongo" + ;; + "nextjs") + DOCKER_CONTAINER_APP="$DOMAIN_NAME-nextjs" + ;; + "directus") + DB_TYPE="POSTGRES" + DB_NAME="directus" + DOMAIN_DB="$DOMAIN_FULL.pgadmin" + DOCKER_CONTAINER_DB="$DOMAIN_NAME-postgres" + DOCKER_CONTAINER_APP="$DOMAIN_NAME-directus" + HOST_EXTRA="$DOMAIN_DB" + ;; + "directus_nextjs") + DB_TYPE="POSTGRES" + ;; + "elasticsearch") + DOMAIN_LOGSTASH="$DOMAIN_FULL.logstash" + DOMAIN_KIBANA="$DOMAIN_FULL.kibana" + DOCKER_CONTAINER_APP="$DOMAIN_NAME-elastic" + HOST_EXTRA="$DOMAIN_LOGSTASH $DOMAIN_KIBANA" + ;; + *) + echo "Unknown PROJECT_TYPE: $PROJECT_TYPE" + return 1 + ;; + esac -set_directus_nextjs_vars() { - #Directus - DOMAIN_ADMIN="" - DOMAIN_FRONTEND=$DOMAIN_FULL.frontend - DB_NAME="directus" - DOMAIN_FRONT="" - PROJECT_DOCKER_DIR=$PROJECT_ROOT_DIR/docker - PROJECT_BACKEND_DIR=$PROJECT_ROOT_DIR/backend - PROJECT_FRONTEND_DIR=$PROJECT_ROOT_DIR/frontend - PROJECT_DATABASE_DIR=$PROJECT_ROOT_DIR/database - DOCKER_CONTAINER_APP="$DOMAIN_NAME-directus" - HOST_EXTRA="$DOMAIN_DB $DOMAIN_FRONTEND" + if [ "$HOST_EXTRA" ]; then + HOST_EXTRA="$DOMAIN_DB $DOMAIN_MAIL" + fi } diff --git a/.env-core/sh/projects/setup/setup_helpers.sh b/.env-core/sh/projects/setup/setup_helpers.sh index d092a05..d93953a 100644 --- a/.env-core/sh/projects/setup/setup_helpers.sh +++ b/.env-core/sh/projects/setup/setup_helpers.sh @@ -23,6 +23,17 @@ get_domain_name() { fi } +get_domain_default_name() { + case $PROJECT_TYPE in + "elasticsearch") + DOMAIN_NAME_DEFAULT="dev.$DOMAIN_NAME.elastic" + ;; + *) + DOMAIN_NAME_DEFAULT="dev.$DOMAIN_NAME.local" + ;; + esac +} + check_domain_exists() { DOMAIN_CHECK=$(awk '/'" $DOMAIN_NAME "'/{print $5}' "$FILE_INSTANCES" | head -n 1) @@ -33,44 +44,15 @@ check_domain_exists() { fi } -get_unique_port() { - # GET PORT [ count port from 3309 ] - PORT=3309 - while true; do - port_exist=$(awk '/'"$PORT"'/{print $1}' "$FILE_INSTANCES" | head -n 2 | tail -n 1) - - if [[ ! "$port_exist" ]]; then - break - fi - ((PORT++)) - done -} - -set_unique_frontport() { - # SET PORT_FRONT [ count port from 5510 ] - - if [[ $PORT ]]; then - PORT_FRONT=$(($PORT + 1700)) - else - get_unique_frontport - fi -} - -get_unique_frontport() { - if [ -z "$DOMAIN_NAME" ]; then - PORT_FRONT=$(awk '/'" $DOMAIN_NAME "'/{print $15}' "$FILE_INSTANCES" | head -n 1) - fi -} - unset_variables() { if [[ $TEST_RUNNING -ne 1 ]]; then - unset DOMAIN_NAME DB_NAME TABLE_PREFIX PHP_VERSION MULTISITE EMPTY_CONTENT NODE_VERSIONS SETUP_ACTION $1 + unset DOMAIN_NAME DB_NAME TABLE_PREFIX PHP_VERSION MULTISITE EMPTY_CONTENT NODE_VERSIONS SETUP_ACTION DOMAIN_MAIL $1 fi } get_project_type() { - if [[ "$PROJECT_TYPE" == '' ]]; then - PROJECT_TYPE=$(awk '/'"$DOMAIN_NAME"'/{print $13}' "$FILE_INSTANCES" | head -n 1) + if [[ -z "$PROJECT_TYPE" ]]; then + PROJECT_TYPE=$(awk '/'" $DOMAIN_NAME "'/{print $13}' "$FILE_INSTANCES" | head -n 1) fi } @@ -99,3 +81,18 @@ delete_site_data() { randpassword() { WP_PASSWORD=$(LC_CTYPE=C tr -dc A-Za-z0-9_\!\@\#\$\%\^\&\*\(\)-+=