{ pkgs, ... }: let shlink-web-client = pkgs.runCommandLocal "shlink-web-client" { } '' mkdir -p $out/var/www cp -r ${pkgs.shlink-web-client} $out/var/www/shlink-web-client ''; nginxConfig = pkgs.writeTextDir "/etc/nginx/nginx.conf" '' user root; daemon off; pid /var/run/nginx.pid; events { } http { include ${pkgs.nginx}/conf/mime.types; default_type application/octet-stream; charset utf-8; access_log off; error_log /dev/stderr; server { listen 8080 default_server; root /var/www/shlink-web-client; index index.html; location = / { return 301 /web/; } location = /web { return 301 /web/; } location /web/ { alias /var/www/shlink-web-client/; try_files $uri $uri/ /index.html; } } } ''; entrypoint = pkgs.writeTextFile { name = "entrypoint"; executable = true; destination = "/bin/entrypoint"; text = builtins.readFile ./entrypoint.sh; }; in pkgs.dockerTools.buildImage { name = "shlink-web-client"; fromImage = import ../base { inherit pkgs; }; copyToRoot = pkgs.buildEnv { name = "root"; paths = with pkgs; [ entrypoint shlink-web-client nginxConfig nginx ]; pathsToLink = [ "/bin" "/var" "/etc" ]; }; runAsRoot = '' mkdir -p /var/run /var/log/nginx ''; config = { Entrypoint = [ "entrypoint" ]; WorkingDir = "/var/www/shlink-web-client"; ExposedPorts = { "8080/tcp" = { }; }; }; }