Skip to content

Commit a5006c5

Browse files
authored
Migrate to postgres (#174)
* spin up postgres in docker container * get initial pol of postgres db working in docker image * spin up postgres server in dev case * updated syncedAt date after config sync: * remove unnecessary port expose in docker file
1 parent 8a3521b commit a5006c5

File tree

16 files changed

+189
-218
lines changed

16 files changed

+189
-218
lines changed

Dockerfile

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ ENV NEXT_PUBLIC_POSTHOG_PAPIK=BAKED_NEXT_PUBLIC_POSTHOG_PAPIK
4747

4848
RUN yarn workspace @sourcebot/web build
4949

50-
5150
# ------ Build Backend ------
5251
FROM node-alpine AS backend-builder
5352
WORKDIR /app
@@ -59,7 +58,8 @@ COPY --from=database-builder /app/node_modules ./node_modules
5958
COPY --from=database-builder /app/packages/db ./packages/db
6059
RUN yarn workspace @sourcebot/backend install --frozen-lockfile
6160
RUN yarn workspace @sourcebot/backend build
62-
61+
62+
6363
# ------ Runner ------
6464
FROM node-alpine AS runner
6565
WORKDIR /app
@@ -68,6 +68,8 @@ ENV NEXT_TELEMETRY_DISABLED=1
6868
ENV DATA_DIR=/data
6969
ENV CONFIG_PATH=$DATA_DIR/config.json
7070
ENV DATA_CACHE_DIR=$DATA_DIR/.sourcebot
71+
ENV DB_DATA_DIR=$DATA_CACHE_DIR/db
72+
ENV DB_NAME=sourcebot
7173

7274
ARG SOURCEBOT_VERSION=unknown
7375
ENV SOURCEBOT_VERSION=$SOURCEBOT_VERSION
@@ -94,23 +96,23 @@ ENV POSTHOG_PAPIK=$POSTHOG_PAPIK
9496
# ENV SOURCEBOT_TELEMETRY_DISABLED=1
9597

9698
# Configure dependencies
97-
RUN apk add --no-cache git ca-certificates bind-tools tini jansson wget supervisor uuidgen curl perl jq redis
99+
RUN apk add --no-cache git ca-certificates bind-tools tini jansson wget supervisor uuidgen curl perl jq redis postgresql postgresql-contrib
98100

99101
# Configure zoekt
100102
COPY vendor/zoekt/install-ctags-alpine.sh .
101103
RUN ./install-ctags-alpine.sh && rm install-ctags-alpine.sh
102104
RUN mkdir -p ${DATA_CACHE_DIR}
103105
COPY --from=zoekt-builder \
104-
/cmd/zoekt-git-index \
105-
/cmd/zoekt-indexserver \
106-
/cmd/zoekt-mirror-github \
107-
/cmd/zoekt-mirror-gitiles \
108-
/cmd/zoekt-mirror-bitbucket-server \
109-
/cmd/zoekt-mirror-gitlab \
110-
/cmd/zoekt-mirror-gerrit \
111-
/cmd/zoekt-webserver \
112-
/cmd/zoekt-index \
113-
/usr/local/bin/
106+
/cmd/zoekt-git-index \
107+
/cmd/zoekt-indexserver \
108+
/cmd/zoekt-mirror-github \
109+
/cmd/zoekt-mirror-gitiles \
110+
/cmd/zoekt-mirror-bitbucket-server \
111+
/cmd/zoekt-mirror-gitlab \
112+
/cmd/zoekt-mirror-gerrit \
113+
/cmd/zoekt-webserver \
114+
/cmd/zoekt-index \
115+
/usr/local/bin/
114116

115117
# Configure the webapp
116118
COPY --from=web-builder /app/packages/web/public ./packages/web/public
@@ -122,6 +124,9 @@ COPY --from=backend-builder /app/node_modules ./node_modules
122124
COPY --from=backend-builder /app/packages/backend ./packages/backend
123125

124126
# Configure the database
127+
RUN mkdir -p /run/postgresql && \
128+
chown -R postgres:postgres /run/postgresql && \
129+
chmod 775 /run/postgresql
125130
COPY --from=database-builder /app/node_modules ./node_modules
126131
COPY --from=database-builder /app/packages/db ./packages/db
127132

entrypoint.sh

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@ if [ ! -d "$DATA_CACHE_DIR" ]; then
1919
mkdir -p "$DATA_CACHE_DIR"
2020
fi
2121

22-
# Run a Database migration
23-
echo -e "\e[34m[Info] Running database migration...\e[0m"
24-
export DATABASE_URL="file:$DATA_CACHE_DIR/db.sqlite"
25-
yarn workspace @sourcebot/db prisma:migrate:prod
22+
# Check if DB_DATA_DIR exists, if not initialize it
23+
if [ ! -d "$DB_DATA_DIR" ]; then
24+
echo -e "\e[34m[Info] Initializing database at $DB_DATA_DIR...\e[0m"
25+
mkdir -p $DB_DATA_DIR && chown -R postgres:postgres "$DB_DATA_DIR"
26+
su postgres -c "initdb -D $DB_DATA_DIR"
27+
fi
2628

2729
# In order to detect if this is the first run, we create a `.installed` file in
2830
# the cache directory.
@@ -162,5 +164,27 @@ fi
162164
# }
163165

164166

167+
# Start the database and wait for it to be ready before starting any other service
168+
su postgres -c "postgres -D $DB_DATA_DIR" &
169+
until pg_isready -h localhost -p 5432 -U postgres; do
170+
echo -e "\e[34m[Info] Waiting for the database to be ready...\e[0m"
171+
sleep 1
172+
done
173+
174+
# Check if the database already exists, and create it if it dne
175+
EXISTING_DB=$(psql -U postgres -tAc "SELECT 1 FROM pg_database WHERE datname = '$DB_NAME'")
176+
177+
if [ "$EXISTING_DB" = "1" ]; then
178+
echo "Database '$DB_NAME' already exists; skipping creation."
179+
else
180+
echo "Creating database '$DB_NAME'..."
181+
psql -U postgres -c "CREATE DATABASE \"$DB_NAME\""
182+
fi
183+
184+
# Run a Database migration
185+
export DATABASE_URL="postgresql://postgres@localhost:5432/$DB_NAME"
186+
echo -e "\e[34m[Info] Running database migration...\e[0m"
187+
yarn workspace @sourcebot/db prisma:migrate:prod
188+
165189
# Run supervisord
166190
exec supervisord -c /etc/supervisor/conf.d/supervisord.conf

package.json

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,19 @@
66
"scripts": {
77
"build": "yarn workspaces run build",
88
"test": "yarn workspaces run test",
9-
"dev": "yarn workspace @sourcebot/db prisma:migrate:dev && cross-env SOURCEBOT_TENANT_MODE=single npm-run-all --print-label --parallel dev:zoekt dev:backend dev:web dev:redis",
10-
"dev:mt": "yarn workspace @sourcebot/db prisma:migrate:dev && cross-env SOURCEBOT_TENANT_MODE=multi npm-run-all --print-label --parallel dev:zoekt:mt dev:backend dev:web dev:redis",
9+
"dev": "cross-env SOURCEBOT_TENANT_MODE=single npm-run-all --print-label dev:deps:start dev:deps:wait dev:start",
10+
"dev:mt": "cross-env SOURCEBOT_TENANT_MODE=multi npm-run-all --print-label dev:deps:start dev:deps:wait dev:start",
11+
"dev:start": "yarn workspace @sourcebot/db prisma:migrate:dev && cross-env npm-run-all --print-label --parallel dev:zoekt dev:backend dev:web dev:redis",
1112
"dev:zoekt": "export PATH=\"$PWD/bin:$PATH\" && export SRC_TENANT_ENFORCEMENT_MODE=none && zoekt-webserver -index .sourcebot/index -rpc",
12-
"dev:zoekt:mt": "export PATH=\"$PWD/bin:$PATH\" && export SRC_TENANT_ENFORCEMENT_MODE=strict && zoekt-webserver -index .sourcebot/index -rpc",
1313
"dev:backend": "yarn workspace @sourcebot/backend dev:watch",
1414
"dev:web": "yarn workspace @sourcebot/web dev",
15-
"dev:redis": "docker ps --filter \"name=redis\" --format \"{{.Names}}\" | grep -q \"^redis$\" && docker rm -f redis; docker run -d --name redis -p 6379:6379 redis"
15+
"dev:deps:start": "npm-run-all --print-label --parallel dev:postgres dev:redis",
16+
"dev:deps:wait": "npm-run-all --print-label --parallel dev:postgres:wait dev:redis:wait",
17+
"dev:deps:stop": "docker stop redis postgres",
18+
"dev:redis": "docker ps --filter 'name=redis' --filter 'status=running' --quiet | grep -q . || docker run -d --rm --name redis -p 6379:6379 redis:7.4.2",
19+
"dev:redis:wait": "sh -c 'while ! nc -z localhost 6379; do echo \"Waiting for Redis...\"; sleep 1; done'",
20+
"dev:postgres": "docker ps --filter 'name=postgres' --filter 'status=running' --quiet | grep -q . || docker run -d --rm --name postgres -p 5432:5432 -v $(pwd)/.sourcebot/db:/var/lib/postgresql/data -e POSTGRES_USER=postgres -e POSTGRES_HOST_AUTH_METHOD=trust -e POSTGRES_DB=sourcebot postgres:17.2",
21+
"dev:postgres:wait": "sh -c 'while ! nc -z localhost 5432; do echo \"Waiting for PostgreSQL...\"; sleep 1; done'"
1622
},
1723
"devDependencies": {
1824
"cross-env": "^7.0.3",

packages/db/.env

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
DATABASE_URL=file:../../../.sourcebot/db.sqlite
1+
DATABASE_URL=postgresql://postgres@localhost:5432/sourcebot

packages/db/prisma/migrations/20250114182749_repo_init/migration.sql

Lines changed: 0 additions & 18 deletions
This file was deleted.

packages/db/prisma/migrations/20250114222109_add_tenant_id_to_repo/migration.sql

Lines changed: 0 additions & 30 deletions
This file was deleted.

packages/db/prisma/migrations/20250115193735_auth_js_models/migration.sql

Lines changed: 0 additions & 45 deletions
This file was deleted.

packages/db/prisma/migrations/20250115221611_add_indexing_status_to_repo/migration.sql

Lines changed: 0 additions & 25 deletions
This file was deleted.

packages/db/prisma/migrations/20250116233531_add_orgs_table/migration.sql

Lines changed: 0 additions & 18 deletions
This file was deleted.

packages/db/prisma/migrations/20250117183646_add_config_table/migration.sql

Lines changed: 0 additions & 11 deletions
This file was deleted.

0 commit comments

Comments
 (0)