improved readme
This commit is contained in:
@@ -7,6 +7,8 @@ node_modules
|
|||||||
|
|
||||||
# Docker specific files (if any, other than Dockerfile itself)
|
# Docker specific files (if any, other than Dockerfile itself)
|
||||||
# .dockerignore (to avoid including itself if context changes)
|
# .dockerignore (to avoid including itself if context changes)
|
||||||
|
docker
|
||||||
|
systemd
|
||||||
|
|
||||||
# Local development environment files
|
# Local development environment files
|
||||||
.env
|
.env
|
||||||
|
|||||||
78
README.md
78
README.md
@@ -125,7 +125,11 @@ For an enhanced tactile experience, Nexus Timer supports Smart Buttons based on
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
## Building for the production
|
## Building for the production
|
||||||
Clone the repo
|
Navigate to your project directory on the server
|
||||||
|
```bash
|
||||||
|
cd /virt
|
||||||
|
```
|
||||||
|
Clone the repository
|
||||||
```bash
|
```bash
|
||||||
git clone --depth 1 https://gitea.virtonline.eu/2HoursProject/nexus-timer.git
|
git clone --depth 1 https://gitea.virtonline.eu/2HoursProject/nexus-timer.git
|
||||||
cd nexus-timer
|
cd nexus-timer
|
||||||
@@ -134,76 +138,40 @@ Build the docker image
|
|||||||
```bash
|
```bash
|
||||||
docker build -t virt-nexus-timer .
|
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
|
```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
|
```bash
|
||||||
curl http://localhost:8080/
|
cat systemd/virt-nexus-timer.service
|
||||||
```
|
```
|
||||||
## Expose the app on Internet behind the reverse proxy (Traefik)
|
### Create the systemd service
|
||||||
Create a 'labels' file for Traefik
|
Use the editor to create or overwrite the service:
|
||||||
```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
|
|
||||||
```bash
|
```bash
|
||||||
sudo systemctl edit --force --full virt-nexus-timer.service
|
sudo systemctl edit --force --full virt-nexus-timer.service
|
||||||
```
|
```
|
||||||
File editor will open. Insert the service definition bellow then save and exit.
|
Paste the contents from virt-nexus-timer.service, then save and exit.
|
||||||
```bash
|
|
||||||
[Unit]
|
|
||||||
Description=nexus-timer (virt-nexus-timer)
|
|
||||||
Requires=docker.service
|
|
||||||
After=docker.service
|
|
||||||
DefaultDependencies=no
|
|
||||||
|
|
||||||
[Service]
|
Enable on system boot and start the 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
|
|
||||||
```bash
|
```bash
|
||||||
sudo systemctl enable --now virt-nexus-timer.service
|
sudo systemctl enable --now virt-nexus-timer.service
|
||||||
```
|
```
|
||||||
See the service status
|
Check the service status
|
||||||
```bash
|
```bash
|
||||||
systemctl status virt-nexus-timer.service
|
systemctl status virt-nexus-timer.service
|
||||||
```
|
```
|
||||||
See the logs
|
View real-time logs
|
||||||
```bash
|
```bash
|
||||||
journalctl -fu virt-nexus-timer.service
|
journalctl -fu virt-nexus-timer.service
|
||||||
```
|
```
|
||||||
Finally test the web app
|
# Test the web application
|
||||||
|
Verify that the application is accessible via HTTPS:
|
||||||
```bash
|
```bash
|
||||||
curl https://nexus-timer.virtonline.eu
|
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
8
docker/traefik.labels
Normal 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
8
labels
Normal 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
|
||||||
29
systemd/virt-nexus-timer.service
Normal file
29
systemd/virt-nexus-timer.service
Normal 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
|
||||||
Reference in New Issue
Block a user