first commit
This commit is contained in:
@@ -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
|
||||
```
|
||||
Reference in New Issue
Block a user