b9e6060610
Co-authored-by: Cursor <cursoragent@cursor.com>
4.4 KiB
4.4 KiB
Установка через Docker Compose
Полный стек в контейнерах: PostgreSQL 17 + приложение Shop (+ опционально Caddy для HTTPS).
1. Требования
- Docker Engine 24 или новее
- Docker Compose v2 (
docker compose) - Git
- Порты: 3000 (сайт) или 80/443 (с Caddy)
Проверка:
docker --version
docker compose version
2. Получение кода
git clone https://git.evilfox.cc/test/shop10.git
cd shop10
git checkout v0.10.0
3. Настройка переменных
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. Запуск
docker compose up -d --build
Первый запуск: сборка образа app, скачивание postgres:17-alpine, создание таблиц и демо-товаров.
Статус:
docker compose ps
docker compose logs -f app
5. Проверка
curl -s http://127.0.0.1:3000/health
В браузере: http://IP_СЕРВЕРА:3000 или http://localhost:3000
6. HTTPS с Caddy (опционально)
- В
.envустановитеTRUST_PROXY=1 - Отредактируйте
caddy/Caddyfile.docker.example:- укажите свой домен вместо
shop.example.com - или оставьте блок
:80для доступа по IP
- укажите свой домен вместо
- Запуск:
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. Обновление версии
cd shop10
git fetch --tags
git checkout v0.10.0 # или новый тег
docker compose up -d --build
9. Только PostgreSQL (разработка)
Приложение на хосте (npm run dev), БД в Docker:
docker compose -f docker-compose.dev.yml up -d
cp .env.example .env
В .env:
DATABASE_URL=postgresql://shop:shop@127.0.0.1:5432/shop
HOST=0.0.0.0
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 |
Подробнее: Решение проблем