Добавил сборку на локальном хосте
This commit is contained in:
@@ -2,3 +2,7 @@
|
||||
cache/
|
||||
|
||||
/config.toml
|
||||
|
||||
# Сборка
|
||||
/trackers
|
||||
/dist/
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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"]
|
||||
@@ -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}}
|
||||
Reference in New Issue
Block a user