v0.20-beta
Shop — Интернет-магазин
Главная страница интернет-магазина на Go, PostgreSQL 17, Docker Compose и Caddy (обратный прокси + SSL).
Проект настроен для развёртывания на Ubuntu 22.04 / 24.04.
Стек
| Компонент | Технология |
|---|---|
| Backend | Go 1.23, net/http, pgx/v5 |
| База данных | PostgreSQL 17 |
| Прокси / SSL | Caddy 2 |
| ОС | Ubuntu 22.04 / 24.04 |
| Контейнеризация | Docker Compose |
Быстрый старт на Ubuntu
# Клонировать репозиторий
git clone https://git.evilfox.cc/test2/shop-go.git /opt/shop
cd /opt/shop
# 1. Установить Docker (один раз, с sudo)
sudo ./scripts/install-ubuntu.sh
# Перелогиниться или:
newgrp docker
# 2. Запустить магазин
chmod +x scripts/*.sh
./scripts/deploy.sh
Откройте в браузере:
http://IP_СЕРВЕРА— магазинhttp://IP_СЕРВЕРА/admin/login— админка
Или через Make:
make install # sudo, установка Docker
make deploy # первый запуск
make logs # просмотр логов
Продакшен с доменом и SSL
- Настройте DNS: A-запись домена → IP сервера Ubuntu
- Откройте порты 80 и 443 (скрипт
install-ubuntu.shнастраивает ufw) - Включите SSL:
./scripts/enable-ssl.sh shop.example.com admin@example.com
Или:
make ssl DOMAIN=shop.example.com EMAIL=admin@example.com
Caddy автоматически получит сертификат Let's Encrypt.
Вручную через .env:
DOMAIN=shop.example.com
CADDY_EMAIL=admin@example.com
CADDYFILE=./Caddyfile.prod
Затем: docker compose up -d --force-recreate caddy
Автозапуск при загрузке Ubuntu
sudo cp systemd/shop.service /etc/systemd/system/
# Отредактируйте WorkingDirectory, если проект не в /opt/shop
sudo systemctl daemon-reload
sudo systemctl enable --now shop
Админ
Администратор создаётся автоматически при старте из .env:
ADMIN_EMAIL=admin@shop.local
ADMIN_PASSWORD=change_me
SESSION_SECRET=your_random_secret_key_here
Скрипт deploy.sh генерирует пароли автоматически при первом запуске.
Вход: /admin/login
При изменении ADMIN_PASSWORD пароль обновится в БД при следующем запуске.
Сервисы
| Сервис | Порт | Описание |
|---|---|---|
| Caddy | 80, 443 | Обратный прокси, SSL |
| App | 8080 (внутри) | Go-приложение |
| PostgreSQL | 5432 (внутри) | База данных |
Обновление на сервере
./scripts/update.sh
# или
make update
Локальная разработка (Ubuntu)
# Только PostgreSQL в Docker
docker compose up db -d
export DB_HOST=localhost DB_USER=shop DB_PASSWORD=shop_secret DB_NAME=shop
export ADMIN_EMAIL=admin@shop.local ADMIN_PASSWORD=change_me
go mod tidy
go run ./cmd/shop
# http://localhost:8080
Структура проекта
shop/
├── cmd/shop/main.go
├── internal/
├── migrations/
├── scripts/
│ ├── install-ubuntu.sh # установка Docker + ufw
│ ├── deploy.sh # первый запуск
│ ├── enable-ssl.sh # SSL для домена
│ └── update.sh # обновление
├── systemd/shop.service # автозапуск
├── Caddyfile # HTTP (IP / localhost)
├── Caddyfile.prod # HTTPS (домен)
├── docker-compose.yml
├── Makefile
└── 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
Требования к серверу Ubuntu
- 1 CPU, 1 GB RAM (минимум)
- Ubuntu 22.04 или 24.04 LTS
- Открытые порты 22 (SSH), 80, 443