change folder name
@@ -1,55 +0,0 @@
|
|||||||
# syntax=docker/dockerfile:1
|
|
||||||
|
|
||||||
# --- Bun on Alpine for build ---
|
|
||||||
FROM oven/bun:alpine AS base
|
|
||||||
|
|
||||||
# --- deps: install node_modules with Bun ---
|
|
||||||
FROM base AS deps
|
|
||||||
RUN apk add --no-cache libc6-compat
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
# Copy package + whichever Bun lock file you have (optional)
|
|
||||||
COPY package.json bun.lockb* bun.lock* ./
|
|
||||||
COPY tsconfig.base.json ./
|
|
||||||
COPY apps/next/package.json ./apps/next/
|
|
||||||
|
|
||||||
# If bun.lockb exists, enforce frozen; otherwise install and generate it
|
|
||||||
RUN if [ -f bun.lockb ]; then \
|
|
||||||
bun install --frozen-lockfile; \
|
|
||||||
else \
|
|
||||||
bun install; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
# --- builder: build Next.js with Bun ---
|
|
||||||
FROM base AS builder
|
|
||||||
WORKDIR /app
|
|
||||||
COPY --from=deps /app/node_modules ./node_modules
|
|
||||||
COPY --from=deps /app/tsconfig.base.json ./tsconfig.base.json
|
|
||||||
COPY apps/next ./apps/next
|
|
||||||
COPY packages ./packages
|
|
||||||
WORKDIR /app/apps/next
|
|
||||||
ENV NEXT_TELEMETRY_DISABLED=1
|
|
||||||
RUN bun run build
|
|
||||||
|
|
||||||
# --- runner: Node on Alpine to run server.js ---
|
|
||||||
FROM node:20-alpine AS runner
|
|
||||||
WORKDIR /app
|
|
||||||
ENV NODE_ENV=production
|
|
||||||
ENV NEXT_TELEMETRY_DISABLED=1
|
|
||||||
|
|
||||||
# non-root user
|
|
||||||
RUN addgroup -S nodejs -g 1001 && adduser -S nextjs -u 1001
|
|
||||||
COPY --from=builder /app/apps/next/public ./public
|
|
||||||
RUN mkdir .next && chown -R nextjs:nodejs .next
|
|
||||||
RUN mkdir -p .next/cache && chown -R nextjs:nodejs .next
|
|
||||||
|
|
||||||
# Next standalone output
|
|
||||||
COPY --from=builder /app/apps/next/.next/standalone ./
|
|
||||||
COPY --from=builder /app/apps/next/.next/static ./.next/static
|
|
||||||
COPY --from=builder /app/node_modules ./node_modules
|
|
||||||
|
|
||||||
USER nextjs
|
|
||||||
EXPOSE 3000
|
|
||||||
ENV PORT=3000
|
|
||||||
ENV HOSTNAME=0.0.0.0
|
|
||||||
CMD ["node", "server.js"]
|
|
@@ -1,69 +0,0 @@
|
|||||||
networks:
|
|
||||||
nginx-bridge: # You need to change this line to your defined network is as well
|
|
||||||
external: true
|
|
||||||
|
|
||||||
services:
|
|
||||||
techtracker-next:
|
|
||||||
build:
|
|
||||||
context: ../
|
|
||||||
dockerfile: ./docker/Dockerfile
|
|
||||||
image: ${CONTAINER_NAME}:alpine
|
|
||||||
container_name: ${CONTAINER_NAME}
|
|
||||||
env_file: [.env]
|
|
||||||
hostname: ${CONTAINER_NAME}
|
|
||||||
domainname: ${DOMAIN_NAME}
|
|
||||||
networks: ['${NETWORK:-nginx-bridge}']
|
|
||||||
#ports: ['${PORT}:3000']
|
|
||||||
depends_on: ['convex-backend']
|
|
||||||
tty: true
|
|
||||||
stdin_open: true
|
|
||||||
restart: unless-stopped
|
|
||||||
convex-backend:
|
|
||||||
image: ghcr.io/get-convex/convex-backend:${BACKEND_TAG:-00bd92723422f3bff968230c94ccdeb8c1719832}
|
|
||||||
container_name: ${BACKEND_CONTAINER_NAME:-convex-backend}
|
|
||||||
hostname: ${BACKEND_CONTAINER_NAME:-convex-backend}
|
|
||||||
domainname: ${BACKEND_DOMAIN_NAME:-convex.gbrown.org}
|
|
||||||
networks: ['${NETWORK:-nginx-bridge}']
|
|
||||||
#user: '1000:1000'
|
|
||||||
#ports: ['${BACKEND_PORT:-3210}:3210','${SITE_PROXY_PORT:-3211}:3211']
|
|
||||||
volumes: [./data:/convex/data]
|
|
||||||
labels: ['com.centurylinklabs.watchtower.enable=true']
|
|
||||||
env_file: ['.env']
|
|
||||||
environment:
|
|
||||||
- INSTANCE_NAME
|
|
||||||
- INSTANCE_SECRET
|
|
||||||
- CONVEX_CLOUD_ORIGIN=${CONVEX_CLOUD_ORIGIN:-http://${BACKEND_CONTAINER_NAME:-convex-backend}:${BACKEND_PORT:-3210}}
|
|
||||||
- CONVEX_SITE_ORIGIN=${CONVEX_SITE_ORIGIN:-http://${BACKEND_CONTAINER_NAME:-convex-backend}:${SITE_PROXY_PORT:-3211}}
|
|
||||||
- DISABLE_BEACON=${DISABLE_BEACON:-}
|
|
||||||
- REDACT_LOGS_TO_CLIENT=${REDACT_LOGS_TO_CLIENT:-}
|
|
||||||
- DO_NOT_REQUIRE_SSL=${DO_NOT_REQUIRE_SSL:-}
|
|
||||||
#- DATABASE_URL=${DATABASE_URL:-}
|
|
||||||
stdin_open: true
|
|
||||||
tty: true
|
|
||||||
restart: unless-stopped
|
|
||||||
healthcheck:
|
|
||||||
test: curl -f http://localhost:3210/version
|
|
||||||
interval: 5s
|
|
||||||
start_period: 10s
|
|
||||||
stop_grace_period: 10s
|
|
||||||
stop_signal: SIGINT
|
|
||||||
convex-dashboard:
|
|
||||||
image: ghcr.io/get-convex/convex-dashboard:${DASHBOARD_TAG:-33cef775a8a6228cbacee4a09ac2c4073d62ed13}
|
|
||||||
container_name: ${DASHBOARD_CONTAINER_NAME:-convex-dashboard}
|
|
||||||
hostname: ${DASHBOARD_CONTAINER_NAME:-convex-dashboard}
|
|
||||||
domainname: ${DASHBOARD_DOMAIN_NAME:-dashboard.${BACKEND_DOMAIN_NAME:-convex.gbrown.org}}
|
|
||||||
networks: ['${NETWORK:-nginx-bridge}']
|
|
||||||
#user: 1000:1000
|
|
||||||
#ports: ['${DASHBOARD_PORT:-6791}:6791']
|
|
||||||
labels: ['com.centurylinklabs.watchtower.enable=true']
|
|
||||||
env_file: [.env]
|
|
||||||
environment:
|
|
||||||
- NEXT_PUBLIC_DEPLOYMENT_URL=${NEXT_PUBLIC_DEPLOYMENT_URL:-http://${BACKEND_CONTAINER_NAME:-convex-backend}:${PORT:-3210}}
|
|
||||||
depends_on:
|
|
||||||
convex-backend:
|
|
||||||
condition: service_healthy
|
|
||||||
stdin_open: true
|
|
||||||
tty: true
|
|
||||||
restart: unless-stopped
|
|
||||||
stop_grace_period: 10s
|
|
||||||
stop_signal: SIGINT
|
|
@@ -1 +0,0 @@
|
|||||||
Convex.gib
|
|
@@ -1 +0,0 @@
|
|||||||
d35a9c02aeef0070fac3069d51ac4926744b251d0e6d97dc239d78bce67959b6
|
|
Before Width: | Height: | Size: 1.1 MiB |
Before Width: | Height: | Size: 782 KiB |
Before Width: | Height: | Size: 1.1 MiB |
Before Width: | Height: | Size: 148 KiB |
Before Width: | Height: | Size: 782 KiB |
Before Width: | Height: | Size: 992 KiB |
Before Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 1.9 MiB |
Before Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 1.4 MiB |
Before Width: | Height: | Size: 3.6 MiB |
Before Width: | Height: | Size: 3.4 MiB |