Finally got this repo set up nice I think
This commit is contained in:
38
docker/.dockerignore
Normal file
38
docker/.dockerignore
Normal file
@@ -0,0 +1,38 @@
|
||||
# Dependencies
|
||||
node_modules
|
||||
bun.lockb
|
||||
*.lock
|
||||
|
||||
# Next.js
|
||||
apps/next/.next
|
||||
apps/next/out
|
||||
apps/next/.turbo
|
||||
|
||||
# Development
|
||||
.git
|
||||
.gitignore
|
||||
*.log
|
||||
*.md
|
||||
README.md
|
||||
.env*.local
|
||||
.vscode
|
||||
.idea
|
||||
|
||||
# Tests
|
||||
**/__tests__
|
||||
**/*.test.ts
|
||||
**/*.test.tsx
|
||||
**/*.spec.ts
|
||||
|
||||
# Build artifacts
|
||||
dist
|
||||
build
|
||||
.turbo
|
||||
|
||||
# Convex local
|
||||
packages/backend/.convex
|
||||
convex/_generated
|
||||
|
||||
# OS
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
35
docker/.env.example
Normal file
35
docker/.env.example
Normal file
@@ -0,0 +1,35 @@
|
||||
# Next Envrionment Variables
|
||||
NETWORK=nginx-bridge
|
||||
NEXT_CONTAINER_NAME=next-app
|
||||
NEXT_DOMAIN_NAME=gbrown.org
|
||||
# Port is disabled by default as suggested
|
||||
# config is to have reverse proxy on the same
|
||||
# network so you can just forward to the
|
||||
# port on the internal network.
|
||||
# NEXT_PORT=3000
|
||||
|
||||
# Convex Environment Variables
|
||||
BACKEND_TAG=latest
|
||||
BACKEND_CONTAINER_NAME=convex-backend
|
||||
BACKEND_DOMAIN_NAME=convex.gbrown.org
|
||||
#BACKEND_PORT=
|
||||
#SITE_PROXY_PORT=
|
||||
DASHBOARD_TAG=latest
|
||||
DASHBOARD_CONTAINER_NAME=convex-dashboard
|
||||
DASHBOARD_DOMAIN=dashboard.convex.gbrown.org
|
||||
#DASHBOARD_PORT
|
||||
INSTANCE_NAME=convex
|
||||
#INSTANCE_SECRET=
|
||||
CONVEX_CLOUD_ORIGIN=https://api.convex.gbrown.org
|
||||
CONVEX_SITE_ORIGIN=https://convex.gbrown.org
|
||||
DISABLE_BEACON=true
|
||||
REDACT_LOGS_TO_CLIENT=true
|
||||
DO_NOT_REQUIRE_SSL=true
|
||||
NEXT_PUBLIC_DEPLOYMENT_URL=https://api.convex.gbrown.org
|
||||
#POSTGRES_URL=
|
||||
#DATABASE_URL=
|
||||
#CONVEX_RELEASE_VERSION_DEV=
|
||||
#ACTIONS_USER_TIMEOUT_SECS=
|
||||
#MYSQL_URL=
|
||||
#RUST_LOG=
|
||||
#RUST_BACKTRACE=
|
||||
57
docker/Dockerfile
Normal file
57
docker/Dockerfile
Normal file
@@ -0,0 +1,57 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
FROM oven/bun:alpine AS base
|
||||
|
||||
# Install dependencies only when needed
|
||||
FROM base AS deps
|
||||
RUN apk add --no-cache libc6-compat
|
||||
WORKDIR /app
|
||||
|
||||
# Copy root package files
|
||||
COPY package.json bun.lockb turbo.json ./
|
||||
COPY apps/next/package.json ./apps/next/package.json
|
||||
COPY packages/backend/package.json ./packages/backend/package.json
|
||||
COPY tools/*/package.json ./tools/
|
||||
|
||||
# Install dependencies
|
||||
RUN bun install --frozen-lockfile
|
||||
|
||||
# Builder stage
|
||||
FROM base AS builder
|
||||
WORKDIR /app
|
||||
|
||||
# Copy dependencies
|
||||
COPY --from=deps /app/node_modules ./node_modules
|
||||
COPY --from=deps /app/apps/next/node_modules ./apps/next/node_modules
|
||||
COPY --from=deps /app/packages/backend/node_modules ./packages/backend/node_modules
|
||||
|
||||
# Copy source code
|
||||
COPY . .
|
||||
|
||||
# Build
|
||||
ENV NEXT_TELEMETRY_DISABLED=1
|
||||
ENV SKIP_ENV_VALIDATION=1
|
||||
RUN bun run build --filter=@gib/next
|
||||
|
||||
# Runner stage
|
||||
FROM node:20-alpine AS runner
|
||||
WORKDIR /app
|
||||
|
||||
ENV NODE_ENV=production
|
||||
ENV NEXT_TELEMETRY_DISABLED=1
|
||||
|
||||
RUN addgroup --system --gid 1001 nodejs && \
|
||||
adduser --system --uid 1001 nextjs
|
||||
|
||||
# Copy built application
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/apps/next/.next/standalone ./
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/apps/next/.next/static ./apps/next/.next/static
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/apps/next/public ./apps/next/public
|
||||
|
||||
USER nextjs
|
||||
|
||||
EXPOSE 3000
|
||||
|
||||
ENV PORT=3000
|
||||
ENV HOSTNAME="0.0.0.0"
|
||||
|
||||
CMD ["node", "apps/next/server.js"]
|
||||
71
docker/compose.yml
Normal file
71
docker/compose.yml
Normal file
@@ -0,0 +1,71 @@
|
||||
networks:
|
||||
nginx-bridge: # You need to change this line to your defined network is as well
|
||||
external: true
|
||||
|
||||
services:
|
||||
next-app:
|
||||
build:
|
||||
context: ../
|
||||
dockerfile: ./docker/Dockerfile
|
||||
image: ${NEXT_CONTAINER_NAME}:alpine
|
||||
container_name: ${NEXT_CONTAINER_NAME}
|
||||
env_file: [.env]
|
||||
hostname: ${NEXT_CONTAINER_NAME}
|
||||
domainname: ${NEXT_DOMAIN_NAME}
|
||||
networks: ['${NETWORK:-nginx-bridge}']
|
||||
#ports: ['${NEXT_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:-latest}
|
||||
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
|
||||
- REDACT_LOGS_TO_CLIENT
|
||||
- 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:-latest}
|
||||
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
|
||||
Reference in New Issue
Block a user