2024-04-21 15:28:35 -07:00
|
|
|
# Dependencies
|
2026-01-30 01:04:33 +01:00
|
|
|
{
|
|
|
|
|
bashInteractive,
|
|
|
|
|
buildEnv,
|
|
|
|
|
coreutils,
|
|
|
|
|
dockerTools,
|
|
|
|
|
lib,
|
|
|
|
|
main,
|
|
|
|
|
stdenv,
|
|
|
|
|
tini,
|
|
|
|
|
writeShellScriptBin,
|
2024-04-21 15:28:35 -07:00
|
|
|
}:
|
|
|
|
|
|
|
|
|
|
let
|
|
|
|
|
main' = main.override {
|
2024-07-25 18:06:45 -04:00
|
|
|
profile = "test";
|
2024-07-24 19:07:25 -04:00
|
|
|
all_features = true;
|
|
|
|
|
disable_release_max_log_level = true;
|
|
|
|
|
disable_features = [
|
2026-01-30 01:04:33 +01:00
|
|
|
# console/CLI stuff isn't used or relevant for complement
|
|
|
|
|
"console"
|
|
|
|
|
"tokio_console"
|
|
|
|
|
# sentry telemetry isn't useful for complement, disabled by default anyways
|
|
|
|
|
"sentry_telemetry"
|
|
|
|
|
"perf_measurements"
|
|
|
|
|
# this is non-functional on nix for some reason
|
|
|
|
|
"hardened_malloc"
|
|
|
|
|
# dont include experimental features
|
|
|
|
|
"experimental"
|
|
|
|
|
# compression isn't needed for complement
|
|
|
|
|
"brotli_compression"
|
|
|
|
|
"gzip_compression"
|
|
|
|
|
"zstd_compression"
|
|
|
|
|
# complement doesn't need hot reloading
|
|
|
|
|
"tuwunel_mods"
|
|
|
|
|
# complement doesn't have URL preview media tests
|
|
|
|
|
"url_preview"
|
2024-07-24 19:07:25 -04:00
|
|
|
];
|
2024-04-21 15:28:35 -07:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
start = writeShellScriptBin "start" ''
|
|
|
|
|
set -euxo pipefail
|
|
|
|
|
|
|
|
|
|
${lib.getExe' coreutils "env"} \
|
2025-06-13 03:45:34 +00:00
|
|
|
TUWUNEL_SERVER_NAME="$SERVER_NAME" \
|
2024-04-21 15:28:35 -07:00
|
|
|
${lib.getExe main'}
|
|
|
|
|
'';
|
|
|
|
|
in
|
|
|
|
|
|
|
|
|
|
dockerTools.buildImage {
|
2025-06-13 03:45:34 +00:00
|
|
|
name = "complement-tuwunel";
|
2024-05-12 00:22:10 -04:00
|
|
|
tag = "main";
|
2024-04-21 15:28:35 -07:00
|
|
|
|
|
|
|
|
copyToRoot = buildEnv {
|
|
|
|
|
name = "root";
|
|
|
|
|
pathsToLink = [
|
2025-05-05 00:58:05 +00:00
|
|
|
"/nix/pkgs/complement/bin"
|
2024-04-21 15:28:35 -07:00
|
|
|
];
|
|
|
|
|
paths = [
|
|
|
|
|
bashInteractive
|
|
|
|
|
coreutils
|
|
|
|
|
main'
|
|
|
|
|
start
|
|
|
|
|
];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
config = {
|
|
|
|
|
Cmd = [
|
|
|
|
|
"${lib.getExe start}"
|
|
|
|
|
];
|
|
|
|
|
|
2026-01-30 01:04:33 +01:00
|
|
|
Entrypoint =
|
|
|
|
|
if
|
|
|
|
|
!stdenv.hostPlatform.isDarwin
|
2024-04-21 15:28:35 -07:00
|
|
|
# Use the `tini` init system so that signals (e.g. ctrl+c/SIGINT)
|
|
|
|
|
# are handled as expected
|
2026-01-30 01:04:33 +01:00
|
|
|
then
|
|
|
|
|
[
|
|
|
|
|
"${lib.getExe' tini "tini"}"
|
|
|
|
|
"--"
|
|
|
|
|
]
|
|
|
|
|
else
|
|
|
|
|
[ ];
|
2024-04-21 15:28:35 -07:00
|
|
|
|
|
|
|
|
Env = [
|
2025-06-13 03:45:34 +00:00
|
|
|
"TUWUNEL_TLS__KEY=${./private_key.key}"
|
|
|
|
|
"TUWUNEL_TLS__CERTS=${./certificate.crt}"
|
|
|
|
|
"TUWUNEL_CONFIG=${./config.toml}"
|
2024-11-02 13:12:14 -04:00
|
|
|
"RUST_BACKTRACE=full"
|
2024-04-21 15:28:35 -07:00
|
|
|
];
|
|
|
|
|
|
|
|
|
|
ExposedPorts = {
|
2026-01-30 01:04:33 +01:00
|
|
|
"8008/tcp" = { };
|
|
|
|
|
"8448/tcp" = { };
|
2024-04-21 15:28:35 -07:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
}
|