User Tools

Site Tools


webapps:hugo

This is an old revision of the document!


Hugo

Ubuntu 22.04

This tutorial will guide you through the steps necessary to build your own statically generated website using Hugo. It will guide you through the deployment of two servers, one for building your website, and another for hosting it. The first server will provide a test-bed to build your website on, the second will allow you to host the website.

I think it is best to first describe why two servers are needed and what each of them are going to be doing in more detail so that even a beginner will have an idea of what is going on.

Hugo itself is a static site generator, meaning it takes relatively simple input in the form of markup files and outputs working html code. The webserver, in this case nginx, will be used to host these files on the internet. Web hosting requires some understanding of how DNS works and a domain name, which I will not be going over in this guide, but will describe briefly, enough for most people to figure it out.

Hugo Server

Dependencies

sudo apt install git nginx golang

Install hugo from snap because why not make life a bit easier?

sudo snap install hugo

Initialize a new site with a name, cd into dir, initialize git, install and set a theme. The theme can be anything you want, in this case we are going with the default theme found in the Hugo documentation.

hugo new site <site_name>
cd /<site_name>
git init
git submodule add https://github.com/theNewDynamic/gohugo-theme-ananke.git themes/ananke
echo "theme = 'ananke'" >> hugo.toml

Nginx Server

There are some other basic things you should know about setting up a web server.

Prerequisites

First things first, install nginx.

sudo apt install nginx

Uncomplicated FireWall or ufw needs to be configured, and started if it isn't already running. This will allow incoming connections on port 80, the default port for http traffic. If you want https, you can add that now, but it will be covered later.

sudo ufw allow http
sudo ufw reload
sudo ufw enable

Configure Nginx

Remove default nginx config. This will cause issues if you don't remove it.

sudo rm /etc/nginx/sites-enabled/default

Remove the default html files

sudo rm -rf /var/www/html/*

Create a new nginx config in the location and format of /etc/nginx/conf.d/subdomain.domain.tld.conf

sudo vim /etc/nginx/conf.d/subdomain.domain.tld.conf

Copy in a basic http config. If you don't have a domain yet, you can just substitute the server_name (subdomain.domain.tld.conf) with the IP address of the server. This way you can test this in a lab enviroment.

server {
    listen 80;
    server_name subdomain.domain.tld;
    root /var/www/html
}

With an IP address.

server {
    listen 80;
    server_name 192.168.1.4;
    root /var/www/html
}

Test the config to make sure that everything works before you move on. If it throws any errors, it will tell you at which line(s) they occur in the config file.

sudo nginx -t

Add a file to the web root to make sure that everything works in your web browser before moving the actual website to the server.

sudo touch /var/www/html/index.html && echo "Hello World!" >> /var/www/html/index.html
sudo chown -R www-data:www-data /var/www/html

Start/restart the nginx service.

sudo systemctl restart nginx

Navigate your web browser to your domain or IP address and it should produce a white background with Hello World in the top left corner. \ \

Copying your Website to the Web Server

For this all you need to do is copy your published hugo website to the web server. To publish your website you need to run hugo server to generate the website files.

On the Hugo server, navigate to your site directory with your website configuration files and folders in it.

cd /<site_dir>

From the hugo directory start an sftp connection to your web server and copy the publish folder to the web server using put with the R flag to copy recursively. When done exit.

sftp <user>@<web_server_IP>
put -R /publish

Now ssh into your web server

webapps/hugo.1694863119.txt.gz · Last modified: 2023/09/16 11:18 by lucid