# Shop — Интернет-магазин Главная страница интернет-магазина на **Go**, **PostgreSQL 17**, **Docker Compose** и **Caddy** (обратный прокси + SSL). ## Стек | Компонент | Технология | |-----------|------------| | Backend | Go 1.23, `net/http`, `pgx/v5` | | База данных | PostgreSQL 17 | | Прокси / SSL | Caddy 2 | | Контейнеризация | Docker Compose | ## Быстрый старт ```bash # Скопировать переменные окружения cp .env.example .env # Запустить все сервисы docker compose up --build -d # Открыть в браузере # http://localhost # http://localhost/admin/login — админка ``` ## Админ Администратор создаётся автоматически при старте из `.env`: ```env ADMIN_EMAIL=admin@shop.local ADMIN_PASSWORD=change_me SESSION_SECRET=your_random_secret_key_here ``` Вход: **http://localhost/admin/login** При изменении `ADMIN_PASSWORD` пароль обновится в БД при следующем запуске. ## Сервисы | Сервис | Порт | Описание | |--------|------|----------| | Caddy | 80, 443 | Обратный прокси, SSL | | App | 8080 (внутри) | Go-приложение | | PostgreSQL | 5432 (внутри) | База данных | | Caddy Admin | 2019 | Панель управления Caddy | ## SSL в продакшене 1. Укажите домен в `.env`: ``` DOMAIN=shop.example.com ``` 2. Обновите `Caddyfile` — раскомментируйте блок с `{$DOMAIN}` и закомментируйте `:80`. 3. Убедитесь, что порты 80 и 443 открыты. Caddy автоматически получит сертификат Let's Encrypt. ## Локальная разработка без Docker ```bash # Запустить только PostgreSQL docker compose up db -d # Установить зависимости и запустить приложение go mod tidy go run ./cmd/shop # http://localhost:8080 ``` ## Структура проекта ``` shop/ ├── cmd/shop/main.go # Точка входа ├── internal/ │ ├── database/ # Подключение к PostgreSQL │ ├── handlers/ # HTTP-обработчики, шаблоны, статика │ ├── models/ # Модели данных │ └── repository/ # Запросы к БД ├── migrations/ # SQL-миграции ├── Caddyfile # Конфигурация Caddy ├── docker-compose.yml └── Dockerfile ``` ## API | Метод | Путь | Описание | |-------|------|----------| | GET | `/` | Главная страница | | GET | `/health` | Health check | | GET | `/static/*` | CSS и статика | | GET | `/admin/login` | Страница входа | | POST | `/admin/login` | Авторизация | | GET | `/admin/` | Админ-панель | | POST | `/admin/logout` | Выход | ## Остановка ```bash docker compose down # С удалением данных БД docker compose down -v ```