## Problem and outcome / 问题与结果 Self-hosting currently requires assembling a Server installation, while App port mappings can use the wrong external port or remain active after cancellation. This phase adds a verified Linux x64 Server image and Compose recipe, and repairs the existing NAT-PMP dependencies so mapping results, cancellation and cleanup follow the gateway response and request lifetime. The image wraps the exact verified Server archive and is tested before publication. Version tags retain their original image; `latest` follows the latest published GitHub release. The two scoped dependency replacements retain upstream source, tests and licenses, with their removal criteria documented in `internal/thirdparty/README.md`. Planned release: **v1.3.0** (compatible Docker distribution feature plus NAT fixes). ## Release notes ### 中文 - 新增 Linux x64 Docker 镜像与 Compose 部署方式,内置网页、信令和 STUN,可按需开启 SFU 兜底。提供部署、更新与备份教程。 - 修复 App 的 NAT-PMP 端口映射:正确使用路由器分配的外部端口,并在关闭时尝试删除映射。 - NAT-PMP 请求会随取消或超时结束,避免连接尝试结束后继续在后台重试。 已有配置和房间数据格式保持兼容,更新无需迁移。 ### English - Added a Linux x64 Docker image and Compose setup with the Web UI, signaling, STUN and optional SFU fallback, plus deployment, update and backup guides. - Fixed App NAT-PMP mappings to use the external port assigned by the router and attempt mapping removal on shutdown. - NAT-PMP requests now stop on cancellation or timeout, preventing retries from continuing after a connection attempt has ended. Existing configuration and room data formats remain compatible; no migration is required. ## Verification / 验证 [Candidate CI](https://github.com/TNTcraftHIM/Piik/actions/runs/34761969362) passed for `1d8de6c4690434cd2cf44fbdee4f45b1776432fa`. The final two files changed after that run are documentation only (`docs/todo.md` and `docs/verification-status.md`), with repository hygiene checked separately. - Web type checks, unit tests and production build; Go core tests, vet and target builds; NAT and media-edge race detection. - Actual packaged-image checks with Docker Compose: production startup, embedded Web, UDP STUN, optional SFU startup, retained room authority across recreation, diagnostic ZIP export, non-root/read-only execution and clean shutdown. - Windows x64, Linux x64 and macOS arm64 App packaging. - Scoped NAT dependency regressions cover assigned ports, renewal, deletion, cancellation, lost replies and PCPv6 composition using real local UDP endpoints. The publishing pipeline reruns the image checks for the merged release revision. First publication also requires making the GHCR package public and checking anonymous pulls of its version and `latest` tags. Representative physical routers, public-media networks and operator-specific HTTPS/firewall settings remain outside the container smoke test. ## Impact / 影响 No signaling, native-control or storage-format change. Existing App/Server installations remain compatible. Docker supports `linux/amd64` in this phase; its default is P2P, and SFU remains an explicit deployment option. Existing deployments keep their configuration. README, bilingual self-hosting guides, container maintenance, versioning, dependency provenance and NAT evidence are updated. Completed feedback is removed from TODO; ongoing network evidence remains tracked there.
135 lines
5.9 KiB
AMPL
135 lines
5.9 KiB
AMPL
module github.com/TNTcraftHIM/Piik
|
|
|
|
go 1.26
|
|
|
|
// Scoped NAT-PMP fixes; provenance and removal criteria: internal/thirdparty/README.md.
|
|
replace github.com/netbirdio/go-nat => ./internal/thirdparty/go-nat
|
|
|
|
replace github.com/jackpal/go-nat-pmp => ./internal/thirdparty/go-nat-pmp
|
|
|
|
require (
|
|
charm.land/bubbletea/v2 v2.0.9
|
|
charm.land/lipgloss/v2 v2.0.6
|
|
github.com/charmbracelet/colorprofile v0.4.3
|
|
github.com/charmbracelet/x/ansi v0.11.8
|
|
github.com/charmbracelet/x/term v0.2.2
|
|
github.com/coder/websocket v1.8.15
|
|
github.com/go-logr/logr v1.4.4
|
|
github.com/livekit/livekit-server v1.13.6
|
|
github.com/livekit/mediatransportutil v0.0.0-20260821083140-f234b534b095
|
|
github.com/livekit/protocol v1.50.5-0.20260821144838-17c16cf496fd
|
|
github.com/livekit/server-sdk-go/v2 v2.14.0
|
|
github.com/netbirdio/go-nat v0.0.0-20260821095157-6b2c8c5c74e8
|
|
github.com/pion/ice/v4 v4.4.0
|
|
github.com/pion/interceptor v0.1.47
|
|
github.com/pion/logging v0.2.4
|
|
github.com/pion/rtcp v1.2.17
|
|
github.com/pion/rtp v1.10.5
|
|
github.com/pion/sdp/v3 v3.0.19
|
|
github.com/pion/stun/v3 v3.1.6
|
|
github.com/pion/transport/v4 v4.1.0
|
|
github.com/pion/turn/v5 v5.0.12
|
|
github.com/pion/webrtc/v4 v4.2.18
|
|
github.com/thesyncim/gopus v0.1.1
|
|
go.uber.org/zap v1.28.0
|
|
golang.org/x/crypto v0.54.0
|
|
golang.org/x/mod v0.38.0
|
|
golang.org/x/text v0.41.0
|
|
google.golang.org/protobuf v1.36.11
|
|
modernc.org/sqlite v1.58.0
|
|
)
|
|
|
|
require (
|
|
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20260709200747-435963d16310.1 // indirect
|
|
buf.build/go/protovalidate v1.2.0 // indirect
|
|
buf.build/go/protoyaml v0.7.0 // indirect
|
|
cel.dev/expr v0.25.2 // indirect
|
|
github.com/antlr4-go/antlr/v4 v4.13.1 // indirect
|
|
github.com/benbjohnson/clock v1.3.5 // indirect
|
|
github.com/beorn7/perks v1.0.1 // indirect
|
|
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
|
github.com/charmbracelet/ultraviolet v0.0.0-20260811164956-006e29f97886 // indirect
|
|
github.com/charmbracelet/x/termios v0.1.1 // indirect
|
|
github.com/charmbracelet/x/windows v0.2.2 // indirect
|
|
github.com/clipperhouse/displaywidth v0.11.0 // indirect
|
|
github.com/clipperhouse/uax29/v2 v2.7.0 // indirect
|
|
github.com/dennwc/iters v1.2.2 // indirect
|
|
github.com/dustin/go-humanize v1.0.1 // indirect
|
|
github.com/elliotchance/orderedmap/v3 v3.1.1 // indirect
|
|
github.com/florianl/go-tc v0.4.8 // indirect
|
|
github.com/frostbyte73/core v0.1.1 // indirect
|
|
github.com/fsnotify/fsnotify v1.10.1 // indirect
|
|
github.com/gammazero/deque v1.2.1 // indirect
|
|
github.com/go-logr/stdr v1.2.2 // indirect
|
|
github.com/golang-jwt/jwt/v5 v5.3.1 // indirect
|
|
github.com/google/cel-go v0.30.0 // indirect
|
|
github.com/google/go-cmp v0.7.0 // indirect
|
|
github.com/google/gopacket v1.1.19 // indirect
|
|
github.com/google/uuid v1.6.0 // indirect
|
|
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
|
github.com/hashicorp/go-retryablehttp v0.7.8 // indirect
|
|
github.com/huin/goupnp v1.2.0 // indirect
|
|
github.com/jackpal/go-nat-pmp v1.0.2 // indirect
|
|
github.com/jellydator/ttlcache/v3 v3.4.1 // indirect
|
|
github.com/josharian/native v1.1.0 // indirect
|
|
github.com/jxskiss/base62 v1.1.0 // indirect
|
|
github.com/klauspost/compress v1.19.1 // indirect
|
|
github.com/klauspost/cpuid/v2 v2.4.0 // indirect
|
|
github.com/koron/go-ssdp v0.0.4 // indirect
|
|
github.com/libp2p/go-netroute v0.2.1 // indirect
|
|
github.com/lithammer/shortuuid/v4 v4.2.0 // indirect
|
|
github.com/livekit/mageutil v0.0.0-20250511045019-0f1ff63f7731 // indirect
|
|
github.com/livekit/psrpc v0.7.3 // indirect
|
|
github.com/lucasb-eyer/go-colorful v1.4.1 // indirect
|
|
github.com/mackerelio/go-osstat v0.2.8 // indirect
|
|
github.com/mattn/go-isatty v0.0.24 // indirect
|
|
github.com/mattn/go-runewidth v0.0.24 // indirect
|
|
github.com/mdlayher/netlink v1.11.2 // indirect
|
|
github.com/mdlayher/socket v0.6.1 // indirect
|
|
github.com/muesli/cancelreader v0.2.2 // indirect
|
|
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
|
github.com/nats-io/nats.go v1.52.0 // indirect
|
|
github.com/nats-io/nkeys v0.4.16 // indirect
|
|
github.com/nats-io/nuid v1.0.1 // indirect
|
|
github.com/ncruces/go-strftime v1.0.0 // indirect
|
|
github.com/petermattis/goid v0.0.0-20260725062400-500c67a39b75 // indirect
|
|
github.com/pion/datachannel v1.6.2 // indirect
|
|
github.com/pion/dtls/v3 v3.1.5 // indirect
|
|
github.com/pion/mdns/v2 v2.1.0 // indirect
|
|
github.com/pion/randutil v0.1.0 // indirect
|
|
github.com/pion/sctp v1.11.1 // indirect
|
|
github.com/pion/srtp/v3 v3.0.13 // indirect
|
|
github.com/prometheus/client_golang v1.24.1 // indirect
|
|
github.com/prometheus/client_model v0.6.2 // indirect
|
|
github.com/prometheus/common v0.70.1 // indirect
|
|
github.com/prometheus/procfs v0.21.1 // indirect
|
|
github.com/puzpuzpuz/xsync/v4 v4.5.0 // indirect
|
|
github.com/redis/go-redis/v9 v9.22.0 // indirect
|
|
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
|
|
github.com/rivo/uniseg v0.4.7 // indirect
|
|
github.com/twitchtv/twirp v8.1.3+incompatible // indirect
|
|
github.com/wlynxg/anet v0.0.5 // indirect
|
|
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
|
|
github.com/zeebo/xxh3 v1.1.0 // indirect
|
|
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
|
|
go.opentelemetry.io/otel v1.45.0 // indirect
|
|
go.opentelemetry.io/otel/metric v1.45.0 // indirect
|
|
go.opentelemetry.io/otel/trace v1.45.0 // indirect
|
|
go.uber.org/atomic v1.11.0 // indirect
|
|
go.uber.org/multierr v1.11.0 // indirect
|
|
go.uber.org/zap/exp v0.3.0 // indirect
|
|
go.yaml.in/yaml/v3 v3.0.5 // indirect
|
|
golang.org/x/exp v0.0.0-20260727155853-b88d891fe743 // indirect
|
|
golang.org/x/net v0.57.0 // indirect
|
|
golang.org/x/sync v0.22.0 // indirect
|
|
golang.org/x/sys v0.47.0 // indirect
|
|
golang.org/x/time v0.15.0 // indirect
|
|
google.golang.org/genproto/googleapis/api v0.0.0-20260803160001-6ac0973c030d // indirect
|
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20260803160001-6ac0973c030d // indirect
|
|
google.golang.org/grpc v1.83.0 // indirect
|
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
|
modernc.org/libc v1.75.6 // indirect
|
|
modernc.org/mathutil v1.7.1 // indirect
|
|
modernc.org/memory v1.12.1 // indirect
|
|
)
|