diff --git a/packages/twenty-postgres/linux/provision-postgres-linux.sh b/packages/twenty-postgres/linux/provision-postgres-linux.sh index 0652e3bda34e..73522b9ffeb3 100755 --- a/packages/twenty-postgres/linux/provision-postgres-linux.sh +++ b/packages/twenty-postgres/linux/provision-postgres-linux.sh @@ -20,7 +20,7 @@ handle_error () { exit 1 } -read -p "This script uses sudo to install postgresql, curl and change different settings, do you want to run this script? [y/N]" AGREEMENT +read -p "This script uses sudo to install PostgreSQL, curl, and configure the system. Do you want to run this script? [y/N] " AGREEMENT if ! echo "$AGREEMENT" | grep -iq "^y"; then exit 1 @@ -55,28 +55,68 @@ echo_header $BLUE " DATABASE SETUP" PG_MAIN_VERSION=15 PG_GRAPHQL_VERSION=1.5.6 -TARGETARCH=$(dpkg --print-architecture) - -# Install PostgresSQL -echo_header $GREEN "Step [1/4]: Installing PostgreSQL..." -sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' -wget -qO- https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo tee /etc/apt/trusted.gpg.d/pgdg.asc &>/dev/null -sudo apt update -y || handle_error "Failed to update package list." -sudo apt install -y postgresql-$PG_MAIN_VERSION postgresql-contrib-$PG_MAIN_VERSION || handle_error "Failed to install PostgreSQL." -sudo apt install -y curl || handle_error "Failed to install curl." - -# Install pg_graphql extensions -echo_header $GREEN "Step [2/4]: Installing GraphQL for PostgreSQL..." -curl -L https://github.com/supabase/pg_graphql/releases/download/v$PG_GRAPHQL_VERSION/pg_graphql-v$PG_GRAPHQL_VERSION-pg$PG_MAIN_VERSION-$TARGETARCH-linux-gnu.deb -o pg_graphql.deb || handle_error "Failed to download pg_graphql package." -sudo dpkg --install pg_graphql.deb || handle_error "Failed to install pg_graphql package." -rm pg_graphql.deb - -# Start postgresql service -echo_header $GREEN "Step [3/4]: Starting PostgreSQL service..." -if sudo service postgresql start; then - echo "PostgreSQL service started successfully." + +if command -v dpkg &> /dev/null; then + TARGETARCH=$(dpkg --print-architecture) +else + TARGETARCH=$(uname -m) +fi + +# Detect package manager and set up PostgreSQL and curl +if command -v dpkg &> /dev/null; then + PACKAGE_MANAGER="dpkg" +elif command -v pacman &> /dev/null; then + PACKAGE_MANAGER="pacman" else - handle_error "Failed to start PostgreSQL service." + handle_error "Unsupported package manager. This script only supports dpkg and pacman." +fi + +# Installation for Debian/Ubuntu +if [ "$PACKAGE_MANAGER" = "dpkg" ]; then + echo_header $GREEN "Step [1/4]: Installing PostgreSQL on Debian/Ubuntu..." + sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' + wget -qO- https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo tee /etc/apt/trusted.gpg.d/pgdg.asc &>/dev/null + sudo apt update -y || handle_error "Failed to update package list." + sudo apt install -y postgresql-$PG_MAIN_VERSION postgresql-contrib-$PG_MAIN_VERSION curl || handle_error "Failed to install PostgreSQL or curl." + + echo_header $GREEN "Step [2/4]: Installing GraphQL for PostgreSQL on Debian/Ubuntu..." + curl -L https://github.com/supabase/pg_graphql/releases/download/v$PG_GRAPHQL_VERSION/pg_graphql-v$PG_GRAPHQL_VERSION-pg$PG_MAIN_VERSION-$TARGETARCH-linux-gnu.deb -o pg_graphql.deb || handle_error "Failed to download pg_graphql package." + sudo dpkg --install pg_graphql.deb || handle_error "Failed to install pg_graphql package." + rm pg_graphql.deb + + echo_header $GREEN "Step [3/4]: Starting PostgreSQL service..." + if sudo service postgresql start; then + echo "PostgreSQL service started successfully." + else + handle_error "Failed to start PostgreSQL service." + fi + +# Installation for Arch +elif [ "$PACKAGE_MANAGER" = "pacman" ]; then + echo_header $GREEN "Step [1/4]: Installing PostgreSQL on Arch..." + sudo pacman -Syu --noconfirm || handle_error "Failed to update package list." + sudo pacman -S postgresql postgresql-libs curl --noconfirm || handle_error "Failed to install PostgreSQL or curl." + + echo_header $GREEN "Step [2/4]: Installing GraphQL for PostgreSQL on Arch..." + if ! yay -S --noconfirm pg_graphql; then + handle_error "Failed to install pg_graphql package from AUR." + fi + + echo_header $GREEN "Step [3/4]: Initializing and starting PostgreSQL service..." + if sudo -u postgres sh -c 'test "$(ls -A /var/lib/postgres/data 2>/dev/null)"'; then + echo "PostgreSQL data directory already contains data. Skipping initdb." + else + sudo -iu postgres initdb --locale en_US.UTF-8 -D /var/lib/postgres/data || handle_error "Failed to initialize PostgreSQL database." + fi + + if [ "$(ps -p 1 -o comm=)" = "systemd" ]; then + sudo systemctl enable postgresql + sudo systemctl start postgresql || handle_error "Failed to start PostgreSQL service." + else + sudo mkdir -p /run/postgresql + sudo chown postgres:postgres /run/postgresql + sudo -iu postgres pg_ctl -D /var/lib/postgres/data -l /var/lib/postgres/logfile start || handle_error "Failed to start PostgreSQL service." + fi fi # Run the init.sql to setup database