mirror of
https://github.com/ivabus/website
synced 2024-11-25 18:05:12 +03:00
Add post Hosting Jekyll websites on NixOS
Remove aliurl project, add rinth Signed-off-by: Ivan Bushchik <ivabus@ivabus.dev>
This commit is contained in:
parent
89263a2929
commit
f8a8fcc909
4 changed files with 108 additions and 14 deletions
84
_posts/2024-02-03-hosting-jekyll-on-nixos.md
Normal file
84
_posts/2024-02-03-hosting-jekyll-on-nixos.md
Normal file
|
@ -0,0 +1,84 @@
|
|||
---
|
||||
layout: post
|
||||
summary: "This post is hosted on NixOS"
|
||||
title: "Hosting Jekyll websites on NixOS"
|
||||
toc: true
|
||||
---
|
||||
|
||||
## Preamble
|
||||
|
||||
Previously this website (ivabus.dev) was hosted on Cloudflare Pages, but recently I learned about NixOS and wanted to host my site "declarative" way.
|
||||
|
||||
## The way
|
||||
|
||||
### Step 1: Package website
|
||||
|
||||
To host website correct way, we want to have its Nix derivation. Before we create one, we have to have `gemset.nix`. To generate one, run this in the root of your Jekyll project
|
||||
|
||||
```shell
|
||||
nix-shell -p bundler -p bundix --run 'bundler update; bundler lock; bundler package --no-install --path vendor; bundix; rm -rf vendor'
|
||||
```
|
||||
|
||||
Note: make sure to remove all the platform-specific gems from `Gemfile` and `Gemfile.lock`, like `google-protobuf`, so your website could be built
|
||||
|
||||
Then you need to create a package for your website with code like this
|
||||
|
||||
```nix
|
||||
{ pkgs ? import <nixpkgs> { }, bundlerEnv ? pkgs.bundlerEnv, ... }:
|
||||
let
|
||||
version = "commit hash";
|
||||
repo = builtins.fetchGit {
|
||||
url = "https://address/of/git/repo";
|
||||
rev = version;
|
||||
};
|
||||
|
||||
gems = bundlerEnv {
|
||||
name = "your-site";
|
||||
ruby = pkgs.ruby;
|
||||
gemdir = "${repo}/.";
|
||||
};
|
||||
in pkgs.stdenv.mkDerivation {
|
||||
inherit version;
|
||||
name = "your-site";
|
||||
src = repo;
|
||||
|
||||
buildInputs = with pkgs; [
|
||||
gems
|
||||
# nokogiri dependencies
|
||||
zlib
|
||||
libiconv
|
||||
libxml2
|
||||
libxslt
|
||||
# jekyll wants a JS runtime
|
||||
nodejs-slim
|
||||
];
|
||||
|
||||
buildPhase = ''
|
||||
bundle exec jekyll build
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out
|
||||
cp -r _site/* $out/
|
||||
'';
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
### Step 2: Prepare nginx
|
||||
|
||||
```nix
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
virtualHosts."your.site" = {
|
||||
root = pkgs.callPackage ./path/to/pkg.nix { };
|
||||
extraConfig = ''
|
||||
error_page 404 /404.html;
|
||||
'';
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
### Step 3: Rebuild
|
||||
|
||||
Rebuild your system and try to visit your website (don't forget to open 80 (and 443, if HTTPS is enabled) ports in the firewall, if needed)
|
|
@ -1,14 +0,0 @@
|
|||
---
|
||||
layout: project
|
||||
title: "aliurl & urouter"
|
||||
description: "Aliasers for URLs"
|
||||
participant: false
|
||||
---
|
||||
|
||||
[aliurl](https://github.com/ivabus/aliurl) is "dynamic" URL "aliaser" (router), that could be managed via POST requests.
|
||||
|
||||
[urouter](https://github.com/ivabus/urouter) is "static" URL router, that reads route list in compile-time.
|
||||
|
||||
Both of them are built on top of [Rocket.rs](https://rocket.rs) framework.
|
||||
|
||||
Aliurl powers [ивабус.рф](https://ивабус.рф) and urouter powers [iva.bz](https://iva.bz)
|
13
_projects/006-urouter.md
Normal file
13
_projects/006-urouter.md
Normal file
|
@ -0,0 +1,13 @@
|
|||
---
|
||||
layout: project
|
||||
title: "urouter"
|
||||
description: "Aliaser for URLs"
|
||||
project-url: "https://github.com/ivabus/urouter"
|
||||
participant: false
|
||||
---
|
||||
|
||||
[urouter](https://github.com/ivabus/urouter) is "static" URL router, that reads route list at from file once.
|
||||
|
||||
urouter is built on top of the [Rocket.rs](https://rocket.rs) framework.
|
||||
|
||||
urouter powers [iva.bz](https://iva.bz)
|
11
_projects/007-rinth.md
Normal file
11
_projects/007-rinth.md
Normal file
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
layout: project
|
||||
title: "Rinth"
|
||||
description: "FM and SSG synthesizer"
|
||||
participant: false
|
||||
project-url: "https://github.com/ivabus/rinth"
|
||||
---
|
||||
|
||||
Rinth is work in progress FM and SSG synthesizer.
|
||||
|
||||
First alpha release [is available](https://github.com/ivabus/rinth/releases/tag/0.0.1) on GitHub.
|
Loading…
Reference in a new issue