Add Ubuntu deployment: scripts, SSL, systemd and setup.sh

This commit is contained in:
shop
2026-06-25 16:47:01 +03:00
parent ee5688f722
commit 8a7f79a70c
19 changed files with 387 additions and 58 deletions
+97 -32
View File
@@ -2,6 +2,8 @@
Главная страница интернет-магазина на **Go**, **PostgreSQL 17**, **Docker Compose** и **Caddy** (обратный прокси + SSL).
Проект настроен для развёртывания на **Ubuntu 22.04 / 24.04**.
## Стек
| Компонент | Технология |
@@ -9,20 +11,74 @@
| Backend | Go 1.23, `net/http`, `pgx/v5` |
| База данных | PostgreSQL 17 |
| Прокси / SSL | Caddy 2 |
| ОС | Ubuntu 22.04 / 24.04 |
| Контейнеризация | Docker Compose |
## Быстрый старт
## Быстрый старт на Ubuntu
```bash
# Скопировать переменные окружения
cp .env.example .env
# Клонировать репозиторий
git clone https://git.evilfox.cc/test2/shop-go.git /opt/shop
cd /opt/shop
# Запустить все сервисы
docker compose up --build -d
# 1. Установить Docker (один раз, с sudo)
sudo ./scripts/install-ubuntu.sh
# Открыть в браузере
# http://localhost
# http://localhost/admin/login — админка
# Перелогиниться или:
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
```
## Админ
@@ -35,7 +91,9 @@ ADMIN_PASSWORD=change_me
SESSION_SECRET=your_random_secret_key_here
```
Вход: **http://localhost/admin/login**
Скрипт `deploy.sh` генерирует пароли автоматически при первом запуске.
Вход: `/admin/login`
При изменении `ADMIN_PASSWORD` пароль обновится в БД при следующем запуске.
@@ -46,29 +104,26 @@ SESSION_SECRET=your_random_secret_key_here
| Caddy | 80, 443 | Обратный прокси, SSL |
| App | 8080 (внутри) | Go-приложение |
| PostgreSQL | 5432 (внутри) | База данных |
| Caddy Admin | 2019 | Панель управления Caddy |
## SSL в продакшене
1. Укажите домен в `.env`:
```
DOMAIN=shop.example.com
```
2. Обновите `Caddyfile` — раскомментируйте блок с `{$DOMAIN}` и закомментируйте `:80`.
3. Убедитесь, что порты 80 и 443 открыты. Caddy автоматически получит сертификат Let's Encrypt.
## Локальная разработка без Docker
## Обновление на сервере
```bash
# Запустить только PostgreSQL
./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
```
@@ -76,15 +131,19 @@ go run ./cmd/shop
```
shop/
├── cmd/shop/main.go # Точка входа
├── cmd/shop/main.go
├── internal/
│ ├── database/ # Подключение к PostgreSQL
│ ├── handlers/ # HTTP-обработчики, шаблоны, статика
│ ├── models/ # Модели данных
── repository/ # Запросы к БД
├── migrations/ # SQL-миграции
├── Caddyfile # Конфигурация Caddy
├── 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
```
@@ -108,3 +167,9 @@ docker compose down
# С удалением данных БД
docker compose down -v
```
## Требования к серверу Ubuntu
- 1 CPU, 1 GB RAM (минимум)
- Ubuntu 22.04 или 24.04 LTS
- Открытые порты 22 (SSH), 80, 443