Lewati ke konten

Deployment

Halaman ini menjelaskan langkah-langkah dan pertimbangan untuk men-deploy ILDIS ke lingkungan production. Jika Anda baru menginstal ILDIS, lihat halaman Instalasi terlebih dahulu.


Setelah instalasi dengan metode Pasang Cepat, berikut adalah struktur direktori yang dibuat di folder instalasi (default: /opt/ildis):

File/DirektoriKeterangan
.envKonfigurasi environment — database, port, domain, SSL, reCAPTCHA, cookie key
docker-compose.ymlKonfigurasi Docker Compose — mendefinisikan container app, database (db), cron, dan Traefik
nginx/default.confKonfigurasi Nginx dalam container — routing frontend dan backend
traefik/traefik.ymlKonfigurasi utama Traefik — entrypoints, log level, certificates resolver
traefik/config.ymlKonfigurasi dinamis Traefik — routing rules dan redirect HTTP→HTTPS
ssl/Direktori untuk sertifikat SSL manual
logs/nginx/Log Nginx — akses dan error log
logs/traefik/Log Traefik — akses dan error log
VERSIONFile versi ILDIS — digunakan oleh script update
backups/Direktori backup — dibuat saat menjalankan ./install.sh --update

File .env adalah konfigurasi utama yang mengatur seluruh aspek ILDIS. Berikut adalah variabel penting yang dapat Anda ubah:

VariabelKeteranganDefault
YII_ENVLingkungan aplikasi (dev, prod)prod
YII_DEBUGMode debug (true/false)false
PORTPort aplikasi8080
PUBLIC_DOMAINURL publik aplikasihttp://localhost:8080
DB_TYPETipe database (mariadb, mysql, external)mariadb
DB_HOSTHost databasedb (nama container)
DB_USERPengguna databaseildis
DB_PASSWORDKata sandi database(dibuat otomatis)
DB_DATABASENama databaseildis_v4
COOKIE_VALIDATION_KEY_BEKunci validasi cookie backend(dibuat otomatis)
COOKIE_VALIDATION_KEY_FEKunci validasi cookie frontend(dibuat otomatis)
RECAPTCHA_ENABLEDAktifkan reCAPTCHAfalse
RECAPTCHA_SITE_KEYKunci publik reCAPTCHAkosong
RECAPTCHA_SECRET_KEYKunci rahasia reCAPTCHAkosong
BEHIND_REVERSE_PROXYDi belakang reverse proxyfalse
SSL_MODEMode SSL (none, letsencrypt, manual)none
SSL_DOMAINDomain untuk SSLkosong
ILDIS_IMAGE_TAGTag image Dockerlatest

Pastikan environment variable berikut dikonfigurasi dengan benar untuk production:

VariabelNilai ProductionKeterangan
YII_ENVprodMenonaktifkan debug mode
YII_DEBUGfalseMenyembunyikan error detail dari pengguna
DB_HOSTHost databaseBukan localhost jika database terpisah
DB_PASSWORDPassword kuatGunakan password yang aman dan unik

ILDIS dapat dijalankan di belakang reverse proxy (Nginx, Apache, atau Traefik). Berikut contoh konfigurasi untuk masing-masing:

