3.3 KiB
3.3 KiB
Shop — Интернет-магазин
Главная страница интернет-магазина на Go, PostgreSQL 17, Docker Compose и Caddy (обратный прокси + SSL).
Стек
| Компонент | Технология |
|---|---|
| Backend | Go 1.23, net/http, pgx/v5 |
| База данных | PostgreSQL 17 |
| Прокси / SSL | Caddy 2 |
| Контейнеризация | Docker Compose |
Быстрый старт
# Скопировать переменные окружения
cp .env.example .env
# Запустить все сервисы
docker compose up --build -d
# Открыть в браузере
# http://localhost
# http://localhost/admin/login — админка
Админ
Администратор создаётся автоматически при старте из .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 в продакшене
-
Укажите домен в
.env:DOMAIN=shop.example.com -
Обновите
Caddyfile— раскомментируйте блок с{$DOMAIN}и закомментируйте:80. -
Убедитесь, что порты 80 и 443 открыты. Caddy автоматически получит сертификат Let's Encrypt.
Локальная разработка без Docker
# Запустить только 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 |
Выход |
Остановка
docker compose down
# С удалением данных БД
docker compose down -v