From a150e4f8c6c48e91824df933be0e49fc01d3093e Mon Sep 17 00:00:00 2001 From: shop Date: Thu, 25 Jun 2026 16:37:52 +0300 Subject: [PATCH] first commit --- README.md | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..6f84941 --- /dev/null +++ b/README.md @@ -0,0 +1,110 @@ +# 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 +```