update docker

This commit is contained in:
2026-04-14 11:00:06 +07:00
parent 01c5ccbd93
commit efd7fac42f
8 changed files with 35 additions and 21 deletions

View File

@@ -10,20 +10,10 @@ WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
# Copy source
# Copy source and build — no VITE_* args needed at build time.
# Supabase keys are injected at runtime via docker/entrypoint.sh → window.__ENV__
COPY . .
# VITE_* vars are Supabase public keys — safe for browser, baked into bundle at build time.
# Using ARG only (no ENV) so values don't persist as image-layer env vars.
ARG VITE_SUPABASE_URL
ARG VITE_SUPABASE_ANON_KEY
ARG VITE_SUPABASE_PUBLISHABLE_KEY
# Pass vars inline so they're scoped to this RUN layer only
RUN VITE_SUPABASE_URL="$VITE_SUPABASE_URL" \
VITE_SUPABASE_ANON_KEY="$VITE_SUPABASE_ANON_KEY" \
VITE_SUPABASE_PUBLISHABLE_KEY="$VITE_SUPABASE_PUBLISHABLE_KEY" \
npm run build
RUN npm run build
# ============================================================
# Stage 2 — Serve
@@ -37,6 +27,10 @@ COPY nginx.conf /etc/nginx/conf.d/default.conf
# Copy built static files from builder
COPY --from=builder /app/dist /usr/share/nginx/html
# Entrypoint generates env.js from runtime env vars before starting nginx
COPY docker/entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
CMD ["/entrypoint.sh"]

View File

@@ -3,11 +3,11 @@ services:
build:
context: .
dockerfile: Dockerfile
args:
VITE_SUPABASE_URL: ${VITE_SUPABASE_URL}
VITE_SUPABASE_ANON_KEY: ${VITE_SUPABASE_ANON_KEY}
VITE_SUPABASE_PUBLISHABLE_KEY: ${VITE_SUPABASE_PUBLISHABLE_KEY}
image: renolation/english-toeic:latest
environment:
- VITE_SUPABASE_URL=${VITE_SUPABASE_URL}
- VITE_SUPABASE_ANON_KEY=${VITE_SUPABASE_ANON_KEY}
- VITE_SUPABASE_PUBLISHABLE_KEY=${VITE_SUPABASE_PUBLISHABLE_KEY}
ports:
- "${APP_PORT:-3000}:80"
restart: unless-stopped

10
docker/entrypoint.sh Normal file
View File

@@ -0,0 +1,10 @@
#!/bin/sh
# Generate runtime env.js from container environment variables
cat > /usr/share/nginx/html/env.js <<EOF
window.__ENV__ = {
VITE_SUPABASE_URL: "${VITE_SUPABASE_URL}",
VITE_SUPABASE_ANON_KEY: "${VITE_SUPABASE_ANON_KEY}",
VITE_SUPABASE_PUBLISHABLE_KEY: "${VITE_SUPABASE_PUBLISHABLE_KEY}"
};
EOF
exec nginx -g 'daemon off;'

View File

@@ -2,6 +2,7 @@
<html lang="vi">
<head>
<meta charset="UTF-8" />
<script src="/env.js"></script>
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>EnglishAI — Luyện TOEIC thông minh</title>

View File

@@ -22,6 +22,7 @@ server {
# Health check endpoint
location /health {
access_log off;
return 200 "ok";
add_header Content-Type text/plain;
}

1
public/env.js Normal file
View File

@@ -0,0 +1 @@
window.__ENV__ = {};

View File

@@ -114,7 +114,7 @@ export function useWritingCheck() {
const feedback = await callEdgeFunction(content, onChunk)
if (user) {
saveWritingSubmission(user.id, content, feedback)
await saveWritingSubmission(user.id, content, feedback)
queryClient.invalidateQueries({ queryKey: ["writing-history"] })
} else {
recordWritingCheckUsage()

View File

@@ -1,8 +1,15 @@
import { createClient } from "@supabase/supabase-js"
const supabaseUrl = import.meta.env.VITE_SUPABASE_URL
// Supports both key name conventions
// Runtime env (injected by docker/entrypoint.sh) takes priority over build-time vars
const runtimeEnv = (window as unknown as { __ENV__?: Record<string, string> }).__ENV__ ?? {}
const supabaseUrl =
runtimeEnv.VITE_SUPABASE_URL ||
import.meta.env.VITE_SUPABASE_URL
const supabaseAnonKey =
runtimeEnv.VITE_SUPABASE_ANON_KEY ||
runtimeEnv.VITE_SUPABASE_PUBLISHABLE_KEY ||
import.meta.env.VITE_SUPABASE_ANON_KEY ||
import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY