Добавить Install-Docker
+143
@@ -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)
|
||||||
Reference in New Issue
Block a user