Compare commits
15 Commits
legacy-199
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 452b9457e9 | |||
| 3ac0e90831 | |||
| a5805b9de4 | |||
| c8a022b3de | |||
| 1fd84d0e01 | |||
| 27fa0c3f1c | |||
| e7dfd04c96 | |||
| 180f9a6193 | |||
| 60813cf019 | |||
| b2a7df1d40 | |||
| 34bd75c30f | |||
| 6acc7aa5d3 | |||
| abfc004643 | |||
| 523b2a8f21 | |||
| 7a745ec541 |
32
.dockerignore
Normal file
32
.dockerignore
Normal file
@@ -0,0 +1,32 @@
|
||||
# Git и контроль версий
|
||||
.git
|
||||
.gitignore
|
||||
.gitattributes
|
||||
|
||||
# IDE и редакторы
|
||||
.idea
|
||||
.vscode
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
.DS_Store
|
||||
|
||||
# Документация (не нужна в контейнере)
|
||||
README.md
|
||||
*.md
|
||||
|
||||
# Docker compose файлы (не копируем в контейнер)
|
||||
docker-compose.yml
|
||||
docker-compose.prod.yml
|
||||
Dockerfile
|
||||
|
||||
# Логи и temp файлы
|
||||
logs/
|
||||
*.log
|
||||
tmp/
|
||||
|
||||
# Python, если вдруг будет скрипты
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
|
||||
6
.env.example
Normal file
6
.env.example
Normal file
@@ -0,0 +1,6 @@
|
||||
# Пример файла `.env` из которого проект берёт секреты.
|
||||
# Переименуйте его в `.env` и заполните своими значениями.
|
||||
|
||||
# Настройки достпа к пакетам в репозитории, чтобы wathtower мог проверять их свежесть и скачивать
|
||||
REPO_USER=xxxxx
|
||||
REPO_PASS=xxxxx
|
||||
55
.gitea/workflows/docker-publish.yaml
Normal file
55
.gitea/workflows/docker-publish.yaml
Normal file
@@ -0,0 +1,55 @@
|
||||
name: Build and Push CadPoint1998-site
|
||||
|
||||
on:
|
||||
push:
|
||||
# Запускать только при создании тега, начинающегося с 'v' (например, v1.0.0)
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
jobs:
|
||||
build-and-push:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
|
||||
# Генерируем метаданные (теги) для Docker
|
||||
- name: Docker meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v4
|
||||
with:
|
||||
# Важно: используем gitea.repository
|
||||
images: git.cube2.ru/${{ gitea.repository }}
|
||||
tags: |
|
||||
type=ref,event=tag
|
||||
type=raw,value=latest,enable=${{ gitea.ref_type == 'tag' }}
|
||||
|
||||
- name: Login to Gitea Registry
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
registry: git.cube2.ru
|
||||
# Важно: используем gitea.actor
|
||||
username: ${{ gitea.actor }}
|
||||
password: ${{ secrets.REGISTRY_PASSWORD }}
|
||||
|
||||
- name: Build and push image LPON-site
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
context: .
|
||||
# platforms: linux/amd64
|
||||
platforms: linux/amd64,linux/arm64
|
||||
push: true
|
||||
# Используем теги, сгенерированные шагом meta (v0.1.0 и latest)
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
# Кэширование для ускорения повторных сборок
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
# Увеличиваем тайм-аут на случай медленного интернета
|
||||
timeout: 1800 # 30 минут
|
||||
4
.gitignore
vendored
4
.gitignore
vendored
@@ -22,3 +22,7 @@ Thumbs.db
|
||||
|
||||
*.iml
|
||||
.idea/
|
||||
|
||||
# Секреты
|
||||
.env
|
||||
|
||||
|
||||
152
DEPLOYMENT.md
Normal file
152
DEPLOYMENT.md
Normal file
@@ -0,0 +1,152 @@
|
||||
# Развёртывание cadpoint1998 на продакшене
|
||||
|
||||
## 📋 Архитектура
|
||||
|
||||
```txt
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ Хост (продакшен) │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ Внешний nginx (на хосте или в контейнере) │
|
||||
│ ├─ Прослушивает: 0.0.0.0:80 (public) │
|
||||
│ ├─ Обслуживает: 1998.cadpoint.ru │
|
||||
│ └─ Проксирует → 127.0.0.1:8030 │
|
||||
│ ↓ │
|
||||
│ Docker контейнер cadpoint1998 │
|
||||
│ ├─ Прослушивает: 0.0.0.0:8030 (internal) │
|
||||
│ ├─ Обслуживает: статический HTML (KOI8-R) + gzip │
|
||||
│ └─ Watchtower следит за обновлениями │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 🚀 Шаги развёртывания
|
||||
|
||||
### 1. Подготовка на локальной машине
|
||||
|
||||
```bash
|
||||
# Убедись, что коммиты в `main`
|
||||
git add .
|
||||
git commit -m "Add external nginx config and deployment script"
|
||||
git push origin main
|
||||
|
||||
# Создаёшь тег для деплоя
|
||||
git tag v1.0.0
|
||||
git push origin v1.0.0
|
||||
|
||||
# Gitea Workflow запустится автоматически и соберёт образ
|
||||
```
|
||||
|
||||
### 2. Подготовка сервера (вход по SSH)
|
||||
|
||||
А. Создать папку для проекта (замените `<папка-прилолжений>` и `<прилолжение>` на свои значения):
|
||||
```bash
|
||||
# На продакшене (как e-serg или sudo)
|
||||
mkdir -p ~/<папка-прилолжений>/<прилолжение>
|
||||
cd ~/<папка-прилолжений>/<прилолжение>
|
||||
```
|
||||
|
||||
Б. Создайте в ней каталог для конфигурационных файлов nginx:
|
||||
```bash
|
||||
mkdir -p config/nginx
|
||||
```
|
||||
|
||||
В. Создать файл `docker-compose.yml`, поместите в нее содержимое из `docker-compose.prod.yml` (копи-паст из репозитрия).
|
||||
|
||||
Г. Создайте файл для переменных окружения проекта `.env` и заполните его (см. образец файла `.env.example` в репозитории).
|
||||
|
||||
|
||||
### 3. Запуск контейнера на сервере
|
||||
|
||||
Запусти контейнер (конфиги nginx скопируются автоматически)
|
||||
```
|
||||
sudo docker compose up -d
|
||||
```
|
||||
|
||||
Контейнер выведет при запуске:
|
||||
- 📋 Копирование внешнего nginx конфига на хост...
|
||||
- ✅ Пример nginx-конфика создан в ./config/nginx/cadpoint1998--external-nginx.conf.sample
|
||||
- ✅ Боевой nginx-конфиг создан в ./config/nginx/cadpoint1998--external-nginx.conf
|
||||
|
||||
### 4. Настройка внешнего nginx на хосте
|
||||
|
||||
Сделай символическую ссылку на конфиг в папке nginx (или скопируй его):
|
||||
```bash
|
||||
sudo ln -s <полный-путь-к-home>/<папка-прилолжений>/<прилолжение>/config/nginx/cadpoint1998--external-nginx.conf /etc/nginx/sites-enabled
|
||||
```
|
||||
|
||||
Проверь, что конфиг корректный и nginx может его загрузить:
|
||||
```bash
|
||||
sudo nginx -t
|
||||
```
|
||||
|
||||
Если ошибок нет и все `ok` перезапусти сервис nginx:
|
||||
```bash
|
||||
sudo systemctl reload nginx
|
||||
```
|
||||
|
||||
Проверь, что сайт отвечает по адресу `http://1998.cadpoint.ru` (не забудь настроить DNS):
|
||||
```bash
|
||||
curl -v http://1998.cadpoint.ru/index.htm
|
||||
```
|
||||
|
||||
### 5. Настройка сертификата SSL (если нужен)
|
||||
|
||||
```
|
||||
sudo certbot --nginx -d 1998.cadpoint.ru
|
||||
```
|
||||
|
||||
## 🔄 Обновление сайта
|
||||
|
||||
Когда ты создашь и запушишь новый тег в репозиторий:
|
||||
|
||||
```bash
|
||||
git tag v1.0.1
|
||||
git push origin v1.0.1
|
||||
```
|
||||
|
||||
**Автоматически происходит:**
|
||||
1. Gitea запускает workflow (docker-publish.yaml)
|
||||
2. Собирается новый образ и пушится в реестр как `v1.0.1` и `latest`
|
||||
3. На сервере Watchtower каждые 30 минут проверяет реестр
|
||||
4. Находит новый образ и автоматически:
|
||||
- Pulls новый образ
|
||||
- Стопит старый контейнер
|
||||
- Запускает новый контейнер
|
||||
- Копирует конфиги (если это первый запуск)
|
||||
|
||||
**Ручной pull (если не хочешь ждать Watchtower):**
|
||||
```bash
|
||||
cd ~/<папка-прилолжений>/<прилолжение>
|
||||
sudo docker compose pull
|
||||
sudo docker compose up -d
|
||||
```
|
||||
|
||||
## ⚠️ Важно про конфиги
|
||||
|
||||
При каждом запуске контейнера он копирует конфиги из образа на хост:
|
||||
|
||||
1. **Первый запуск**: оба конфига копируются
|
||||
- `.sample` (свежий из контейнера, для справки)
|
||||
- основной (для использования в nginx)
|
||||
|
||||
2. **Последующие запуски**: только `.sample` обновляется
|
||||
- Основной конфиг НЕ перезаписывается
|
||||
- Это защищает ручные правки (например, после certbot)
|
||||
|
||||
## 📊 Мониторинг
|
||||
|
||||
```bash
|
||||
# Логи контейнера
|
||||
sudo docker logs cadpoint1998-site | tail -100
|
||||
|
||||
# Логи Watchtower
|
||||
sudo docker logs cadpoint1998-watchtower | tail -50
|
||||
|
||||
# Проверка доступности (с хоста)
|
||||
curl -v http://127.0.0.1:8030/index.htm
|
||||
|
||||
# Проверка через внешний nginx
|
||||
curl -v -H 'Host: 1998.cadpoint.ru' http://localhost
|
||||
```
|
||||
|
||||
27
Dockerfile
Normal file
27
Dockerfile
Normal file
@@ -0,0 +1,27 @@
|
||||
# Архивный сайт cad.ru (1998) — контейнеризированный с nginx
|
||||
# Образ полностью self-contained: конфиг + HTML копируются в образ
|
||||
# Используется как для dev, так и для prod
|
||||
|
||||
FROM nginx:alpine
|
||||
|
||||
# Удаляем стандартный nginx конфиг (по умолчанию)
|
||||
RUN rm /etc/nginx/conf.d/default.conf
|
||||
|
||||
# Копируем custom конфиг cadpoint1998 как default (для внутреннего nginx)
|
||||
# Это обеспечивает правильную кодировку KOI8-R и маршрутизацию
|
||||
COPY config/nginx/cadpoint1998--internal-nginx.conf /etc/nginx/conf.d/default.conf
|
||||
|
||||
# Копируем все статические HTML файлы в корень документов nginx
|
||||
# Архив содержит исторический контент (не обновляется), поэтому полностью в образ
|
||||
COPY html/ /usr/share/nginx/html/
|
||||
|
||||
# Копируем внешний nginx конфиг для экспорта на хост (через volume)
|
||||
# Это нужно для настройки reverse-proxy на хосте
|
||||
COPY config/nginx/cadpoint1998--external-nginx.conf /tmp/cadpoint1998--external-nginx.conf.source
|
||||
|
||||
# Экспозируем порт 80 (внутренний, проксируется внешним nginx на хосте)
|
||||
EXPOSE 80
|
||||
|
||||
# Встроенный nginx:alpine entrypoint запустит команду из docker-compose
|
||||
# (command переопределяется в docker-compose.prod.yml для prod окружения)
|
||||
|
||||
61
README.md
61
README.md
@@ -2,7 +2,7 @@
|
||||
|
||||
## ВСЕ о САПР (CAD/CAM/CAE Archive)
|
||||
|
||||
Архивная версия исторического русскоязычного сайта о системах автоматизированного проектирования (САПР), созданного в 1998–1999 годах. Развернуто, для обозрения по адресу: [1998.cadpoint.ru/](https://1998.cadpoint.ru/).
|
||||
Это архивная версия исторического русскоязычного сайта о системах автоматизированного проектирования (САПР), созданного в 1998–1999 годах для "Русской Промышленной Компании" (РПК). Развернуто по адресу: [1998.cadpoint.ru](https://1998.cadpoint.ru/).
|
||||
|
||||
**Осторожно:**
|
||||
- фреймы (frameset) и meta-refresh;
|
||||
@@ -63,12 +63,17 @@ Content-Type: text/html; charset=koi8-r
|
||||
│ ├── images/ # Баннеры и логотипы
|
||||
│ ├── robots.txt # Инструкции для поисковых роботов
|
||||
│ └── favicon.* # Иконки браузера
|
||||
├── configs/ # Конфигурация nginx
|
||||
│ ├── cadpoin-ru_1998.conf
|
||||
│ └── cadpoin-ru_1998_w_ssl.conf
|
||||
├── config/
|
||||
│ └── nginx/
|
||||
│ ├── cadpoint1998--internal-nginx.conf # Конфиг внутреннего nginx (в контейнере)
|
||||
│ └── cadpoint1998--external-nginx.conf # Конфиг внешнего nginx (на хосте, для reverse-proxy)
|
||||
├── Dockerfile # Контейнеризация архива (nginx + HTML + конфиги)
|
||||
├── docker-compose.yml # Dev-конфиг (локальное тестирование)
|
||||
├── docker-compose.prod.yml # Prod-конфиг (продакшен с Watchtower)
|
||||
├── .gitignore # Исключение из репозитория
|
||||
├── .gitattributes # Правила кодировки и обработки файлов
|
||||
├── .editorconfig # Рекомендации для редакторов
|
||||
├── .env.example # Пример переменных окружения
|
||||
└── README.md # Этот файл
|
||||
```
|
||||
|
||||
@@ -115,17 +120,53 @@ Content-Type: text/html; charset=koi8-r
|
||||
|
||||
Проект может быть расширен в отдельных ветках:
|
||||
|
||||
- **`legacy-1998`** — архивная версия в оригинальном виде (текущая ветка)
|
||||
- **`main`** — версия с миграцией:
|
||||
- Развертывание в Docker
|
||||
- Возможно что-то еще (пока не знаю)
|
||||
- **`legacy-1998`** — архивная версия в оригинальном виде (ветка сохранения истории)
|
||||
- **`main`** — современная версия с контейнеризацией (текущая ветка):
|
||||
- ✅ Docker контейнеризация (nginx:alpine)
|
||||
- ✅ docker-compose для dev и prod
|
||||
- ✅ Watchtower для автоматических обновлений образа
|
||||
- ✅ Gitea CI/CD пайплайн (автосборка при тегировании)
|
||||
- ✅ Support для SSL/TLS (через certbot)
|
||||
- ✅ Reverse-proxy через внешний nginx
|
||||
|
||||
## Контейнеризация (2026)
|
||||
|
||||
Архив полностью перемещён в Docker контейнер с современной инфраструктурой:
|
||||
|
||||
### Что включено
|
||||
|
||||
- **Образ**: `git.cube2.ru/erjemin/1998-cad-cadpoint:latest` (nginx:alpine)
|
||||
- **Содержимое образа**:
|
||||
- nginx (web-сервер)
|
||||
- Конфиг для внутреннего nginx (с поддержкой KOI8-R)
|
||||
- Весь архив HTML сайта (KOI8-R)
|
||||
- Конфиг для внешнего nginx (для reverse-proxy на хосте)
|
||||
|
||||
### Как запустить
|
||||
|
||||
**Development (локально):**
|
||||
```bash
|
||||
docker-compose up --build
|
||||
# Сайт доступен на http://127.0.0.1:8030
|
||||
```
|
||||
|
||||
**Production (на сервере):**
|
||||
```bash
|
||||
docker-compose -f docker-compose.prod.yml up -d
|
||||
# Watchtower автоматически следит за обновлениями образа
|
||||
# Сайт проксируется через внешний nginx на хосте
|
||||
```
|
||||
|
||||
### Детальная документация
|
||||
|
||||
См. [DEPLOYMENT.md](DEPLOYMENT.md) для полной инструкции по развёртыванию на продакшене.
|
||||
|
||||
## Контакты и лицензия
|
||||
|
||||
Автор: *Sergei Erjemin* (это я)
|
||||
Контакт: `erjemin@gmail.com`
|
||||
|
||||
Архив сохранён и перенесён в современную инфраструктуру в 2026 году.
|
||||
Архив сохранён и перенесён в современную инфраструктуру (Docker) в 2026 году.
|
||||
|
||||
---
|
||||
**Последнее обновление:** March 27, 2026
|
||||
**Последнее обновление:** March 28, 2026 (добавлена контейнеризация)
|
||||
|
||||
90
config/nginx/cadpoint1998--external-nginx.conf
Normal file
90
config/nginx/cadpoint1998--external-nginx.conf
Normal file
@@ -0,0 +1,90 @@
|
||||
# Внешний nginx конфиг для проксирования к контейнеру cadpoint1998
|
||||
# Это конфиг для ХОСТА (не внутри контейнера)
|
||||
|
||||
upstream cadpoint1998_backend {
|
||||
# Контейнер слушает на localhost:8030 (из docker-compose.prod.yml)
|
||||
server 127.0.0.1:8030;
|
||||
keepalive 32;
|
||||
}
|
||||
|
||||
# Редирект с www на основной домен
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name www.1998.cadpoint.ru;
|
||||
|
||||
# Редирект на основной домен (без www)
|
||||
return 301 http://1998.cadpoint.ru$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name 1998.cadpoint.ru;
|
||||
|
||||
# Редирект HTTP → HTTPS (cerbot добавит SSL позже)
|
||||
# Пока оставляем HTTP для тестирования
|
||||
# Раскомментируй после добавления SSL:
|
||||
# return 301 https://$server_name$request_uri;
|
||||
|
||||
# Логи для этого виртуального хоста
|
||||
# --- ЛОГИ ---
|
||||
access_log /var/log/nginx/cadpoint1998.access.log;
|
||||
error_log /var/log/nginx/cadpoint1998.error.log warn;
|
||||
|
||||
# Основной блок проксирования
|
||||
location / {
|
||||
# Проксируем все запросы в контейнер
|
||||
proxy_pass http://cadpoint1998_backend;
|
||||
|
||||
# Сохраняем оригинальный хост в заголовке (важно для правильной работы контейнера)
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
|
||||
# Keepalive для улучшения производительности
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Connection "";
|
||||
|
||||
# Timeouts для длительных запросов
|
||||
proxy_connect_timeout 60s;
|
||||
proxy_send_timeout 60s;
|
||||
proxy_read_timeout 60s;
|
||||
|
||||
# Буферизация (для архивного сайта можно отключить если мало памяти)
|
||||
# proxy_buffering off;
|
||||
proxy_buffering on;
|
||||
proxy_buffer_size 4k;
|
||||
proxy_buffers 8 4k;
|
||||
}
|
||||
|
||||
# Кэширование статических файлов (HTML, GIF, CSS, JS, иконки)
|
||||
location ~* \.(htm|html|gif|png|jpe?g|svg|ico|css|js|woff|woff2|ttf|eot)$ {
|
||||
proxy_pass http://cadpoint1998_backend;
|
||||
proxy_set_header Host $host;
|
||||
|
||||
# Кэш в браузере на 7 дней для статики (архив не меняется)
|
||||
expires 7d;
|
||||
add_header Cache-Control "public, max-age=604800, immutable";
|
||||
|
||||
# Логирование отключаем для статики (шум в логах)
|
||||
access_log off;
|
||||
}
|
||||
|
||||
# Health check для мониторинга (внутренний эндпоинт)
|
||||
location = /health {
|
||||
access_log off;
|
||||
default_type text/plain;
|
||||
return 200 "OK\n";
|
||||
}
|
||||
|
||||
# Запретить доступ к скрытым файлам
|
||||
location ~ /\. {
|
||||
deny all;
|
||||
access_log off;
|
||||
log_not_found off;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
75
config/nginx/cadpoint1998--internal-nginx.conf
Normal file
75
config/nginx/cadpoint1998--internal-nginx.conf
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -1,79 +0,0 @@
|
||||
# Разработка сайта LPON.RU
|
||||
# == Конфикурационный файл nginx cadpoint.conf
|
||||
|
||||
# Описываем апстрим-потоки которые должен подключить Nginx
|
||||
# Для каждого сайта надо настроить свйо поток, со своим уникальным именем.
|
||||
# Если будете настраивать несколько python (django) сайтов - измените название upstream
|
||||
|
||||
# конфигурируем сервер
|
||||
server {
|
||||
server_name 1998.cadpoint.ru; # доменное имя сайта
|
||||
# listen 443 ssl http2; # managed by Certbot
|
||||
listen 80; # managed by Certbot
|
||||
|
||||
root /home/web/cadpoint-ru_1998/html;
|
||||
location = / {
|
||||
try_files /index.htm =404;
|
||||
}
|
||||
|
||||
charset koi8-r; # кодировка по умолчанию
|
||||
source_charset koi8-r;
|
||||
access_log /home/web/cadpoint-ru_1998/logs/cadpoint-ru_1998-access.log; # логи с доступом
|
||||
error_log /home/web/cadpoint-ru_1998/logs/cadpoint-ru_1998-error.log; # логи с ошибками
|
||||
client_max_body_size 100M; # максимальный объем файла для загрузки на сайт (max upload size)
|
||||
error_page 404 /404.html;
|
||||
error_page 500 /500.html;
|
||||
|
||||
# location /robots.txt { root /home/web/cadpoint-ru_1998/html; } # Расположение robots.txt
|
||||
# location /favicon.ico { root /home/web/cadpoint-ru_1998/html; } # Расположение favicon.ico
|
||||
# location /favicon.gif { root /home/web/cadpoint-ru_1998/html; } # Расположение favicon
|
||||
# location /favicon.png { root /home/web/cadpoint-ru_1998/html; } # Расположение favicon
|
||||
# location /favicon.svg { root /home/web/cadpoint-ru_1998/html; } # Расположение favicon
|
||||
# location /author.txt { root /home/web/cadpoint-ru_1998/html; } # Расположение author.txt
|
||||
location = /404.html {
|
||||
root /home/web/cadpoint-ru_1998/html/index.html;
|
||||
internal;
|
||||
}
|
||||
location = /500.html {
|
||||
root /home/web/cadpoint-ru_1998/html/index.html;
|
||||
internal;
|
||||
}
|
||||
# location ~ \.(html|htm|ico|svg|png|gif|jpg|jpeg)$ {
|
||||
# root /home/web/cadpoint-ru_1998/public; # Расположение статичных *.xml, *.html и *.txt
|
||||
# }
|
||||
|
||||
}
|
||||
|
||||
# переадресация с www на "без" www
|
||||
server {
|
||||
server_name www.1998.cadpoint.ru;
|
||||
|
||||
listen 443 ssl; # managed by Certbot
|
||||
ssl_certificate /etc/letsencrypt/live/1998.cadpoint.ru/fullchain.pem; # managed by Certbot
|
||||
ssl_certificate_key /etc/letsencrypt/live/1998.cadpoint.ru/privkey.pem; # managed by Certbot
|
||||
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
|
||||
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
|
||||
|
||||
return 301 http://1998.cadpoint.ru$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
server_name 1998.cadpoint.ru;
|
||||
|
||||
listen 443 ssl; # managed by Certbot
|
||||
ssl_certificate /etc/letsencrypt/live/1998.cadpoint.ru/fullchain.pem; # managed by Certbot
|
||||
ssl_certificate_key /etc/letsencrypt/live/1998.cadpoint.ru/privkey.pem; # managed by Certbot
|
||||
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
|
||||
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
|
||||
|
||||
return 301 http://1998.cadpoint.ru$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
server_name www.1998.cadpoint.ru;
|
||||
listen 80;
|
||||
if ($host = www.1998.cadpoint.ru) {
|
||||
return 301 http://$host$request_uri;
|
||||
} # managed by Certbot
|
||||
|
||||
}
|
||||
@@ -1,83 +0,0 @@
|
||||
# Разработка сайта LPON.RU
|
||||
# == Конфикурационный файл nginx cadpoint.conf
|
||||
|
||||
# Описываем апстрим-потоки которые должен подключить Nginx
|
||||
# Для каждого сайта надо настроить свйо поток, со своим уникальным именем.
|
||||
# Если будете настраивать несколько python (django) сайтов - измените название upstream
|
||||
|
||||
# конфигурируем сервер
|
||||
server {
|
||||
server_name 1998.cadpoint.ru; # доменное имя сайта
|
||||
# listen 443 ssl http2; # managed by Certbot
|
||||
listen 443 ssl; # managed by Certbot
|
||||
root /home/web/cadpoint-ru_1998/html;
|
||||
location = / {
|
||||
try_files /index.htm =404;
|
||||
# try_files /index.htm;
|
||||
}
|
||||
ssl_certificate /etc/letsencrypt/live/1998.cadpoint.ru/fullchain.pem; # managed by Certbot
|
||||
ssl_certificate_key /etc/letsencrypt/live/1998.cadpoint.ru/privkey.pem; # managed by Certbot
|
||||
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
|
||||
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
|
||||
|
||||
charset koi8-r; # кодировка по умолчанию
|
||||
access_log /home/web/cadpoint-ru_1998/logs/cadpoint-ru_1998-access.log; # логи с доступом
|
||||
error_log /home/web/cadpoint-ru_1998/logs/cadpoint-ru_1998-error.log; # логи с ошибками
|
||||
client_max_body_size 100M; # максимальный объем файла для загрузки на сайт (max upload size)
|
||||
error_page 404 /404.html;
|
||||
error_page 500 /500.html;
|
||||
|
||||
# location /robots.txt { root /home/web/cadpoint-ru_1998/html; } # Расположение robots.txt
|
||||
# location /favicon.ico { root /home/web/cadpoint-ru_1998/html; } # Расположение favicon.ico
|
||||
# location /favicon.gif { root /home/web/cadpoint-ru_1998/html; } # Расположение favicon
|
||||
# location /favicon.png { root /home/web/cadpoint-ru_1998/html; } # Расположение favicon
|
||||
# location /favicon.svg { root /home/web/cadpoint-ru_1998/html; } # Расположение favicon
|
||||
# location /author.txt { root /home/web/cadpoint-ru_1998/html; } # Расположение author.txt
|
||||
location = /404.html {
|
||||
root /home/web/cadpoint-ru_1998/html/index.html;
|
||||
internal;
|
||||
}
|
||||
location = /500.html {
|
||||
root /home/web/cadpoint-ru_1998/html/index.html;
|
||||
internal;
|
||||
}
|
||||
# location ~ \.(html|htm|ico|svg|png|gif|jpg|jpeg)$ {
|
||||
# root /home/web/cadpoint-ru_1998/public; # Расположение статичных *.xml, *.html и *.txt
|
||||
# }
|
||||
}
|
||||
|
||||
# переадресация с www на "без" www
|
||||
server {
|
||||
server_name www.1998.cadpoint.ru;
|
||||
return 301 http://1998.cadpoint.ru$request_uri;
|
||||
|
||||
listen 443 ssl; # managed by Certbot
|
||||
ssl_certificate /etc/letsencrypt/live/1998.cadpoint.ru/fullchain.pem; # managed by Certbot
|
||||
ssl_certificate_key /etc/letsencrypt/live/1998.cadpoint.ru/privkey.pem; # managed by Certbot
|
||||
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
|
||||
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
|
||||
}
|
||||
server {
|
||||
if ($host = 1998.cadpoint.ru) {
|
||||
return 301 https://$host$request_uri;
|
||||
} # managed by Certbot
|
||||
|
||||
|
||||
server_name 1998.cadpoint.ru;
|
||||
listen 80;
|
||||
return 404; # managed by Certbot
|
||||
|
||||
|
||||
}
|
||||
server {
|
||||
if ($host = www.1998.cadpoint.ru) {
|
||||
return 301 https://$host$request_uri;
|
||||
} # managed by Certbot
|
||||
|
||||
|
||||
server_name www.1998.cadpoint.ru;
|
||||
listen 80;
|
||||
return 404; # managed by Certbot
|
||||
|
||||
|
||||
}
|
||||
91
docker-compose.prod.yml
Normal file
91
docker-compose.prod.yml
Normal file
@@ -0,0 +1,91 @@
|
||||
# Файл для продакшена (использует только собранный образ, без локальных volume)
|
||||
# Для разработки используй docker-compose.yml
|
||||
|
||||
services:
|
||||
cadpoint1998:
|
||||
# В продакшене используем заранее собранный образ (не build)
|
||||
image: git.cube2.ru/erjemin/1998-cad-cadpoint:latest
|
||||
|
||||
# Имя контейнера для идентификации
|
||||
container_name: cadpoint1998-site
|
||||
|
||||
# Политика перезагрузки: всегда перезагружаемся при сбое
|
||||
restart: always
|
||||
|
||||
# Метки для Watchtower (авто-обновление)
|
||||
labels:
|
||||
- "com.centurylinklabs.watchtower.scope=cadpoint1998-scope"
|
||||
|
||||
# Переменные окружения
|
||||
env_file:
|
||||
- .env
|
||||
|
||||
# Volume для экспорта конфигов из контейнера на хост
|
||||
# Контейнер копирует nginx конфиг при запуске для настройки reverse-proxy на хосте
|
||||
volumes:
|
||||
- ./config/nginx:/tmp/nginx_configs:rw # контейнер пишет сюда конфиги
|
||||
|
||||
# Command: скрипт для копирования конфигов из контейнера на хост при запуске
|
||||
# Встроенный entrypoint nginx:alpine (/docker-entrypoint.sh) запустит это как команду
|
||||
command: >
|
||||
sh -c "
|
||||
echo '📋 Копирование внешнего nginx конфига на хост...' &&
|
||||
cp /tmp/cadpoint1998--external-nginx.conf.source /tmp/nginx_configs/cadpoint1998--external-nginx.conf.sample &&
|
||||
echo '✅ Пример nginx-конфига создан в ./config/nginx/cadpoint1998--external-nginx.conf.sample (свежий из контейнера)' &&
|
||||
if [ ! -f /tmp/nginx_configs/cadpoint1998--external-nginx.conf ]; then
|
||||
cp /tmp/cadpoint1998--external-nginx.conf.source /tmp/nginx_configs/cadpoint1998--external-nginx.conf &&
|
||||
echo '✅ Боевой nginx-конфиг создан в ./config/nginx/cadpoint1998--external-nginx.conf (свежий из контейнера)'
|
||||
else
|
||||
echo '⏭️ Боевой nginx-конфиг оставлен без изменений.'
|
||||
fi &&
|
||||
exec nginx -g 'daemon off;'
|
||||
"
|
||||
|
||||
# В продакшене слушаем на внутреннем адресе (проксируется через внешний nginx)
|
||||
ports:
|
||||
- "127.0.0.1:8030:80"
|
||||
|
||||
# Логирование в JSON-файлы (для сбора логов через docker logs)
|
||||
logging:
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-size: "10m" # больше лимит в продакшене для логирования
|
||||
max-file: "1" # храним 1 файл лога
|
||||
|
||||
# Сеть для взаимодействия с другими контейнерами
|
||||
networks:
|
||||
- cadpoint1998-network
|
||||
|
||||
|
||||
# WATCHTOWER ДЛЯ АВТОМАТИЧЕСКОГО ОБНОВЛЕНИЯ ОБРАЗОВ ИЗ РЕЕСТРА
|
||||
watchtower:
|
||||
image: containrrr/watchtower
|
||||
container_name: cadpoint1998-watchtower
|
||||
restart: always
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
# Переменные окружения
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
- DOCKER_API_VERSION=1.44
|
||||
# Берем учетные данные из .env файла
|
||||
- REPO_USER=${REPO_USER}
|
||||
- REPO_PASS=${REPO_PASS}
|
||||
# Ограничиваем область видимости только этим проектом
|
||||
- WATCHTOWER_SCOPE=cadpoint1998-scope
|
||||
# Если нужно указать реестр явно (обычно watchtower сам понимает из имени образа)
|
||||
# - WATCHTOWER_REGISTRY_URL=git.cube2.ru
|
||||
command: --interval 1800 --cleanup # Проверять каждые 30 минут
|
||||
logging:
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-size: "1m"
|
||||
max-file: "1"
|
||||
networks:
|
||||
- cadpoint1998-network
|
||||
|
||||
# Bridge-сеть для координации сервисов
|
||||
networks:
|
||||
cadpoint1998-network:
|
||||
driver: bridge
|
||||
43
docker-compose.yml
Normal file
43
docker-compose.yml
Normal file
@@ -0,0 +1,43 @@
|
||||
# Файл для 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
|
||||
|
||||
@@ -1 +1,5 @@
|
||||
User-agent: *
|
||||
Allow: /
|
||||
|
||||
# Sitemap для поисковиков
|
||||
Sitemap: https://1998.cadpoint.ru/sitemap.xml
|
||||
|
||||
67
html/sitemap.xml
Normal file
67
html/sitemap.xml
Normal file
@@ -0,0 +1,67 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<!-- Главная страница -->
|
||||
<url>
|
||||
<loc>https://1998.cadpoint.ru/</loc>
|
||||
<lastmod>2026-03-28</lastmod>
|
||||
<changefreq>never</changefreq>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
|
||||
<!-- Основные разделы (из фреймовой структуры) -->
|
||||
<url>
|
||||
<loc>https://1998.cadpoint.ru/index1.htm</loc>
|
||||
<lastmod>2026-03-28</lastmod>
|
||||
<changefreq>never</changefreq>
|
||||
<priority>0.9</priority>
|
||||
</url>
|
||||
|
||||
<!-- Раздел: Компании -->
|
||||
<url>
|
||||
<loc>https://1998.cadpoint.ru/_co/</loc>
|
||||
<lastmod>2026-03-28</lastmod>
|
||||
<changefreq>never</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
|
||||
<!-- Раздел: Программные продукты -->
|
||||
<url>
|
||||
<loc>https://1998.cadpoint.ru/_pr/</loc>
|
||||
<lastmod>2026-03-28</lastmod>
|
||||
<changefreq>never</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
|
||||
<!-- Раздел: События и новости -->
|
||||
<url>
|
||||
<loc>https://1998.cadpoint.ru/_ex/</loc>
|
||||
<lastmod>2026-03-28</lastmod>
|
||||
<changefreq>never</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
|
||||
<!-- Раздел: Публикации -->
|
||||
<url>
|
||||
<loc>https://1998.cadpoint.ru/_pb/</loc>
|
||||
<lastmod>2026-03-28</lastmod>
|
||||
<changefreq>never</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
|
||||
<!-- Раздел: Ссылки -->
|
||||
<url>
|
||||
<loc>https://1998.cadpoint.ru/_fr/</loc>
|
||||
<lastmod>2026-03-28</lastmod>
|
||||
<changefreq>never</changefreq>
|
||||
<priority>0.7</priority>
|
||||
</url>
|
||||
|
||||
<!-- Раздел: Поиск -->
|
||||
<url>
|
||||
<loc>https://1998.cadpoint.ru/_sh/</loc>
|
||||
<lastmod>2026-03-28</lastmod>
|
||||
<changefreq>never</changefreq>
|
||||
<priority>0.7</priority>
|
||||
</url>
|
||||
</urlset>
|
||||
|
||||
Reference in New Issue
Block a user