Files
m2dev-server/deploy/systemd/README.md
2026-04-14 13:21:02 +02:00

55 lines
1.8 KiB
Markdown

# systemd deployment
This directory contains the versioned systemd deployment used for the Debian runtime.
## Install
Run the installer as `root` and point it at the live runtime root:
```bash
cd /path/to/m2dev-server
python3 deploy/systemd/install_systemd.py \
--user mt2.jakubkadlec.dev \
--group mt2.jakubkadlec.dev \
--runtime-root /home/mt2.jakubkadlec.dev/metin/runtime/server \
--env-file /etc/metin/metin.env \
--channel 1 \
--channel 99 \
--restart
```
`--channel-limit 1` is also supported and will auto-include channel `99` when present in the channel inventory.
The channel selection and port layout now come from the versioned inventory file:
- [deploy/channel-inventory.json](../channel-inventory.json)
## What it installs
- `metin-server.service`
- `metin-db.service`
- `metin-db-ready.service`
- `metin-auth.service`
- `metin-game@.service`
- `/usr/local/libexec/metin-game-instance-start`
- `/usr/local/libexec/metin-wait-port`
- `/usr/local/bin/metinctl`
- `/usr/local/sbin/metin-collect-incident`
The `metin-db-ready.service` gate waits until the DB socket is actually accepting connections before `auth` and `game` units start.
The installer also reconciles enabled `metin-game@...` instances against the selected channel set so stale units do not stay enabled forever.
The runtime unit templates now also set `LimitCORE=infinity` for `db`, `auth`, and `game` services.
## Optional Environment File
The runtime units support an optional `EnvironmentFile` for host-local overrides:
- default path: `/etc/metin/metin.env`
- it is loaded with `EnvironmentFile=-...`, so the file may be absent
- recommended ownership: `root:root`
- recommended mode: `0600`
This is the preferred place for production-only values such as DB credentials and the admin page password.