fix: retain security headers on frontend assets

This commit is contained in:
2026-09-15 15:26:49 +03:00
parent 0bbfed321a
commit 242e7d8c2e
2 changed files with 15 additions and 4 deletions
+7 -4
View File
@@ -1,5 +1,3 @@
ARG SOURCE_COMMIT=unknown
# Stage 1: Vite SPA build # Stage 1: Vite SPA build
FROM node:22-slim AS build FROM node:22-slim AS build
WORKDIR /app WORKDIR /app
@@ -13,8 +11,6 @@ RUN npm run build
# indirme için gerekli. Sunucu darlığında DT_ENABLED=0 ile kapatılabilir; # indirme için gerekli. Sunucu darlığında DT_ENABLED=0 ile kapatılabilir;
# uygulama ve diğer tüm veri kaynakları Chromium olmadan da çalışır. # uygulama ve diğer tüm veri kaynakları Chromium olmadan da çalışır.
FROM node:22-slim FROM node:22-slim
ARG SOURCE_COMMIT
ENV APP_RELEASE=${SOURCE_COMMIT}
ENV DEBIAN_FRONTEND=noninteractive ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update \ RUN apt-get update \
&& apt-get install -y --no-install-recommends nginx ca-certificates curl \ && apt-get install -y --no-install-recommends nginx ca-certificates curl \
@@ -32,6 +28,11 @@ RUN npm init -y >/dev/null \
&& npx playwright install --with-deps chromium \ && npx playwright install --with-deps chromium \
&& npm cache clean --force && npm cache clean --force
# Commit değişince ağır Chromium katmanını yeniden kurmadan yalnız yayın
# katmanlarını yenile. Coolify bu argümanı build içine açıkça geçirir.
ARG SOURCE_COMMIT=unknown
ENV APP_RELEASE=${SOURCE_COMMIT}
# Frontend # Frontend
COPY --from=build /app/dist /usr/share/nginx/html COPY --from=build /app/dist /usr/share/nginx/html
COPY --from=build /app/nginx.conf /etc/nginx/sites-available/default COPY --from=build /app/nginx.conf /etc/nginx/sites-available/default
@@ -40,6 +41,8 @@ COPY --from=build /app/nginx.conf /etc/nginx/sites-available/default
COPY --from=build /app/server ./server COPY --from=build /app/server ./server
# Backend, ortak doğrulama ve iş kurallarını src/services altından import eder. # Backend, ortak doğrulama ve iş kurallarını src/services altından import eder.
COPY --from=build /app/src ./src COPY --from=build /app/src ./src
# .js importlarının ES module olarak doğrudan yüklenmesi için package type bilgisi.
COPY --from=build /app/package.json ./package.json
# Kalıcı veri (Coolify'da /app/server/data volume olarak bağlı) # Kalıcı veri (Coolify'da /app/server/data volume olarak bağlı)
RUN mkdir -p /app/server/data RUN mkdir -p /app/server/data
+8
View File
@@ -46,6 +46,14 @@ server {
root /usr/share/nginx/html; root /usr/share/nginx/html;
try_files $uri =404; try_files $uri =404;
expires 30d; expires 30d;
# Bu blok kendi add_header direktifini kullandığı için üst seviyedeki
# başlıkları nginx otomatik miras almaz; güvenlik başlıklarını tekrarla.
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
add_header X-Frame-Options "DENY" always;
add_header Content-Security-Policy "default-src 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'none'; script-src 'self' https://accounts.google.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com data:; img-src 'self' data: blob: https:; connect-src 'self' https:; worker-src 'self' blob:; frame-src 'self' https://accounts.google.com" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header Cache-Control "public, no-transform"; add_header Cache-Control "public, no-transform";
} }