nixos: Add Gitea VM
This commit is contained in:
117
nixos/boxes/colony/vms/git/default.nix
Normal file
117
nixos/boxes/colony/vms/git/default.nix
Normal file
@@ -0,0 +1,117 @@
|
||||
{ lib, ... }:
|
||||
let
|
||||
inherit (lib.my) net;
|
||||
inherit (lib.my.c.colony) domain prefixes;
|
||||
in
|
||||
{
|
||||
nixos.systems.git = {
|
||||
system = "x86_64-linux";
|
||||
nixpkgs = "mine";
|
||||
|
||||
assignments = {
|
||||
routing = {
|
||||
name = "git-vm-routing";
|
||||
inherit domain;
|
||||
ipv4.address = net.cidr.host 4 prefixes.vms.v4;
|
||||
};
|
||||
internal = {
|
||||
name = "git-vm";
|
||||
inherit domain;
|
||||
ipv4 = {
|
||||
address = net.cidr.host 0 prefixes.vip3;
|
||||
mask = 32;
|
||||
gateway = null;
|
||||
genPTR = false;
|
||||
};
|
||||
ipv6 = {
|
||||
iid = "::4";
|
||||
address = net.cidr.host 4 prefixes.vms.v6;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
configuration = { lib, pkgs, modulesPath, config, assignments, allAssignments, ... }:
|
||||
let
|
||||
inherit (lib) mkMerge;
|
||||
inherit (lib.my) networkdAssignment;
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
"${modulesPath}/profiles/qemu-guest.nix"
|
||||
|
||||
./gitea.nix
|
||||
./gitea-actions.nix
|
||||
];
|
||||
|
||||
config = mkMerge [
|
||||
{
|
||||
boot = {
|
||||
kernelParams = [ "console=ttyS0,115200n8" ];
|
||||
};
|
||||
|
||||
fileSystems = {
|
||||
"/boot" = {
|
||||
device = "/dev/disk/by-label/ESP";
|
||||
fsType = "vfat";
|
||||
};
|
||||
"/nix" = {
|
||||
device = "/dev/disk/by-label/nix";
|
||||
fsType = "ext4";
|
||||
};
|
||||
"/persist" = {
|
||||
device = "/dev/disk/by-label/persist";
|
||||
fsType = "ext4";
|
||||
neededForBoot = true;
|
||||
};
|
||||
|
||||
"/var/lib/containers" = {
|
||||
device = "/dev/disk/by-label/oci";
|
||||
fsType = "xfs";
|
||||
options = [ "pquota" ];
|
||||
};
|
||||
};
|
||||
|
||||
services = {
|
||||
fstrim = lib.my.c.colony.fstrimConfig;
|
||||
netdata.enable = true;
|
||||
};
|
||||
|
||||
virtualisation = {
|
||||
podman = {
|
||||
enable = true;
|
||||
};
|
||||
oci-containers = {
|
||||
backend = "podman";
|
||||
};
|
||||
};
|
||||
|
||||
systemd.network = {
|
||||
links = {
|
||||
"10-vms" = {
|
||||
matchConfig.MACAddress = "52:54:00:75:78:a8";
|
||||
linkConfig.Name = "vms";
|
||||
};
|
||||
};
|
||||
|
||||
networks = {
|
||||
"80-vms" = mkMerge [
|
||||
(networkdAssignment "vms" assignments.routing)
|
||||
(networkdAssignment "vms" assignments.internal)
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
my = {
|
||||
secrets.key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP+KINpHLMduBuW96JzfSRDLUzkI+XaCBghu5/wHiW5R";
|
||||
server.enable = true;
|
||||
|
||||
firewall = {
|
||||
tcp.allowed = [ 19999 ];
|
||||
trustedInterfaces = [ "oci" ];
|
||||
};
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
78
nixos/boxes/colony/vms/git/gitea-actions.nix
Normal file
78
nixos/boxes/colony/vms/git/gitea-actions.nix
Normal file
@@ -0,0 +1,78 @@
|
||||
{ lib, pkgs, config, ... }:
|
||||
let
|
||||
inherit (builtins) toJSON;
|
||||
inherit (lib) mkForce;
|
||||
inherit (lib.my.c) pubDomain;
|
||||
|
||||
cfgFile = pkgs.writeText "gitea-actions-runner.yaml" (toJSON {
|
||||
container = {
|
||||
# network = "colony";
|
||||
privileged = true;
|
||||
};
|
||||
cache = {
|
||||
enabled = true;
|
||||
dir = "/var/cache/gitea-runner";
|
||||
};
|
||||
});
|
||||
in
|
||||
{
|
||||
config = {
|
||||
fileSystems = {
|
||||
"/var/cache/gitea-runner" = {
|
||||
device = "/dev/disk/by-label/actions-cache";
|
||||
fsType = "ext4";
|
||||
};
|
||||
};
|
||||
|
||||
services = {
|
||||
gitea-actions-runner.instances = {
|
||||
main = {
|
||||
enable = true;
|
||||
name = "main-docker";
|
||||
labels = [
|
||||
"debian-node-bullseye:docker://node:18-bullseye"
|
||||
"ubuntu-22.04:docker://git.nul.ie/dev/actions-ubuntu:22.04"
|
||||
];
|
||||
url = "https://git.${pubDomain}";
|
||||
tokenFile = config.age.secrets."gitea/actions-runner.env".path;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
users = with lib.my.c.ids; {
|
||||
users = {
|
||||
gitea-runner = {
|
||||
isSystemUser = true;
|
||||
uid = uids.gitea-runner;
|
||||
group = "gitea-runner";
|
||||
home = "/var/lib/gitea-runner";
|
||||
};
|
||||
};
|
||||
groups = {
|
||||
gitea-runner.gid = gids.gitea-runner;
|
||||
};
|
||||
};
|
||||
|
||||
systemd = {
|
||||
services = {
|
||||
gitea-runner-main.serviceConfig = {
|
||||
# Needs to be able to read its secrets
|
||||
CacheDirectory = "gitea-runner";
|
||||
DynamicUser = mkForce false;
|
||||
User = "gitea-runner";
|
||||
Group = "gitea-runner";
|
||||
ExecStart = mkForce "${config.services.gitea-actions-runner.package}/bin/act_runner -c ${cfgFile} daemon";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
my = {
|
||||
secrets.files = {
|
||||
"gitea/actions-runner.env" = {
|
||||
owner = "gitea-runner";
|
||||
group = "gitea-runner";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
143
nixos/boxes/colony/vms/git/gitea.nix
Normal file
143
nixos/boxes/colony/vms/git/gitea.nix
Normal file
@@ -0,0 +1,143 @@
|
||||
{ lib, pkgs, config, assignments, allAssignments, ... }:
|
||||
let
|
||||
inherit (lib.my.c) pubDomain;
|
||||
inherit (lib.my.c.colony) prefixes;
|
||||
in
|
||||
{
|
||||
config = {
|
||||
fileSystems = {
|
||||
"/var/lib/gitea" = {
|
||||
device = "/dev/disk/by-label/git";
|
||||
fsType = "ext4";
|
||||
};
|
||||
};
|
||||
|
||||
users = {
|
||||
users.git = {
|
||||
description = "Gitea Service";
|
||||
home = config.services.gitea.stateDir;
|
||||
useDefaultShell = true;
|
||||
group = config.services.gitea.group;
|
||||
isSystemUser = true;
|
||||
};
|
||||
groups.git = {};
|
||||
};
|
||||
|
||||
systemd = {
|
||||
services = {
|
||||
gitea.preStart =
|
||||
let
|
||||
repSec = "${pkgs.replace-secret}/bin/replace-secret";
|
||||
confPath = "${config.services.gitea.customDir}/conf/app.ini";
|
||||
in
|
||||
''
|
||||
gitea_extra_setup() {
|
||||
chmod u+w '${confPath}'
|
||||
${repSec} '#miniosecret#' '${config.age.secrets."gitea/minio.txt".path}' '${confPath}'
|
||||
chmod u-w '${confPath}'
|
||||
}
|
||||
|
||||
(umask 027; gitea_extra_setup)
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
services = {
|
||||
gitea = {
|
||||
enable = true;
|
||||
user = "git";
|
||||
group = "git";
|
||||
appName = "/dev/player0 git";
|
||||
stateDir = "/var/lib/gitea";
|
||||
lfs.enable = true;
|
||||
database = {
|
||||
type = "postgres";
|
||||
createDatabase = false;
|
||||
host = "colony-psql";
|
||||
user = "gitea";
|
||||
passwordFile = config.age.secrets."gitea/db.txt".path;
|
||||
};
|
||||
mailerPasswordFile = config.age.secrets."gitea/mail.txt".path;
|
||||
settings = {
|
||||
server = {
|
||||
DOMAIN = "git.${pubDomain}";
|
||||
HTTP_ADDR = "::";
|
||||
ROOT_URL = "https://git.${pubDomain}";
|
||||
};
|
||||
service = {
|
||||
DISABLE_REGISTRATION = true;
|
||||
ENABLE_NOTIFY_MAIL = true;
|
||||
};
|
||||
session = {
|
||||
COOKIE_SECURE = true;
|
||||
};
|
||||
repository = {
|
||||
DEFAULT_BRANCH = "master";
|
||||
};
|
||||
mailer = {
|
||||
ENABLED = true;
|
||||
PROTOCOL = "smtp+starttls";
|
||||
SMTP_ADDR = "mail.nul.ie";
|
||||
SMTP_PORT = 587;
|
||||
USER = "git@nul.ie";
|
||||
FROM = "Gitea <git@nul.ie>";
|
||||
};
|
||||
"email.incoming" = {
|
||||
ENABLED = true;
|
||||
HOST = "mail.nul.ie";
|
||||
PORT = 993;
|
||||
USE_TLS = true;
|
||||
USERNAME = "git@nul.ie";
|
||||
PASSWORD = "#mailerpass#";
|
||||
REPLY_TO_ADDRESS = "git+%{token}@nul.ie";
|
||||
};
|
||||
storage = {
|
||||
STORAGE_TYPE = "minio";
|
||||
SERVE_DIRECT = true;
|
||||
MINIO_ENDPOINT = "s3.${pubDomain}";
|
||||
MINIO_ACCESS_KEY_ID = "gitea";
|
||||
MINIO_SECRET_ACCESS_KEY = "#miniosecret#";
|
||||
MINIO_BUCKET = "gitea";
|
||||
MINIO_LOCATION = "eu-central-1";
|
||||
MINIO_USE_SSL = true;
|
||||
};
|
||||
actions = {
|
||||
ENABLED = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
my = {
|
||||
secrets = {
|
||||
files =
|
||||
let
|
||||
ownedByGit = {
|
||||
owner = "git";
|
||||
group = "git";
|
||||
};
|
||||
in
|
||||
{
|
||||
"gitea/db.txt" = ownedByGit;
|
||||
"gitea/mail.txt" = ownedByGit;
|
||||
"gitea/minio.txt" = ownedByGit;
|
||||
};
|
||||
};
|
||||
|
||||
firewall.extraRules = ''
|
||||
table inet filter {
|
||||
chain input {
|
||||
ip saddr ${prefixes.all.v4} tcp dport 3000 accept
|
||||
ip6 saddr ${prefixes.all.v6} tcp dport 3000 accept
|
||||
}
|
||||
}
|
||||
table inet nat {
|
||||
chain prerouting {
|
||||
ip daddr ${assignments.internal.ipv4.address} tcp dport { http, https } dnat to ${allAssignments.middleman.internal.ipv4.address}
|
||||
ip6 daddr ${assignments.internal.ipv6.address} tcp dport { http, https } dnat to ${allAssignments.middleman.internal.ipv6.address}
|
||||
}
|
||||
}
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user