DEV Community

Brandon Rozek
Brandon Rozek

Posted on • Originally published at brandonrozek.com on

Mirror a Hugo Site

I’m a big proponent of having offline copies of content. Especially when I’m on travel and don’t have easy Internet access. Using the built in hugo webserver and a reverse proxy, I will show how we can host a local mirror of a Hugo site.

Systemd Service

To begin with, let’s create a systemd service that will start up the Hugo webserver automatically. To demonstrate this, I will show a mirror of my website.

Edit /usr/lib/systemd/system/brandonrozek.service

[Unit]
Description=Mirror of brandonrozek.com
Wants=httpd.service
After=httpd.service

[Service]
User=brandon
Type=simple
WorkingDirectory=/home/brandon/repo/brandonrozek.com
ExecStart=/usr/bin/hugo serve --appendPort=false -D -p 22160 -b http://localhost/brandonrozek

[Install]
WantedBy=multi-user.target

Enter fullscreen mode Exit fullscreen mode

Replace httpd with whatever reverse proxy service this depends on. For every site you mirror, you need to make sure that the port (specified by -p) is different.

Now let’s start and enable the service.

sudo systemctl start brandonrozek
sudo systemctl enable brandonrozek

Enter fullscreen mode Exit fullscreen mode

Nginx Config

If you are using Nginx as your reverse proxy, we will need to create a config at /etc/nginx/sites-available/brandonrozek.conf.

server {
    location /brandonrozek {
        proxy_pass http://localhost:22160;
        proxy_http_version 1.1;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr; 
        proxy_set_header Host $host;
    }
}

Enter fullscreen mode Exit fullscreen mode

Then to enable it.

sudo ln -s \
        /etc/nginx/sites-available/brandonrozek.conf \
        /etc/nginx/sites-enabled/
sudo systemctl restart httpd

Enter fullscreen mode Exit fullscreen mode

Apache HTTPD Config

If you are using apache as your reverse proxy, create a config at /etc/httpd/conf.d/brandonrozek.conf

<Location /brandonrozek>
    ProxyPass http://localhost:22160/brandonrozek retry=0 timeout=5
    ProxyPassReverse http://localhost:22160/brandonrozek
    ProxyPreserveHost On

    Order allow,deny
    Allow from all
</Location>

Enter fullscreen mode Exit fullscreen mode

Then restart the httpd service.

sudo systemctl restart httpd

Enter fullscreen mode Exit fullscreen mode

Top comments (0)