Compare commits
2 commits
e2eb8297dc
...
f0d3ae0aaa
Author | SHA1 | Date | |
---|---|---|---|
|
f0d3ae0aaa | ||
|
8b12046473 |
|
@ -123,7 +123,72 @@ module that will set this up:
|
||||||
|
|
||||||
|
|
||||||
```nix
|
```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.
|
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.
|
||||||
|
|
||||||
|
|
|
@ -103,7 +103,7 @@ main :first-child {
|
||||||
}
|
}
|
||||||
|
|
||||||
header {
|
header {
|
||||||
border-bottom: 1px dashed var(--color-gray-20);
|
border-bottom: 1px dashed var(--color-white);
|
||||||
}
|
}
|
||||||
header:after {
|
header:after {
|
||||||
content: "";
|
content: "";
|
||||||
|
@ -113,7 +113,7 @@ header:after {
|
||||||
|
|
||||||
.links-nextprev {
|
.links-nextprev {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
border-top: 1px dashed var(--color-gray-20);
|
border-top: 1px dashed var(--color-white);
|
||||||
padding: 1em 0;
|
padding: 1em 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -283,7 +283,7 @@ h1, h2, h3 {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Callout styles */
|
/* blockquote styling */
|
||||||
|
|
||||||
blockquote {
|
blockquote {
|
||||||
padding: 2em; /* Adjust padding as needed */
|
padding: 2em; /* Adjust padding as needed */
|
||||||
|
|
Loading…
Reference in a new issue