added systemd service howto

This commit is contained in:
cpu
2025-05-08 16:30:37 +02:00
parent 13b227cfc2
commit 8f5b84340b

View File

@@ -125,15 +125,83 @@ For an enhanced tactile experience, Nexus Timer supports Smart Buttons based on
}
```
## Building for the production
Build the docker image:
Clone the repo
```bash
docker build -t nexus-timer .
git clone --depth 1 https://gitea.virtonline.eu/2HoursProject/nexus-timer.git
cd nexus-timer
```
Run the app in the container:
Build the docker image
```bash
docker run --rm -p 8080:80 nexus-timer
docker build -t virt-nexus-timer .
```
Test the web app:
Do some sanity check first: Run the app in the container
```bash
docker run --rm -p 8080:80 virt-nexus-timer
```
Test the web app
```bash
curl http://localhost:8080/
```
## Expose the app on Internet behind the reverse proxy (Traefik)
Create the systemd service file
```bash
sudo systemctl edit --force --full virt-nexus-timer.service
```
File editor will open. Insert the service definition bellow then save and exit.
```bash
[Unit]
Description=nexus-timer (virt-nexus-timer)
Requires=docker.service
After=docker.service
DefaultDependencies=no
[Service]
Type=simple
Environment="HOME=/root"
ExecStartPre=-/usr/bin/env sh -c '/usr/bin/env docker kill virt-nexus-timer 2>/dev/null || true'
ExecStartPre=-/usr/bin/env sh -c '/usr/bin/env docker rm virt-nexus-timer 2>/dev/null || true'
ExecStart=/usr/bin/env docker run \
--rm \
--name=virt-nexus-timer \
--cap-drop=ALL \
--read-only \
--user=997:1002 \
--log-driver=none \
--network=traefik \
--label 'traefik.enable=true' \
--label 'traefik.docker.network=traefik' \
--label 'traefik.http.routers.virt-nexus-timer.rule=Host("nexus-timer.virtonline.eu")' \
--label 'traefik.http.routers.virt-nexus-timer.service=virt-nexus-timer' \
--label 'traefik.http.routers.virt-nexus-timer.tls=true' \
--label 'traefik.http.routers.virt-nexus-timer.tls.certResolver=default' \
--label 'traefik.http.routers.virt-nexus-timer.entrypoints=web-secure' \
--label 'traefik.http.services.virt-nexus-timer.loadbalancer.server.port=80' \
virt-nexus-timer
ExecStop=-/usr/bin/env sh -c '/usr/bin/env docker kill virt-nexus-timer 2>/dev/null || true'
ExecStop=-/usr/bin/env sh -c '/usr/bin/env docker rm virt-nexus-timer 2>/dev/null || true'
Restart=always
RestartSec=30
SyslogIdentifier=virt-nexus-timer
[Install]
WantedBy=multi-user.target
```
Enable the app to start when the server boots and start it now
```bash
sudo systemctl enable --now virt-nexus-timer.service
```
See the service status
```bash
systemctl status virt-nexus-timer.service
```
See the logs
```bash
journalctl -fu virt-nexus-timer.service
```
Finally test the web app
```bash
curl https://nexus-timer.virtonline.eu
```