Install Ghost with NGINX on Arch Linux

Complete guide on how to install Ghost and using NGINX as a reverse proxy to make the site accessible on the internet over HTTP/2.

Installation

Terminal window
pacman -S nodejs-lts-fermium npm sqlite nginx-mainline certbot certbot-nginx
npm install ghost-cli@latest -g

Prepare directory

Create a directory to install Ghost to and cd to it

Terminal window
mkdir /var/www/`yourdomain.com`
cd /var/www/`yourdomain.com`

Install Ghost with a sqlite database

Terminal window
ghost install —-db=sqlite3

When asked about URL, enter the full URL to your domain. E.g. https://hogwarts.zone

Configuration

NGINX

DigitalOcean has provided a tool for configuring your web server over at nginxconfig.io, use it and follow the instructions to create a site. Then proceed with the instructions below.

Enable your site in NGINX

If you’ve generated a config as mentioned above you should be ready to activate your site.

Terminal window
cd /etc/nginx
ln -s sites-available/`yourdomain.com` sites-enabled/`yourdomain.com`

Disable the default site

If you want to disable the default site and create a new one, instead of adding your site to the default webroot, you can disable it by removing the symlink.

Terminal window
rm /etc/nginx/sites-enabled/default

Certificate renewal

Create a systemd service

/etc/systemd/system/certbot.service
[Unit]
Description=Let’s Encrypt renewal
[Service]
Type=oneshot
ExecStart=/usr/bin/certbot renew —quiet —agree-tos —deploy-hook “systemctl reload nginx.service”

Create a timer

Make it run twice a day at random times to help reduce load on Let’s Encrypt servers.

/etc/systemd/system/certbot.timer
[Unit]
Description=Twice daily renewal of Let’s Encrypt’s certificates
[Timer]
OnCalendar=0/12:00:00
RandomizedDelaySec=1h
Persistent=true
[Install]
WantedBy=timers.target

Start and enable the service

Terminal window
systemctl start certbot.timer
systemctl enable certbot.timer

Run NGINX

Terminal window
systemctl start nginx
systemctl enable nginx

Live

Your website should now be live at https://yourdomain.com.

← Back to all posts