2024-11-18 19:48:20 +00:00
|
|
|
FROM node:20-alpine3.19 AS node-alpine
|
2025-01-09 23:49:53 +00:00
|
|
|
FROM golang:1.23.4-alpine3.19 AS go-alpine
|
2024-09-05 20:00:27 +00:00
|
|
|
|
|
|
|
|
# ------ Build Zoekt ------
|
|
|
|
|
FROM go-alpine AS zoekt-builder
|
|
|
|
|
RUN apk add --no-cache ca-certificates
|
|
|
|
|
WORKDIR /zoekt
|
|
|
|
|
COPY vendor/zoekt/go.mod vendor/zoekt/go.sum ./
|
|
|
|
|
RUN go mod download
|
|
|
|
|
COPY vendor/zoekt ./
|
|
|
|
|
RUN CGO_ENABLED=0 GOOS=linux go build -o /cmd/ ./cmd/...
|
|
|
|
|
|
|
|
|
|
# ------ Build Web ------
|
|
|
|
|
FROM node-alpine AS web-builder
|
|
|
|
|
RUN apk add --no-cache libc6-compat
|
|
|
|
|
WORKDIR /app
|
2024-10-17 20:31:18 +00:00
|
|
|
|
2024-09-05 20:00:27 +00:00
|
|
|
COPY package.json yarn.lock* ./
|
2024-10-17 20:31:18 +00:00
|
|
|
COPY ./packages/web ./packages/web
|
2024-09-06 18:27:20 +00:00
|
|
|
|
|
|
|
|
# Fixes arm64 timeouts
|
2024-09-06 02:23:06 +00:00
|
|
|
RUN yarn config set registry https://registry.npmjs.org/
|
|
|
|
|
RUN yarn config set network-timeout 1200000
|
2024-10-17 20:31:18 +00:00
|
|
|
RUN yarn workspace @sourcebot/web install --frozen-lockfile
|
2024-09-05 20:00:27 +00:00
|
|
|
ENV NEXT_TELEMETRY_DISABLED=1
|
2024-09-17 04:37:34 +00:00
|
|
|
# @see: https://phase.dev/blog/nextjs-public-runtime-variables/
|
|
|
|
|
ARG NEXT_PUBLIC_SOURCEBOT_TELEMETRY_DISABLED=BAKED_NEXT_PUBLIC_SOURCEBOT_TELEMETRY_DISABLED
|
2024-10-17 18:50:07 +00:00
|
|
|
ARG NEXT_PUBLIC_SOURCEBOT_VERSION=BAKED_NEXT_PUBLIC_SOURCEBOT_VERSION
|
2025-03-06 23:20:30 +00:00
|
|
|
ENV NEXT_PUBLIC_PUBLIC_SEARCH_DEMO=BAKED_NEXT_PUBLIC_PUBLIC_SEARCH_DEMO
|
2024-11-26 05:04:52 +00:00
|
|
|
ENV NEXT_PUBLIC_POSTHOG_PAPIK=BAKED_NEXT_PUBLIC_POSTHOG_PAPIK
|
2024-11-18 20:09:26 +00:00
|
|
|
# @note: leading "/" is required for the basePath property. @see: https://nextjs.org/docs/app/api-reference/next-config-js/basePath
|
|
|
|
|
ARG NEXT_PUBLIC_DOMAIN_SUB_PATH=/BAKED_NEXT_PUBLIC_DOMAIN_SUB_PATH
|
2024-10-17 20:31:18 +00:00
|
|
|
RUN yarn workspace @sourcebot/web build
|
|
|
|
|
|
|
|
|
|
# ------ Build Backend ------
|
|
|
|
|
FROM node-alpine AS backend-builder
|
|
|
|
|
WORKDIR /app
|
|
|
|
|
|
|
|
|
|
COPY package.json yarn.lock* ./
|
|
|
|
|
COPY ./schemas ./schemas
|
|
|
|
|
COPY ./packages/backend ./packages/backend
|
|
|
|
|
RUN yarn workspace @sourcebot/backend install --frozen-lockfile
|
|
|
|
|
RUN yarn workspace @sourcebot/backend build
|
2024-09-05 20:00:27 +00:00
|
|
|
|
|
|
|
|
# ------ Runner ------
|
|
|
|
|
FROM node-alpine AS runner
|
|
|
|
|
WORKDIR /app
|
|
|
|
|
ENV NODE_ENV=production
|
|
|
|
|
ENV NEXT_TELEMETRY_DISABLED=1
|
|
|
|
|
ENV DATA_DIR=/data
|
2024-09-28 06:38:32 +00:00
|
|
|
ENV CONFIG_PATH=$DATA_DIR/config.json
|
2024-09-05 20:00:27 +00:00
|
|
|
ENV DATA_CACHE_DIR=$DATA_DIR/.sourcebot
|
|
|
|
|
|
2024-10-17 18:50:07 +00:00
|
|
|
ARG SOURCEBOT_VERSION=unknown
|
|
|
|
|
ENV SOURCEBOT_VERSION=$SOURCEBOT_VERSION
|
|
|
|
|
RUN echo "Sourcebot Version: $SOURCEBOT_VERSION"
|
|
|
|
|
|
2025-03-06 01:27:23 +00:00
|
|
|
ARG PUBLIC_SEARCH_DEMO=false
|
|
|
|
|
ENV PUBLIC_SEARCH_DEMO=$PUBLIC_SEARCH_DEMO
|
|
|
|
|
RUN echo "Public Search Demo: $PUBLIC_SEARCH_DEMO"
|
|
|
|
|
|
2024-10-17 20:31:18 +00:00
|
|
|
# Valid values are: debug, info, warn, error
|
|
|
|
|
ENV SOURCEBOT_LOG_LEVEL=info
|
2024-10-03 21:06:24 +00:00
|
|
|
|
2024-11-18 20:09:26 +00:00
|
|
|
# Configures the sub-path of the domain to serve Sourcebot from.
|
|
|
|
|
# For example, if DOMAIN_SUB_PATH is set to "/sb", Sourcebot
|
|
|
|
|
# will serve from http(s)://example.com/sb
|
|
|
|
|
ENV DOMAIN_SUB_PATH=/
|
|
|
|
|
|
2024-11-26 05:04:52 +00:00
|
|
|
# PAPIK = Project API Key
|
|
|
|
|
# Note that this key does not need to be kept secret, so it's not
|
|
|
|
|
# necessary to use Docker build secrets here.
|
|
|
|
|
# @see: https://posthog.com/tutorials/api-capture-events#authenticating-with-the-project-api-key
|
|
|
|
|
ARG POSTHOG_PAPIK=
|
|
|
|
|
ENV POSTHOG_PAPIK=$POSTHOG_PAPIK
|
2024-09-28 23:47:07 +00:00
|
|
|
|
2024-09-17 04:37:34 +00:00
|
|
|
# Sourcebot collects anonymous usage data using [PostHog](https://posthog.com/). Uncomment this line to disable.
|
|
|
|
|
# ENV SOURCEBOT_TELEMETRY_DISABLED=1
|
|
|
|
|
|
2024-09-05 20:00:27 +00:00
|
|
|
# Configure dependencies
|
2024-11-10 00:40:07 +00:00
|
|
|
RUN apk add --no-cache git ca-certificates bind-tools tini jansson wget supervisor uuidgen curl perl jq
|
2024-09-05 20:00:27 +00:00
|
|
|
|
|
|
|
|
# Configure zoekt
|
|
|
|
|
COPY vendor/zoekt/install-ctags-alpine.sh .
|
|
|
|
|
RUN ./install-ctags-alpine.sh && rm install-ctags-alpine.sh
|
|
|
|
|
RUN mkdir -p ${DATA_CACHE_DIR}
|
|
|
|
|
COPY --from=zoekt-builder \
|
|
|
|
|
/cmd/zoekt-git-index \
|
|
|
|
|
/cmd/zoekt-indexserver \
|
|
|
|
|
/cmd/zoekt-mirror-github \
|
|
|
|
|
/cmd/zoekt-mirror-gitiles \
|
|
|
|
|
/cmd/zoekt-mirror-bitbucket-server \
|
|
|
|
|
/cmd/zoekt-mirror-gitlab \
|
|
|
|
|
/cmd/zoekt-mirror-gerrit \
|
|
|
|
|
/cmd/zoekt-webserver \
|
2024-11-01 17:51:14 +00:00
|
|
|
/cmd/zoekt-index \
|
2024-09-05 20:00:27 +00:00
|
|
|
/usr/local/bin/
|
|
|
|
|
|
|
|
|
|
# Configure the webapp
|
2024-10-17 20:31:18 +00:00
|
|
|
COPY --from=web-builder /app/packages/web/public ./packages/web/public
|
|
|
|
|
COPY --from=web-builder /app/packages/web/.next/standalone ./
|
|
|
|
|
COPY --from=web-builder /app/packages/web/.next/static ./packages/web/.next/static
|
|
|
|
|
|
|
|
|
|
# Configure the backend
|
|
|
|
|
COPY --from=backend-builder /app/node_modules ./node_modules
|
|
|
|
|
COPY --from=backend-builder /app/packages/backend ./packages/backend
|
2024-09-05 20:00:27 +00:00
|
|
|
|
|
|
|
|
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
|
2024-10-17 20:31:18 +00:00
|
|
|
COPY prefix-output.sh ./prefix-output.sh
|
|
|
|
|
RUN chmod +x ./prefix-output.sh
|
2024-09-05 20:00:27 +00:00
|
|
|
COPY entrypoint.sh ./entrypoint.sh
|
|
|
|
|
RUN chmod +x ./entrypoint.sh
|
|
|
|
|
|
2024-09-29 21:17:43 +00:00
|
|
|
COPY default-config.json .
|
2024-09-25 03:56:51 +00:00
|
|
|
|
2024-09-05 20:00:27 +00:00
|
|
|
EXPOSE 3000
|
|
|
|
|
ENV PORT=3000
|
|
|
|
|
ENV HOSTNAME="0.0.0.0"
|
|
|
|
|
ENTRYPOINT ["/sbin/tini", "--", "./entrypoint.sh"]
|