This commit is contained in:
Sridhar Ratnakumar 2024-11-19 17:18:33 -05:00
parent eff3333e3d
commit d425868d12
No known key found for this signature in database
7 changed files with 73 additions and 41 deletions

View file

@ -5,33 +5,16 @@ let
inherit (inputs) self;
in
{
# nixos-unified.sshTarget = "root@5.161.184.111";
nixos-unified.sshTarget = "gate";
imports = [
./configuration.nix
(self + /modules/nixos/shared/primary-as-admin.nix)
(self + /webapps/proxy.nix)
];
nixpkgs.hostPlatform = "x86_64-linux";
services.tailscale.enable = true;
services.openssh.settings.PasswordAuthentication = false;
services.nginx = {
enable = true;
recommendedProxySettings = true;
recommendedTlsSettings = true;
virtualHosts."actualism.app" = {
# FIXME: Don't hardcode, instead of read from pureintent's containers.nix
locations."/".proxyPass = "http://pureintent:3000";
enableACME = true;
addSSL = true;
};
};
security.acme = {
acceptTerms = true;
defaults.email = "srid@srid.ca";
};
networking.firewall.allowedTCPPorts = [ 80 443 22 ];
# Workaround the annoying `Failed to start Network Manager Wait Online` error on switch.
# https://github.com/NixOS/nixpkgs/issues/180175

View file

@ -1,22 +0,0 @@
# TODO(refactor): decompose
{ flake, pkgs, ... }:
let
inherit (flake) inputs;
actualism-app = inputs.actualism-app.packages.${pkgs.system}.default;
in
{
containers.actualism-app = {
autoStart = true;
config = { lib, ... }: {
systemd.services.actualism-app = {
description = "actualism-app";
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart = "${lib.getExe actualism-app}";
Restart = "always";
};
};
};
};
}

View file

@ -11,7 +11,7 @@ in
imports = [
self.nixosModules.default
./configuration.nix
./containers.nix
(self + /webapps/host.nix)
];
services.openssh.enable = true;

9
webapps/README.md Normal file
View file

@ -0,0 +1,9 @@
# Hosting webapps on home-server
Host them on `pureintent` (home-server)
Run nginx on `gate` (Hetzner VPS).
Put the two in a Tailscale network. Profit!
WARNING: This is not cleanly designed yet, so don't use it as a reference.

8
webapps/default.nix Normal file
View file

@ -0,0 +1,8 @@
{ flake, system, ... }:
{
actualism-app = {
port = 3000; # TODO: Change this, and pass to daemon (renaming `package` to `exec` or something)
domain = "actualism.app";
package = flake.inputs.actualism-app.packages.${system}.default;
};
}

24
webapps/host.nix Normal file
View file

@ -0,0 +1,24 @@
# Configuration for the host on which all webapps will run.
{ flake, pkgs, lib, ... }:
let
webapps = import ./. { inherit flake; system = pkgs.system; };
in
{
# Run each web app as a systemd service decided inside a container.
containers = lib.mapAttrs
(name: v: {
autoStart = true;
config = {
systemd.services.${name} = {
description = name;
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart = "${lib.getExe v.package}";
Restart = "always";
};
};
};
})
webapps;
}

30
webapps/proxy.nix Normal file
View file

@ -0,0 +1,30 @@
# Configuration for the VPS running nginx reverse proxy
{ flake, pkgs, lib, webapps, ... }:
let
host = "pureintent"; # See host.nix
webapps = import ./. { inherit flake; system = pkgs.system; };
in
{
services.tailscale.enable = true;
services.nginx = {
enable = true;
recommendedProxySettings = true;
recommendedTlsSettings = true;
virtualHosts = lib.mapAttrs'
(name: v: lib.nameValuePair v.domain {
locations."/".proxyPass = "http://${host}:${builtins.toString v.port}";
enableACME = true;
addSSL = true;
})
webapps;
};
security.acme = {
acceptTerms = true;
defaults.email = "srid@srid.ca";
};
networking.firewall.allowedTCPPorts = [ 80 443 22 ];
}