From 43e539efb90aaec091005a006c2cf8af70df4cd2 Mon Sep 17 00:00:00 2001 From: test Date: Sun, 17 May 2026 07:06:20 +0000 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20Install-Docker?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Install-Docker.-.md | 143 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 Install-Docker.-.md diff --git a/Install-Docker.-.md b/Install-Docker.-.md new file mode 100644 index 0000000..07288b9 --- /dev/null +++ b/Install-Docker.-.md @@ -0,0 +1,143 @@ +# Установка через Docker Compose + +Полный стек в контейнерах: **PostgreSQL 17** + **приложение Shop** (+ опционально **Caddy** для HTTPS). + +## 1. Требования + +- Docker Engine 24 или новее +- Docker Compose v2 (`docker compose`) +- Git +- Порты: **3000** (сайт) или **80/443** (с Caddy) + +Проверка: + +```bash +docker --version +docker compose version +``` + +## 2. Получение кода + +```bash +git clone https://git.evilfox.cc/test/shop10.git +cd shop10 +git checkout v0.10.0 +``` + +## 3. Настройка переменных + +```bash +cp .env.docker.example .env +nano .env +``` + +| Переменная | Описание | Пример | +|------------|----------|--------| +| `POSTGRES_USER` | Пользователь БД | `shop` | +| `POSTGRES_PASSWORD` | Пароль БД | смените в production | +| `POSTGRES_DB` | Имя базы | `shop` | +| `SESSION_SECRET` | Секрет сессий | `openssl rand -hex 32` | +| `APP_PORT` | Порт на хосте | `3000` | +| `TRUST_PROXY` | За Caddy: `1`, иначе `0` | `0` | + +## 4. Запуск + +```bash +docker compose up -d --build +``` + +Первый запуск: сборка образа `app`, скачивание `postgres:17-alpine`, создание таблиц и демо-товаров. + +Статус: + +```bash +docker compose ps +docker compose logs -f app +``` + +## 5. Проверка + +```bash +curl -s http://127.0.0.1:3000/health +``` + +В браузере: **http://IP_СЕРВЕРА:3000** или **http://localhost:3000** + +## 6. HTTPS с Caddy (опционально) + +1. В `.env` установите `TRUST_PROXY=1` +2. Отредактируйте `caddy/Caddyfile.docker.example`: + - укажите свой домен вместо `shop.example.com` + - или оставьте блок `:80` для доступа по IP +3. Запуск: + +```bash +docker compose --profile proxy up -d --build +``` + +Открыты порты **80** и **443**. Контейнер `caddy` проксирует на `app:3000`. + +## 7. Полезные команды + +| Команда | Действие | +|---------|----------| +| `docker compose logs -f app` | Логи приложения | +| `docker compose logs -f postgres` | Логи БД | +| `docker compose restart app` | Перезапуск приложения | +| `docker compose down` | Остановить контейнеры | +| `docker compose down -v` | Остановить и **удалить данные БД** | +| `docker compose up -d --build` | Пересборка после `git pull` | + +## 8. Обновление версии + +```bash +cd shop10 +git fetch --tags +git checkout v0.10.0 # или новый тег +docker compose up -d --build +``` + +## 9. Только PostgreSQL (разработка) + +Приложение на хосте (`npm run dev`), БД в Docker: + +```bash +docker compose -f docker-compose.dev.yml up -d +cp .env.example .env +``` + +В `.env`: + +```env +DATABASE_URL=postgresql://shop:shop@127.0.0.1:5432/shop +HOST=0.0.0.0 +``` + +```bash +npm install +npm run dev +``` + +## 10. Архитектура + +``` +┌─────────────┐ ┌──────────────┐ ┌─────────────┐ +│ Браузер │────▶│ Caddy :443 │────▶│ app :3000 │ +│ │ │ (опционально)│ │ Node.js │ +└─────────────┘ └──────────────┘ └──────┬──────┘ + │ + ┌──────▼──────┐ + │ postgres:17 │ + └─────────────┘ +``` + +## 11. Типичные ошибки + +| Симптом | Решение | +|---------|---------| +| `port is already allocated` | Смените `APP_PORT` в `.env` или освободите порт 3000 | +| `app` unhealthy | `docker compose logs app` — часто нет связи с postgres | +| Пустой каталог | Подождите seed; `docker compose logs app` | +| 502 с Caddy | `TRUST_PROXY=1`, проверьте `docker compose ps` | + +Подробнее: [Решение проблем](Troubleshooting)