Setting up Ghost Professional Publishing Platform on OpenBSD 6
Ghost is the latest and greatest upstart to rival WordPress. Theme development is quick and easy to learn because the Ghost developers decided to use both the ember.js and handlebars.js frameworks to remove some of the learning curve. The install and setup time should take approximately 45-60 minutes and makes use of the following technologies: Node.js
, Relayd
, and Httpd
.
Note: Please replace example.org with your domain name and 192.0.2.x with your assigned Vultr IP address. We will also be using self-signed certificates which are really good for testing only. If you decide to use Ghost in production, it is extremely important to be using a real certificate. Real certificates can be obtained for free using Let's Encrypt.
Configuring OpenBSD
Enable Httpd
and relayd
.
# rcctl enable httpd relayd
Create the /etc/httpd.conf
configuration file for Httpd. In this example, the only purpose of Httpd is to redirect requests to https. Relayd will actually be the one listening on the https
port and proxying requests to Ghost.
prefork 3
types { include "/usr/share/misc/mime.types" }
server "www.example.org" {
listen on 192.0.2.1 port 80
# Redirect to https
block return 301 "https://$SERVER_NAME:$REQUEST_URI"
}
Create the testing SSL certificates for your Ghost deployment. Since this will only really be for testing, you can leave most of the fields blank. The only one that you will need to complete is the Common Name
field and that should match the fully-qualified domain name of the server. When you are ready to replace the self-signed certificate with ones that are true and valid, just remember to keep the file names the same. Relayd expects to find its key and certificate with the naming convention <ip address>.crt
and <ip address>.key
.
# cd /etc/ssl
# openssl req -x509 -new -nodes -newkey rsa:4096 -keyout private/192.0.2.1.key -out 192.0.2.1.crt -days 364 -sha256
# chmod 0400 private/192.0.2.1.key
Create the /etc/relayd.conf
configuration file for Relayd. Relayd does the magic that proxies and redirects requests to Ghost.
prefork 3
http protocol https {
match request header append "X-Forwarded-For" value "$REMOTE_ADDR"
match request header append "X-Forwarded-By" \
value "$SERVER_ADDR:$SERVER_PORT"
tcp { nodelay, sack, socket buffer 65536, backlog 128 }
tls { no tlsv1, ciphers HIGH }
tls no session tickets
}
relay ghost {
listen on 192.0.2.1 port 443 tls
protocol https
forward to 127.0.0.1 port 2368
}
Add the following packages. pkg_add -r node unzip wget
Install and Configure Ghost
Create a user and home directory for the Ghost installation. For example, create a user named ghost
with a home directory called /var/www/ghost
. Use a very strong password for this account.
# user add -m -c "Ghost User" -d /var/www/ghost -G wheel -g =uid -u 5000 -s /bin/ksh ghost
# passwd ghost
Change to the ghost
user and download the latest version of Ghost.
# doas su ghost
# cd /var/www/ghost
# mkdir blog
# cd blog/
# wget https://ghost.org/zip/ghost-latest.zip
# unzip ghost-latest.zip
Install Ghost.
# npm install sqlite3 --sqlite=/usr/local
# npm install --production
# npm install forever
# doas npm install -g knex-migrator
Configure Ghost. Replace the database
section of config.production.json
with the database
clause below if you would like to use sqlite
instead of mysql
. Sqlite will easily handle about 100,000 connections a day. If you already have MySQL installed, you can always choose to use it instead. For the defaults.json
file, change the domain
part of the url
to your domain.
# cd core/server/config/env/config/
# vi config.production.json
"database": {
"client": "sqlite3",
"connection": {
"filename": "content/data/ghost.db"
},
# cd core/server/config/
# vi defaults.json
"url": "http://www,example.org",
"server": {
"host": "127.0.0.1",
"port": 2368
},
Now we have to populate the database and start Ghost.
# cd ~/blog
# NODE_ENV=production knex-migrator init
# NODE_ENV=production ~/blog/node_modules/forever/bin/forever start ~/blog/index.js
Perform a netstat -na -f inet
and look for a 127.0.0.1:2368
entry. You can also do a ps ax | grep node
to verify that Ghost is running.
Open your favorite web browser and browse to http://www.example.org
. You will automatically be redirected to https://www.example.org
. You will be greeted with the default Ghost page.
Browse to http://www.example.org/ghost
to finish the installation.