Добавил сборку на локальном хосте

This commit is contained in:
2026-06-15 10:57:11 +03:00
parent e4854beeca
commit 7c59682628
4 changed files with 87 additions and 0 deletions
+4
View File
@@ -2,3 +2,7 @@
cache/
/config.toml
# Сборка
/trackers
/dist/
+18
View File
@@ -20,6 +20,12 @@ This is an educational project written in Go 1.26.
go build -o trackers ./main.go
```
Через [Task](https://taskfile.dev) (`task --list` — полный список):
```bash
task build # статический бинарь linux/amd64 (CGO_ENABLED=0) для сервера
task image # docker-образ из готового бинаря (Dockerfile.deploy)
```
### Run
```bash
go run main.go -config config.toml
@@ -48,6 +54,18 @@ Uses goreleaser for cross-platform builds (Linux amd64/arm64):
goreleaser build --snapshot --clean
```
## Deploy paths
Two independent ways to ship the service:
1. **Yandex Container Registry (buckland)** — CI (`.gitea/workflows/release.yml`)
собирает образ из `Dockerfile` (многоступенчатая сборка из исходников) и
пушит в реестр; buckland тянет образ оттуда.
2. **Локальная сборка (umbar)**`Dockerfile.deploy` упаковывает готовый
бинарь (`task build`). Плейбук `umbar/playbook-trackers.yml` собирает бинарь
на control-хосте, доставляет его + `Dockerfile.deploy` на сервер и собирает
образ там (Go-тулчейн на сервере не нужен). Так же устроен `jellybit`.
## Architecture
**Single File Design**: All code is in `main.go` with clear functional separation:
+17
View File
@@ -0,0 +1,17 @@
# Упаковка готового статического бинаря в минимальный образ — деплой на umbar
# (см. ../umbar/playbook-trackers.yml). Бинарь собирается снаружи:
# CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o trackers . (task build)
# distroless/static несёт CA-сертификаты (HTTPS к источникам списков трекеров).
# Пользователь задаётся в compose (user: "1000:1000").
#
# Тома (см. compose): /config (ro, рендерится плейбуком) + /cache (пишет сам).
#
# Канонический Dockerfile (многоступенчатая сборка из исходников) живёт рядом и
# используется CI (Yandex Registry) — этот файл нужен только серверной сборке.
FROM gcr.io/distroless/static-debian12
COPY trackers /usr/local/bin/trackers
EXPOSE 8080
ENTRYPOINT ["/usr/local/bin/trackers", "-config", "/config/config.toml"]
+48
View File
@@ -0,0 +1,48 @@
# yaml-language-server: $schema=https://taskfile.dev/schema.json
#
# Запуск команд проекта через Task (https://taskfile.dev).
# Список задач: `task --list`.
version: '3'
vars:
BINARY: trackers
PKG: .
tasks:
default:
desc: Список доступных задач
cmds:
- task --list
silent: true
run:
desc: 'Локальный запуск (нужен ./config.toml)'
cmds:
- go run {{.PKG}} -config ./config.toml
build:
desc: Статический бинарь linux/amd64 для сервера (деплой umbar)
cmds:
- CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -ldflags='-s -w' -o {{.BINARY}} {{.PKG}}
test:
desc: Прогон тестов
cmds:
- go test ./...
tidy:
desc: go mod tidy
cmds:
- go mod tidy
image:
desc: 'Docker-образ из готового бинаря (Dockerfile.deploy, как на сервере umbar)'
deps: [build]
cmds:
- docker build -f Dockerfile.deploy -t trackers:dev .
clean:
desc: Удалить собранный бинарь
cmds:
- rm -f {{.BINARY}}