Welcome to blog.jlcarveth.dev
John L. Carveth
This is the first post on the blog setup using Deno.
What is Deno?
fetch and the Streams API rather than creating new APIs to learn.
Deno as a Blogging Platform
Deno's simplicity is an extremely appealing feature. Installing the Deno runtime itself is a single command. Once
deno is installed, initializing a blog is as simple as running the following command:
$ deno run -r --allow-read --allow-write https://deno.land/x/blog/init.ts ./directory/for/blog/
That's it. A new directory is created containing a
main.ts that allows for simple configuration of blog settings, a
deno.jsonc file contains run commands, and the
posts/ directory contains the blog posts in a markdown format.
deno task dev is all that's needed to deploy the blog. Deno will watch for changes and update the view immediately.
Self hosting Deno was relatively simple, especially since I already have a Linux VM running on Digital Ocean. First I had to install Deno on the server, which can be done with a single command:
curl -fsSL https://deno.land/install.sh | sh
The install script suggests adding
deno to the PATH, which is a good idea. The following lines were added to the server's
export DENO_INSTALL=/home/<USER>/.deno export PATH=$DENO_INSTALL/bin:$PATH
Now that our server has access to the
deno command, we could run
deno task serve and call it a day. However, I tend to use service managers to facilitate starting / stopping services on a system. That way, I can ensure the deno blog starts on system startup, as well as a single command to start, stop, and check the status of the blog.
I created a
[Unit] Description=Blogging platform using Deno.js [Service] ExecStart=/home/jlcarveth/.deno/bin/deno run --allow-net --allow-read --no-check main.ts Restart=always User=jlcarveth Group=jlcarveth WorkingDirectory=/opt/blog.jlcarveth.dev [Install] WantedBy=multi-user.target
The most important line is
ExecStart which contains the command used by
systemd to execute our service. We can also specify the user we want our process to run as, which is useful for adding read/write protections to files or other security-based restrictions.
Once the service file has been created, a symlink needs to be created on
sudo ln -s blog.service /etc/systemd/system/blog.service
That's it. The blog can now be deployed with a single command:
sudo systemctl start blog.service You can check if it is running with
sudo systemctl status blog.service and stop the service with
sudo systemctl stop blog.service.