PromucFlow_constructor/app/client/start-caddy.sh
Rishabh Rathod fb0bbdfa5c
chore: Remove deprecated start-https.sh message (#33856)
## Description

- Remove the deprecated message in `start-https.sh` script and
suggestion to use caddy as it is still work in progress.
2024-05-31 07:18:57 +05:30

175 lines
4.7 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o pipefail
if [[ -n ${TRACE-} ]]; then
set -o xtrace
fi
{
echo
echo "-----------------------------------"
echo " ⚠️ This script is WIP. Please use start-https.sh instead."
echo "-----------------------------------"
echo
} >&2
cd "$(dirname "$0")"
if [[ ${1-} =~ ^-*h(elp)?$ ]]; then
echo 'Run '"$0"' [option...]
--http: Require start with http, instead of the default HTTPS.
--https-port: Port to use for https. Default: 443.
--http-port: Port to use for http. Default: 80.
If neither of the above are set, then we use 443 for https, and 80 for http.
--env-file: Specify an alternate env file. Defaults to ".env" at the root of the project.
A single positional argument can be given to set the backend server proxy address. Example:
'"$0"' https://localhost:8080
'"$0"' https://host.docker.internal:8080
'"$0"' https://release.app.appsmith.com
'"$0"' release # This is identical to the one above
' >&2
exit
fi
use_https=1
run_as=caddy
while [[ $# -gt 0 ]]; do
case $1 in
--https)
shift
;;
--http)
use_https=0
shift
;;
--https-port)
https_listen_port=$2
shift 2
;;
--http-port)
http_listen_port=$2
shift 2
;;
--env-file)
env_file=$2
shift
shift
;;
-*|--*)
echo "Unknown option $1" >&2
exit 1
;;
*)
backend="$1"
shift
;;
esac
done
if [[ ${backend-} == release ]]; then
# Special shortcut for release environment.
backend=https://release.app.appsmith.com
fi
working_dir="$PWD/caddy"
mkdir -pv "$working_dir"
domain=dev.appsmith.com
upstream_host=localhost
frontend_host=${frontend_host-$upstream_host}
backend_host=${backend_host-$upstream_host}
rts_host=${rts_host-$upstream_host}
http_listen_port="${http_listen_port-80}"
https_listen_port="${https_listen_port-443}"
if [[ -n ${env_file-} && ! -f $env_file ]]; then
echo "I got --env-file as '$env_file', but I cannot access it." >&2
exit 1
elif [[ -n ${env_file-} || -f ../../.env ]]; then
set -o allexport
# shellcheck disable=SC1090
source "${env_file-../../.env}"
set +o allexport
else
echo "
Please populate the .env at the root of the project and run again
Or add the environment variables defined in .env.example to the environment
-- to enable features
" >&2
fi
caddy_dev_conf="$working_dir/Caddyfile"
APPSMITH_CUSTOM_DOMAIN="$domain" \
TMP="$working_dir" \
node \
"$(git rev-parse --show-toplevel)/deploy/docker/fs/opt/appsmith/caddy-reconfigure.mjs" \
--no-finalize-index-html
changed="$(awk '
/ root / || /import file_server/ { next }
/acme_ca_root/ { print "log {\n output file '"$working_dir/logs.txt"'\n}"; next }
/output stdout/ { print "output file '"$working_dir/logs.txt"'"; next }
/ handle {/ { skip = 1; print "handle {\n import reverse_proxy 3000\n templates {\n mime \"text/html; charset=utf-8\"\n }\n}\n" }
/ handle \/info {/ { skip = 0 }
!skip { print }
/https:\/\/'"$domain"' / { print "tls internal" }
' "$caddy_dev_conf")"
echo "$changed" | caddy fmt - > "$caddy_dev_conf"
# Have to stop and start, instead of reload, so that any new env variables are picked up for Caddy's templating.
caddy stop --config "$caddy_dev_conf" || true
remaining_listeners="$(
lsof -nP "-iTCP:$http_listen_port" -sTCP:LISTEN || true
lsof -nP "-iTCP:$https_listen_port" -sTCP:LISTEN || true
)"
if [[ -n $remaining_listeners ]]; then
echo $'\nThe following processes are listening on the ports we want to use:\n'"$remaining_listeners"$'\n' >&2
answer=
for attempt in 1 2 3; do
echo -n 'Kill and proceed? [y/n] ' >&2
read -rn1 answer
if [[ $answer == y ]]; then
(lsof -t "-iTCP:$http_listen_port" -sTCP:LISTEN | xargs kill) || true
(lsof -t "-iTCP:$https_listen_port" -sTCP:LISTEN | xargs kill) || true
break
elif [[ $answer == n || $attempt == 3 ]]; then
echo $'\nAborting.' >&2
exit 1
fi
done
fi
caddy start --config "$caddy_dev_conf"
stop_cmd="caddy --config \"$caddy_dev_conf\" stop"
url_to_open=""
if [[ $use_https == 1 ]]; then
url_to_open="https://$domain"
if [[ $https_listen_port != 443 ]]; then
url_to_open="$url_to_open:$https_listen_port"
fi
else
url_to_open="http://localhost"
if [[ $http_listen_port != 80 ]]; then
url_to_open="$url_to_open:$http_listen_port"
fi
fi
echo '✅ Started Caddy'
echo " Stop with: $stop_cmd"
echo "🎉 $url_to_open"