refactor(web): Let //web/ derivations build static pages only

Removes nginx configuration built by the web targets (with the
exception of the includable block used to set up redirects for old
blog URLs).
This commit is contained in:
Vincent Ambo 2020-02-11 19:31:20 +00:00
parent 2e95822712
commit b5c50f4699
3 changed files with 14 additions and 93 deletions

View file

@ -7,7 +7,7 @@
with pkgs.nix.yants;
let
inherit (builtins) filter;
inherit (builtins) filter hasAttr map;
# Type definition for a single blog post.
post = struct "blog-post" {
@ -48,4 +48,12 @@ in {
# Only include listed posts
posts = filter includePost posts;
# Generate embeddable nginx configuration for redirects from old post URLs
oldRedirects = lib.concatStringsSep "\n" (map (post: ''
location ~* ^(/en)?/${post.oldKey} {
# TODO(tazjin): 301 once this works
return 302 https://tazj.in/blog/${post.key};
}
'') (filter (hasAttr "oldKey") posts));
}

View file

@ -65,12 +65,8 @@ let
));
homepage = index ((map postToEntry web.blog.posts) ++ (import ./entries.nix));
website = runCommandNoCC "website" {} ''
mkdir $out
cp ${homepage} $out/index.html
cp -r ${./static} $out/static
'';
in third_party.callPackage ./nginx.nix {
inherit website;
blog = web.blog;
}
in runCommandNoCC "website" {} ''
mkdir $out
cp ${homepage} $out/index.html
cp -r ${./static} $out/static
''

View file

@ -1,83 +0,0 @@
# This file creates an nginx server that serves the blog on port 8080.
#
# It's not intended to be the user-facing nginx.
{
# third_party attributes supplied by callPackage
writeText, writeShellScriptBin, nginx, lib,
# website content
blog, website
}:
let
inherit (builtins) hasAttr filter map;
inherit (pkgs.third_party) ;
oldRedirects = lib.concatStringsSep "\n" (map (post: ''
location ~* ^(/en)?/${post.oldKey} {
# TODO(tazjin): 301 once this works
return 302 https://tazj.in/blog/${post.key};
}
'') (filter (hasAttr "oldKey") blog.posts));
config = writeText "homepage-nginx.conf" ''
daemon off;
worker_processes 1;
error_log stderr;
pid /tmp/nginx-homepage.pid;
events {
worker_connections 1024;
}
http {
include ${nginx}/conf/mime.types;
fastcgi_temp_path /tmp/nginx-homepage;
uwsgi_temp_path /tmp/nginx-homepage;
scgi_temp_path /tmp/nginx-homepage;
client_body_temp_path /tmp/nginx-homepage;
proxy_temp_path /tmp/nginx-homepage;
sendfile on;
# Logging is handled by the primary nginx server
access_log off;
server {
listen 8080 default_server;
server_name tazj.in;
root ${website};
${oldRedirects}
location ~* \.(webp|woff2)$ {
add_header Cache-Control "public, max-age=31536000";
}
location /blog {
alias ${blog.rendered};
if ($request_uri ~ ^/(.*)\.html$) {
return 302 /$1;
}
try_files $uri $uri.html $uri/ =404;
}
}
server {
listen 8080;
server_name www.tazj.in;
return 301 https://tazj.in$request_uri;
}
}
'';
in writeShellScriptBin "homepage" ''
if [[ -v CONTAINER_SETUP ]]; then
cd /run
echo 'nogroup:x:30000:nobody' >> /etc/group
echo 'nobody:x:30000:30000:nobody:/tmp:/bin/bash' >> /etc/passwd
fi
mkdir -p /tmp/nginx-homepage
exec ${nginx}/bin/nginx -c ${config}
''