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

  1. Настройте DNS: A-запись домена → IP сервера Ubuntu
  2. Откройте порты 80 и 443 (скрипт install-ubuntu.sh настраивает ufw)
  3. Включите 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
S
Description
No description provided
Readme
128 KiB
1.0
Latest
2026-06-26 16:04:10 +00:00
Languages
Go 50.4%
HTML 29.9%
CSS 14.6%
Shell 4.3%
Makefile 0.5%
Other 0.3%