version v0.7
Latar Belakang
Sistem sebelumnya yang berbasis Coda mengalami keterbatasan dalam hal kinerja, integrasi, dan evaluasi KPI. Kecepatan akses yang lambat serta kurangnya fleksibilitas dalam pengelolaan data menghambat efisiensi kerja dan proses penilaian kinerja.
Sebagai solusi, Jalan Kerja dikembangkan untuk menghadirkan sistem pengelolaan dokumen yang terpusat, dashboard real-time untuk monitoring progres kerja, serta evaluasi kinerja berbasis KPI yang lebih akurat. Dengan arsitektur yang terintegrasi dan efisien, sistem ini dirancang untuk meningkatkan produktivitas, transparansi, dan pengambilan keputusan yang lebih cepat dan berbasis data.
Ruang Lingkup
Proyek Jalan Kerja akan dikembangkan sebagai sistem manajemen kerja yang mencakup pengelolaan dokumen, monitoring progres kerja, serta evaluasi kinerja berbasis KPI. Sistem ini akan diterapkan secara bertahap dan fleksibel sesuai dengan kebutuhan organisasi.
Sistem ini akan diterapkan pada proyek baru dengan fokus pada efisiensi kerja, integrasi data, dan evaluasi berbasis KPI. Infrastruktur akan dibangun menggunakan Google Cloud Run untuk memastikan skala otomatis dan performa optimal. Manajemen Dokumen: Penyimpanan dan pengelolaan dokumen kerja secara terpusat, aman, dan mudah diakses. Dashboard Real-Time: Menampilkan progres kerja, status tugas, serta indikator performa karyawan secara visual dan interaktif. Evaluasi KPI: Sistem akan memungkinkan penilaian kinerja berdasarkan data terstruktur dan akurat. Integrasi Sistem: Menghubungkan berbagai proses kerja dan data antar divisi untuk memastikan kolaborasi yang lebih efektif. Pada tahap awal, sistem akan menggunakan CockroachDB Serverless untuk memaksimalkan efisiensi sebelum ditingkatkan sesuai kebutuhan. Deployment akan dibedakan antara lingkungan development dan production, dengan masing-masing memiliki infrastruktur tersendiri. Proyek ini akan terus berkembang dengan pendekatan fleksibel dan berbasis kebutuhan, sehingga dapat menyesuaikan dengan dinamika kerja yang ada.
Team Project
LEAD :
AUDITOR :
Agestya Rizki Pratama : STAFF :
Penjelasan Teknis
Penjelasan tentang arsitektur teknis sistem Jalan Kerja, mencakup platform, alat, dan teknologi yang digunakan. Penjelasan ini memberikan konteks penting dalam memahami interaksi antar komponen serta infrastruktur yang akan diterapkan.
1. Arsitektur Sistem
Sistem Jalan Kerja menggunakan arsitektur berbasis web dengan Fullstack Laravel serta framework Filament untuk pengelolaanya. Infrastruktur dijalankan di Google Cloud Run, memastikan skalabilitas otomatis dan manajemen beban yang optimal.
2. Platform & Teknologi yang Digunakan
Framework Laravel menggunakan Filament digunakan sebagai framework frontend berbasis Laravel yang menyederhanakan proses pengembangan antarmuka. Hosting & Deployment: Google Cloud Run untuk menjalankan aplikasi dalam container yang terkelola. CockroachDB → Digunakan sebagai database utama untuk operasi write/read data transaksi dan master data. Penyimpanan Media: Google Cloud Storage untuk menyimpan file dan aset media aplikasi. Dengan kombinasi teknologi ini, Jalan Kerja dirancang untuk memiliki performa yang cepat, skalabilitas tinggi, serta kemudahan integrasi dengan berbagai aspek.
Arsitektur
SCM (Source Code Management)
Source Code untuk proyek Jalan Kerja menggunakan layanan Bitbucket dengan detail berikut :
Branching Strategy :
Project ini memiliki dua branch utama:
Branch master → Untuk production (stabil dan siap digunakan oleh end-user). Branch development → Untuk testing & integrasi fitur baru sebelum masuk ke master. Git Flow (Branching Strategy)
Untuk memastikan pengelolaan kode yang rapi dan terstruktur, digunakan Git Flow, dengan aturan sebagai berikut:
Branch Utama:
master: Branch utama untuk lingkungan stable / production. Hanya LEAD yang dapat melakukan merge ke sini. development: Branch utama untuk pengembangan dan pengujian sebelum masuk ke master. Branch Pendukung:
feature/{nama-fitur} → Digunakan untuk pengembangan fitur baru. Dibuat dari development, lalu setelah selesai di-merge kembali ke development. bugfix/{nama-perbaikan} → Untuk memperbaiki bug yang ditemukan di development. Setelah diperbaiki, di-merge kembali ke development. hotfix/{nama-hotfix} → Untuk perbaikan darurat pada master. Setelah diperbaiki, di-merge ke master dan juga ke development. release/{versi} → Untuk persiapan rilis ke master. ℹ️ Aturan Utama:
STAFF hanya bisa membuat PR ke development, tapi tidak bisa merge. LEAD bertanggung jawab untuk melakukan review & approval merge ke development dan master. AUDITOR hanya memiliki akses read-only pada repository. Tidak ada yang bisa push langsung ke development atau master untuk menghindari perubahan yang tidak terkontrol.
Infrastruktur
Infrastruktur adalah kerangka fisik dan virtual yang mendukung seluruh operasi sistem Jalan Kerja. Sistem ini dirancang menggunakan Google Cloud Run untuk menjalankan komponen frontend dan backend secara terkelola, memungkinkan skalabilitas otomatis dan efisiensi dalam pengelolaan sumber daya.
Pada tahap awal, sistem akan diimplementasikan dengan spesifikasi minimum, memastikan efisiensi biaya sambil tetap mendukung kebutuhan dasar operasional. Seiring dengan peningkatan jumlah pengguna dan data, infrastruktur dapat diperluas secara fleksibel tanpa gangguan layanan.
Komponen Infrastruktur
Google Cloud Run → Menjalankan aplikasi Laravel berbasis Filament dalam container, dengan dukungan auto-scaling untuk menangani lonjakan trafik. 🌐 jalan-kerja-dev → Google Cloud Project untuk environment development. 🌐 jalan-kerja-prod → Google Cloud Project untuk environment production. Hak Akses Cloud Run - Development
Hak Akses Cloud Run (Development)
Hak Akses Cloud Run (Production)
Dengan pemisahan ini, pengembangan dapat dilakukan secara lebih aman dan fleksibel tanpa mengganggu sistem yang sedang berjalan di production.
CockroachDB Cloud → Digunakan sebagai database utama, dikelola langsung oleh CockroachDB Cloud untuk memastikan high availability, scalability, dan fault tolerance. Google Cloud Storage → Menyimpan file dan aset media aplikasi, seperti gambar, dokumen, dan data lainnya yang tidak termasuk dalam database utama.
Development :
Production :
4. Firebase
Firebase akan digunakan dalam project Jalan Kerja untuk kebutuhan push notification melalui Firebase Cloud Messaging (FCM), yang memungkinkan sistem mengirim notifikasi real-time ke pengguna.
Development :
Production :
Spesifikasi Minimum untuk Tahap Awal
Pada tahap awal, sistem akan berjalan dengan spesifikasi berikut, yang dapat di-upgrade secara fleksibel sesuai kebutuhan:
Google Cloud Run → 1 vCPU, 512MB RAM. CockroachDB → Untuk tahap awal proyek Jalan Kerja, kita akan memanfaatkan CockroachDB Serverless Free Cluster, yang memungkinkan penggunaan gratis dengan kapasitas yang cukup untuk pengembangan dan deployment awal. Strategi Skalabilitas
Pada tahap awal, sistem akan menggunakan resource minimum untuk menekan biaya operasional. Seiring dengan pertumbuhan penggunaan, peningkatan spesifikasi akan dilakukan dengan menambah instance Google Cloud Run dan memperbesar kapasitas CockroachDB Dengan infrastruktur ini, sistem Jalan Kerja akan tetap efisien, scalable, dan aman, memastikan performa optimal dalam jangka panjang.
Database
Basis data yang digunakan dalam sistem Jalan Kerja, mencakup metode penyimpanan data, sistem pencadangan, serta fungsi spesifik dari setiap teknologi database dan cache yang diadopsi. Infrastruktur basis data dirancang untuk memastikan keamanan, integritas, dan ketersediaan data, sekaligus mempertahankan performa tinggi dalam pengolahan informasi.
1. CockroachDB (Database Utama)
Digunakan untuk menyimpan data kritis seperti informasi pengguna, transaksi, dan entitas utama dalam sistem. Dijalankan di CockroachDB Cloud, yang menawarkan high availability dan automatic failover untuk memastikan sistem tetap berjalan meskipun terjadi kegagalan node. Mekanisme backup otomatis diterapkan untuk menjaga integritas data serta memungkinkan pemulihan data jika terjadi insiden yang tidak diinginkan.
Hak Akses
Dokumen ini menjelaskan hak akses dalam database development, dan database production untuk memastikan keamanan dan kelancaran workflow pengembangan.
Hak Akses Database (Development)
ℹ️ Penjelasan:
STAFF memiliki akses penuh untuk pengembangan dan testing. LEAD memiliki akses penuh untuk keperluan review dan validasi. AUDITOR memiliki akses penuh untuk auditing selama tahap development.
Hak Akses Database (Production)
ℹ️ Penjelasan:
STAFF tidak memiliki akses ke production untuk menjaga keamanan data. LEAD memiliki akses penuh karena bertanggung jawab atas sistem yang berjalan. AUDITOR hanya memiliki akses read-only untuk keperluan audit tanpa bisa mengubah data. 2. Google Cloud Storage - Private (Penyimpanan Media)
Digunakan untuk menyimpan file non-relasional, seperti gambar, dokumen, dan aset media lainnya. Mendukung redundansi dan enkripsi data, serta terintegrasi dengan layanan lain di ekosistem Google Cloud untuk keamanan dan aksesibilitas yang optimal. Menggunakan Google Cloud Storage Private Secara default, Google Cloud Storage (GCS) menggunakan sistem Access Control yang memastikan hanya pengguna tertentu yang bisa mengakses bucket dan objek di dalamnya. Jika sebuah bucket diatur sebagai private, maka:
Hanya pengguna atau layanan yang memiliki izin yang bisa mengaksesnya. Tidak dapat diakses secara publik tanpa autentikasi. Memerlukan kredensial seperti IAM roles, Service Account, atau token untuk akses langsung. Namun, bagaimana jika kita ingin memberikan akses sementara ke suatu file tanpa membuatnya publik?
Signed URL: Akses Sementara ke Private Object
Signed URL adalah URL dengan tanda tangan digital yang memungkinkan akses sementara ke file di Google Cloud Storage tanpa memerlukan autentikasi langsung.
Cara Kerja Signed URL:
Server atau aplikasi backend membuat Signed URL dengan menambahkan tanda tangan digital berdasarkan kredensial Service Account. Signed URL memiliki masa berlaku (misalnya, hanya bisa digunakan selama 10 menit). Client/user mengakses file melalui Signed URL tanpa perlu login atau autentikasi tambahan. Setelah expired, URL tidak bisa digunakan lagi.
Dengan kombinasi teknologi ini, sistem Jalan Kerja dapat memastikan kecepatan, keandalan, dan keamanan data, mendukung operasional yang efisien serta pertumbuhan skala sistem di masa depan.
Framework Development Frontend
Frontend merupakan titik akses utama bagi pengguna dalam sistem Jalan Kerja, memastikan pengalaman yang intuitif dan responsif. Sistem ini dibangun menggunakan Laravel dengan framework Filament, yang menyediakan antarmuka yang modern, efisien, dan mudah dikelola.
Dengan Filament, pengembangan frontend menjadi lebih cepat dan terstruktur, terutama dalam mengelola halaman administratif. Framework ini menawarkan komponen UI siap pakai, integrasi yang seamless dengan backend Laravel, serta dukungan state management yang efisien.
Keunggulan utama dalam implementasi frontend Jalan Kerja:
Antarmuka yang User-Friendly → Tampilan yang bersih, mudah digunakan, dan responsif untuk berbagai perangkat. Komponen Dinamis → Menggunakan Filament untuk membangun komponen yang modular dan dapat dikustomisasi sesuai kebutuhan sistem. Keamanan & Akses Terintegrasi → Mendukung sistem autentikasi dan otorisasi bawaan Laravel untuk memastikan akses yang aman bagi pengguna. Optimasi Performa → Dengan caching dan pengelolaan data yang efisien, memastikan frontend tetap ringan dan cepat diakses. Dengan kombinasi Laravel dan Filament, sistem Jalan Kerja menawarkan pengalaman pengguna yang optimal, mendukung kebutuhan bisnis yang terus berkembang.
Deployment
Deployment sistem Jalan Kerja dirancang agar fleksibel, scalable, dan mudah dikelola, dengan menggunakan Google Cloud Run sebagai platform hosting utama. Proses deployment memastikan bahwa setiap perubahan pada sistem dapat diterapkan dengan cepat, aman, dan minim downtime.
1. Strategi Deployment
CI/CD dengan Google cloud build Developer melakukan push atau merge ke branch utama (misalnya master atau development) di Bitbucket. Bitbucket akan memicu pipeline Google Cloud Build melalui webhook yang telah dikonfigurasi. Google Cloud Build akan menjalankan tahap berikut: Build aplikasi menggunakan Docker. Push Docker image ke Google Artifact Registry. Deploy image terbaru ke Google Cloud Run untuk laravel. Sistem akan otomatis mengupdate layanan yang sedang berjalan tanpa downtime dengan metode rolling update.
Containerization dengan Docker → Laravel dikemas dalam container Docker untuk memastikan isolasi lingkungan serta kompatibilitas yang lebih baik antara development dan production. Rolling Update Deployment → Deployment dilakukan secara bertahap tanpa menghentikan layanan, sehingga pengguna tidak mengalami gangguan saat sistem diperbarui.
Dockerize
contoh dockerfile untuk laravel :
FROM php:8.2-fpm-alpine
WORKDIR /var/www/html
RUN mkdir -p /run/nginx/
RUN php -v
RUN composer self-update
COPY php-fpm/www.conf /usr/local/etc/php-fpm.d/
COPY php-fpm/zz-docker.conf /usr/local/etc/php-fpm.d/
COPY . .
COPY .env
COPY bos.conf /etc/nginx/conf.d/
COPY default.conf /etc/nginx/conf.d/
RUN chmod -R 777 storage bootstrap/cache
COPY local.ini /usr/local/etc/php/conf.d/local.ini
RUN composer install --no-dev --prefer-dist --optimize-autoloader
EXPOSE 80 443
ENTRYPOINT ["/bin/sh", "run.sh"]
Penjelasan Struktur Dockerfile
1️⃣ Base Image
Gunakan base image yang sesuai dengan kebutuhan aplikasi (misalnya Laravel butuh PHP, Nginx, dan Composer). Jika Laravel menggunakan queue, schedule, atau worker, pastikan base image mendukungnya. php:8.2-fpm untuk PHP-FPM node:18-alpine jika butuh frontend dalam satu container 2️⃣ Workdir (Direktori Kerja)
Menetapkan direktori kerja dalam container untuk menyimpan kode aplikasi. Pastikan aplikasi Laravel ditempatkan di path yang sesuai. 3️⃣ Copy Kode Aplikasi ke Container
Menyalin seluruh kode aplikasi ke dalam container. Jika ingin menghindari file yang tidak perlu, buat .dockerignore. Contoh .dockerignore:
Tujuan: Menghindari menyalin file yang tidak diperlukan ke dalam container.
4️⃣ Install Dependencies
Menginstal package Laravel dengan Composer. --no-dev → Tidak menginstal dependency untuk development. --prefer-dist → Menggunakan package yang sudah dikompilasi. --optimize-autoloader → Mengoptimalkan autoloading untuk performa. Kenapa penting? Laravel tidak akan bisa berjalan tanpa dependencies.
5️⃣ Konfigurasi dan Izin Akses File
Laravel membutuhkan akses baca/tulis ke: storage/ → Untuk menyimpan log, cache, dan sesi. bootstrap/cache/ → Untuk cache konfigurasi. Jika tidak diatur, Laravel bisa mengalami error seperti:
6️⃣ Salin Konfigurasi Nginx & PHP
Konfigurasi Nginx untuk mengatur routing ke Laravel. Konfigurasi PHP (local.ini) untuk mengatur memory_limit, execution time, dll. Contoh isi local.ini:
7️⃣ Expose Port
Membuka port untuk akses aplikasi dari luar container. Laravel + Nginx biasanya menggunakan port 80 dan 443. 8️⃣ Jalankan Aplikasi
Entry point ini akan menjalankan script run.sh yang berisi: Memastikan Laravel siap digunakan saat container dijalankan. Menjalankan PHP-FPM dan Nginx agar bisa melayani request. 9️⃣ Install Ekstensi PHP Tambahan
Jika Laravel butuh ekstensi tambahan, pastikan diinstal sebelum dijalankan. Contoh ekstensi umum yang sering digunakan di Laravel: pdo_pgsql (untuk koneksi database PostgreSQL) zip (untuk proses file compression) bcmath (untuk perhitungan angka besar)
Lingkungan Pengembangan
Project ini membutuhkan lingkungan pengembangan dimana memiliki kapabilitas untuk
Memiliki lingkungan tersendiri untuk Development
adalah lingkungan yang tidak memiliki akses publik, dan hanya bisa diakses oleh developer itu sendiri, memiliki folder folder per developer per fitur Memiliki lingkungan tersendiri untuk Testing (Mulai membutuhkan versioning)
Merupakan lingkungan agregat dari lingkungan Development di approve oleh LEAD, menggunakan database Testing Memiliki lingkungan tersendiri untuk Production
Merupakan branch agregat dari branch personal, menggunakan database production, diakses oleh publik, di approve oleh LEAD
Memastikan CI/CD yang otomatis pada lingkungan testing dan production