add forgejo and postgresql services and nixos-container for forgejo
This commit is contained in:
parent
ae7d74249b
commit
2080f294d5
7 changed files with 299 additions and 0 deletions
|
|
@ -4,6 +4,7 @@
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
|
./forgejo.nix
|
||||||
./networking.nix
|
./networking.nix
|
||||||
./stylix.nix
|
./stylix.nix
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
|
|
|
||||||
18
nixos/configurations/Cape/forgejo.nix
Normal file
18
nixos/configurations/Cape/forgejo.nix
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
{ config, ... }:
|
||||||
|
{
|
||||||
|
youthlic.containers.forgejo = {
|
||||||
|
enable = true;
|
||||||
|
domain = "forgejo.youthlic.fun";
|
||||||
|
sshPort = 2222;
|
||||||
|
httpPort = 8480;
|
||||||
|
interface = "ens3";
|
||||||
|
};
|
||||||
|
networking.firewall.allowedTCPPorts = [ 2222 ];
|
||||||
|
services.caddy.virtualHosts = {
|
||||||
|
"forgejo.${config.youthlic.programs.caddy.baseDomain}" = {
|
||||||
|
extraConfig = ''
|
||||||
|
reverse_proxy 10.231.136.102:8480
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
6
nixos/modules/containers/default.nix
Normal file
6
nixos/modules/containers/default.nix
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./forgejo.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
120
nixos/modules/containers/forgejo.nix
Normal file
120
nixos/modules/containers/forgejo.nix
Normal file
|
|
@ -0,0 +1,120 @@
|
||||||
|
{ config, lib, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.youthlic.containers.forgejo;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options = {
|
||||||
|
youthlic.containers.forgejo = {
|
||||||
|
enable = lib.mkEnableOption "forgejo container";
|
||||||
|
domain = lib.mkOption {
|
||||||
|
type = lib.types.nonEmptyStr;
|
||||||
|
example = "forgejo.example.com";
|
||||||
|
};
|
||||||
|
sshPort = lib.mkOption {
|
||||||
|
type = lib.types.port;
|
||||||
|
default = 2222;
|
||||||
|
};
|
||||||
|
httpPort = lib.mkOption {
|
||||||
|
type = lib.types.port;
|
||||||
|
default = 8480;
|
||||||
|
};
|
||||||
|
interface = lib.mkOption {
|
||||||
|
type = lib.types.nonEmptyStr;
|
||||||
|
example = "ens3";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
networking.nat = {
|
||||||
|
enable = true;
|
||||||
|
internalInterfaces = [ "ve-+" ];
|
||||||
|
externalInterface = cfg.interface;
|
||||||
|
enableIPv6 = true;
|
||||||
|
};
|
||||||
|
containers."forgejo" = {
|
||||||
|
ephemeral = true;
|
||||||
|
autoStart = true;
|
||||||
|
privateNetwork = true;
|
||||||
|
hostAddress = "10.231.136.1";
|
||||||
|
localAddress = "10.231.136.102";
|
||||||
|
bindMounts = {
|
||||||
|
"/var/lib/forgejo" = {
|
||||||
|
hostPath = "/mnt/containers/forgejo/state";
|
||||||
|
isReadOnly = false;
|
||||||
|
};
|
||||||
|
"/var/lib/postgresql" = {
|
||||||
|
hostPath = "/mnt/containers/forgejo/dataset";
|
||||||
|
isReadOnly = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
forwardPorts = [
|
||||||
|
{
|
||||||
|
containerPort = cfg.sshPort;
|
||||||
|
hostPort = 2222;
|
||||||
|
protocol = "tcp";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
containerPort = cfg.sshPort;
|
||||||
|
hostPort = 2222;
|
||||||
|
protocol = "udp";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
config =
|
||||||
|
{ lib, ... }:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./../forgejo.nix
|
||||||
|
./../postgresql.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
systemd.tmpfiles.rules = [
|
||||||
|
"d /var/lib/forgejo 770 forgejo forgejo -"
|
||||||
|
"d /var/lib/postgresql 770 postgres postgres -"
|
||||||
|
];
|
||||||
|
|
||||||
|
youthlic.programs = {
|
||||||
|
forgejo = {
|
||||||
|
enable = true;
|
||||||
|
domain = cfg.domain;
|
||||||
|
sshPort = cfg.sshPort;
|
||||||
|
httpPort = cfg.httpPort;
|
||||||
|
database = {
|
||||||
|
user = "forgejo";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
postgresql = {
|
||||||
|
enable = true;
|
||||||
|
database = "forgejo";
|
||||||
|
auth_method = "peer";
|
||||||
|
version = "17";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services.forgejo = {
|
||||||
|
wants = [ "postgresql.service" ];
|
||||||
|
requires = [ "postgresql.service" ];
|
||||||
|
after = [ "postgresql.service" ];
|
||||||
|
wantedBy = [ "default.target" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
networking = {
|
||||||
|
firewall = {
|
||||||
|
enable = true;
|
||||||
|
allowedTCPPorts = [
|
||||||
|
cfg.httpPort
|
||||||
|
cfg.sshPort
|
||||||
|
];
|
||||||
|
allowedUDPPorts = [
|
||||||
|
cfg.httpPort
|
||||||
|
cfg.sshPort
|
||||||
|
];
|
||||||
|
};
|
||||||
|
useHostResolvConf = lib.mkForce false;
|
||||||
|
};
|
||||||
|
services.resolved.enable = true;
|
||||||
|
system.stateVersion = "24.11";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -16,6 +16,9 @@
|
||||||
disko.nixosModules.disko
|
disko.nixosModules.disko
|
||||||
])
|
])
|
||||||
++ [
|
++ [
|
||||||
|
./containers
|
||||||
|
./postgresql.nix
|
||||||
|
./forgejo.nix
|
||||||
./deploy
|
./deploy
|
||||||
./nix.nix
|
./nix.nix
|
||||||
./home.nix
|
./home.nix
|
||||||
|
|
|
||||||
105
nixos/modules/forgejo.nix
Normal file
105
nixos/modules/forgejo.nix
Normal file
|
|
@ -0,0 +1,105 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
cfg = config.youthlic.programs.forgejo;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options = {
|
||||||
|
youthlic.programs.forgejo = {
|
||||||
|
enable = lib.mkEnableOption "forgejo";
|
||||||
|
domain = lib.mkOption {
|
||||||
|
type = lib.types.nonEmptyStr;
|
||||||
|
example = "example.com";
|
||||||
|
description = ''
|
||||||
|
which domain does the server use
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
sshPort = lib.mkOption {
|
||||||
|
type = lib.types.port;
|
||||||
|
default = 2222;
|
||||||
|
};
|
||||||
|
httpPort = lib.mkOption {
|
||||||
|
type = lib.types.port;
|
||||||
|
default = 8480;
|
||||||
|
};
|
||||||
|
database = {
|
||||||
|
user = lib.mkOption {
|
||||||
|
type = lib.types.nonEmptyStr;
|
||||||
|
example = "forgejo";
|
||||||
|
};
|
||||||
|
socket = lib.mkOption {
|
||||||
|
type = lib.types.nonEmptyStr;
|
||||||
|
default = "/run/postgresql";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkMerge [
|
||||||
|
(lib.mkIf cfg.enable {
|
||||||
|
services.forgejo = {
|
||||||
|
enable = true;
|
||||||
|
lfs = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
group = "postgres";
|
||||||
|
database = {
|
||||||
|
type = "postgres";
|
||||||
|
user = cfg.database.user;
|
||||||
|
socket = cfg.database.socket;
|
||||||
|
createDatabase = false;
|
||||||
|
};
|
||||||
|
settings = {
|
||||||
|
DEFAULT = {
|
||||||
|
RUN_MODE = "prod";
|
||||||
|
};
|
||||||
|
cron = {
|
||||||
|
ENABLE = true;
|
||||||
|
RUN_AT_START = true;
|
||||||
|
SCHEDULE = "@every 24h";
|
||||||
|
};
|
||||||
|
repository = {
|
||||||
|
DEFAULT_PRIVATE = "last";
|
||||||
|
DEFAULT_BRANCH = "master";
|
||||||
|
};
|
||||||
|
service = {
|
||||||
|
DISABLE_REGISTRATION = true;
|
||||||
|
};
|
||||||
|
mailer = {
|
||||||
|
ENABLED = true;
|
||||||
|
MAILER_TYPE = "sendmail";
|
||||||
|
FROM = "do-not-reply@${config.services.forgejo.settings.server.DOMAIN}";
|
||||||
|
SENDMAIL_PATH = "${pkgs.system-sendmail}/bin/sendmail";
|
||||||
|
};
|
||||||
|
other = {
|
||||||
|
SHOW_FOOTER_VERSION = false;
|
||||||
|
};
|
||||||
|
server = {
|
||||||
|
PROTOCOL = "http";
|
||||||
|
DOMAIN = "${cfg.domain}";
|
||||||
|
START_SSH_SERVER = true;
|
||||||
|
SSH_PORT = cfg.sshPort;
|
||||||
|
HTTP_PORT = cfg.httpPort;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
})
|
||||||
|
(
|
||||||
|
let
|
||||||
|
caddy-cfg = config.youthlic.programs.caddy;
|
||||||
|
in
|
||||||
|
lib.mkIf (cfg.enable && caddy-cfg.enable) {
|
||||||
|
services.caddy.virtualHosts = {
|
||||||
|
"forgejo.${caddy-cfg.baseDomain}" = {
|
||||||
|
extraConfig = ''
|
||||||
|
reverse_proxy 127.0.0.1:${cfg.httpPort}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
)
|
||||||
|
];
|
||||||
|
}
|
||||||
46
nixos/modules/postgresql.nix
Normal file
46
nixos/modules/postgresql.nix
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
cfg = config.youthlic.programs.postgresql;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options = {
|
||||||
|
youthlic.programs.postgresql = {
|
||||||
|
enable = lib.mkEnableOption "postgresql";
|
||||||
|
database = lib.mkOption {
|
||||||
|
type = lib.types.nonEmptyStr;
|
||||||
|
example = "forgejo";
|
||||||
|
};
|
||||||
|
auth_method = lib.mkOption {
|
||||||
|
type = lib.types.nonEmptyStr;
|
||||||
|
example = "peer";
|
||||||
|
};
|
||||||
|
version = lib.mkOption {
|
||||||
|
type = lib.types.nonEmptyStr;
|
||||||
|
example = "17";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
# default socket: /var/lib/postgresql
|
||||||
|
services.postgresql = {
|
||||||
|
enable = true;
|
||||||
|
ensureDatabases = [ cfg.database ];
|
||||||
|
ensureUsers = [
|
||||||
|
{
|
||||||
|
name = "${cfg.database}";
|
||||||
|
ensureDBOwnership = true;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
package = pkgs."postgresql_${cfg.version}";
|
||||||
|
authentication = ''
|
||||||
|
#type database DBuser auth-method
|
||||||
|
local sameuser all ${cfg.auth_method}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue