add nixos module, show symlinks
All checks were successful
Build Blog / Build (push) Successful in 5m40s
All checks were successful
Build Blog / Build (push) Successful in 5m40s
This commit is contained in:
parent
8b12046473
commit
f0d3ae0aaa
|
@ -123,7 +123,72 @@ module that will set this up:
|
|||
|
||||
|
||||
```nix
|
||||
# TODO: write this
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.my.static-site;
|
||||
sitesDir = "/var/lib/static-site";
|
||||
|
||||
user = config.users.users.static-site.name;
|
||||
group = config.users.groups.static-site.name;
|
||||
|
||||
in
|
||||
{
|
||||
options = with lib; {
|
||||
my.static-site = {
|
||||
enable = mkEnableOption "Enable static site deployments";
|
||||
keys = mkOption {
|
||||
description = "list of ssh keys to give push access";
|
||||
type = with types; listOf str;
|
||||
};
|
||||
};
|
||||
};
|
||||
config = lib.mkIf cfg.enable {
|
||||
users.users.static-site = {
|
||||
inherit group;
|
||||
isSystemUser = true;
|
||||
# need shell access for deploys
|
||||
useDefaultShell = true;
|
||||
home = sitesDir;
|
||||
openssh.authorizedKeys.keys = cfg.keys;
|
||||
};
|
||||
|
||||
# make this user trusted (spooky)
|
||||
nix.settings.trusted-users = [ user ];
|
||||
|
||||
|
||||
users.groups.static-site = { };
|
||||
services.nginx.virtualHosts = {
|
||||
"saji.dev" = {
|
||||
root = "${sitesDir}/public";
|
||||
forceSSL = true;
|
||||
useACMEHost = "saji.dev";
|
||||
locations."/" = {
|
||||
tryFiles = "$uri $uri/ =404";
|
||||
};
|
||||
};
|
||||
};
|
||||
# create the base static site directory, owned by the static-site user
|
||||
systemd.tmpfiles.settings."static-site" = {
|
||||
"${sitesDir}".d = {
|
||||
user = user;
|
||||
group = group;
|
||||
mode = "0755";
|
||||
};
|
||||
# Create a dummy symlink to /dev/null
|
||||
# this will not override an existing symlink, but it will
|
||||
# make sure that the nginx configuration is valid
|
||||
"${sitesDir}/public".L = {
|
||||
argument = "/dev/null";
|
||||
};
|
||||
|
||||
|
||||
};
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
@ -215,4 +280,31 @@ called `LOCAL_KEY` which is a file that contains the signing key.
|
|||
|
||||
Regardless of the outcome you choose, when you re-deploy, it should work properly.
|
||||
|
||||
Let's follow the symlink.
|
||||
Let's see what happened on the server:
|
||||
|
||||
```bash
|
||||
$ ls /var/lib/static-site/ -lah
|
||||
total 20K
|
||||
drwxr-xr-x 4 static-site static-site 4.0K Apr 19 23:32 .
|
||||
drwxr-xr-x 17 root root 4.0K Apr 21 03:00 ..
|
||||
drwxr-xr-x 3 static-site static-site 4.0K Apr 17 19:57 .local
|
||||
drwxr-xr-x 2 static-site static-site 4.0K Apr 17 19:57 .nix-defexpr
|
||||
lrwxrwxrwx 1 static-site static-site 60 Apr 19 23:32 public -> /var/lib/static-site/.local/state/nix/profiles/mysite/public
|
||||
|
||||
$ ls /var/lib/static-site/.local/state/nix/profiles/ -lah
|
||||
total 40K
|
||||
drwxr-xr-x 2 static-site static-site 4.0K Apr 19 23:32 .
|
||||
drwxr-xr-x 3 static-site static-site 4.0K Apr 17 19:57 ..
|
||||
lrwxrwxrwx 1 static-site static-site 13 Apr 19 23:32 mysite -> mysite-8-link
|
||||
lrwxrwxrwx 1 static-site static-site 62 Apr 17 19:57 mysite-1-link -> /nix/store/kbw9mna3934zqj0saz1snw1pbmxi95aq-activatable-myblog
|
||||
lrwxrwxrwx 1 static-site static-site 62 Apr 17 19:59 mysite-2-link -> /nix/store/aa0ai7vwv59alfmhrk29frcbipr6iv9f-activatable-myblog
|
||||
...
|
||||
lrwxrwxrwx 1 static-site static-site 62 Apr 17 21:33 mysite-8-link -> /nix/store/f1qsglj5zm6v0vzlllci3jqsay476d5l-activatable-myblog
|
||||
```
|
||||
|
||||
We can get an idea of how this works:
|
||||
|
||||
1. `/var/lib/static-site/public` points to the public folder in the `myblog` profile
|
||||
2. The profile is itself a link to `mysite-8-link`.
|
||||
3. `mysite-8-link` is also a link to a derivation in the nix store.
|
||||
|
||||
|
|
Loading…
Reference in a new issue