Productionize Hugo Configuration #8

Merged
me merged 4 commits from dev into main 2025-08-15 12:13:16 -07:00
7 changed files with 115 additions and 18 deletions

6
.gitignore vendored
View File

@@ -35,6 +35,10 @@ docker-compose.yml
# 2024-01-24 Hide static files for Hyperling.com. # 2024-01-24 Hide static files for Hyperling.com.
Config/Hyperling.com/files/* Config/Hyperling.com/files/*
# Ignore things like Config/Hyperling.com-Stage/ # Ignore things like "Config/Hyperling.com-Stage/""
*-Stage *-Stage
Stage-* Stage-*
# Ignore copies of the Hugo configuration, such as "Config/Hugo-MyWebsite".
Hugo-*
*-Hugo

View File

@@ -4,25 +4,30 @@
FROM debian:bookworm-slim FROM debian:bookworm-slim
## Setup ## ## Setup ##
# Cache System Dependencies # System Dependencies
RUN apt-get update && apt-get install -y git hugo sudo curl wget bash RUN apt-get update && apt-get install -y git hugo nginx cron curl bash sudo htop
# User and Group # User and Group
RUN groupadd -r hugo && useradd -r -s /usr/bin/bash -g hugo hugo RUN groupadd -r hugo && useradd -r -g hugo hugo
# Directory Tree # Hugo Directory Tree
RUN mkdir -pv /var/www/hugo && chown -Rv hugo:hugo /var/www/hugo RUN mkdir -pv /var/www/hugo && chown -Rv hugo:hugo /var/www/hugo
# NGINX Directory Tree
RUN mkdir -pv /var/www/html/ && chown -Rv hugo:hugo /var/www/html/
# Copy Cron Job to Update Git Repo
COPY files/hugo.crontab /etc/cron.d/hugo
COPY files/hugo.cronjob.sh /var/www/hugo/cronjob.sh
RUN chmod +x /var/www/hugo/cronjob.sh
RUN crontab /etc/cron.d/hugo
# Copy Start Script
COPY files/main.sh /root/main.sh
RUN chmod +x /root/main.sh
## Main ## ## Main ##
# Install + Run Website # Install + Run Website
WORKDIR /var/www/hugo WORKDIR /var/www/
USER hugo USER root
CMD echo "*** Cloning Repo $REPO ***" && \ CMD /root/main.sh "$REPO" "$PROD" "$DEV"
cd /var/www/hugo && \
rm -rfv site && \
git clone --recurse-submodules $REPO site && \
cd site && \
mkdir -pv public && \
echo "*** Starting Hugo ***" && \
hugo version && \
hugo server -D --noBuildLock --bind 0.0.0.0

View File

@@ -9,12 +9,21 @@ services:
network: host network: host
restart: always restart: always
ports: ports:
- 8013:1313 - 8013:80 # Production minified files served using NGINX.
- 1380:1380 # Development files with drafts served by Hugo Server.
environment: environment:
- REPO=$REPO - REPO=$REPO
- PROD=$PROD
- DEV=$DEV
healthcheck:
test: curl -sS http://localhost:80 || curl -sS http://localhost:1380 || exit 1
interval: 1m
timeout: 10s
retries: 2
start_period: 30s
deploy: deploy:
mode: global mode: global
resources: resources:
limits: limits:
cpus: '0.10' cpus: '0.10'
memory: 32M memory: 64M

View File

@@ -9,3 +9,13 @@ COMPOSE_BAKE=true
## Git Website Repository ## Git Website Repository
# #
REPO=https://git.hyperling.com/me/hugo-jackanope REPO=https://git.hyperling.com/me/hugo-jackanope
#
## Web Environments
# Please use values YES/TRUE and NO/FALSE.
# Whether to start NGINX
PROD=YES
# Whether to start Hugo Server
DEV=NO

View File

@@ -0,0 +1,10 @@
#!/usr/bin/env bash
cd /var/www/hugo/site
git pull
hugo --gc --minify
rm -rfv /var/www/html/*
cp -rfv public/* /var/www/html/

View File

@@ -0,0 +1 @@
* * * * * hugo /var/www/hugo/cronjob.sh

View File

@@ -0,0 +1,58 @@
#!/usr/bin/env bash
REPO="$1"
echo "REPO=$REPO"
PROD="$2"
typeset -u PROD
echo "PROD=$PROD"
DEV="$3"
typeset -u DEV
echo "DEV=$DEV"
echo "*** Creating Git Repo ***"
sudo -u hugo git clone --recurse-submodules $REPO /var/www/hugo/site
echo "*** Copying Static Files to NGINX ***"
sudo -u hugo /var/www/hugo/cronjob.sh
echo "*** Starting Cron ***"
service cron start
if [[ "$PROD" == "Y"* || "$PROD" == "T"* ]]; then
echo "*** Starting Production Server Loop ***"
while true; do
curl -sS http://localhost:80 > /dev/null || {
echo "* Prod server not detected, starting..."
service nginx start
}
sleep 15
done &
cd /var/log/nginx
tail -f access.log error.log &
fi
if [[ "$DEV" == "Y"* || "$DEV" == "T"* ]]; then
echo "*** Starting Development Server Loop ***"
while true; do
curl -sS http://localhost:1380 > /dev/null || {
echo "* Dev server not detected, starting..."
cd /var/www/hugo/site
killall hugo 2>/dev/null
sudo -u hugo hugo server -D --noBuildLock --bind 0.0.0.0 -p 1380 &
}
sleep 30
done &
fi
cd
echo "*** Finished $0 ***"
wait -n
exit $?