fix: retain security headers on frontend assets
This commit is contained in:
+7
-4
@@ -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
|
||||||
|
|||||||
@@ -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";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user