first commit

This commit is contained in:
shop
2026-06-25 16:37:52 +03:00
commit a150e4f8c6
+110
View File
@@ -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
```