nix/container.nix
Rama main · réplica de lectura del repositorio original.
{ config, pkgs, ... }:
let
deno = config.languages.deno.package;
server = pkgs.writeShellApplication {
name = "tickets-server";
runtimeInputs = [
deno
pkgs.coreutils
pkgs.util-linux
];
text = builtins.readFile ../scripts/container/start.sh;
};
appFiles = pkgs.runCommand "tickets-app" {
APP_SOURCE = ../src;
DENO_CONFIG = ../deno.json;
DENO_LOCK = ../deno.lock;
WORKSPACE_CONFIG = ../e2e-payments/deno.json;
} (builtins.readFile ../scripts/container/app-files.sh);
cacheFiles = pkgs.runCommand "tickets-deno-cache" {
CACHE_SOURCE = ../.container-work/deno-cache;
} (builtins.readFile ../scripts/container/cache-files.sh);
in
{
scripts = {
container-build.exec = builtins.readFile ../scripts/container/build.sh;
container-load.exec = builtins.readFile ../scripts/container/load.sh;
container-check.exec = builtins.readFile ../scripts/container/check.sh;
};
outputs.tickets-image = pkgs.dockerTools.streamLayeredImage {
name = "ghcr.io/chobbledotcom/tickets";
tag = "latest";
contents = [
appFiles
server
cacheFiles
];
fakeRootCommands = builtins.readFile ../scripts/container/permissions.sh;
config = {
Env = [ "DENO_DIR=/deno-cache" ];
Entrypoint = [
"${pkgs.tini}/bin/tini"
"--"
"${server}/bin/tickets-server"
];
WorkingDir = "/app";
ExposedPorts."3000/tcp" = { };
Volumes."/data" = { };
# /health also answers before site setup.
Healthcheck = {
Test = [
"CMD"
"${deno}/bin/deno"
"eval"
"const r = await fetch('http://127.0.0.1:3000/health'); if (!r.ok) Deno.exit(1);"
];
Interval = 30000000000;
Retries = 3;
StartPeriod = 10000000000;
Timeout = 5000000000;
};
};
};
}