mirror of
https://github.com/allaunthefox/Research-Stack.git
synced 2026-07-31 03:05:21 +00:00
- .devcontainer/Dockerfile: add PostgreSQL client libs, OpenSSL/libffi headers, gfortran/BLAS for scipy, rclone; install full Python dependency set (boto3, psycopg2-binary, fastapi, uvicorn, notion-client, httpx, pytest, numpy, scipy, etc.) in uv-managed venv; add rclone S3 gateway init script as ENTRYPOINT - .devcontainer/devcontainer.json: switch from build to pre-built image (localhost/research
117 lines
3 KiB
Nix
117 lines
3 KiB
Nix
{ config, pkgs, lib, hostName, serverAddr, domain, ... }:
|
|
|
|
let
|
|
caddyWithPorkbun = pkgs.caddy.withPlugins {
|
|
plugins = [ "github.com/caddy-dns/porkbun@v0.3.1" ];
|
|
hash = "sha256-X11vSQRbBg25I1eSKF2O5QBRS7zGOtdGhLISiwrHclw=";
|
|
};
|
|
in {
|
|
##########################################################################
|
|
# EDIT HERE — set your domain
|
|
# The domain below is used for TLS certificates via Porkbun DNS challenge.
|
|
# Set PORKBUN_API_KEY and PORKBUN_SECRET_KEY in /etc/caddy/porkbun.env
|
|
# (sops-injected via porkbun-env.age).
|
|
##########################################################################
|
|
|
|
sops.secrets.porkbun-env = {
|
|
sopsFile = ./secrets/porkbun-env.age;
|
|
path = "/etc/caddy/porkbun.env";
|
|
};
|
|
|
|
sops.secrets.authentik-secrets = {
|
|
sopsFile = ./secrets/authentik-secrets.age;
|
|
};
|
|
|
|
services.k3s = {
|
|
enable = true;
|
|
role = "server";
|
|
clusterInit = true;
|
|
extraFlags = [ "--disable=traefik" ];
|
|
};
|
|
|
|
systemd.services.caddy.serviceConfig.EnvironmentFile = [ "/etc/caddy/porkbun.env" ];
|
|
|
|
services.caddy = {
|
|
enable = true;
|
|
package = caddyWithPorkbun;
|
|
extraConfig = ''
|
|
auth.${domain} {
|
|
tls {
|
|
dns porkbun {
|
|
api_key {$PORKBUN_API_KEY}
|
|
api_secret_key {$PORKBUN_SECRET_KEY}
|
|
}
|
|
}
|
|
reverse_proxy 127.0.0.1:30800
|
|
}
|
|
|
|
status.${domain} {
|
|
tls {
|
|
dns porkbun {
|
|
api_key {$PORKBUN_API_KEY}
|
|
api_secret_key {$PORKBUN_SECRET_KEY}
|
|
}
|
|
}
|
|
reverse_proxy 127.0.0.1:30801
|
|
}
|
|
|
|
apps.${domain} {
|
|
tls {
|
|
dns porkbun {
|
|
api_key {$PORKBUN_API_KEY}
|
|
api_secret_key {$PORKBUN_SECRET_KEY}
|
|
}
|
|
}
|
|
reverse_proxy 127.0.0.1:30802
|
|
}
|
|
|
|
home.${domain} {
|
|
tls {
|
|
dns porkbun {
|
|
api_key {$PORKBUN_API_KEY}
|
|
api_secret_key {$PORKBUN_SECRET_KEY}
|
|
}
|
|
}
|
|
reverse_proxy 127.0.0.1:30803
|
|
}
|
|
|
|
pulse.${domain} {
|
|
tls {
|
|
dns porkbun {
|
|
api_key {$PORKBUN_API_KEY}
|
|
api_secret_key {$PORKBUN_SECRET_KEY}
|
|
}
|
|
}
|
|
reverse_proxy 127.0.0.1:30804
|
|
}
|
|
|
|
${domain} {
|
|
tls {
|
|
dns porkbun {
|
|
api_key {$PORKBUN_API_KEY}
|
|
api_secret_key {$PORKBUN_SECRET_KEY}
|
|
}
|
|
}
|
|
respond "k3s unified topology — Research Stack"
|
|
}
|
|
'';
|
|
};
|
|
|
|
systemd.services.deploy-k3s-services = {
|
|
description = "Deploy k3s topology services";
|
|
after = [ "k3s.service" "tailscaled.service" "network-online.target" ];
|
|
wants = [ "k3s.service" "tailscaled.service" "network-online.target" ];
|
|
wantedBy = [ "multi-user.target" ];
|
|
path = with pkgs; [ kubectl ];
|
|
environment = {
|
|
AUTHENTIK_SECRETS = "${config.sops.secrets.authentik-secrets.path}";
|
|
};
|
|
serviceConfig = {
|
|
Type = "oneshot";
|
|
RemainAfterExit = true;
|
|
Restart = "on-failure";
|
|
RestartSec = 10;
|
|
ExecStart = "${./scripts/deploy-services.sh}";
|
|
};
|
|
};
|
|
}
|