AAA 02e71621f2 feat(deploy): ship Server containers and repair NAT-PMP mappings (#400)
## 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.
2026-09-13 23:09:14 +08:00

Piik mascot

Piik

Share the good stuff.
Private screen sharing for you and up to 20 friends.

Website · Download · Gitee mirror · Try the demo · Documentation

License: MIT Up to 20 viewers P2P-first media

English · 简体中文

Piik is a free, open-source screen sharing tool for games, movie nights, drawings and photos. Choose what to share and send an invitation. Your friends watch in their browsers.

A little room · Show / hide animation

A host with a gold crown switches between a gamepad, paintbrush, camera and remote as friends watch games, drawings, photos and a film.

Features · Get started · Self-hosting · Contributing

Features

  • Watch without installing. Friends join by invitation in a desktop or mobile browser.
  • Share from Piik App or an existing Piik site. Capture a screen, window or browser tab; available sources and audio depend on the platform.
  • Direct connections first. Media travels between participants where possible (P2P). A self-hosted server can provide automatic media forwarding (SFU) as a fallback.
  • Rooms you control. Invitations, room codes and optional room passwords, for one host and up to 20 viewers.
  • Flexible viewing. Light and dark themes, playback controls, picture-in-picture and a connection topology view.
  • One program to host a site. Web UI, room management and optional media forwarding are packaged together.

Piik room: a shared game, playback controls and friends on a sofa. The host wears a small gold crown.
Interface preview · Sample room with a generated game scene

Get started

To watch: open the invitation your friend sends you. Select Play if the picture does not start automatically.

To share:

Start here What you need to do
Try the online demo Open it in a desktop browser and start sharing.
Download Piik App Extract and open the App, choose Public invite, then Open Piik to create a temporary room.
Use an existing Piik site Open the address your friend or administrator provides. Hosting your own is an advanced option.

Choose a screen, send an invitation, watch together.

  1. Select Start sharing, then choose the picture and audio to share.
  2. Select Copy invite link and send it to your friends. Keep the sharing tab open.

Piik follows your system language: Chinese or English, with English as the fallback. Use 中 / EN / ✦ in the header to switch language or try the visual mode. The App offers a local room, a temporary public link, or a connection to your own site. Keep the App running while sharing through it.

Download a ZIP beginning with piik-app. The filename also identifies the platform:

Filename contains Platform
windows-amd64 Windows x64
darwin-arm64 Apple silicon; native capture requires macOS 13+
linux-amd64 Linux x64

Full setup guide → · Open the demo →

Browser capture requires HTTPS or localhost. Windows App and desktop browser sharing are the primary tested paths. The macOS and Linux apps have not yet been tested on physical devices; test results and feedback are welcome. P2P-only modes, including the App's temporary public link and the demo, may not connect on restrictive networks.

Self-hosting

Piik Server is a standalone binary with the web interface built in. Download the Linux x64 Server package, extract it, and run:

./piik-server

Open http://localhost:8787 to try it locally. For a public site, configure your domain, HTTPS reverse proxy and STUN address. Room data is stored in SQLite. For containers, use the Docker Compose setup.

Deploy your own site → · Configuration · Run from source

Contributing

Bug reports, translations, documentation improvements and pull requests are welcome. See ways to contribute or help translate Piik. Use the repository layout to find your way around.

License

Piik-owned code is MIT licensed. Dependencies retain their own licenses and notices.

S
Description
Free, open-source screen sharing for friends. P2P-first, with browser viewing, a desktop app and optional self-hosting.
https://piik.tv
Readme MIT
9.7 MiB
0 Stars 1 Watchers 0 Forks
Languages
TypeScript 46.2%
Go 36.5%
C++ 5.9%
JavaScript 5%
CSS 2.5%
Other 3.9%