Tutorial Custom CMS dengan Strapi + Heroku (Part 1)

Logo Strapi

Membuat CMS dan API biasanya menjadi salah satu hal yang painfull dalam proses development sebuah aplikasi, tapi hal ini bisa dilakukan cukup cepat dengan menggunakan Strapi. Tutorial kali ini adalah bagian pertama dalam rangkaian Tutorial CMS Strapi.

Strapi adalah headless CMS open-source yang menggunakan Node.js, kita akan bahas lebih lengkap lagi tentang headless CMS itu seperti apa di lain waktu.

Membuat Custom CMS dengan Strapi

Langkah pertama kita perlu membuat CMS dengan Strapi, berikut ini adalah langkah-langkah untuk membuat custom CMS dengan Strapi:

Buat project Strapi dengan command dibawah ini:

npx create-strapi-app@latest my-project --quickstart

Buat file .gitignore yang berisi

package-lock.json

Inisialisasi git repository dan commit project Strapi

cd my-project
git init
git add .
git commit -m "Initial Commit"

Membuat Project di Heroku

Setelah membuat CMS dengan konfigurasi default, selanjutnya perlu untuk membuat project baru di Heroku sebelum dilakukan deployment. Berikut langkah-langkahnya:

Install CLI Heroku

Ubuntu

sudo snap install --classic heroku

Mac

brew tap heroku/brew && brew install heroku

Windows

Login ke Heroku

heroku login

Membuat Project Baru di Heroku

heroku create
Create new project on Heroku

kamu bisa membuat nama project sendiri dengan command heroku create nama-custom-project dan url project heroku yang kamu buat adalah nama-custom-project.heroku.com

Konfigurasi Database di Heroku

Selanjutnya perlu menambahkan database di project Heroku, kali ini kita menggunakan postgres untuk databasenya.

Tambah addons Postgres ke project heroku dengan command berikut:

heroku addons:create heroku-postgresql:hobby-dev

Kemudian untuk mendapatkan informasi credentials database tersebut gunakan perintah ini:

heroku config

Perintah ini akan memberikan informasi kredensial database tersebut dalam bentuk seperti berikut:
DATABASE_URL: postgres://ebitxebvixeeqd:dc59b16dedb3a1eef84d4999sb4baf@ec2-50-37-231-192.compute-2.amazonaws.com: 5432/d516fp1u21ph7b

(This url is read like so: *postgres:// USERNAME : PASSWORD @ HOST : PORT / DATABASE_NAME*)

Konfigurasi Database di Project Strapi

Kita akan melakukan konfigurasi database postgres untuk environment production pada project Strapi.

Install Package

npm install pg pg-connection-string --save

Buat File Config Database
Buat file config pada path berikut ini ./config/env/production/database.js pada file database.js ini hanya untuk environment production, sedangkan untuk environment development akan tetap menggunakan database SQLLite. Isi konfigurasi database.js adalah sebagai berikut:

// path: ./config/env/production/database.js

const parse = require('pg-connection-string').parse;
const config = parse(process.env.DATABASE_URL);

module.exports = ({ env }) => ({
  connection: {
    client: 'postgres',
    connection: {
      host: config.host,
      port: config.port,
      database: config.database,
      user: config.user,
      password: config.password,
      ssl: {
        rejectUnauthorized: false
      },
    },
    debug: false,
  },
});

Jangan lupa set environment pada Heroku dengan production

heroku config:set NODE_ENV=production

Buat File Server Strapi untuk Production
Buat file server.js pada path ./config/env/production/server.js dan isi file server.js adalah sebagai berikut:

// Path: ./config/env/production/server.js`

module.exports = ({ env }) => ({
  url: env('MY_HEROKU_URL'),
});

Deployment Project Strapi ke Heroku

Setelah melakukan instalasai project baru, konfigurasi database, selanjutnya tinggal melakukan deployment project ke Heroku.

Konfigurasi ENV
Ada beberapa variable env yang perlu diset ke project Heroku, kita bisa menggunakan command berikut:

heroku config:set MY_HEROKU_URL=$(heroku info -s | grep web_url | cut -d= -f2)
heroku config:set APP_KEYS=$(cat .env | grep APP_KEYS | cut -d= -f2-)
heroku config:set API_TOKEN_SALT=$(cat .env | grep API_TOKEN_SALT | cut -d= -f2)
heroku config:set ADMIN_JWT_SECRET=$(cat .env | grep ADMIN_JWT_SECRET | cut -d= -f2)
heroku config:set JWT_SECRET=$(cat .env | grep -w JWT_SECRET | cut -d= -f2)

Generate value env diatas dengan perintah berikut:

heroku config:set APP_KEYS=$(openssl rand -base64 32)
heroku config:set API_TOKEN_SALT=$(openssl rand -base64 32)
heroku config:set ADMIN_JWT_SECRET=$(openssl rand -base64 32)
heroku config:set JWT_SECRET=$(openssl rand -base64 32)

Commit Perubahan

git add .
git commit -m "Update database config"

Deploy

git push heroku HEAD:main
Success deploy Strapi to Heroku

Setelah dilakukan perintah deploy pada akhir logs kita akan menerima pesan URL project kita (cth: https://mighty-taiga-80884.herokuapp.com). Jika anda ingin membuka project tersebut bisa menggunakan perintah

heroku open
Strapi

Custom CMS dengan Strapi sukses dideploy dan siap untuk digunakan.
Akses Admin: https://URL_PROJECT/admin

Dashboard Strapi

Pada environment live production di Heroku, kita tidak bisa melakukan custom scheme atau membaut collection baru. Hal ini hanya bisa dilakukan pada environment development, jadi setiap setelah membuat custom scheme baru kita perlu melakukan deploy perubahan soruce code terbaru ke Heroku.

Untuk memudahkan proses ini kita perlu membuat CI/CD sehingga proses development dan deployment bisa berjalan lebih cepat. Selanjutnya Tutorial Membuat CI/CD dengan Github, Strapi, dan Heroku (Part 2).

Source Code

Untuk source code lengkap bisa diakses melalui link github ini.

Thank you for reading and learning.
More Learn, More Earn.
Have a great day ^ _ ^