Современный деплой статики: Полный гайд по связке Vite, Docker и Caddy
Страница 2 из 2
Настройки чтения
18px
1.8
1

Современный деплой статики: Полный гайд по связке Vite, Docker и Caddy

Страница 2

# Блок безопасности: добавляем HTTP-заголовки защиты

header {

# HSTS: заставляем браузер всегда использовать HTTPS (на 2 года)

Strict-Transport-Security "max-age=63072000"

# Запрет на "угадывание" MIME-типа (защита от XSS)

X-Content-Type-Options "nosniff"

# Защита от кликджекинга (запрет встраивания сайта во фреймы)

X-Frame-Options "DENY"

# Защита от старых типов XSS-атак

X-XSS-Protection "1; mode=block"

}

}

```

Шаг 2. Многоступенчатая сборка Docker

Главная цель Dockerfile в этом сценарии — создать минимальный по размеру образ. Мы разделим процесс на два этапа:Builder(где крутится Node.js и собирается сайт) иRuntime(где работает только легкий Alpine Linux и Caddy).

Создайте файл Dockerfile:

```

# ==========================================

# ЭТАП 1: Сборка (Builder)

# ==========================================

FROM node:24-slim AS builder

WORKDIR /app

# Копируем только манифесты зависимостей.

# Это позволяет кэшировать слой npm ci в Docker.

COPY package*.json ./

# Используем npm ci вместо install для строгого соответствия package-lock

RUN npm ci

# Копируем исходники (в примере VitePress, папка docs) и запускаем билд

COPY docs ./docs

RUN npm run docs:build

# Результат сборки появится в /app/docs/.vitepress/dist

# ==========================================

# ЭТАП 2: Продакшен (Runtime)

# ==========================================

FROM alpine:3.23.5

# Устанавливаем Caddy. Флаг --no-cache экономит место на диске.

RUN apk add --no-cache caddy

# Копируем ТОЛЬКО собранные статические файлы из этапа builder

# Исходники, node_modules и исходный код проекта остаются за бортом!

COPY --from=builder /app/docs/.vitepress/dist /usr/share/caddy

# Копируем конфигурационный файл сервера

COPY Caddyfile /etc/caddy/Caddyfile

# Открываем стандартные порты для веба

EXPOSE 80 443

# Запускаем Caddy с указанием конфига и адаптера

CMD ["caddy", "run", "--config", "/etc/caddy/Caddyfile", "--adapter", "caddyfile"]

```

Шаг 3. Оркестрация через Docker Compose

Для удобного управления контейнером, сетями и томами (volumes) используем docker-compose. Это позволит легко запускать и останавливать сервис одной командой.

Создайте файл docker-compose.yml:

```

version: "3.8"

services:

caddy:

назадназад
1 2
в конецв конец