14 Commits

Author SHA1 Message Date
3ac0e90831 add: sitemap.xml for search engines,
All checks were successful
Build and Push CadPoint1998-site / build-and-push (push) Successful in 49s
2026-03-28 22:59:25 +03:00
a5805b9de4 Add sitemap.xml for search engines
- Create sitemap.xml with main sections of the archive site
- Add Sitemap reference to robots.txt
- All URLs marked as never-changing (archive content)
- Helps search engines index the legacy frameset site properly
2026-03-28 22:57:56 +03:00
c8a022b3de Fix nginx config - add HTTPS www redirect
- Add server block for www.1998.cadpoint.ru on HTTPS (port 443)
- Redirect www to non-www version (https://1998.cadpoint.ru)
- Properly organize config with HTTP and HTTPS sections
- Clean up duplicate server blocks
2026-03-28 19:25:24 +03:00
1fd84d0e01 fix: запуск nginx из docker-compose в prod 2026-03-28 18:49:52 +03:00
27fa0c3f1c Add www redirect in external nginx config
- Add server block that redirects www.1998.cadpoint.ru to 1998.cadpoint.ru
- Uses HTTP 301 permanent redirect for proper SEO
2026-03-28 18:41:23 +03:00
e7dfd04c96 mod: убрал запуск nginx из Dockerfile
All checks were successful
Build and Push CadPoint1998-site / build-and-push (push) Successful in 27s
2026-03-28 18:16:48 +03:00
180f9a6193 Remove unnecessary labels from logging config
All checks were successful
Build and Push CadPoint1998-site / build-and-push (push) Successful in 1m27s
- Remove 'service=cadpoint1998' label from docker-compose.prod.yml
- Labels are not used by json-file logging driver
- Keep only max-size and max-file options
2026-03-28 17:55:08 +03:00
60813cf019 mod: все для deployment 2026-03-28 17:49:22 +03:00
b2a7df1d40 add: CI/CD для gitea 2026-03-28 17:48:18 +03:00
34bd75c30f del: уделение старых конфигов nginx 2026-03-28 17:47:14 +03:00
6acc7aa5d3 add: примеры секретов 2026-03-28 16:30:17 +03:00
abfc004643 add: не хранить секреты 2026-03-28 16:29:27 +03:00
523b2a8f21 add: .dockerignore для исключения лишних файлов в контейнере (образе) 2026-03-28 12:50:17 +03:00
7a745ec541 add: Контейнеризация архива cad.ru (1998)
- Добавлен Dockerfile для dev и prod (с HTML и конфигом в образе)
     - docker-compose.yml для разработки
     - Nginx конфиг cadpoint1998--internal-nginx.conf с KOI8-R
     - .dockerignore для исключения лишних файлов
     - Переименование configs/ → config/ (современный стандарт)
2026-03-28 12:48:41 +03:00
15 changed files with 697 additions and 172 deletions

32
.dockerignore Normal file
View 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
View File

@@ -0,0 +1,6 @@
# Пример файла `.env` из которого проект берёт секреты.
# Переименуйте его в `.env` и заполните своими значениями.
# Настройки достпа к пакетам в репозитории, чтобы wathtower мог проверять их свежесть и скачивать
REPO_USER=xxxxx
REPO_PASS=xxxxx

View 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
View File

@@ -22,3 +22,7 @@ Thumbs.db
*.iml
.idea/
# Секреты
.env

152
DEPLOYMENT.md Normal file
View 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 compose logs -f cadpoint1998-site | tail -100
# Логи Watchtower
sudo docker compose logs -f 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
View 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 окружения)

View File

@@ -2,7 +2,7 @@
## ВСЕ о САПР (CAD/CAM/CAE Archive)
Архивная версия исторического русскоязычного сайта о системах автоматизированного проектирования (САПР), созданного в 19981999 годах. Развернуто, для обозрения по адресу: [1998.cadpoint.ru/](https://1998.cadpoint.ru/).
Это архивная версия исторического русскоязычного сайта о системах автоматизированного проектирования (САПР), созданного в 19981999 годах для "Русской Промышленной Компании" (РПК). Развернуто по адресу: [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 (добавлена контейнеризация)

View 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;
}
}

View 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;
}
}

View File

@@ -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
}

View File

@@ -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
View 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
View 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

View File

@@ -1 +1,5 @@
User-agent: *
Allow: /
# Sitemap для поисковиков
Sitemap: https://1998.cadpoint.ru/sitemap.xml

67
html/sitemap.xml Normal file
View 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>