
Fly · Set-up and going live
Landing: moving into your own house
Plans and guides the move of a project from Albatros to an own server, explained with the picture of moving into your own house: moving checklist, renting and setting up a server (SSH with keys only, firewall, updates, Caddy for HTTPS), taking the logbook to GitHub, switching the conveyor belt there to the new target over SSH with its own key, taking data and secrets along, testing, switching the address in DNS or moving a domain bought through Albatros to a new registrar with the auth code from domain_mitnehmen, and taking over backups yourself.
- Your AI loads this skill when you say something like
- «my own server», «move my site», «leave Albatros», «Hetzner», «VPS», «self-host», «landing», «what do I need for my own server»
- Missions with this skill
- Source
- View on GitHub
The picture
At Albatros you live in a flat with a caretaker: they lock the front door, change the locks and take a photo of the flat every night. In your own house you do that yourself.
The move isn't a new build. Your project is already packed in boxes that fit anywhere: the logbook (Git), the building instructions (Dockerfile, compose.yaml) and the conveyor belt (workflow). You pack the rest, move and change your address. Only the harbour belongs to the Albatros house: your logbook gets a new harbour, for example GitHub.
How to use the picture: Tell the person in your first answer, before you ask questions or show commands, even if they want a solution straight away.
How you talk
- Don't just ask: If the project or a detail is missing, still give the concrete steps, or write the file as a draft with marked assumptions (
[Assumption: …]). Only ask about what's missing at the end. - Casual “you”. Be honest about the effort: an own server often saves money, but costs time for upkeep.
- The person rents and pays for the server themselves with the provider.
- The old home only gets switched off once the new one is proven to work.
- The Albatros tools answer in German. Pass everything on in English, and always talk to the person in English.
Steps
1. Is the move worth it?
Go through it briefly with the person (see skill kosten): Does the project need more than Albatros offers? Do they want to have everything in their own hands? Do they have an hour or two every month for upkeep? If not, staying is a good decision.
With Light the move is small: the seite/ folder runs with any provider for static sites. Take the logbook to GitHub (step 4, points 1 and 2) and switch the site on there, for example with GitHub Pages. Server, conveyor belt and domain move fall away; the moving checklist stays.
2. Moving checklist
docs/landung.md in the project:
# Moving to my own server
## Boxes
- [ ] Logbook: everything pushed (`git status` clean)
- [ ] Logbook in the new harbour (e.g. GitHub), all entries arrived there
- [ ] Secrets: list of the names from `.env.example` (never the values here!)
- [ ] Data: database, uploaded files (folder: …)
- [ ] Settings: domains, email entries in DNS (don't touch), cron jobs
- [ ] Domain bought through Albatros? Then move it to a new registrar with the auth code (`domain_mitnehmen`)
## What I take over myself
- [ ] Updates (automatic, security updates only)
- [ ] Backups (nightly, off site, encrypted, test restore every month)
- [ ] Monitoring (does the site answer? is the disk full?)
## Steps and date
…
3. The new house
- Rent a server, Ubuntu 24.04, at least as much memory as before. When ordering, store the person's lock (the public key).
- Set it up with a script that's safe to run several times (as root, read it first, then run it):
- Updates, Docker from the official source
- User
deploywith your lock, folder~/projekt - SSH with keys only:
PasswordAuthentication noin/etc/ssh/sshd_config.d/10-haerten.conf, checksshd -tfirst - Firewall: first
ufw allow 22/tcp,80/tcp,443, only thenufw enable(otherwise you lock yourself out). Keep an open SSH session as a lifeline. fail2ban, automatic security updates (unattended-upgrades)- Limits for logs, so the disk doesn't fill up
- Caddy as the doorman in front of the website: gets the certificate for HTTPS by itself as soon as the address points to the server. It goes into
compose.yamlas its own service, and the website itself then only binds to127.0.0.1. One mistake in theCaddyfilebrings everything down: runcaddy validatebefore every reload, and check from outside afterwards.
4. Take the logbook and conveyor belt along
At Albatros, the conveyor belt's worker lives in the house. In your own house, a worker from GitHub takes over: it doesn't build things itself, but rings at the new server with its own key and has it deliver.
- New harbour: The person creates an account on github.com themselves. Then install
gh(Mac:brew install gh) and rungh auth login; signing in happens in the browser. - Move the logbook:
git remote rename origin albatros
gh repo create <projektname> --private --source . --remote origin --push
The old harbour stays reachable as albatros until you move out.
- Read-only key for the new server: It fetches the logbook itself, read-only. Its house key stays on the server, only the lock goes to GitHub:
ssh deploy@<neue-adresse> 'ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N "" -C eigener-server'
ssh deploy@<neue-adresse> 'cat ~/.ssh/id_ed25519.pub' > server-schloss.pub
gh repo deploy-key add server-schloss.pub --title "eigener-server" # read-only, that's the default
rm server-schloss.pub
ssh deploy@<neue-adresse> 'ssh-keyscan -t ed25519 github.com >> ~/.ssh/known_hosts && git clone git@github.com:<benutzer>/<projektname>.git ~/projekt'
Compare the fingerprint of github.com with the one on docs.github.com.
- A key of its own for the conveyor belt, never the person's house key. That way it can be blocked on its own:
ssh-keygen -t ed25519 -f ~/.ssh/fliessband -N "" -C fliessband
ssh deploy@<neue-adresse> 'cat >> ~/.ssh/authorized_keys' < ~/.ssh/fliessband.pub
gh secret set DEPLOY_KEY < ~/.ssh/fliessband
gh secret set DEPLOY_KNOWN_HOSTS --body "$(ssh-keyscan -t ed25519 <neue-adresse> 2>/dev/null)"
gh variable set SERVER --body "deploy@<neue-adresse>"
gh variable set SEITE_URL --body "https://<domain>"
The key goes straight from the file into GitHub's safe (secrets), never into the chat and never into the logbook. After that, ~/.ssh/fliessband may be deleted from the computer.
- Adjust the workflow: In
.github/workflows/deploy.yml, the worker and the way to the server change. The rest stays:
jobs:
fliessband:
runs-on: ubuntu-latest # a GitHub worker instead of your server
permissions:
contents: read # as few rights as possible
concurrency:
group: ausliefern
cancel-in-progress: false # never cancel a delivery that's running
env:
ZIEL: ${{ vars.SERVER }}
SEITE: ${{ vars.SEITE_URL }}
SHA: ${{ github.sha }}
steps:
- name: Schlüssel des Fliessbands einsetzen
env:
DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
DEPLOY_KNOWN_HOSTS: ${{ secrets.DEPLOY_KNOWN_HOSTS }}
run: |
[ -n "$DEPLOY_KEY" ] || { echo "::error::Secret DEPLOY_KEY fehlt"; exit 1; }
install -d -m 700 ~/.ssh
printf '%s\n' "$DEPLOY_KEY" > ~/.ssh/id_ed25519 && chmod 600 ~/.ssh/id_ed25519
printf '%s\n' "$DEPLOY_KNOWN_HOSTS" > ~/.ssh/known_hosts
- name: Bauen und ausliefern, notfalls zurück
run: |
ssh "$ZIEL" "SHA=$SHA bash -s" <<'EOF'
# paste the block from the Albatros version here, from "set -euo pipefail" to "echo "läuft: $SHA"", without the line with willkommen
EOF
- name: Endkontrolle von aussen
run: |
# unchanged from the Albatros version
Secrets only get into the commands through env:, never directly as ${{ secrets.… }} in a run line. Then gh workflow run deploy.yml and gh run watch. It has to turn green.
5. Take data and secrets along
.envdirectly from server to server, or via your own computer withscp, never through Git.- Database: back it up on Albatros (e.g.
sqlite3 app.sqlite ".backup kopie.sqlite"orpg_dump), restore it on the new server. - Uploaded files with
rsync -a.
6. Switch the address
First test through the new server's address, without changing the phone book: curl --resolve <domain>:443:<neue-ip> https://<domain>/. Then it depends on where the address is rented.
Bought through Albatros (konto_status shows it under “Eigene Domains”, own domains): Albatros keeps the phone book for it. The address moves along to a registrar the person chooses:
- The person creates an account with the new registrar themselves.
- Only call
domain_mitnehmenafter their yes. From then on, Albatros no longer renews the address. Until the move, it keeps pointing to the Albatros server. - The tool gives the auth code, the key for moving the address. Show it only to the person, never in a file or in the logbook. They enter it at the new registrar and start the move there (transfer). Usually they pay for a year's renewal while doing so. With
.comand.net, a move often isn't possible in the first 60 days after buying. - Once the move is through, they set the entries at the new registrar: A and AAAA to the new server,
wwwand the email entries (MX), if there were any.
Rented somewhere else:
- The day before, lower the validity (TTL) of the entries to 300 seconds. Then the switch goes faster.
- A and AAAA record to the new server. You don't need to deregister anything at Albatros for that.
Then check: https://<domain> answers, www redirects, the padlock is there.
7. Only then move out
Watch it for a week. If everything runs, adjust or cancel the plan at Albatros (cockpit). A domain the person bought through Albatros moves first (step 6), otherwise it expires with their plan. There are no more photos (snapshots) after that: from now on, your own backups are what counts.
8. Check the mission
docs/landung.md into the logbook and over the conveyor belt (skills git-logbuch, pipeline), then mission_pruefen with flugschule-10-landung. The check looks at whether the moving checklist docs/landung.md is in the project (with Pilot on the Albatros server, with Light in the harbour). Ideally, the person writes the checklist while they still live at Albatros.
Stumbling blocks
- No certificate: the address doesn't point to the new server yet, or port 80 is closed.
- Docker ports bypass the firewall: internal services only on
127.0.0.1. - Backups set up but never restored: a backup only counts once a test restore has worked.
- Automatic restart after updates: only if everything comes back up by itself afterwards.
Final message
Your last message in this step starts with one sentence on the picture “moving into your own house” that sums up the core once more. Then: what's done, where the result is, what's still open and what comes next.

The air traffic controller
Anyone can read. The air traffic controller knows what’s up now.
The library is open: you can read every skill and use it yourself, even without an account.
The air traffic controller is the main skill of Albatros. At the right moment it reads the right skill, based on where you really stand: plan, key, server or page, conveyor belt, domain and your next mission. For that, you sign in.