Dalam era pengembangan perangkat lunak modern, efisiensi dan kecepatan adalah kunci utama. Jika Anda masih melakukan deployment secara manual melalui FTP atau SSH setiap kali ada perubahan kode, Anda membuang waktu yang berharga dan meningkatkan risiko human error. Artikel ini akan membahas secara mendalam tutorial setup ci/cd gitlab pipelines laravel 12 docker untuk membantu Anda mengotomatiskan seluruh alur kerja pengembangan, mulai dari pengujian hingga produksi.
Laravel 12, sebagai versi terbaru dari framework PHP paling populer, membawa berbagai peningkatan performa. Menggabungkannya dengan Docker memastikan lingkungan pengembangan yang konsisten, sementara GitLab Pipelines memberikan orkestrasi automasi yang tangguh. Mari kita selami bagaimana cara membangun infrastruktur DevOps yang solid untuk proyek Laravel Anda.
Daftar Isi
- Mengapa Membutuhkan CI/CD untuk Laravel 12?
- Persiapan Lingkungan dan Prasyarat
- Langkah 1: Dockerisasi Laravel 12
- Langkah 2: Konfigurasi GitLab Runner
- Langkah 3: Menyusun File .gitlab-ci.yml
- Langkah 4: Automasi Pengujian (Unit & Feature Test)
- Langkah 5: Strategi Deployment ke Server
- Optimasi Pipeline: Caching dan Parallelism
- Keamanan dalam CI/CD
- Kesimpulan dan Langkah Selanjutnya
Mengapa Membutuhkan CI/CD untuk Laravel 12?
Sebelum masuk ke teknis tutorial setup ci/cd gitlab pipelines laravel 12 docker, penting untuk memahami nilai strategis dari implementasi ini. CI/CD (Continuous Integration/Continuous Deployment) bukan sekadar tren teknologi, melainkan kebutuhan bisnis. Dengan CI, setiap push kode ke repositori akan memicu pengujian otomatis. Ini memastikan bahwa kode baru tidak merusak fitur yang sudah ada.
Statistik menunjukkan bahwa tim yang mengadopsi praktik DevOps yang kuat mengalami frekuensi deployment 200 kali lebih sering dan tingkat kegagalan perubahan 3 kali lebih rendah. Dengan Laravel 12 yang semakin kompleks, mengandalkan pengecekan manual adalah resep untuk bencana. Docker berperan penting di sini dengan membungkus aplikasi dan dependensinya ke dalam container, sehingga jargon “di komputer saya jalan” tidak akan terdengar lagi.
Persiapan Lingkungan dan Prasyarat
Untuk mengikuti tutorial ini, pastikan Anda telah menyiapkan beberapa hal berikut:
- Akun GitLab: Tempat menyimpan repositori dan menjalankan pipeline.
- Laravel 12: Proyek Laravel yang sudah terinstal (menggunakan PHP 8.2 atau 8.3).
- Docker & Docker Compose: Terinstal di mesin lokal untuk pengujian.
- Server Target: VPS (Ubuntu disarankan) dengan akses SSH untuk deployment.
- Pemahaman Dasar YAML: Karena konfigurasi GitLab CI menggunakan format ini.
Langkah 1: Dockerisasi Laravel 12
Langkah pertama dalam tutorial setup ci/cd gitlab pipelines laravel 12 docker adalah memastikan aplikasi Laravel Anda dapat berjalan di dalam container. Kita membutuhkan dua file utama: Dockerfile dan docker-compose.yml.
Membuat Dockerfile
Dockerfile mendefinisikan lingkungan di mana PHP dan Laravel akan berjalan. Gunakan image resmi PHP yang ringan seperti Alpine Linux.
FROM php:8.3-fpm-alpine
# Instal dependensi sistem
RUN apk add --no-cache
git
curl
libpng-dev
oniguruma-dev
libxml2-dev
zip
unzip
# Instal ekstensi PHP
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
# Ambil Composer terbaru
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Set working directory
WORKDIR /var/www
COPY . /var/www
RUN composer install --no-dev --optimize-autoloader
RUN chown -R www-data:www-data /var/www/storage /var/www/cache
EXPOSE 9000
CMD ["php-fpm"]
Penting untuk menggunakan multi-stage build jika Anda ingin mengoptimalkan ukuran image, namun untuk keperluan CI/CD dasar, konfigurasi di atas sudah cukup mumpuni.
Langkah 2: Konfigurasi GitLab Runner
GitLab Runner adalah agen yang menjalankan pekerjaan (jobs) di pipeline Anda. Anda bisa menggunakan Shared Runners yang disediakan GitLab (gratis dengan kuota tertentu) atau menginstal Specific Runner di server Anda sendiri.
Tips: Menggunakan Specific Runner di server sendiri seringkali lebih cepat karena Anda memiliki kontrol penuh terhadap resource dan caching layer di level Docker host.
Untuk mendaftarkan runner, buka proyek GitLab Anda, navigasi ke Settings > CI/CD > Runners. Ikuti instruksi registrasi dan pastikan Anda memilih executor “docker” agar runner dapat menjalankan perintah di dalam container.
Langkah 3: Menyusun File .gitlab-ci.yml
Inilah inti dari tutorial setup ci/cd gitlab pipelines laravel 12 docker. File .gitlab-ci.yml memberi tahu GitLab apa yang harus dilakukan. Kita akan membaginya menjadi tiga tahap: Build, Test, dan Deploy.
stages:
- build
- test
- deploy
variables:
IMAGE_NAME: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
build_image:
stage: build
image: docker:latest
services:
- docker:dind
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t $IMAGE_NAME .
- docker push $IMAGE_NAME
Dalam tahap build di atas, kita menggunakan Docker-in-Docker (dind) untuk membangun image aplikasi kita dan menyimpannya di GitLab Container Registry. Ini adalah praktik terbaik agar artifact yang diuji sama persis dengan yang dideploy.
Langkah 4: Automasi Pengujian (Unit & Feature Test)
Jangan pernah melakukan deployment tanpa pengujian. Laravel 12 secara default mendukung PHPUnit dan Pest. Di dalam pipeline, kita akan menjalankan pengujian ini untuk memastikan tidak ada regression.
run_tests:
stage: test
image: $IMAGE_NAME
script:
- cp .env.example .env
- php artisan key:generate
- ./vendor/bin/phpunit
Di sini, kita menggunakan image yang baru saja kita build di tahap sebelumnya. Ini memastikan bahwa lingkungan pengujian identik dengan lingkungan produksi nantinya. Jika pengujian gagal, pipeline akan berhenti, dan kode tidak akan pernah sampai ke server produksi.
Langkah 5: Strategi Deployment ke Server
Setelah build sukses dan test lulus, saatnya melakukan deployment. Ada banyak cara, namun menggunakan SSH untuk memicu docker pull di server adalah cara yang paling umum dan efektif.
deploy_production:
stage: deploy
image: alpine:latest
before_script:
- apk add --no-cache openssh-client
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
script:
- ssh -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY && docker pull $IMAGE_NAME && docker stop laravel_app || true && docker rm laravel_app || true && docker run -d --name laravel_app -p 80:9000 $IMAGE_NAME"
only:
- main
Perhatikan penggunaan variabel $SSH_PRIVATE_KEY, $SERVER_USER, dan $SERVER_IP. Anda harus mengatur variabel-variabel ini di GitLab Settings > CI/CD > Variables demi keamanan.
Optimasi Pipeline: Caching dan Parallelism
Menunggu pipeline yang lambat adalah pemborosan waktu. Untuk mempercepat tutorial setup ci/cd gitlab pipelines laravel 12 docker ini, kita perlu mengimplementasikan caching terutama untuk folder vendor/ dan node_modules/.
- Composer Cache: Simpan folder
vendoragar tidak mendownload ulang setiap saat. - Docker Layer Caching: Gunakan opsi
--cache-fromsaat melakukan build image. - Parallel Jobs: Jalankan pengujian unit dan pengujian integrasi secara bersamaan di runner yang berbeda.
Dengan optimasi yang tepat, pipeline yang tadinya memakan waktu 10 menit bisa dipangkas menjadi kurang dari 3 menit. Ini meningkatkan produktivitas developer secara signifikan.
Keamanan dalam CI/CD
Keamanan adalah aspek yang sering terabaikan dalam setup CI/CD. Pastikan Anda mengikuti prinsip-prinsip berikut:
- Jangan pernah hardcode secret: Gunakan GitLab CI/CD Variables untuk menyimpan API keys, password database, dan SSH keys.
- Masking Variables: Pastikan variabel sensitif ditandai sebagai “masked” agar tidak muncul di log pipeline.
- Least Privilege: Gunakan user SSH khusus untuk deployment yang hanya memiliki akses ke folder aplikasi dan Docker, bukan user root.
- Scan Image: Gunakan alat seperti Trivy untuk memindai kerentanan di dalam image Docker Anda sebelum dideploy.
Kesimpulan dan Langkah Selanjutnya
Mengimplementasikan tutorial setup ci/cd gitlab pipelines laravel 12 docker adalah investasi jangka panjang bagi stabilitas proyek Anda. Dengan automasi ini, tim dapat fokus pada pengembangan fitur tanpa perlu khawatir tentang proses rilis yang rumit dan berisiko.
Ringkasan langkah yang telah kita pelajari:
- Membuat lingkungan Docker yang konsisten untuk Laravel 12.
- Mengonfigurasi GitLab Runner sebagai eksekutor otomatis.
- Menyusun alur kerja CI/CD (Build, Test, Deploy) melalui YAML.
- Mengamankan rahasia perusahaan menggunakan variabel lingkungan GitLab.
Langkah selanjutnya, Anda bisa mencoba mengintegrasikan notifikasi Slack atau Discord ke pipeline Anda agar tim mendapatkan pembaruan status deployment secara real-time. Selamat mencoba dan selamat melakukan automasi!