Website Deployment
2020-04-20 // Robin // 4 minutes
This insight highlights the deployment for publishing new content onto my website. At first the prerequisites will be shown and after that the steps for pushing new content onto the server.
Prerequisites
The following programs are required:
- Git
- Zola
- Apache
Git is used to track changes for the complete zola directory, for the content but also for the asset directories (template, static, etc). The git setup is a classical client-server setup, the client is my laptop and the server is hosted in a data center somewhere on the planet.
In order to connect to the server git uses the ssh protocol and then commits the changes. For an overview about other protocols and options check out the git documentation. But git can do more.
Git offers the possibility to use hooks after or even before certain actions will be performed. Here is a short list of a few common hooks. In order to update the website after a commit was received at the server the post-receive
hook from git can be used. As a basis I used this good tutorial from DigitalOcean. The idea is to place an executable script (bash, python, ...) inside the hooks folder inside the server repository which then executes certain commands.
Therefore create a file called post-receive
inside the hooks
folder with the following content:
#!/usr/bin/bash
while read oldrev newrev ref
do
if [[ $ref =~ .*/master$ ]];
then
echo "Master ref received. Deploying master branch to production."
git --work-tree=/srv/http/infides --git-dir=/srv/http/infides/.git pull
echo "Rebuilding the site with Zola."
zola --root /srv/http/infides build --output-dir /srv/http/infides/public
else
echo "Ref $ref successfully received. Doing nothing: only the master branch will be deployed."
fi
done
Make sure that the ownership and/or execution flags are set.
Zola just rebuilds the website with the new content.
Apache is used to serve the "public" folder from the command zola build
. The configuration file for the virtual host
looks like the following:
DocumentRoot "/srv/http/infides/public"
ErrorDocument 404 /404.html
I have omitted the other configuration directives, just the two most interesting. The ErrorDocument
configuration
is a really nice feature, so that my custom HTTP 404 File not found
template file can be used. For more information on
how to adjust custom error messages, here is the link to the Apache
documentation.
Deployment
So on my laptop I have a clone of the repository of the website. I create a new file, i.e. new-insight.md
in the folder
content/insights/
and check everything locally with zola serve
. After everything is ready I commit this file and other assets to the server. The git hook activates itself and updates the repository on the server and zola rebuilds the website.
The commands for this example are:
$ git add content/insights/new-insight.md
$ git commit -m "New insight"
[master c6207de] New insight
1 file changed, 10 insertion(+)
create mode 100644 content/insights/new-insight.md
$ git push
The server should respond with something like this:
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 4 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 463 bytes | 463.00 KiB/s, done.
Total 5 (delta 3), reused 0 (delta 0), pack-reused 0
remote: Master ref received. Deploying master branch to production.
remote: From /srv/git/infides
remote: 9acceb0..c6207de master -> origin/master
remote: Updating 9acceb0..c6207de
remote: Fast-forward
remote: content/insights/new-insight.md | 10 +++++++++++
remote: 1 file changed, 10 insertion(+)
remote: create mode 100644 content/insights/new-insight.md
remote: Rebuilding the site with Zola.
remote: Building site...
remote: -> Creating 4 pages (0 orphan), 2 sections, and processing 17 images
remote: Done in 369ms.
remote:
To infides.de:/srv/git/infides.git
9acceb0..c6207de master -> master
Conclusion
In this insight I presented how I deploy new insights onto my webserver. Most work is done by git
. With the post-receive
hook the repository on the server is updated and afterwards the website is rebuild
with zola. As everything is already tested on a local instance with zola serve
there should be no errors or failures.