os/hosts/flora-6/drone.nix

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

117 lines
2.8 KiB
Nix
Raw Normal View History

2023-01-28 20:26:13 +00:00
{
2023-01-28 22:50:31 +00:00
config,
lib,
pkgs,
self,
...
}: {
2023-01-28 20:26:13 +00:00
age.secrets.drone-secrets = {
file = "${self}/secrets/drone-secrets.age";
mode = "600";
owner = "drone";
};
age.secrets.drone-db-secrets = {
file = "${self}/secrets/drone-db-secrets.age";
mode = "600";
owner = "drone";
};
users.users.drone = {
description = "Drone Service";
home = "/var/lib/drone";
useDefaultShell = true;
uid = 994;
group = "drone";
isSystemUser = true;
};
2023-01-28 22:50:31 +00:00
users.groups.drone = {};
2023-01-28 20:26:13 +00:00
systemd.tmpfiles.rules = [
"d '/var/lib/drone-db' 0750 drone drone - -"
];
systemd.services."docker-network-drone" = let
2023-01-28 22:50:31 +00:00
docker = config.virtualisation.oci-containers.backend;
dockerBin = "${pkgs.${docker}}/bin/${docker}";
in {
serviceConfig.Type = "oneshot";
before = ["docker-drone-server.service"];
script = ''
${dockerBin} network inspect drone-net >/dev/null 2>&1 || ${dockerBin} network create drone-net --subnet 172.20.0.0/24
'';
};
2023-01-28 20:26:13 +00:00
virtualisation = {
docker = {
enable = true; # sadly podman is not supported rightnow
extraOptions = ''
--data-root /data/docker
'';
2023-01-28 20:26:13 +00:00
};
oci-containers = {
backend = "docker";
containers."drone-db" = {
image = "postgres:14";
autoStart = true;
user = "994";
volumes = [
"/var/lib/drone-db:/var/lib/postgresql/data"
];
extraOptions = [
"--network=drone-net"
];
environmentFiles = [
config.age.secrets.drone-db-secrets.path
];
};
containers."drone-server" = {
image = "drone/drone:2";
autoStart = true;
user = "994";
ports = [
"4000:80"
];
2023-01-28 22:50:31 +00:00
dependsOn = ["drone-db"];
2023-01-28 20:26:13 +00:00
extraOptions = [
"--network=drone-net"
2023-09-15 10:16:23 +00:00
"--pull=always"
2023-01-28 20:26:13 +00:00
];
environment = {
DRONE_GITEA_SERVER = "https://git.pub.solar";
DRONE_SERVER_HOST = "ci.pub.solar";
DRONE_SERVER_PROTO = "https";
DRONE_DATABASE_DRIVER = "postgres";
};
environmentFiles = [
config.age.secrets.drone-secrets.path
];
};
2023-01-28 22:50:31 +00:00
containers."drone-docker-runner" = {
image = "drone/drone-runner-docker:1";
autoStart = true;
# needs to run as root
#user = "994";
volumes = [
"/var/run/docker.sock:/var/run/docker.sock"
];
dependsOn = ["drone-db"];
extraOptions = [
"--network=drone-net"
2023-09-15 10:16:23 +00:00
"--pull=always"
2023-01-28 22:50:31 +00:00
];
environment = {
2023-01-28 23:00:21 +00:00
DRONE_RPC_HOST = "ci.pub.solar";
DRONE_RPC_PROTO = "https";
2023-01-28 22:50:31 +00:00
DRONE_RUNNER_CAPACITY = "2";
DRONE_RUNNER_NAME = "flora-6-docker-runner";
};
environmentFiles = [
config.age.secrets.drone-secrets.path
];
};
2023-01-28 20:26:13 +00:00
};
};
}