insights/content/tutorials/how-to-install-self-hosted-commento-and-use-nginx-as-reverse-proxy/index.id.md

221 lines
8.7 KiB
Markdown
Raw Permalink Normal View History

---
title: "Cara Install Commento Dan Konfigurasi Nginx Sebagai Reverse Proxy-nya"
description: "Cara menginstal Commento beserta dependensi yang diperlukan seperti PostgreSQL, meng-konfigurasi Commento dan SystemD service, dan menggunakan Nginx sebagai reverse-proxy supaya Commento dapat diakses melalui HTTPS."
# linkTitle:
date: 2022-09-14T03:09:19+07:00
lastmod:
draft: false
noindex: false
# comments: false
nav_weight: 1000
# nav_icon:
# vendor: bootstrap
# name: toggles
# color: '#e24d0e'
series:
# - Tutorial
categories:
- Self-Hosted
- SysAdmin
tags:
- Commento
- PostgreSQL
- Nginx
images:
# menu:
# main:
# weight: 100
# params:
# icon:
# vendor: bs
# name: book
# color: '#e24d0e'
authors:
- ditatompel
---
**Commento** adalah platform layanan komentar (seperti **Disqus**) yang berfokus pada privasi. Dia *open-source*, relatif cepat saat diakses dan dapat didownload dan dijalankan di server milik kita sendiri (*self-hosted*). Artikel ini membahas mengenai cara menginstal Commento beserta dependensi yang diperlukan seperti **PostgreSQL**, meng-konfigurasi Commento dan **SystemD** *service* supaya dapat *auto-start* setelah server booting. Dan, sebagai tambahan, menggunakan **Nginx** sebagai *reverse-proxy* supaya Commento dapat diakses melalui HTTPS.
<!--more-->
> **PERINGATAN**: Saya menggunakan Commento sudah cukup lama, tapi sejak 1 tahun yang lalu sampai artikel ini dibuat, saya tidak menemukan adanya rilis terbaru ataupun *commit* ke *master branch* di **git** repositori-nya. Anda bisa mencoba [Commento++](https://github.com/souramoo/commentoplusplus) sebagai penggantinya.
## Kebutuhan Hardware
Commento bisa dibilang cukup ringan dan dari pihak developer sendiri menyarankan untuk dapat menjalankan Commento, paling tidak server memiliki 64MB *free* RAM dan paling tidak 30MB *free disk space*. Tentu saja kebutuhan tersebut diluar kebutuhan untuk menjalankan PostgreSQL database server dan Nginx Web Server / *Reverse Proxy* server.
Tentu saja Anda bisa juga menggunakan PostgreSQL server terpisah atau penyedia layanan PostgreSQL berbasis *cloud* untuk database Commento.
Program commento yang distribusikan ke publik terkonfirmasi dapat berjalan dengan baik di arsitektur hardware `amd64` dan `x86`.
## Kebutuhan Software
Commento menggunakan PostgreSQL sebagai databasenya, dan supaya dapat berjalan dengan baik, dibutuhkan PostgreSQL versi `9.6` atau lebih tinggi. Tidak ada kebutuhan software lainnya, kecuali Anda benar-benar ingin meng*compile* Commento dari *source-code*nya.
Disamping itu, disarankan juga untuk menggunakan Nginx didepan Commento supaya commento dapat diakses melalui HTTPS.
## Install PostgreSQL
Di artikel ini mari kita asumsikan bahwa kita menggunakan **Ubuntu** `20.04` dimana dari repositori *official package repository*-nya sudah menyediakan PostgreSQL versi `9.6` (atau lebih tinggi).
Install `postgresql` dan `postgresql-contrib`:
```bash
sudo apt update && sudo apt install postgresql postgresql-contrib
```
Secara default, Postgres menggunakan konsep yang disebut `roles` untuk menghandle autentikasi dan otorisasi (sistemnya mirip dengan `User` dan `Group` pada sistem operasi Linux / Unix).
Buat `role` baru pada PostgreSQL menggunakan user `postgres` menggunakan perintah berikut:
```bash
sudo -u postgres createuser --interactive
```
```
Enter name of role to add: commento
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n
```
Setelah itu, buat database baru menggunakan user `postgres` yang nantinya digunakan oleh Commento dengan perintah `createdb` :
```bash
sudo -u postgres createdb commento
```
Perintah diatas akan membuat database baru dengan `commento`.
Opsional: Buat password untuk user postgres:
```bash
sudo -u postgres psql
ALTER USER postgres PASSWORD '[GantiDenganPasswordPilihanAnda]';
```
Jika sukses, Posgres akan merespond dengan output `ALTER ROLE`.
## Install Commento
Cari [Commento rilis terbaru](https://vr4.me/g/OyQAY) dan download arsipnya ke server:
```bash
wget https://dl.commento.io/release/commento-v1.8.0-linux-glibc-amd64.tar.gz
```
Extract ke folder dimana program *binary* Commento ingin disimpan dan nantinya dijalankan. Misalnya `/opt/commento`.
```bash
mkdir /opt/commento
tar -xvzf commento-v1.8.0-linux-glibc-amd64.tar.gz -C /opt/commento/
```
## Mengkonfigurasi Commento
Sebelum dapat menjalankan program / *service* Commento, Anda perlu menentukan konfigurasi yang dibutuhkan, antara lain: URL yang nantinya digunakan untuk mengakses `self-hosted` Commento, koneksi ke database, dll. Ada pula konfigurasi opsional seperti SMTP dan OAuth.
Di artikel ini mari kita asumsikan kalau Commento akan dijalankan di server dengan menggunakan alamat IP lokal (`127.0.0.1`) port `8088` dan nantinya dapat diakses dari URL `https://commento.ditatompel.com` melalui **Nginx reverse proxy**.
Selain itu, diasumsikan juga server database PostgreSQL berada di 1 server yang sama dengan program Commento dijalankan dengan informasi sebagai berikut:
Host: `127.0.0.1`
Nama database : `commento`
User: `commento`
password: `commentoPassword`
Buat *environment variables* yang nantinya digunakan oleh Commento systemd service. Anda bisa meletakan file `.env` di folder `/etc/commento/commento.env` supaya nantinya kita lebih mudah saat mengubah-ubah konfigurasi.
```bash
COMMENTO_ORIGIN=https://commento.ditatompel.com
#COMMENTO_CDN_PREFIX=https://commento.ditatompel.com
# Set binding values
COMMENTO_BIND_ADDRESS=127.0.0.1
COMMENTO_PORT=8088
# Set PostgreSQL settings
COMMENTO_POSTGRES=postgres://commento:commentoPassword@127.0.0.1:5432/commento?sslmode=disable
#
# Below configuration is optional
# Uncomment and edit to fit your needs
#
# Prevent registration
#COMMENTO_FORBID_NEW_OWNERS=false # default true
# If set to true, all static content will be served GZipped if the client's browser supports compression. Defaults to false.
#COMMENTO_GZIP_STATIC=true
# Set the SMTP credentials
#COMMENTO_SMTP_HOST=mail.example.com
#COMMENTO_SMTP_PORT=587
#COMMENTO_SMTP_USERNAME=notification@example.com
#COMMENTO_SMTP_PASSWORD=examplePassword
#COMMENTO_SMTP_FROM_ADDRESS=notification@example.com
# Set Google OAuth credentials
#COMMENTO_GOOGLE_KEY=some-random-string-key.apps.googleusercontent.com
#COMMENTO_GOOGLE_SECRET=somerandomsecret
```
Kemudian buat `systemd` *service file* yang berlokasi di `/etc/systemd/system/commento.service`:
```bash
[Unit]
Description=Commento daemon service
After=network.target postgresql.service
[Service]
Type=simple
ExecStart=/opt/commento/commento
Environment=COMMENTO_CONFIG_FILE=/etc/commento/commento.env
[Install]
WantedBy=multi-user.target
```
Reload konfigurasi `systemd` *service files* kemudian jalankan Commento *service*:
```bash
sudo systemctl daemon-reload
sudo systemctl start commento
sudo systemctl enable commento
```
## Setting Nginx *reverse proxy* untuk Commento (sub)domain
Terakhir, saatnya untuk mengkonfigurasi **Nginx** didepan Commento. Konfigurasi `server block` **Nginx** dibawah ini adalah contoh *basic* yang memerintahkan Nginx berjalan sebagai *reverse-proxy* untuk Commento (Mengaktifkan HTTPS dan meneruskan *HTTP request* ke `127.0.0.1` port `8088`).
```nginx
server {
listen 80;
server_name commento.ditatompel.com;
root /var/www/default;
# in case you use certbot...
location /.well-known/acme-challenge/ { allow all; }
location / { return 301 https://$host$request_uri; }
}
server {
listen 443 ssl http2;
server_name commento.ditatompel.com;
# Edit to fit with your server environment and path
ssl_certificate /path/to/your/cert/fullchain.pem;
ssl_certificate_key /path/to/your/cert/privkey.pem;
ssl_dhparam /path/to/your/cert/dhparam.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
root /var/www/default;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8088/;
}
}
```
Restart Nginx *service* dan coba akses Commento menggunakan browser Anda.
## Resources
* [https://www.digitalocean.com/community/tutorials/how-to-install-postgresql-on-ubuntu-20-04-quickstart](https://r.vr4.me/QKRFo)
* [https://docs.commento.io/](https://docs.commento.io/)