feat: rename service to galo, add halo branding and release build

- rename Go module, binary, systemd unit, PG_DATABASE default, frontend package and docs from shared-album to galo
- add theme-aware halo emblem and favicon (new ui-branding capability)
- add make build-release (versioned, stripped, static binary) and run the binary from the repo root
This commit is contained in:
iu
2026-10-11 11:36:56 +03:00
parent 29c2594a9b
commit 50dff63ece
89 changed files with 696 additions and 254 deletions
+17 -17
View File
@@ -66,7 +66,7 @@
### Сборка backend
```bash
cd backend
CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o ../bin/shared-album ./cmd/server
CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o ../bin/galo ./cmd/server
```
### Сборка frontend
@@ -84,10 +84,10 @@ cp -r build/* ../backend/static/
3. Собрать backend (`go build`) — статика вшивается в бинарник
4. Положить бинарник на сервер и запустить через systemd
### systemd unit `/etc/systemd/system/shared-album.service`
### systemd unit `/etc/systemd/system/galo.service`
```ini
[Unit]
Description=Shared Album backend
Description=Galo backend
After=network-online.target
Wants=network-online.target
@@ -95,9 +95,9 @@ Wants=network-online.target
Type=simple
User=album
Group=album
WorkingDirectory=/opt/shared-album
EnvironmentFile=/opt/shared-album/.env
ExecStart=/opt/shared-album/shared-album
WorkingDirectory=/opt/galo
EnvironmentFile=/opt/galo/.env
ExecStart=/opt/galo/galo
Restart=on-failure
RestartSec=5s
@@ -106,7 +106,7 @@ NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/opt/shared-album
ReadWritePaths=/opt/galo
[Install]
WantedBy=multi-user.target
@@ -115,8 +115,8 @@ WantedBy=multi-user.target
Активация:
```bash
sudo systemctl daemon-reload
sudo systemctl enable --now shared-album
sudo journalctl -u shared-album -f
sudo systemctl enable --now galo
sudo journalctl -u galo -f
```
### Прокси (опционально)
@@ -141,7 +141,7 @@ PG_HOST=pg.localnet
PG_PORT=5432
PG_USER=album
PG_PASSWORD=change_me
PG_DATABASE=shared_album
PG_DATABASE=galo
PG_SSLMODE=disable
# Metadata backend
@@ -480,7 +480,7 @@ X-Accel-Buffering: no
## 13. Структура проекта
```
shared-album/
galo/
├── backend/
│ ├── cmd/server/main.go
│ ├── internal/
@@ -527,7 +527,7 @@ shared-album/
│ ├── vite.config.ts
│ └── package.json
├── deploy/
│ ├── shared-album.service # systemd unit
│ ├── galo.service # systemd unit
│ └── nginx-sse.conf # пример прокси для SSE
├── tailwind.config.ts
├── .env.example
@@ -547,12 +547,12 @@ frontend:
backend:
cd backend && CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" \
-o ../bin/shared-album ./cmd/server
-o ../bin/galo ./cmd/server
build: frontend backend
run: backend
./bin/shared-album
./bin/galo
migrate:
cd backend && migrate -path migrations -database \
@@ -605,7 +605,7 @@ migrate:
## 18. Пошаговые промпты для итеративной генерации
### Шаг 1 — Скелет и подключения
Создай структуру проекта shared-album: backend (Go + Gin) и frontend
Создай структуру проекта galo: backend (Go + Gin) и frontend
(SvelteKit 2 + Svelte 5 + adapter-static + Tailwind).
Без Docker — нативная сборка Go-бинарника, статика вшивается через go:embed.
Используй существующие pg.localnet и Garage на s3.localnet.
@@ -614,7 +614,7 @@ config-пакет на Go, подключение к pg.localnet через pgx
клиент S3 к Garage (AWS SDK v2, region=garage, UsePathStyle=true),
health-check /api/health (проверяет БД и S3).
Добавь Makefile: build (frontend → static → backend), run, migrate.
Добавь systemd unit deploy/shared-album.service.
Добавь systemd unit deploy/galo.service.
### Шаг 2 — Миграции
Добавь golang-migrate и миграции для таблиц: users, albums, album_members,
@@ -666,7 +666,7 @@ ThemeSwitcher.svelte — 4 кнопки с активным состоянием
### Шаг 8 — Сборка и деплой без Docker
Настрой Makefile: frontend собирается в статику, копируется в backend/static,
backend собирается с go:embed. Финальный артефакт — один бинарник.
Добавь systemd unit в deploy/shared-album.service с EnvironmentFile=.env
Добавь systemd unit в deploy/galo.service с EnvironmentFile=.env
и базовым харденингом (NoNewPrivileges, ProtectSystem, PrivateTmp).
Добавь пример nginx-конфига с proxy_buffering off для SSE.
Напиши README: как собрать, как положить бинарник, как запустить через systemd.