Files
shop10/wiki/Install-Docker.md

144 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Установка через 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)