Skip to main content
Featured image for Installing Hugo and Blowfish on Debian/Ubuntu

Installing Hugo and Blowfish on Debian/Ubuntu

·816 words· loading · loading · ·
Sudhakar Balakrishnan
Author
Sudhakar Balakrishnan
Engineer at heart, leader by choice.

Building & Deploying a Hugo + Blowfish Website on Debian/Ubuntu (Complete Developer Workflow)
#

A step-by-step guide for developers who want to build a Hugo site using the Blowfish theme β€” starting locally on Ubuntu/Debian, then deploying to a VPS running Nginx or Apache.

This article covers:

  • Installing Hugo correctly on Debian/Ubuntu
  • Creating a Hugo project
  • Adding Blowfish using Git submodules
  • Configuring your theme and site metadata
  • Local development workflow
  • Deployment approaches (zip + SCP, public folder only, or remote sync)
  • Nginx/Apache setup for serving the final site

πŸ“˜ Official References
#


1. Installing Hugo on Ubuntu/Debian
#

⚠️ Debian/Ubuntu Repositories Contain an Old Version
#

Debian & Ubuntu apt repositories frequently ship outdated Hugo versions. Example:

sudo apt install hugo

This often installs a version without β€œextended” SASS support, breaking many modern themes (including Blowfish).

βœ”οΈ Recommended: Install Hugo via Snap #

Snap provides the newest “extended” version reliably.

sudo snap install hugo --channel=extended

Check version:

hugo version

You should see something like:

hugo v0.135.0+extended

2. Create Your Hugo Site Locally
#

Choose any folder in your home directory:

hugo new site blogs
cd blogs

Initialize Git (optional but recommended):

git init
git add .
git commit -m "Initial Hugo site"

If using GitHub:

git remote add origin https://github.com/USERNAME/REPO.git
git push -u origin main

3. Install the Blowfish Theme
#

There are three possible ways to install themes in Hugo:

A β€” Copy theme folder directly (bad for updates)
#

B β€” Git clone theme into /themes (works but messy)
#

C β€” Git submodule (recommended) #

βœ”οΈ Best method: Git submodule

git submodule add -b main https://github.com/nunocoracao/blowfish.git themes/blowfish

This keeps Blowfish locked to a version and easy to update later:

git submodule update --remote --merge

4. Configure Blowfish Theme Files
#

Follow the official Blowfish installation guide: https://blowfish.page/docs/installation/#set-up-theme-configuration-files

Copy Blowfish example config files:

cp themes/blowfish/config/_default/* config/_default/

This gives you:

  • config.toml
  • params.toml
  • menus.toml
  • languages.toml

Now edit these files to match your site.


5. Basic Theme Settings to Adjust
#

Open:

config/_default/params.toml

Change:

Site title & description
#

title = "My Blogs"
description = "Developer Blog Built with Hugo + Blowfish"

Color scheme
#

colorScheme = "noir"
defaultAppearance = "dark"
autoSwitchAppearance = false

Disable placeholder favicons & use your own
#

Drop favicon files into:

static/
  favicon.ico
  favicon-16x16.png
  favicon-32x32.png
  apple-touch-icon.png
  android-chrome-512x512.png

Blowfish automatically picks them up.


6. Create First Content Pages
#

Example:

hugo new posts/my-first-post.md

Or make an “About” page using a leaf bundle:

content/about/
  index.md
  feature.jpg

Front matter example:

---
title: "About Me"
description: "Developer & Engineer"
showHero: false
---

7. Run Local Development Server
#

Use the two most important Hugo development flags:

  • --disableFastRender ensures all changes rebuild
  • --ignoreCache prevents stale assets

Run:

hugo server --disableFastRender --ignoreCache

Open browser: http://localhost:1313/

Verify:

  • Menus
  • Site title & metadata
  • Favicon
  • Theme colors
  • Blog posts
  • About page
  • Images + leaf bundles

Continue editing until satisfied.


8. Preparing for Deployment
#

You have three deployment options:


Option 1 β€” Zip Full Repo & SCP to Server
#

On your laptop:

cd ..
zip -r blogs.zip blogs/
scp blogs.zip user@yourvps:/var/www/

On VPS:

unzip blogs.zip
cd blogs

Install Hugo (snap or binary), then:

hugo --minify

Static website appears in:

public/

Option 2 β€” Only Upload the Generated public/ Folder
#

On local machine:

hugo --minify

Upload to server:

scp -r public/ user@yourvps:/var/www/YOURDOMAIN/

This is the lightest deployment method.


Option 3 β€” Remote Sync (VS Code SFTP, rsync, or WinSCP)
#

Example with VSCode SFTP extension:

  • Edit locally
  • Press Upload
  • Server receives public/ folder
  • No need to install Hugo on server

Or use rsync:

rsync -avz public/ user@yourvps:/var/www/YOURDOMAIN/

9. Configure Nginx (Recommended) #

Create a new site block:

sudo nano /etc/nginx/sites-available/blogs.example.com

Insert:

server {
    listen 80;
    server_name blogs.example.com;

    root /var/www/blogs.example.com/public;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Enable site:

sudo ln -s /etc/nginx/sites-available/blogs.example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

Add HTTPS (optional but recommended):

sudo certbot --nginx -d blogs.example.com

10. Apache Alternative
#

Create site config:

sudo nano /etc/apache2/sites-available/blogs.example.com.conf

Add:

<VirtualHost *:80>
    ServerName blogs.example.com
    DocumentRoot /var/www/blogs.example.com/public

    <Directory /var/www/blogs.example.com/public>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Enable:

sudo a2ensite blogs.example.com
sudo systemctl reload apache2

11. Final Test on Server
#

Visit:

https://blogs.example.com

Verify:

  • Pages load
  • CSS/JS applied correctly
  • Icons display
  • Images + leaf bundles render properly
  • No 404 issues

If everything looks good β€” your Hugo + Blowfish site is fully deployed!


πŸŽ‰ Conclusion
#

You have now:

βœ” Installed Hugo the correct way (Snap extended version) βœ” Created a new Hugo project βœ” Added Blowfish cleanly using Git submodules βœ” Configured site + theme + metadata βœ” Built a local workflow βœ” Deployed the site to a VPS using SCP or rsync βœ” Served it via Nginx or Apache

From here, you can continue adding:

  • Posts
  • Content pages
  • Taxonomies
  • Custom layouts
  • Assets

Blowfish is extremely flexible β€” explore the rest of the docs to unlock more features: https://blowfish.page/docs/

Related