Skip to content

Commit 8e42698

Browse files
committed
Merge #423: docs: [#414] post-deployment manual steps for floating IPs and IPv6
2dda404 refactor: [#414] reorganize provider docs into per-provider subdirectories (Jose Celano) fa73300 docs: [#414] post-deployment manual steps for floating IPs and IPv6 (Jose Celano) Pull request description: ## Overview Closes #414 Adds a new provider guide documenting the manual post-deployment steps required when using Hetzner floating IPs and/or IPv6 UDP tracker support. Also reorganizes provider documentation into per-provider subdirectories. ## Changes - **New**: `docs/user-guide/providers/hetzner/post-deployment.md` — step-by-step guide covering: - Step 1: Floating IP policy routing (netplan configuration for symmetric routing) - Step 2: Enable Docker ip6tables management - Step 3: Enable IPv6 on the Docker bridge network - Step 4: SNAT for IPv6 UDP replies via floating IP - Scenario matrix showing which steps apply to which setup - **Reorganized**: provider docs moved into per-provider subdirectories: - `docs/user-guide/providers/hetzner.md` → `docs/user-guide/providers/hetzner/README.md` - `docs/user-guide/providers/lxd.md` → `docs/user-guide/providers/lxd/README.md` - **Updated**: `docs/user-guide/providers/README.md` — updated links to new structure - **Updated**: all files referencing the old provider doc paths (13 files) - **Updated**: `project-words.txt` — added `SNAT` and `POSTROUTING` to the project dictionary ## References - Issue: #414 - Reference implementation: [torrust/torrust-tracker-demo](https://github.com/torrust/torrust-tracker-demo) - Root-cause investigation: [torrust-tracker-demo#2](torrust/torrust-tracker-demo#2) ACKs for top commit: josecelano: ACK 2dda404 Tree-SHA512: 86bce8f8d69e23609f002d45604f8a2af1ae7bb48ab6146579e71eb1012e6e5aaf13974a63f9117ed9018e506d417e069bf5e663653568262ba274768e52aa2d
2 parents 588fa47 + 2dda404 commit 8e42698

14 files changed

Lines changed: 271 additions & 36 deletions

File tree

.github/skills/dev/testing/troubleshoot-lxd-instances/skill.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,5 +184,5 @@ lxc info <instance>
184184

185185
- Emergency cleanup: use the `clean-lxd-environments` skill
186186
- Expected test errors: use the `debug-test-errors` skill
187-
- LXD provider docs: [`docs/user-guide/providers/lxd.md`](../../../../docs/user-guide/providers/lxd.md)
187+
- LXD provider docs: [`docs/user-guide/providers/lxd/`](../../../../docs/user-guide/providers/lxd/)
188188
- E2E troubleshooting: [`docs/e2e-testing/troubleshooting.md`](../../../../docs/e2e-testing/troubleshooting.md)

docs/deployments/hetzner-demo-tracker/deployment-spec.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ The file is stored at `envs/torrust-tracker-demo.json` (git-ignored — contains
160160

161161
## Related Documentation
162162

163-
- [Hetzner server types and pricing](../../user-guide/providers/hetzner.md#available-server-types)
163+
- [Hetzner server types and pricing](../../user-guide/providers/hetzner/#available-server-types)
164164
- [HTTPS/TLS configuration](../../user-guide/services/https.md)
165165
- [Grafana service](../../user-guide/services/grafana.md)
166166
- [Prometheus service](../../user-guide/services/prometheus.md)

docs/deployments/hetzner-demo-tracker/prerequisites.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,6 @@ torrust-tracker-demo.com. 3600 IN SOA hydrogen.ns.hetzner.com. dns.hetzner.com.
202202

203203
## Related Documentation
204204

205-
- [Hetzner Cloud Provider guide](../../user-guide/providers/hetzner.md)
205+
- [Hetzner Cloud Provider guide](../../user-guide/providers/hetzner/)
206206
- [Quick Start: Docker Deployment](../../user-guide/quick-start/docker.md)
207207
- [Quick Start: Native Installation](../../user-guide/quick-start/native.md)

docs/issues/405-deploy-hetzner-demo-tracker-and-document-process.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
**Issue**: #405
44
**Parent Epic**: None
5-
**Related**: [docs/user-guide/providers/hetzner.md](../user-guide/providers/hetzner.md), [docs/user-guide/quick-start/docker.md](../user-guide/quick-start/docker.md)
5+
**Related**: [docs/user-guide/providers/hetzner/](../user-guide/providers/hetzner/), [docs/user-guide/quick-start/docker.md](../user-guide/quick-start/docker.md)
66

77
## Overview
88

@@ -118,7 +118,7 @@ See [`docs/deployments/hetzner-demo-tracker/post-provision/`](../deployments/het
118118

119119
## Related Documentation
120120

121-
- [Hetzner Cloud Provider](../user-guide/providers/hetzner.md)
121+
- [Hetzner Cloud Provider](../user-guide/providers/hetzner/)
122122
- [Quick Start: Docker Deployment](../user-guide/quick-start/docker.md)
123123
- [Deployment Overview](../deployment-overview.md)
124124
- [User Guide](../user-guide/README.md)

docs/issues/411-bug-ssh-key-passphrase-breaks-automated-deployment.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ Create `docs/user-guide/ssh-keys.md` covering:
210210

211211
#### Update: Hetzner provider guide
212212

213-
`docs/user-guide/providers/hetzner.md` — add a "SSH Key Requirements" section or
213+
`docs/user-guide/providers/hetzner/` — add a "SSH Key Requirements" section or
214214
callout box noting that Docker-based deployments require a passphrase-free key (or agent
215215
forwarding) and linking to the new SSH keys page.
216216

@@ -246,7 +246,7 @@ configured private key appears to be passphrase-protected.
246246
### Phase 3: Documentation
247247

248248
- [ ] Create `docs/user-guide/ssh-keys.md` covering all workflows and security notes
249-
- [ ] Update `docs/user-guide/providers/hetzner.md` with an SSH key requirements note
249+
- [ ] Update `docs/user-guide/providers/hetzner/` with an SSH key requirements note
250250
- [ ] Update `docs/user-guide/commands/create.md` to mention the passphrase warning
251251
- [ ] Update `docs/user-guide/README.md` to link to the new `ssh-keys.md` page
252252

@@ -276,11 +276,11 @@ configured private key appears to be passphrase-protected.
276276
forwarding, separate key)
277277
- [ ] `docs/user-guide/ssh-keys.md` exists and covers key requirements, workflows, and
278278
security notes
279-
- [ ] `docs/user-guide/providers/hetzner.md` references the SSH key requirements
279+
- [ ] `docs/user-guide/providers/hetzner/` references the SSH key requirements
280280

281281
## Related Documentation
282282

283283
- [docs/deployments/hetzner-demo-tracker/commands/provision/problems.md](../deployments/hetzner-demo-tracker/commands/provision/problems.md) — root cause analysis and resolution for the Hetzner deployment failure
284284
- [src/adapters/ssh/ssh/credentials.rs](../../src/adapters/ssh/ssh/credentials.rs) — `SshCredentials` struct
285285
- [src/presentation/cli/controllers/create/subcommands/environment/handler.rs](../../src/presentation/cli/controllers/create/subcommands/environment/handler.rs) — where the warning is added
286-
- [docs/user-guide/providers/hetzner.md](../user-guide/providers/hetzner.md) — Hetzner provider guide
286+
- [docs/user-guide/providers/hetzner/](../user-guide/providers/hetzner/) — Hetzner provider guide

docs/security/ssh-root-access-hetzner.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,5 +131,5 @@ Consider disabling root access after successful deployment:
131131
## Related Documentation
132132

133133
- [ADR: Hetzner SSH Key Dual Injection Pattern](../decisions/hetzner-ssh-key-dual-injection.md)
134-
- [Hetzner Provider Documentation](../user-guide/providers/hetzner.md)
134+
- [Hetzner Provider Documentation](../user-guide/providers/hetzner/)
135135
- [SSH Keys Guide](../tech-stack/ssh-keys.md)

docs/tools/lxd-cleanup.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,4 +240,4 @@ cargo run --bin lxd_cleanup -- environment-name
240240

241241
- [E2E Testing Documentation](../e2e-testing/README.md)
242242
- [Preflight Cleanup Implementation](../../src/testing/e2e/tasks/virtual_machine/preflight_cleanup.rs)
243-
- [LXD Provider Documentation](../user-guide/providers/lxd.md)
243+
- [LXD Provider Documentation](../user-guide/providers/lxd/)

docs/user-guide/providers/README.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ This directory contains provider-specific configuration guides.
44

55
## Available Providers
66

7-
| Provider | Status | Description |
8-
| --------------------------- | --------- | ------------------------------------------ |
9-
| [LXD](lxd.md) | ✅ Stable | Local development using LXD containers/VMs |
10-
| [Hetzner Cloud](hetzner.md) | 🆕 New | Cost-effective European cloud provider |
7+
| Provider | Status | Description |
8+
| ------------------------- | --------- | ------------------------------------------ |
9+
| [LXD](lxd/) | ✅ Stable | Local development using LXD containers/VMs |
10+
| [Hetzner Cloud](hetzner/) | 🆕 New | Cost-effective European cloud provider |
1111

1212
## Choosing a Provider
1313

@@ -30,7 +30,7 @@ To add a new provider:
3030
1. Create OpenTofu templates in `templates/tofu/<provider>/`
3131
2. Add provider configuration types in `src/domain/provider/`
3232
3. Update the template renderer for provider-specific logic
33-
4. Add documentation in `docs/user-guide/providers/<provider>.md`
33+
4. Add documentation in `docs/user-guide/providers/<provider>/README.md`
3434

3535
See the [contributing guide](../../contributing/README.md) for more details.
3636

@@ -39,3 +39,4 @@ See the [contributing guide](../../contributing/README.md) for more details.
3939
- [Quick Start Guides](../quick-start/README.md) - Docker and native installation guides
4040
- [Commands Reference](../commands/README.md) - Available commands
4141
- [SSH Keys](../../tech-stack/ssh-keys.md) - SSH key generation and management
42+
- [Hetzner Post-Deployment](hetzner/post-deployment.md) - Manual steps for floating IPs and IPv6

docs/user-guide/providers/hetzner.md renamed to docs/user-guide/providers/hetzner/README.md

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ This guide covers Hetzner-specific configuration for cloud deployments.
1717

1818
- Hetzner Cloud account ([sign up](https://www.hetzner.com/cloud))
1919
- API token with read/write permissions
20-
- SSH key pair (see [SSH keys guide](../../tech-stack/ssh-keys.md))
20+
- SSH key pair (see [SSH keys guide](../../../tech-stack/ssh-keys.md))
2121

2222
## Create API Token
2323

@@ -143,7 +143,7 @@ cat /var/log/cloud-init-output.log
143143
2. **Restrict SSH access** - Consider using Hetzner Firewall
144144
3. **Use strong SSH keys** - Ed25519 or RSA 4096-bit minimum
145145
4. **Regular updates** - Keep server packages updated
146-
5. **Disable root SSH access** - For production, see [SSH Root Access Guide](../../security/ssh-root-access-hetzner.md)
146+
5. **Disable root SSH access** - For production, see [SSH Root Access Guide](../../../security/ssh-root-access-hetzner.md)
147147

148148
## SSH Key Requirements
149149

@@ -163,13 +163,13 @@ private key will cause the `provision` step to fail with
163163
# Press Enter twice for an empty new passphrase
164164
```
165165

166-
2. **Forward your SSH agent** into the container (see [SSH Keys Guide](../ssh-keys.md#workflow-2--passphrase-protected-key-with-ssh-agent-forwarding-into-docker)).
166+
2. **Forward your SSH agent** into the container (see [SSH Keys Guide](../../ssh-keys.md#workflow-2--passphrase-protected-key-with-ssh-agent-forwarding-into-docker)).
167167

168168
The `create environment` command will warn you if it detects a passphrase-protected key
169169
so you can resolve this before reaching `provision`.
170170

171171
For more detail on generating keys, removing passphrases, and security considerations,
172-
see the [SSH Keys Guide](../ssh-keys.md).
172+
see the [SSH Keys Guide](../../ssh-keys.md).
173173

174174
## SSH Key Behavior
175175

@@ -182,14 +182,15 @@ Hetzner deployments configure SSH access through two mechanisms:
182182

183183
**Why both?** If cloud-init fails, root SSH access provides a debugging path. Without it, a failed cloud-init would leave the server completely inaccessible.
184184

185-
**For stricter security**: You can disable root SSH access after deployment. See [SSH Root Access on Hetzner](../../security/ssh-root-access-hetzner.md) for instructions.
185+
**For stricter security**: You can disable root SSH access after deployment. See [SSH Root Access on Hetzner](../../../security/ssh-root-access-hetzner.md) for instructions.
186186

187187
**Note**: The SSH key appears in your Hetzner Console under **Security****SSH Keys** with the name `torrust-tracker-vm-<environment>-ssh-key`.
188188

189189
## Related Documentation
190190

191-
- [Quick Start: Docker](../quick-start/docker.md) - Deploy to Hetzner using Docker
192-
- [Quick Start: Native](../quick-start/native.md) - Deploy using native installation
193-
- [SSH Keys Guide](../../tech-stack/ssh-keys.md) - SSH key generation
194-
- [SSH Root Access Security](../../security/ssh-root-access-hetzner.md) - Disabling root access
195-
- [LXD Provider](lxd.md) - Local development alternative
191+
- [Quick Start: Docker](../../quick-start/docker.md) - Deploy to Hetzner using Docker
192+
- [Quick Start: Native](../../quick-start/native.md) - Deploy using native installation
193+
- [SSH Keys Guide](../../../tech-stack/ssh-keys.md) - SSH key generation
194+
- [SSH Root Access Security](../../../security/ssh-root-access-hetzner.md) - Disabling root access
195+
- [LXD Provider](../lxd/) - Local development alternative
196+
- [Post-Deployment: Floating IPs and IPv6](post-deployment.md) - Manual steps for floating IPs and IPv6 UDP

0 commit comments

Comments
 (0)