72 lines
1.7 KiB
Nix
72 lines
1.7 KiB
Nix
# 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 /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;
|
|
root ${website};
|
|
|
|
${oldRedirects}
|
|
|
|
location /blog {
|
|
alias ${blog.rendered};
|
|
|
|
if ($request_uri ~ ^/(.*)\.html$) {
|
|
return 302 /$1;
|
|
}
|
|
|
|
try_files $uri $uri.html $uri/ =404;
|
|
}
|
|
}
|
|
}
|
|
'';
|
|
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}
|
|
''
|