b9e6060610
Co-authored-by: Cursor <cursoragent@cursor.com>
144 lines
4.4 KiB
Markdown
144 lines
4.4 KiB
Markdown
# Установка через 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)
|