Skip to content

Instantly share code, notes, and snippets.

@adipasquale
Last active February 28, 2024 10:37
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save adipasquale/05e432157fcba07b0d2a8cbfdf326670 to your computer and use it in GitHub Desktop.
Save adipasquale/05e432157fcba07b0d2a8cbfdf326670 to your computer and use it in GitHub Desktop.
bash script to install and set up Caddy web server with a static website hosted on a GitHub repository
# Install script for Ubuntu server 16.0+.
# Installs and sets up Caddy web server with a static website hosted on a GitHub repository.
# Used in https://blog.dipasquale.fr/en/2018/12/27/build-and-deploy-huge-static-websites-with-caddy/
# This script is a condensed version of https://blog.digitalocean.com/deploying-a-fully-automated-git-based-static-website-in-under-5-minutes/
# Download and extract Caddy :
wget -O caddy.tar.gz "https://caddyserver.com/download/linux/amd64?plugins=http.git&license=personal"
mkdir caddy
tar vxf caddy.tar.gz -C caddy
cd caddy
# install the binary :
sudo cp caddy /usr/local/bin
sudo chown root:root /usr/local/bin/caddy
sudo chmod 755 /usr/local/bin/caddy
# allow it to listen on protected ports :
sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy
# create the configuration directories and set proper permissions :
sudo mkdir /etc/caddy
sudo chown -R root:www-data /etc/caddy
sudo mkdir /etc/ssl/caddy
sudo chown -R www-data:root /etc/ssl/caddy
sudo chmod 0770 /etc/ssl/caddy
# install the Systemd service file :
sudo cp init/linux-systemd/caddy.service /etc/systemd/system/
sudo chown root:root /etc/systemd/system/caddy.service
sudo chmod 644 /etc/systemd/system/caddy.service
sudo systemctl daemon-reload
# get external IP (cf. https://unix.stackexchange.com/a/194136)
IP=`dig +short myip.opendns.com @resolver1.opendns.com`
# Use nip.io to have a valid domain name for HTTPS
URL=https://$IP.nip.io
# write a default Caddyfile
cat <<EOM | sudo tee /etc/caddy/Caddyfile
https://$IP.nip.io {
internal /.git
gzip
redir 301 {
if {scheme} is http
/ https://{host}{uri}
}
git https://github.com/kamaln7/basic-static-website.git {
interval 300
}
}
EOM
# start Caddy service
sudo systemctl start caddy
sudo systemctl enable caddy
echo "wait 10 seconds ..."
sleep 10
sudo systemctl restart caddy
echo "last wait of 10 seconds ..."
sleep 10
echo "All done ! open $URL in your browser."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment