diff --git a/README.md b/README.md index 9b5ab6e..c27d224 100644 --- a/README.md +++ b/README.md @@ -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 +``` \ No newline at end of file