/etc/nginx/sites-available/ildis
server {
set $project_root /path/to/ildis.go.id;
#set $fcgi_server 127.0.0.1:9000;
set $fcgi_server unix:/var/run/php-fpm/example.socket;
charset utf-8;
client_max_body_size 128M;
listen 80;
server_name ildis.go.id;
root $project_root/;
index index.php;
access_log /var/log/nginx/ildis.access.log combined;
error_log /var/log/nginx/ildis.error.log warn;
location ^~ /backend {
rewrite ^/backend(.*)$ /backend/$1 last;
}
location ^~ /backend/ {
root $project_root;
# uncomment the following, if you want to enable speaking URL in the backend
#try_files $uri $uri/ /backend/index.php$is_args$args;
location ~ /\.(ht|svn|git) {
deny all;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass $fcgi_server;
try_files $uri =404;
}
}
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~* \.(?:css|js|jpg|jpeg|gif|png|ico|woff2?|ttf|svg|eot|webp|pdf)$ {
expires 30d;
access_log off;
add_header Cache-Control "public";
try_files $uri =404;
}
location ~ /\.(ht|svn|git|env|DS_Store) {
deny all;
}
location ~ ^/(vendor|node_modules|\.vagrant|vagrant|DATABASE|\.github)(/|$) {
deny all;
return 403;
}
location ~* ^/(Vagrantfile|composer\.(json|lock|phar)|package\.json|\.bowerrc|\.gitignore|README.*|CHANGE.*|codeception\.yml|requirements\.php|yii(_test)?(\.bat)?)$ {
deny all;
return 403;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass $fcgi_server;
try_files $uri =404;
}
}

Aktifkan konfigurasi:

Terminal window
sudo ln -s /etc/nginx/sites-available/ildis /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Jika server Anda memiliki domain publik, gunakan Let’s Encrypt untuk sertifikat SSL gratis:

  • Metode Pasang Cepat: Pilih opsi SSL “Let’s Encrypt” saat instalasi interaktif. Script akan mengkonfigurasi Traefik secara otomatis.
  • Metode Manual: Gunakan Certbot dengan Nginx atau Apache.
Terminal window
sudo certbot --nginx -d ildis.example.com

Jika Anda memiliki sertifikat SSL sendiri:

  • Metode Pasang Cepat: Pilih opsi SSL “Manual” dan masukkan path ke sertifikat dan kunci privat Anda.
  • Metode Manual: Konfigurasi sertifikat langsung di virtual host Nginx atau Apache.

Buat backup database secara berkala menggunakan mysqldump:

Terminal window
mysqldump -u ildis -p ildis_v4 > ildis_v4_backup_$(date +%Y%m%d).sql

Untuk backup otomatis, tambahkan ke cron:

crontab
0 2 * * * mysqldump -u ildis -p ildis_v4 | gzip > /backups/ildis_v4_$(date +%Y%m%d).sql.gz

Untuk mengembalikan database dari backup:

Terminal window
gunzip < /backups/ildis_v4_20250101.sql.gz | mysql -u ildis -p ildis_v4

Jika Anda menginstal ILDIS menggunakan script Pasang Cepat:

Terminal window
./install.sh --update

Script akan:

  1. Membuat backup konfigurasi .env dan docker-compose.yml
  2. Menarik image terbaru dari GitHub Container Registry
  3. Menjalankan migrasi database (php yii migrate/up)
  4. Memulai ulang container

Untuk instalasi manual di production:

Terminal window
cd /var/www/ildis
git pull origin main
composer install --ignore-platform-reqs
php yii migrate/up --interactive=0

Sebelum men-deploy ILDIS ke production, pastikan item berikut sudah dikonfigurasi:

  • YII_ENV=prod dan YII_DEBUG=false di .env
  • COOKIE_VALIDATION_KEY_BE dan COOKIE_VALIDATION_KEY_FE diisi dengan kunci yang kuat
  • RECAPTCHA_ENABLED=true pada halaman login backend (opsional tapi direkomendasikan)
  • SSL/TLS diaktifkan (Let’s Encrypt atau sertifikat manual)
  • File .env tidak dapat diakses publik (tidak terexpose oleh web server)
  • Database menggunakan password yang kuat
  • Port database tidak diekspos ke publik kecuali diperlukan
  • Backup database dijadwalkan secara berkala
  • Log rotation dikonfigurasi untuk mencegah disk penuh

Jika Anda mengalami masalah saat deployment:

  • Periksa log container: docker compose -f /opt/ildis/docker-compose.yml logs (metode Docker)
  • Periksa log aplikasi: tail -f /var/www/ildis/runtime/logs/*.log (metode manual)
  • Hubungi tim IT di it.dev@bphn.go.id