From 7a745ec5418484ecc77f1fd899ab3b8c9a7b9e16 Mon Sep 17 00:00:00 2001 From: erjemin Date: Sat, 28 Mar 2026 12:48:41 +0300 Subject: [PATCH] =?UTF-8?q?add:=20=D0=9A=D0=BE=D0=BD=D1=82=D0=B5=D0=B9?= =?UTF-8?q?=D0=BD=D0=B5=D1=80=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B0?= =?UTF-8?q?=D1=80=D1=85=D0=B8=D0=B2=D0=B0=20cad.ru=20(1998)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавлен Dockerfile для dev и prod (с HTML и конфигом в образе) - docker-compose.yml для разработки - Nginx конфиг cadpoint1998--internal-nginx.conf с KOI8-R - .dockerignore для исключения лишних файлов - Переименование configs/ → config/ (современный стандарт) --- Dockerfile | 29 +++++++ .../nginx/cadpoint1998--internal-nginx.conf | 75 +++++++++++++++++++ docker-compose.yml | 42 +++++++++++ 3 files changed, 146 insertions(+) create mode 100644 Dockerfile create mode 100644 config/nginx/cadpoint1998--internal-nginx.conf create mode 100644 docker-compose.yml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3801f0f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,29 @@ +# Архивный сайт cad.ru (1998) — контейнеризированный с nginx +# Образ полностью self-contained: конфиг + HTML копируются в образ +# Используется как для dev, так и для prod + +FROM nginx:alpine + +# Удаляем стандартный nginx конфиг (по умолчанию) +RUN rm /etc/nginx/conf.d/default.conf + +# Копируем custom конфиг cadpoint1998 как default +# Это обеспечивает правильную кодировку KOI8-R и маршрутизацию +COPY config/nginx/cadpoint1998--internal-nginx.conf /etc/nginx/conf.d/default.conf + +# Копируем все статические HTML файлы в корень документов nginx +# Архив содержит исторический контент (не обновляется), поэтому полностью в образ +COPY html/ /usr/share/nginx/html/ + +# Health check: проверяем доступность сайта через nginx +# Используется Docker для определения статуса контейнера и orchestration-системами +HEALTHCHECK --interval=120s --timeout=3s --start-period=5s --retries=3 \ + CMD wget --quiet --tries=1 --spider http://localhost/index.htm || exit 1 + +# Экспозируем порт 80 (внутренний, проксируется внешним nginx на хосте) +EXPOSE 80 + +# Запускаем nginx в foreground режиме (критично для Docker контейнеров) +# Без этого контейнер выключится сразу после запуска +CMD ["nginx", "-g", "daemon off;"] + diff --git a/config/nginx/cadpoint1998--internal-nginx.conf b/config/nginx/cadpoint1998--internal-nginx.conf new file mode 100644 index 0000000..270b89b --- /dev/null +++ b/config/nginx/cadpoint1998--internal-nginx.conf @@ -0,0 +1,75 @@ +# --- ОПТИМИЗАЦИЯ ПРОИЗВОДИТЕЛЬНОСТИ --- +# sendfile on; # можно включить для больших статик файлов, но для контейнера избыточно +tcp_nopush on; # отправляй данные только когда буфер полон (меньше пакетов) +tcp_nodelay on; # не жди, отправляй сразу (для low-latency интеракции) +# keepalive_timeout 65; # по умолчанию работает, фреймовый сайт не требует особого тюнинга +types_hash_max_size 2048; # размер хэша для mime.types + +# MIME-типы и кодировка по умолчанию +include /etc/nginx/mime.types; +# default_type application/octet-stream; # оставляю по умолчанию + +# Настройки логов (stdout/stderr для docker logs) +access_log /dev/stdout; # вывод в stdout контейнера (видно через docker logs) +error_log /dev/stderr warn; # ошибки в stderr + +# Настройки сжатия gzip (для экономии трафика между контейнером и внешним nginx) +gzip on; # включаем сжатие +gzip_proxied any; # сжимаем, даже если запрос идет через прокси +gzip_comp_level 6; # уровень сжатия (6 = хороший баланс между CPU и ratio) +gzip_buffers 16 8k; # буферы для сжатия (16 буферов по 8к) +gzip_http_version 1.1; # поддерживаем gzip с HTTP/1.1+ +gzip_disable "msie6"; # не сжимаем для IE6 (исторический артефакт, но оставляю) +gzip_vary on; # добавляем Vary: Accept-Encoding в response (важно для кешей) +gzip_min_length 512; # сжимаем только если больше 512 байт (меньше — толку нет) +gzip_types text/plain # какие MIME-типы сжимать + text/css + application/json + application/x-javascript + text/xml application/xml + application/xml+rss + text/javascript + application/javascript + application/vnd.ms-fontobject + application/x-font-ttf + font/opentype + image/svg+xml + image/x-icon; + +# --- КОНФИГУРАЦИЯ СЕРВЕРА --- +server { + listen 80 default_server; # слушаем по умолчанию на порте 80 внутри контейнера + listen [::]:80; # поддержка IPv6 + server_name _; # принимаем любое имя хоста (внутренний контейнер) + + root /usr/share/nginx/html; # корень для статических файлов (монтируется снаружи) + index index.htm index1.htm index.html; # приоритет индексов (index.htm для KOI8-R) + + charset koi8-r; # отправляем charset=koi8-r в Content-Type заголовке + source_charset koi8-r; # исходная кодировка файлов на диске + + client_max_body_size 50M; # максимальный размер тела запроса (для загрузок) + + # Корневой путь → явно на index.htm (для фреймовой структуры) + location = / { + try_files /index.htm =404; + } + + # Все остальные пути → статические файлы как есть + location / { + try_files $uri $uri/ =404; + } + + # Обработчики ошибок (если они есть в корне html/) + error_page 404 /404.html; + error_page 500 /500.html; + + # Внутренние редиректы (не возвращаем клиенту, только используем для error_page) + location = /404.html { + internal; + } + + location = /500.html { + internal; + } +} diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..eaafa93 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,42 @@ +# Файл для dev-окружения и локального тестирования +# Для продакшена используй docker-compose.prod.yml + +# Примечание: в новых версиях Docker Compose версия необязательна +# (в новых версиях даже рекомендуется её не указывать) +# version: '3.8' + +services: + cadpoint1998: + # Собираем образ из Dockerfile (одного для dev и prod) + # Образ полностью self-contained: конфиг + HTML в образе + build: + context: . + dockerfile: Dockerfile + + # Имя контейнера для удобства обращения через docker/podman + container_name: cadpoint1998-site + + # Порт: слушаем на localhost:8030, проксируем в контейнер на 80 + # Внешний nginx/reverse-proxy обращается на этот адрес + ports: + - "127.0.0.1:8030:80" + + # Политика перезагрузки: перезагружаем при сбое, но не при явном останове + restart: unless-stopped + + # Логирование в JSON-файлы (видно через docker logs и анализ) + logging: + driver: "json-file" + options: + max-size: "5m" # максимум 5МБ на файл лога + max-file: "1" # хранить только 1 файл (экономим место) + + # Пользовательская сеть для координации с другими сервисами + networks: + - cadpoint1998-network + +# Определяем пользовательскую bridge-сеть для контейнеров +networks: + cadpoint1998-network: + driver: bridge +