#!/bin/bash set -e # Setup prerequisite dependencies sudo apt-get update sudo apt-get -y install --no-install-recommends wget gnupg ca-certificates apt-utils git curl postgresql-client curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" nvm install 22.15.1 sudo ln -s "$(which node)" /usr/bin/node sudo ln -s "$(which npm)" /usr/bin/npm sudo npm i -g npm@10.9.2 # Setup openresty wget -O - https://openresty.org/package/pubkey.gpg | sudo apt-key add - echo "deb http://openresty.org/package/ubuntu bionic main" > openresty.list sudo mv openresty.list /etc/apt/sources.list.d/ sudo apt-get update sudo apt-get -y install --no-install-recommends openresty sudo apt-get install -y curl g++ gcc autoconf automake bison libc6-dev \ libffi-dev libgdbm-dev libncurses5-dev libsqlite3-dev libtool \ libyaml-dev make pkg-config sqlite3 zlib1g-dev libgmp-dev \ libreadline-dev libssl-dev libmysqlclient-dev build-essential \ freetds-dev libpq-dev sudo apt-get install -y luarocks sudo luarocks install lua-resty-auto-ssl sudo mkdir /etc/resty-auto-ssl /var/log/openresty /etc/fallback-certs sudo chown -R www-data:www-data /etc/resty-auto-ssl # Oracle db client library setup sudo apt install -y libaio1 curl -o instantclient-basiclite.zip https://download.oracle.com/otn_software/linux/instantclient/instantclient-basiclite-linuxx64.zip -SL && \ curl -o instantclient-basiclite-11.zip https://tooljet-plugins-production.s3.us-east-2.amazonaws.com/marketplace-assets/oracledb/instantclients/instantclient-basiclite-linux.x64-11.2.0.4.0.zip -SL && \ unzip instantclient-basiclite.zip && \ unzip instantclient-basiclite-11.zip && \ sudo mkdir -p /usr/lib/instantclient && sudo mv instantclient*/ /usr/lib/instantclient && \ rm instantclient-basiclite.zip && \ rm instantclient-basiclite-11.zip && \ echo /usr/lib/instantclient/* | sudo tee /etc/ld.so.conf.d/oracle-instantclient.conf > /dev/null && sudo ldconfig # Set the Instant Client library paths export LD_LIBRARY_PATH="/usr/lib/instantclient/instantclient_11_2:/usr/lib/instantclient/instantclient_21_10${LD_LIBRARY_PATH}" # Gen fallback certs sudo openssl rand -out /home/ubuntu/.rnd -hex 256 sudo chown www-data:www-data /home/ubuntu/.rnd sudo openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 \ -subj '/CN=sni-support-required-for-valid-ssl' \ -keyout /etc/fallback-certs/resty-auto-ssl-fallback.key \ -out /etc/fallback-certs/resty-auto-ssl-fallback.crt # Setup nginx config export SERVER_HOST="${SERVER_HOST:=localhost}" export SERVER_USER="${SERVER_USER:=www-data}" VARS_TO_SUBSTITUTE='$SERVER_HOST:$SERVER_USER' envsubst "${VARS_TO_SUBSTITUTE}" < /tmp/nginx.conf > /tmp/nginx-substituted.conf sudo cp /tmp/nginx-substituted.conf /usr/local/openresty/nginx/conf/nginx.conf # Download and setup postgrest binary curl -OL https://github.com/PostgREST/postgrest/releases/download/v12.2.0/postgrest-v12.2.0-linux-static-x64.tar.xz tar xJf postgrest-v12.2.0-linux-static-x64.tar.xz sudo mv ./postgrest /bin/postgrest sudo rm postgrest-v12.2.0-linux-static-x64.tar.xz # Add the Redis APT repository sudo add-apt-repository ppa:redislabs/redis -y # Install redis sudo apt-get update sudo apt-get install redis-server -y # Setup app, postgrest and redis as systemd service sudo cp /tmp/nest.service /lib/systemd/system/nest.service sudo cp /tmp/postgrest.service /lib/systemd/system/postgrest.service sudo cp /tmp/redis-server.service /lib/systemd/system/redis-server.service # Start and enable Redis service sudo systemctl daemon-reload # Setup Neo4j with APOC plugin wget -O - https://debian.neo4j.com/neotechnology.gpg.key | sudo apt-key add - echo "deb https://debian.neo4j.com stable 5" | sudo tee /etc/apt/sources.list.d/neo4j.list sudo apt-get update sudo apt-get install -y neo4j=1:5.26.6 sudo apt-mark hold neo4j # Setup APOC plugin sudo mkdir -p /var/lib/neo4j/plugins sudo wget -P /var/lib/neo4j/plugins https://github.com/neo4j/apoc/releases/download/5.26.6/apoc-5.26.6-core.jar # Update Neo4j config echo "dbms.security.procedures.unrestricted=apoc.*" | sudo tee -a /etc/neo4j/neo4j.conf echo "dbms.security.procedures.allowlist=apoc.*,algo.*,gds.*" | sudo tee -a /etc/neo4j/neo4j.conf echo "dbms.directories.plugins=/var/lib/neo4j/plugins" | sudo tee -a /etc/neo4j/neo4j.conf echo "dbms.security.auth_enabled=true" | sudo tee -a /etc/neo4j/neo4j.conf # Clean up APT cache sudo apt-get clean sudo rm -rf /var/lib/apt/lists/* # Setup app directory mkdir -p ~/app git config --global url."https://x-access-token:CUSTOM_GITHUB_TOKEN@github.com/".insteadOf "https://github.com/" #The below url will be edited dynamically when actions is triggered git clone -b lts-3.16 https://github.com/ToolJet/ToolJet.git ~/app && cd ~/app git submodule update --init --recursive git submodule foreach 'git checkout main || true' mv /tmp/.env ~/app/.env mv /tmp/setup_app ~/app/setup_app sudo chmod +x ~/app/setup_app npm install -g npm@10.9.2 # Building ToolJet app npm install -g @nestjs/cli export NODE_OPTIONS='--max-old-space-size=8000' TOOLJET_EDTION=ee npm run build