From 7935957938fb4bd73b557e42fa828b1470979777 Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Sat, 8 Feb 2020 14:06:57 +0000 Subject: refactor(web): Move nginx setup to //web/homepage The homepage is going to be the landing page for all content, whether it be blog posts or other stuff. --- web/blog/default.nix | 9 +++--- web/blog/nginx.nix | 68 -------------------------------------------- web/homepage/default.nix | 15 ++++++++++ web/homepage/nginx.nix | 74 ++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 94 insertions(+), 72 deletions(-) delete mode 100644 web/blog/nginx.nix create mode 100644 web/homepage/default.nix create mode 100644 web/homepage/nginx.nix diff --git a/web/blog/default.nix b/web/blog/default.nix index 1bc026bf2a8c..4fa97f2248ee 100644 --- a/web/blog/default.nix +++ b/web/blog/default.nix @@ -31,7 +31,7 @@ let posts = list post (import ./posts.nix); fragments = import ./fragments.nix args; - renderedBlog = pkgs.third_party.runCommandNoCC "tazjins-blog" {} '' + rendered = pkgs.third_party.runCommandNoCC "tazjins-blog" {} '' mkdir -p $out cp ${fragments.blogIndex posts} $out/index.html @@ -40,6 +40,7 @@ let "cp ${fragments.renderPost post} $out/${post.key}.html" ) posts)} ''; -in import ./nginx.nix (args // { - inherit posts renderedBlog; -}) +in { + inherit post posts rendered; + static = ./static; +} diff --git a/web/blog/nginx.nix b/web/blog/nginx.nix deleted file mode 100644 index 7c600c38c02e..000000000000 --- a/web/blog/nginx.nix +++ /dev/null @@ -1,68 +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. -{ pkgs, lib, posts, renderedBlog, ... }: - -let - inherit (builtins) hasAttr filter map; - inherit (pkgs.third_party) writeText writeShellScriptBin nginx; - - oldRedirects = lib.concatStringsSep "\n" (map (post: '' - location ~* ^(en)?/${post.oldKey} { - # TODO(tazjin): 301 once this works - return 302 /${post.key}; - } - '') (filter (hasAttr "oldKey") posts)); - - config = writeText "blog-nginx.conf" '' - daemon off; - worker_processes 1; - error_log stderr; - pid /tmp/nginx-tazblog.pid; - - events { - worker_connections 1024; - } - - http { - include ${nginx}/conf/mime.types; - fastcgi_temp_path /tmp/nginx-tazblog; - uwsgi_temp_path /tmp/nginx-tazblog; - scgi_temp_path /tmp/nginx-tazblog; - client_body_temp_path /tmp/nginx-tazblog; - proxy_temp_path /tmp/nginx-tazblog; - sendfile on; - - # Logging is handled by the primary nginx server - access_log off; - - server { - listen 8080 default_server; - root ${renderedBlog}; - - location /static { - alias ${./static}/; - } - - ${oldRedirects} - - location / { - if ($request_uri ~ ^/(.*)\.html$) { - return 302 /$1; - } - - try_files $uri $uri.html $uri/ =404; - } - } - } - ''; -in writeShellScriptBin "tazblog" '' - 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-tazblog - exec ${pkgs.third_party.nginx}/bin/nginx -c ${config} -'' diff --git a/web/homepage/default.nix b/web/homepage/default.nix new file mode 100644 index 000000000000..94dfaf3dc6f1 --- /dev/null +++ b/web/homepage/default.nix @@ -0,0 +1,15 @@ +# Assembles the website index and configures an nginx instance to +# serve it. +# +# The website is made up of a simple header&footer and content +# elements for things such as blog posts and projects. +# +# Content for the blog is in //web/blog instead of here. +{ pkgs, lib, ... }: + +with pkgs; +with nix.yants; + +third_party.callPackage ./nginx.nix { + blog = web.blog; +} diff --git a/web/homepage/nginx.nix b/web/homepage/nginx.nix new file mode 100644 index 000000000000..90a13a1e98f9 --- /dev/null +++ b/web/homepage/nginx.nix @@ -0,0 +1,74 @@ +# 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 +}: + +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 /${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 ${blog.rendered}; + + location /static { + alias ${blog.static}/; + } + + ${oldRedirects} + + location / { + 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} +'' -- cgit 1.4.1