176 lines
4.7 KiB
Markdown
176 lines
4.7 KiB
Markdown
# 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
|
||
|
||
```bash
|
||
# Клонировать репозиторий
|
||
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:
|
||
|
||
```bash
|
||
make install # sudo, установка Docker
|
||
make deploy # первый запуск
|
||
make logs # просмотр логов
|
||
```
|
||
|
||
## Продакшен с доменом и SSL
|
||
|
||
1. Настройте DNS: A-запись домена → IP сервера Ubuntu
|
||
2. Откройте порты 80 и 443 (скрипт `install-ubuntu.sh` настраивает ufw)
|
||
3. Включите SSL:
|
||
|
||
```bash
|
||
./scripts/enable-ssl.sh shop.example.com admin@example.com
|
||
```
|
||
|
||
Или:
|
||
|
||
```bash
|
||
make ssl DOMAIN=shop.example.com EMAIL=admin@example.com
|
||
```
|
||
|
||
Caddy автоматически получит сертификат Let's Encrypt.
|
||
|
||
Вручную через `.env`:
|
||
|
||
```env
|
||
DOMAIN=shop.example.com
|
||
CADDY_EMAIL=admin@example.com
|
||
CADDYFILE=./Caddyfile.prod
|
||
```
|
||
|
||
Затем: `docker compose up -d --force-recreate caddy`
|
||
|
||
## Автозапуск при загрузке Ubuntu
|
||
|
||
```bash
|
||
sudo cp systemd/shop.service /etc/systemd/system/
|
||
# Отредактируйте WorkingDirectory, если проект не в /opt/shop
|
||
sudo systemctl daemon-reload
|
||
sudo systemctl enable --now shop
|
||
```
|
||
|
||
## Админ
|
||
|
||
Администратор создаётся автоматически при старте из `.env`:
|
||
|
||
```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 (внутри) | База данных |
|
||
|
||
## Обновление на сервере
|
||
|
||
```bash
|
||
./scripts/update.sh
|
||
# или
|
||
make update
|
||
```
|
||
|
||
## Локальная разработка (Ubuntu)
|
||
|
||
```bash
|
||
# Только 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` | Выход |
|
||
|
||
## Остановка
|
||
|
||
```bash
|
||
docker compose down
|
||
|
||
# С удалением данных БД
|
||
docker compose down -v
|
||
```
|
||
|
||
## Требования к серверу Ubuntu
|
||
|
||
- 1 CPU, 1 GB RAM (минимум)
|
||
- Ubuntu 22.04 или 24.04 LTS
|
||
- Открытые порты 22 (SSH), 80, 443
|