Deploy Forem on Digital Ocean and build your tech community
Photo by FRANCESCO TOMMASINI / Unsplash
This tutorial is the continuity of the previous one where we want to self-host Forem, the open-source blog, to build a community. The last tutorial shows how to deploy From on AWS, and if you are here, you probably want to deploy it on Digital Ocean. You must follow this tutorial before continuing with this one.
Generate the SSH key
Run the command below:
ssh-keygen -t ed25519 -C "contact@tericcabrel.com"
This creates a new ssh key, using the provided email as a label. Don't forget to replace the email address with your own.
When you're prompted to "Enter a file in which to save the key" press Enter. This accepts the default file location. Copy the default location that is in your terminal. ex: ~/.ssh/id_ed25519
After you have saved the file, you can change its location to ${HOME}/.ssh/forem
with the following command:
cp ~/.ssh/id_ed25519 ~/.ssh/forem
cp ~/.ssh/id_ed25519.pub ~/.ssh/forem.pub
Install Ansible collection for AWS
ansible-galaxy collection install community.digitalocean
Install Digital Ocean CLI
The Digital Ocean CLI is called doctl
; it helps you perform tasks on your digital ocean through the terminal. This is great when you want to automate things inside a CI/CD pipeline or in an Ansible playbook, as in our case. Run the commands below to install doctl
dnf install wget -y
wget https://github.com/digitalocean/doctl/releases/download/v1.70.0/doctl-1.70.0-linux-amd64.tar.gz
tar xf doctl-1.70.0-linux-amd64.tar.gz
mv doctl /usr/local/bin
Verify the installation succeed with doctl version
Generate Digital Ocean access token
Follow the instructions of this page: Create DigitalOcean Auth Token
Once you have the access token, let's authenticate with from the doctl
doctl auth init --access-token <digital_ocean_access_token>
# verify we are logged in successfully
doctl account get
You will get the following output:
Update Droplet instance settings
In the file playbooks/providers/digitalocean.yml
, locate the following variables and update them based on your needs:
forem_do_region: nyc3
forem_do_size: s-2vcpu-2gb
- forem_do_region: the DigitalOcean region used to set up your Forem server. The default region is
nyc3
which is in New York City, New York, USA - forem_do_size: the Droplet size. The recommended size is s-2vcpu-2gb, with 2 Shared CPUs, 2GB of RAM, a 60GB SSD disk, and 3TB of outbound transfer.
Save and exit.
Run the Ansible playbook
Run the DigitalOcean provider playbook to set up your Forem
ansible-playbook -i inventory/forem/setup.yml playbooks/providers/digitalocean.yml
Note: DigitalOcean does not have support for Fedora CoreOS. We have to upload a custom image to your account via Ansible. If the "Wait for fcos-{{ fcos_download_release }} to be created" task times out. Please check the Custom Images section on your DigitalOcean account to see if your image is still in a pending state. Wait for it to finish processing and re-run the DigitalOcean provider playbook.
Configure the DNS Zone
We need to create a DNS record of type A that points the subdomain forem.tericcabrel.com
to the EC2 instance IP address where Forem is installed. This IP address is printed at the end of the Ansible playbook execution.
Go to your domain name provider and look at how to do that. My domain name is registered at OVH.
Wait for the DNS to propagate completely. You can check the propagation status on this website: whatsmydns.net.
Restart the Web server service
Connect to the server through SSH using the private key:
ssh -i "~/.ssh/id_rsa" core@<server_public_dns>
Once connected, run the command below:
sudo systemctl restart forem-traefik.service
First connection to Forem
Navigate to your subdomain URL, in my case: forem.tericcabrel.com; you will see a beautiful webpage. Please see the Forem Admin documentation located here for more information on setting up your Forem.
Provide information to create the admin user and submit. You will be redirected to a page to add basic information about the community.
Define the settings as you want and click on finish
Yay! You are all set. You can continue writing your first article.
Forem Control (foremctl)
Since Forem is now running on your server, you will need to perform some tasks often to check the health, restart, update the version, etc...
foremctl
is a helper script you can use to control your Forem via CLI.
$ foremctl help
Usage: foremctl {console|deploy|help|rake|restart|start|stat|status|stop|update|version}
console Open a Rails console
deploy Updates and deploy the most current version of Forem
help Show this message
rake Run a rake task
restart Restart Forem
start Start Forem
stats Show CPU, RAM, Disk IO usage of the Forem containers
status Show the current running Forem containers
stop Stop Forem
update Updates Forem to the lastest container
version Shows information on the current running version of Forem
Update Forem to the latest version and restart
sudo foremctl deploy
Note: The deploy process causes a small downtime while the Forem code restarts.
Going Further
There are many other commands you can run to manage your Forem application. To learn more, check out this repository on GitHub.
Follow me on Twitter or subscribe to my newsletter to not miss the upcoming posts and the tips and tricks I share every week.
Happy to see you soon ?