Last active
May 10, 2024 14:23
-
-
Save kimadactyl/5c277d2698f754edf3daa5fd84488851 to your computer and use it in GitHub Desktop.
Dokku / Digital Ocean / Rails / Postgres / Let's Encrypt / persistent storage
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Creating a Digital Ocean droplet running Rails + Postgres with persistant storage and https | |
#-------------------------------------------------------------------------------------------- | |
# For your ctrl-D pleasure... | |
# SERVER_IP | |
# APP_NAME | |
# RAILS_SECRET (generate with `rails secret`) | |
# ADMIN_EMAIL | |
# Create and configure droplet | |
#----------------------------- | |
## Sign in and update | |
ssh root@SERVER_IP | |
apt-get update && apt-get upgrade | |
## Optionally add your locale | |
locale-gen en_GB en_GB.UTF-8 | |
dpkg-reconfigure locales | |
## Optionally add Imagemagick if we know we are going to be using it | |
apt install imagemagick libmagickwand-dev | |
## Create a swap if you're using a cheapo box ($5 tier) | |
fallocate -l 2048m /mnt/swap_file.swap | |
chmod 600 /mnt/swap_file.swap | |
mkswap /mnt/swap_file.swap | |
swapon /mnt/swap_file.swap | |
echo "/mnt/swap_file.swap none swap sw 0 0" >> /etc/fstab | |
# Create a Dokku app and addons | |
#------------------------------ | |
## Go to http://SERVER_IP and add a domain name (if you don't it seems to go weird: use a junk one if needed) | |
dokku apps:create APP_NAME | |
## Add postgresql | |
dokku plugin:install https://github.com/dokku/dokku-postgres.git postgres | |
dokku postgres:create APP_NAME-db | |
dokku postgres:link APP_NAME-db APP_NAME | |
## Increase the timeout as initial setup can take a while | |
dokku config:set APP_NAME CURL_CONNECT_TIMEOUT=30 CURL_TIMEOUT=300 | |
dokku config APP_NAME | |
## Add persistent storage | |
### http://dokku.viewdocs.io/dokku~v0.10.3/advanced-usage/persistent-storage/ | |
### Paperclip defaults to: /public/system/uploads | |
mkdir /var/lib/dokku/data/storage/APP_NAME | |
chown dokku.dokku /var/lib/dokku/data/storage/APP_NAME | |
### /app comes from the Dockerfile location for the container (see below) | |
dokku storage:mount APP_NAME /var/lib/dokku/data/storage/APP_NAME/public/system:/app/public/system | |
dokku ps:rebuild APP_NAME | |
### To have a look at the file structure if you get lost: dokku enter APP_NAME | |
# Local config | |
#------------- | |
## Create app.json in Rails root | |
{ | |
"name": "APP_NAME", | |
"description": "App Description", | |
"keywords": [ | |
"dokku", | |
"rails" | |
], | |
"scripts": { | |
"dokku": { | |
"postdeploy": "bundle exec rails db:migrate" | |
} | |
} | |
} | |
# Add git remote and deploy | |
#-------------------------- | |
## Remember to checkin the new files above! | |
git remote add dokku dokku@SERVER_IP:APP_NAME | |
git push dokku master | |
## Set production environment variables | |
### Can generate a key with `rails secret` | |
dokku config:set APP_NAME RAILS_ENV=production SECRET_KEY_BASE=RAILS_SECRET RAILS_SERVE_STATIC_FILES=true | |
# Add Let's Encrypt | |
#------------------ | |
## When site is accessible and DNS set up, we can set up https | |
dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git | |
dokku config:set --no-restart APP_NAME DOKKU_LETSENCRYPT_EMAIL=ADMIN_EMAIL | |
dokku letsencrypt APP_NAME | |
## Make it auto-renew | |
dokku letsencrypt:cron-job --add |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment