improved readme

This commit is contained in:
cpu
2025-05-09 10:20:46 +02:00
parent f2786e116a
commit 04379a4cec
5 changed files with 70 additions and 55 deletions

View File

@@ -7,6 +7,8 @@ node_modules
# Docker specific files (if any, other than Dockerfile itself)
# .dockerignore (to avoid including itself if context changes)
docker
systemd
# Local development environment files
.env

View File

@@ -125,7 +125,11 @@ For an enhanced tactile experience, Nexus Timer supports Smart Buttons based on
}
```
## Building for the production
Clone the repo
Navigate to your project directory on the server
```bash
cd /virt
```
Clone the repository
```bash
git clone --depth 1 https://gitea.virtonline.eu/2HoursProject/nexus-timer.git
cd nexus-timer
@@ -134,76 +138,40 @@ Build the docker image
```bash
docker build -t virt-nexus-timer .
```
Do some sanity check first: Run the app in the container
## Exposing the App Behind Traefik (Reverse Proxy)
### Review the provided docker labels and systemd service file
Copy the example label file to its destination
```bash
docker run --rm -p 8080:80 virt-nexus-timer
cp docker/traefik.labels labels
```
Test the web app
View the example service definition:
```bash
curl http://localhost:8080/
cat systemd/virt-nexus-timer.service
```
## Expose the app on Internet behind the reverse proxy (Traefik)
Create a 'labels' file for Traefik
```bash
sudo tee labels <<EOF
traefik.enable=true
traefik.docker.network=traefik
traefik.http.routers.virt-nexus-timer.rule=Host("nexus-timer.virtonline.eu")
traefik.http.routers.virt-nexus-timer.service=virt-nexus-timer
traefik.http.routers.virt-nexus-timer.tls=true
traefik.http.routers.virt-nexus-timer.tls.certResolver=default
traefik.http.routers.virt-nexus-timer.entrypoints=web-secure
traefik.http.services.virt-nexus-timer.loadbalancer.server.port=80
EOF
```
Create the systemd service file
### Create the systemd service
Use the editor to create or overwrite the service:
```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
Paste the contents from virt-nexus-timer.service, then save and exit.
[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 \
--network=traefik-net \
--label-file /opt/nexus-timer/labels \
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
Enable on system boot and start the service
```bash
sudo systemctl enable --now virt-nexus-timer.service
```
See the service status
Check the service status
```bash
systemctl status virt-nexus-timer.service
```
See the logs
View real-time logs
```bash
journalctl -fu virt-nexus-timer.service
```
Finally test the web app
# Test the web application
Verify that the application is accessible via HTTPS:
```bash
curl https://nexus-timer.virtonline.eu
```
Or open it in your browser:
[https://nexus-timer.virtonline.eu](https://nexus-timer.virtonline.eu)

8
docker/traefik.labels Normal file
View File

@@ -0,0 +1,8 @@
traefik.enable=true
traefik.docker.network=traefik
traefik.http.routers.virt-nexus-timer.rule=Host("nexus-timer.virtonline.eu")
traefik.http.routers.virt-nexus-timer.service=virt-nexus-timer
traefik.http.routers.virt-nexus-timer.tls=true
traefik.http.routers.virt-nexus-timer.tls.certResolver=default
traefik.http.routers.virt-nexus-timer.entrypoints=web-secure
traefik.http.services.virt-nexus-timer.loadbalancer.server.port=80

8
labels Normal file
View File

@@ -0,0 +1,8 @@
traefik.enable=true
traefik.docker.network=traefik
traefik.http.routers.virt-nexus-timer.rule=Host("nexus-timer.virtonline.eu")
traefik.http.routers.virt-nexus-timer.service=virt-nexus-timer
traefik.http.routers.virt-nexus-timer.tls=true
traefik.http.routers.virt-nexus-timer.tls.certResolver=default
traefik.http.routers.virt-nexus-timer.entrypoints=web-secure
traefik.http.services.virt-nexus-timer.loadbalancer.server.port=80

View File

@@ -0,0 +1,29 @@
[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 \
--log-driver=none \
--network=traefik \
--label-file /virt/nexus-timer/labels \
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