budibase/hosting/single/runner.sh

126 lines
4.6 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
2022-08-11 13:08:56 +02:00
declare -a ENV_VARS=("COUCHDB_USER" "COUCHDB_PASSWORD" "DATA_DIR" "MINIO_ACCESS_KEY" "MINIO_SECRET_KEY" "INTERNAL_API_KEY" "JWT_SECRET" "REDIS_PASSWORD")
declare -a DOCKER_VARS=("APP_PORT" "APPS_URL" "ARCHITECTURE" "BUDIBASE_ENVIRONMENT" "CLUSTER_PORT" "DEPLOYMENT_ENVIRONMENT" "MINIO_URL" "NODE_ENV" "POSTHOG_TOKEN" "REDIS_URL" "SELF_HOSTED" "WORKER_PORT" "WORKER_URL" "TENANT_FEATURE_FLAGS" "ACCOUNT_PORTAL_URL")
2022-09-13 17:08:54 +02:00
# Check the env vars set in Dockerfile have come through, AAS seems to drop them
[[ -z "${APP_PORT}" ]] && export APP_PORT=4001
[[ -z "${ARCHITECTURE}" ]] && export ARCHITECTURE=amd
[[ -z "${BUDIBASE_ENVIRONMENT}" ]] && export BUDIBASE_ENVIRONMENT=PRODUCTION
[[ -z "${CLUSTER_PORT}" ]] && export CLUSTER_PORT=80
[[ -z "${DEPLOYMENT_ENVIRONMENT}" ]] && export DEPLOYMENT_ENVIRONMENT=docker
[[ -z "${MINIO_URL}" ]] && [[ -z "${USE_S3}" ]] && export MINIO_URL=http://127.0.0.1:9000
2022-09-13 17:08:54 +02:00
[[ -z "${NODE_ENV}" ]] && export NODE_ENV=production
[[ -z "${POSTHOG_TOKEN}" ]] && export POSTHOG_TOKEN=phc_bIjZL7oh2GEUd2vqvTBH8WvrX0fWTFQMs6H5KQxiUxU
[[ -z "${ACCOUNT_PORTAL_URL}" ]] && export ACCOUNT_PORTAL_URL=https://account.budibase.app
2023-10-16 15:51:37 +02:00
[[ -z "${REDIS_URL}" ]] && export REDIS_URL=127.0.0.1:6379
2022-09-13 17:08:54 +02:00
[[ -z "${SELF_HOSTED}" ]] && export SELF_HOSTED=1
[[ -z "${WORKER_PORT}" ]] && export WORKER_PORT=4002
2023-10-16 15:51:37 +02:00
[[ -z "${WORKER_URL}" ]] && export WORKER_URL=http://127.0.0.1:4002
[[ -z "${APPS_URL}" ]] && export APPS_URL=http://127.0.0.1:4001
[[ -z "${SERVER_TOP_LEVEL_PATH}" ]] && export SERVER_TOP_LEVEL_PATH=/app
2022-09-14 14:24:11 +02:00
# export CUSTOM_DOMAIN=budi001.custom.com
2022-08-11 13:08:56 +02:00
# Azure App Service customisations
if [[ "${TARGETBUILD}" = "aas" ]]; then
export DATA_DIR="${DATA_DIR:-/home}"
2022-09-30 12:43:42 +02:00
WEBSITES_ENABLE_APP_SERVICE_STORAGE=true
2022-08-11 13:08:56 +02:00
/etc/init.d/ssh start
else
export DATA_DIR=${DATA_DIR:-/data}
2022-08-11 13:08:56 +02:00
fi
2022-11-13 18:53:32 +01:00
mkdir -p ${DATA_DIR}
# Mount NFS or GCP Filestore if env vars exist for it
2022-11-13 18:53:32 +01:00
if [[ ! -z ${FILESHARE_IP} && ! -z ${FILESHARE_NAME} ]]; then
echo "Mounting NFS share"
apt update && apt install -y nfs-common nfs-kernel-server
echo "Mount file share ${FILESHARE_IP}:/${FILESHARE_NAME} to ${DATA_DIR}"
mount -o nolock ${FILESHARE_IP}:/${FILESHARE_NAME} ${DATA_DIR}
2022-11-13 18:53:32 +01:00
echo "Mounting result: $?"
fi
2022-08-11 13:08:56 +02:00
if [ -f "${DATA_DIR}/.env" ]; then
2022-09-13 17:08:54 +02:00
# Read in the .env file and export the variables
for LINE in $(cat ${DATA_DIR}/.env); do export $LINE; done
fi
2022-09-13 17:08:54 +02:00
# randomise any unset environment variables
for ENV_VAR in "${ENV_VARS[@]}"
do
2024-08-08 18:16:48 +02:00
if [[ -z "${!ENV_VAR}" ]]; then
eval "export $ENV_VAR=$(uuidgen | sed -e 's/-//g')"
fi
done
if [[ -z "${COUCH_DB_URL}" ]]; then
2023-10-16 15:51:37 +02:00
export COUCH_DB_URL=http://$COUCHDB_USER:$COUCHDB_PASSWORD@127.0.0.1:5984
fi
if [[ -z "${COUCH_DB_SQL_URL}" ]]; then
export COUCH_DB_SQL_URL=http://127.0.0.1:4984
fi
2022-08-11 13:08:56 +02:00
if [ ! -f "${DATA_DIR}/.env" ]; then
touch ${DATA_DIR}/.env
for ENV_VAR in "${ENV_VARS[@]}"
do
temp=$(eval "echo \$$ENV_VAR")
2022-08-11 13:08:56 +02:00
echo "$ENV_VAR=$temp" >> ${DATA_DIR}/.env
done
2022-09-13 17:08:54 +02:00
for ENV_VAR in "${DOCKER_VARS[@]}"
do
temp=$(eval "echo \$$ENV_VAR")
echo "$ENV_VAR=$temp" >> ${DATA_DIR}/.env
done
2022-08-11 13:08:56 +02:00
echo "COUCH_DB_URL=${COUCH_DB_URL}" >> ${DATA_DIR}/.env
fi
2022-09-13 17:08:54 +02:00
# Read in the .env file and export the variables
for LINE in $(cat ${DATA_DIR}/.env); do export $LINE; done
2023-10-03 09:34:35 +02:00
ln -s ${DATA_DIR}/.env /app/.env
ln -s ${DATA_DIR}/.env /worker/.env
# make these directories in runner, incase of mount
2022-08-11 13:08:56 +02:00
mkdir -p ${DATA_DIR}/minio
mkdir -p ${DATA_DIR}/redis
2022-09-07 11:51:53 +02:00
chown -R couchdb:couchdb ${DATA_DIR}/couch
REDIS_CONFIG="/etc/redis/redis.conf"
sed -i "s#DATA_DIR#${DATA_DIR}#g" "${REDIS_CONFIG}"
if [[ -n "${USE_DEFAULT_REDIS_CONFIG}" ]]; then
REDIS_CONFIG=""
fi
2024-08-08 15:10:55 +02:00
if [[ -n "${REDIS_PASSWORD}" ]]; then
redis-server "${REDIS_CONFIG}" --requirepass $REDIS_PASSWORD > /dev/stdout 2>&1 &
else
redis-server "${REDIS_CONFIG}" > /dev/stdout 2>&1 &
fi
/bbcouch-runner.sh &
2023-12-19 17:17:55 +01:00
# only start minio if use s3 isn't passed
2023-12-20 13:03:38 +01:00
if [[ -z "${USE_S3}" ]]; then
2023-12-19 17:17:55 +01:00
/minio/minio server --console-address ":9001" ${DATA_DIR}/minio > /dev/stdout 2>&1 &
fi
2022-06-22 14:38:33 +02:00
/etc/init.d/nginx restart
if [[ ! -z "${CUSTOM_DOMAIN}" ]]; then
2022-06-22 14:57:46 +02:00
# Add monthly cron job to renew certbot certificate
echo -n "* * 2 * * root exec /app/letsencrypt/certificate-renew.sh ${CUSTOM_DOMAIN}" >> /etc/cron.d/certificate-renew
chmod +x /etc/cron.d/certificate-renew
# Request the certbot certificate
2022-06-22 14:38:33 +02:00
/app/letsencrypt/certificate-request.sh ${CUSTOM_DOMAIN}
2022-11-13 18:53:32 +01:00
/etc/init.d/nginx restart
2022-06-22 14:38:33 +02:00
fi
# wait for backend services to start
sleep 10
2022-04-01 02:00:52 +02:00
pushd app
pm2 start --name app "yarn run:docker"
2022-04-01 02:00:52 +02:00
popd
pushd worker
pm2 start --name worker "yarn run:docker"
2022-04-01 02:00:52 +02:00
popd
2022-11-13 18:53:32 +01:00
echo "end of runner.sh, sleeping ..."
tail -f $HOME/.pm2/logs/*.log
2022-06-22 15:38:45 +02:00
sleep infinity