v0.30: product pages, categories, sale prices and order status timeline
This commit is contained in:
@@ -1,8 +1,20 @@
|
||||
# Shop — Интернет-магазин
|
||||
|
||||
Главная страница интернет-магазина на **Go**, **PostgreSQL 17**, **Docker Compose** и **Caddy** (обратный прокси + SSL).
|
||||
Полнофункциональный интернет-магазин на **Go**, **PostgreSQL 17**, **Docker Compose** и **Caddy**.
|
||||
|
||||
Проект настроен для развёртывания на **Ubuntu 22.04 / 24.04**.
|
||||
**Текущая версия:** `v0.30-beta`
|
||||
|
||||
## Возможности
|
||||
|
||||
| Модуль | Описание |
|
||||
|--------|----------|
|
||||
| Каталог | Главная, категории, карточки товаров со скидками |
|
||||
| Товар | Страница `/product/{id}` с описанием, фото и скриншотами |
|
||||
| Категории | `/category/{slug}` — управление в админке |
|
||||
| Корзина | Добавление, изменение количества, расчёт со скидкой |
|
||||
| Заказы | Оформление гостем или зарегистрированным пользователем |
|
||||
| Личный кабинет | Профиль, история заказов со статус-таймлайном |
|
||||
| Админка | Товары, категории, скриншоты, редактор Quill, статистика |
|
||||
|
||||
## Стек
|
||||
|
||||
@@ -12,164 +24,108 @@
|
||||
| База данных | PostgreSQL 17 |
|
||||
| Прокси / SSL | Caddy 2 |
|
||||
| ОС | Ubuntu 22.04 / 24.04 |
|
||||
| Контейнеризация | Docker Compose |
|
||||
|
||||
## Быстрый старт на Ubuntu
|
||||
## Быстрый старт (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
|
||||
sudo bash setup.sh
|
||||
```
|
||||
|
||||
Откройте в браузере:
|
||||
- `http://IP_СЕРВЕРА` — магазин
|
||||
- `http://IP_СЕРВЕРА/admin/login` — админка
|
||||
|
||||
Или через Make:
|
||||
Или обновление существующего:
|
||||
|
||||
```bash
|
||||
make install # sudo, установка Docker
|
||||
make deploy # первый запуск
|
||||
make logs # просмотр логов
|
||||
cd /opt/shop
|
||||
bash scripts/redeploy.sh
|
||||
```
|
||||
|
||||
## Продакшен с доменом и 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
|
||||
curl http://localhost/health
|
||||
# {"status":"ok","version":"v0.30-beta"}
|
||||
```
|
||||
|
||||
Или:
|
||||
## Маршруты магазина
|
||||
|
||||
```bash
|
||||
make ssl DOMAIN=shop.example.com EMAIL=admin@example.com
|
||||
```
|
||||
| Путь | Описание |
|
||||
|------|----------|
|
||||
| `/` | Главная |
|
||||
| `/product/{id}` | Страница товара |
|
||||
| `/category/{slug}` | Категория |
|
||||
| `/cart` | Корзина |
|
||||
| `/checkout` | Оформление заказа |
|
||||
| `/register`, `/login` | Регистрация и вход |
|
||||
| `/account` | Личный кабинет |
|
||||
| `/admin/` | Админ-панель |
|
||||
|
||||
Caddy автоматически получит сертификат Let's Encrypt.
|
||||
## Скидки
|
||||
|
||||
Вручную через `.env`:
|
||||
В админке при редактировании товара укажите **Цена** и **Цена со скидкой**.
|
||||
На сайте отображается старая цена зачёркнутой и бейдж `-N%`.
|
||||
|
||||
```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
|
||||
```
|
||||
| Код | Отображение |
|
||||
|-----|-------------|
|
||||
| `new` | Новый |
|
||||
| `confirmed` | Подтверждён |
|
||||
| `processing` | В обработке |
|
||||
| `shipped` | Отправлен |
|
||||
| `delivered` | Доставлен |
|
||||
| `cancelled` | Отменён |
|
||||
|
||||
В личном кабинете — цветной бейдж и таймлайн прогресса.
|
||||
|
||||
## Админ
|
||||
|
||||
Администратор создаётся автоматически при старте из `.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 (внутри) | База данных |
|
||||
|
||||
## Обновление на сервере
|
||||
## SSL
|
||||
|
||||
```bash
|
||||
./scripts/update.sh
|
||||
# или
|
||||
make update
|
||||
./scripts/enable-ssl.sh shop.example.com admin@example.com
|
||||
```
|
||||
|
||||
## Локальная разработка (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
|
||||
bash scripts/redeploy.sh
|
||||
```
|
||||
|
||||
## Структура проекта
|
||||
Скрипт делает `git reset --hard`, пересборку Docker без кэша и проверку `/health`.
|
||||
|
||||
## Структура
|
||||
|
||||
```
|
||||
shop/
|
||||
├── cmd/shop/main.go
|
||||
├── cmd/shop/ # Точка входа
|
||||
├── internal/
|
||||
│ ├── handlers/ # HTTP, шаблоны, статика
|
||||
│ ├── repository/ # БД
|
||||
│ ├── orderstatus/ # Статусы заказов
|
||||
│ └── ...
|
||||
├── 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
|
||||
│ ├── deploy.sh
|
||||
│ ├── redeploy.sh # Полное обновление
|
||||
│ └── update.sh
|
||||
└── docker-compose.yml
|
||||
```
|
||||
|
||||
## 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
|
||||
- Ubuntu 22.04 / 24.04
|
||||
- 1 CPU, 1 GB RAM
|
||||
- Порты 22, 80, 443
|
||||
|
||||
Reference in New Issue
Block a user