2022-07-08 19:33:07 +02:00
|
|
|
#!/bin/bash
|
2025-02-20 20:04:44 +01:00
|
|
|
|
2025-02-20 20:29:55 +01:00
|
|
|
echo "Starting runner.sh..."
|
2025-02-20 20:04:44 +01:00
|
|
|
|
|
|
|
# set defaults for Docker-related variables
|
|
|
|
export APP_PORT="${APP_PORT:-4001}"
|
|
|
|
export ARCHITECTURE="${ARCHITECTURE:-amd}"
|
|
|
|
export BUDIBASE_ENVIRONMENT="${BUDIBASE_ENVIRONMENT:-PRODUCTION}"
|
|
|
|
export CLUSTER_PORT="${CLUSTER_PORT:-80}"
|
|
|
|
export DEPLOYMENT_ENVIRONMENT="${DEPLOYMENT_ENVIRONMENT:-docker}"
|
|
|
|
|
|
|
|
# only set MINIO_URL if neither MINIO_URL nor USE_S3 is set
|
|
|
|
if [[ -z "${MINIO_URL}" && -z "${USE_S3}" ]]; then
|
|
|
|
export MINIO_URL="http://127.0.0.1:9000"
|
|
|
|
fi
|
|
|
|
|
|
|
|
export NODE_ENV="${NODE_ENV:-production}"
|
|
|
|
export POSTHOG_TOKEN="${POSTHOG_TOKEN:-phc_bIjZL7oh2GEUd2vqvTBH8WvrX0fWTFQMs6H5KQxiUxU}"
|
|
|
|
export ACCOUNT_PORTAL_URL="${ACCOUNT_PORTAL_URL:-https://account.budibase.app}"
|
|
|
|
export REDIS_URL="${REDIS_URL:-127.0.0.1:6379}"
|
|
|
|
export SELF_HOSTED="${SELF_HOSTED:-1}"
|
|
|
|
export WORKER_PORT="${WORKER_PORT:-4002}"
|
|
|
|
export WORKER_URL="${WORKER_URL:-http://127.0.0.1:4002}"
|
|
|
|
export APPS_URL="${APPS_URL:-http://127.0.0.1:4001}"
|
|
|
|
export SERVER_TOP_LEVEL_PATH="${SERVER_TOP_LEVEL_PATH:-/app}"
|
|
|
|
|
|
|
|
# set DATA_DIR and ensure the directory exists
|
|
|
|
export DATA_DIR="${DATA_DIR:-/data}"
|
|
|
|
mkdir -p "${DATA_DIR}"
|
|
|
|
|
|
|
|
# mount NFS or GCP Filestore if FILESHARE_IP and FILESHARE_NAME are set
|
|
|
|
if [[ -n "${FILESHARE_IP}" && -n "${FILESHARE_NAME}" ]]; then
|
2022-11-13 18:53:32 +01:00
|
|
|
echo "Mounting NFS share"
|
|
|
|
apt update && apt install -y nfs-common nfs-kernel-server
|
2022-10-13 12:57:00 +02:00
|
|
|
echo "Mount file share ${FILESHARE_IP}:/${FILESHARE_NAME} to ${DATA_DIR}"
|
2025-02-20 20:04:44 +01:00
|
|
|
mount -o nolock "${FILESHARE_IP}:/${FILESHARE_NAME}" "${DATA_DIR}"
|
2022-11-13 18:53:32 +01:00
|
|
|
echo "Mounting result: $?"
|
2022-10-13 12:57:00 +02:00
|
|
|
fi
|
|
|
|
|
2025-02-20 20:04:44 +01:00
|
|
|
# source environment variables from a .env file if it exists in DATA_DIR
|
|
|
|
if [[ -f "${DATA_DIR}/.env" ]]; then
|
|
|
|
set -a # Automatically export all variables loaded from .env
|
|
|
|
source "${DATA_DIR}/.env"
|
|
|
|
set +a
|
2022-07-08 19:33:07 +02:00
|
|
|
fi
|
2025-02-20 20:04:44 +01:00
|
|
|
|
|
|
|
# randomize any unset sensitive environment variables using uuidgen
|
|
|
|
env_vars=(COUCHDB_USER COUCHDB_PASSWORD MINIO_ACCESS_KEY MINIO_SECRET_KEY INTERNAL_API_KEY JWT_SECRET REDIS_PASSWORD)
|
|
|
|
for var in "${env_vars[@]}"; do
|
|
|
|
if [[ -z "${!var}" ]]; then
|
|
|
|
export "$var"="$(uuidgen | tr -d '-')"
|
2022-07-08 19:33:07 +02:00
|
|
|
fi
|
|
|
|
done
|
2025-02-20 20:04:44 +01:00
|
|
|
|
2022-07-08 19:33:07 +02:00
|
|
|
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
|
2022-07-08 19:33:07 +02:00
|
|
|
fi
|
2024-05-29 16:29:40 +02:00
|
|
|
|
|
|
|
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
|
2025-02-20 02:02:42 +01:00
|
|
|
for ENV_VAR in "${ENV_VARS[@]}"; do
|
2022-07-08 19:33:07 +02:00
|
|
|
temp=$(eval "echo \$$ENV_VAR")
|
2025-02-20 02:02:42 +01:00
|
|
|
echo "$ENV_VAR=$temp" >>${DATA_DIR}/.env
|
2022-07-08 19:33:07 +02:00
|
|
|
done
|
2025-02-20 02:02:42 +01:00
|
|
|
for ENV_VAR in "${DOCKER_VARS[@]}"; do
|
2022-09-13 17:08:54 +02:00
|
|
|
temp=$(eval "echo \$$ENV_VAR")
|
2025-02-20 02:02:42 +01:00
|
|
|
echo "$ENV_VAR=$temp" >>${DATA_DIR}/.env
|
2022-09-13 17:08:54 +02:00
|
|
|
done
|
2025-02-20 02:02:42 +01:00
|
|
|
echo "COUCH_DB_URL=${COUCH_DB_URL}" >>${DATA_DIR}/.env
|
2022-07-08 19:33:07 +02:00
|
|
|
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
|
2024-10-15 13:46:27 +02:00
|
|
|
|
2022-07-08 19:33:07 +02:00
|
|
|
# make these directories in runner, incase of mount
|
2022-08-11 13:08:56 +02:00
|
|
|
mkdir -p ${DATA_DIR}/minio
|
2024-10-15 13:46:27 +02:00
|
|
|
mkdir -p ${DATA_DIR}/redis
|
2025-02-20 02:02:42 +01:00
|
|
|
#mkdir -p ${DATA_DIR}/couch
|
|
|
|
#chown -R couchdb:couchdb ${DATA_DIR}/couch
|
2024-10-15 13:46:27 +02:00
|
|
|
|
2024-11-04 17:05:51 +01:00
|
|
|
REDIS_CONFIG="/etc/redis/redis.conf"
|
|
|
|
sed -i "s#DATA_DIR#${DATA_DIR}#g" "${REDIS_CONFIG}"
|
|
|
|
|
|
|
|
if [[ -n "${USE_DEFAULT_REDIS_CONFIG}" ]]; then
|
2025-02-20 02:02:42 +01:00
|
|
|
REDIS_CONFIG=""
|
2024-11-04 17:05:51 +01:00
|
|
|
fi
|
|
|
|
|
2024-08-08 15:10:55 +02:00
|
|
|
if [[ -n "${REDIS_PASSWORD}" ]]; then
|
2025-02-20 02:02:42 +01:00
|
|
|
redis-server "${REDIS_CONFIG}" --requirepass $REDIS_PASSWORD >/dev/stdout 2>&1 &
|
2024-08-08 14:54:34 +02:00
|
|
|
else
|
2025-02-20 02:02:42 +01:00
|
|
|
redis-server "${REDIS_CONFIG}" >/dev/stdout 2>&1 &
|
2024-08-08 14:54:34 +02:00
|
|
|
fi
|
2025-02-20 20:29:55 +01:00
|
|
|
|
|
|
|
echo "Starting callback CouchDB runner..."
|
|
|
|
./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
|
2025-02-20 20:04:44 +01:00
|
|
|
if [[ ${TARGETBUILD} == aas ]]; then
|
2025-02-20 02:02:42 +01:00
|
|
|
echo "Starting MinIO in Azure Gateway mode"
|
2025-02-20 20:04:44 +01:00
|
|
|
if [[ -z "${AZURE_STORAGE_ACCOUNT}" || -z "${AZURE_STORAGE_KEY}" || -z "${MINIO_ACCESS_KEY}" || -z "${MINIO_SECRET_KEY}" ]]; then
|
|
|
|
echo "The following environment variables must be set: AZURE_STORAGE_ACCOUNT, AZURE_STORAGE_KEY, MINIO_ACCESS_KEY, MINIO_SECRET_KEY"
|
2025-02-20 02:02:42 +01:00
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
/minio/minio gateway azure --console-address ":9001" >/dev/stdout 2>&1 &
|
|
|
|
else
|
|
|
|
echo "Starting MinIO in standalone mode"
|
|
|
|
/minio/minio server --console-address ":9001" ${DATA_DIR}/minio >/dev/stdout 2>&1 &
|
|
|
|
fi
|
2023-12-19 17:17:55 +01:00
|
|
|
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
|
2025-02-20 02:02:42 +01:00
|
|
|
echo -n "* * 2 * * root exec /app/letsencrypt/certificate-renew.sh ${CUSTOM_DOMAIN}" >>/etc/cron.d/certificate-renew
|
2022-06-22 14:57:46 +02:00
|
|
|
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
|
|
|
|
|
2022-12-01 18:08:49 +01:00
|
|
|
# wait for backend services to start
|
|
|
|
sleep 10
|
|
|
|
|
2022-04-01 02:00:52 +02:00
|
|
|
pushd app
|
2024-02-13 12:51:45 +01:00
|
|
|
pm2 start --name app "yarn run:docker"
|
2022-04-01 02:00:52 +02:00
|
|
|
popd
|
|
|
|
pushd worker
|
2024-02-13 12:51:45 +01:00
|
|
|
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 ..."
|
2024-02-13 12:51:45 +01:00
|
|
|
|
|
|
|
tail -f $HOME/.pm2/logs/*.log
|
2022-06-22 15:38:45 +02:00
|
|
|
sleep infinity
|