Laravel adalah framework PHP gratis dan open source yang mengimplementasikan pola desain MVC (Model-View-Controller). Ini dirancang dengan kemudahan penggunaan dan memungkinkan pengembang untuk membuat aplikasi sederhana dan kompleks dalam waktu singkat. Laravel dibuat oleh Taylor Otwell pada tahun 2011, sebagai upaya untuk memberikan alternatif lanjutan untuk kerangka CodeIgniter (CI). Pada tahun 2011, Laravel merilis versi 1 dan versi 2, dan versi terbaru 5.6 hadir dengan fitur yang lebih banyak dan lebih baik seperti dukungan Command-Line (CLI) bernama 'artisan', dukungan untuk sistem database yang berbeda, peningkatan Route, dll.
Dalam panduan ini, kami akan menunjukkan cara Dockerize proyek Laravel dengan PHP-FPM, database MySQL, dan server web Nginx menggunakan Docker Compose di Ubuntu Server 18.04. Kita akan membuat image buruh pelabuhan baru untuk Proyek Laravel, dan kemudian membuat skrip docker-compose.yml yang berisi beberapa layanan termasuk, App/Laravel itu sendiri, server web Nginx, dan database MySQL.
Prasyarat
- Ubuntu 18.04
- Hak istimewa root
Apa yang akan kami lakukan:
- Instal Docker dan Docker Compose
- Unduh Laravel dan Instal Dependensi
- Meng-Docker Proyek Laravel
- Menentukan Layanan Aplikasi Laravel
- Tentukan Layanan HTTP Nginx
- Menentukan Layanan Database MySQL
- Buat Nginx Virtual Host untuk Laravel
- Buat Dockerfile untuk Aplikasi Laravel
- Membangun Proyek Laravel
- Pasca-Instalasi Laravel
Langkah 1 - Instal Penulisan Docker dan Docker
Pertama, kita akan menginstal paket Docker dan Docker Compose ke sistem Ubuntu. Dan kami akan menggunakan paket Docker dari repositori Resmi Ubuntu.
Sebelum melangkah lebih jauh, kita perlu memperbarui repositori di sistem Ubuntu. Cukup dengan menjalankan perintah berikut.
sudo apt update
Sekarang instal paket Docker dan Docker Compose menggunakan perintah apt di bawah ini.
sudo apt install docker.io -y
sudo apt install docker-compose -y
Paket Docker dan Docker Compose sekarang harus diinstal pada sistem, periksa menggunakan perintah berikut.
versi buruh pelabuhan
versi penulisan buruh pelabuhan
Hasilnya, Anda akan mendapatkan versi Docker dan Docker Compose di sistem.
Selanjutnya, kita perlu menetapkan pengguna non-root ke grup buruh pelabuhan untuk menjalankan wadah Docker untuk pengguna non-root.
Untuk kasus ini, kita akan menambahkan pengguna bernama 'hakase' ke grup buruh pelabuhan dengan menjalankan perintah berikut.
usermod -a -G docker hakase
Dan setelah itu, masuk ke shell pengguna 'hakase' dan jalankan perintah docker 'hello-world'.
su - hakase
docker run hello-world
Sekarang Anda akan ditampilkan pesan 'Hello World' dari Docker, dan instalasi Docker telah selesai.
Langkah 2 - Unduh Laravel dan Instal Dependensi
Pada langkah ini, kita akan mengunduh kerangka kerja web Laravel ke direktori home 'hakase' dan kemudian menginstal dependensi Laravel menggunakan image buruh pelabuhan 'komposer' PHP. Jadi, pastikan Anda masuk ke server sebagai pengguna non-root.
Unduh proyek Laravel ke direktori 'myapp' dan masuk ke dalamnya.
git clone https://github.com/laravel/laravel.git myapp/
cd myapp/
Sekarang jalankan perintah buruh pelabuhan berikut untuk menginstal dependensi Laravel.
docker run --rm -v $(pwd):/instal komposer aplikasi
Dengan perintah di atas, kita akan menjalankan wadah buruh pelabuhan sementara yang baru dan memasang direktori proyek 'myapp' ke direktori '/ app' pada wadah. Wadah berdasarkan gambar buruh pelabuhan 'komposer', dan kami menginstal dependensi Laravel menggunakan perintah 'komposer' di dalam wadah sementara itu.
Setelah instalasi dependensi Laravel selesai, kita harus mengubah pemilik direktori 'myapp' menjadi pengguna kita sendiri menggunakan perintah sudo di bawah ini.
sudo chown -R $USER:$USER ~/myapp
Langkah 3 - Meng-docker Proyek Laravel
Setelah mengunduh Laravel dan menginstal dependensinya, kita akan membuat skrip docker-compose.yml baru dan membuat Dockerfile baru untuk proyek Laravel.
cd myapp/
vim docker-compose.yml
- Tentukan Layanan Aplikasi Laravel
Pertama, kita akan mendefinisikan proyek Laravel itu sendiri dan membangun image buruh pelabuhan untuk proyek Laravel menggunakan Dockerfile.
Rekatkan skrip penulisan buruh pelabuhan ke dalamnya.
versi:'3'
layanan:
#Laravel App
app:
build:
konteks:.
dockerfile:Dockerfile
image:hakase-labs/laravel
container_name:app
restart:kecuali dihentikan
tty:true
environment:
SERVICE_NAME:app
SERVICE_TAGS:dev
working_dir:/var/www/html
volumes:
- ./:/var/www/html
networks:
- mynetDetail layanan kontainer Laravel:
- Layanan kontainer Laravel akan dinamai sebagai 'aplikasi'. Ini didasarkan pada gambar buruh pelabuhan khusus kami yang akan dibuat dengan 'Dockerfile' kami, dan gambar baru akan dinamai sebagai 'hakase-labs/laravel'.
- Kami ingin memasang direktori proyek 'myapp' ke '/var/www/html' di dalam layanan penampung.
- Kami menggunakan jaringan buruh pelabuhan khusus untuk penyiapan kami, jaringan tersebut akan diberi nama 'mynet'.
- Tentukan Layanan HTTP Nginx
Sekarang kita akan mendefinisikan layanan kontainer nginx.
Tempelkan konfigurasi berikut setelah baris layanan penampung 'aplikasi'.
#Nginx Service
nginx:
image:nginx:alpine
container_name:nginx
restart:kecuali dihentikan
tty:true
port:
- "80:80"
- "443:443"
volume:
- ./:/var/www/html
- ./nginx/conf .d/:/etc/nginx/conf.d/
- ./nginx/ssl/:/etc/nginx/ssl/
jaringan:
- mynet
Detail konfigurasi layanan container nginx:
- Kami ingin membuat wadah baru bernama 'nginx' berdasarkan gambar buruh pelabuhan 'nginx:alpine'.
- Layanan container akan membuka port HTTP dan HTTPS.
- Kontainer akan memasang tiga volume berbeda. Direktori proyek 'myapp' ke direktori '/var/www/html', konfigurasi virtual host nginx 'nginx/conf.d/' ke direktori '/etc/nginx/conf.d', dan mount file sertifikat ' nginx/ssl/' ke direktori '/etc/nginx/ssl' pada container.
- Layanan container akan menggunakan jaringan yang sama yang disebut 'mynet'.
- Tentukan Layanan Database MySQL
Dan yang terakhir, kita mendefinisikan layanan database MySQL.
Tempel konfigurasi berikut setelah baris layanan kontainer 'nginx'.
#Layanan MySQL
db:
image:mysql:5.7
container_name:db
restart:kecuali dihentikan
tty:true
port:
- "3306:3306"
lingkungan:
MYSQL_DATABASE:laraveldb
MYSQL_USER:laravel
MYSQL_PASSWORD:laravelpassworddb _ />sql _ />
- mysqldata:/var/lib/mysql/
jaringan:
- mynet
#Jaringan Docker
jaringan:
mynet:
driver:jembatan
#Volume
volume:
mysqldata:
driver:lokal
Simpan dan tutup konfigurasi.
Detail layanan kontainer MySQL:
- Layanan penampung MySQL akan dinamai 'db', berdasarkan gambar buruh pelabuhan 'mysql:5.7'.
- Layanan 'db' akan membuka port default MySQL '3306'.
- Proyek Laravel akan menggunakan database, pengguna, dan kata sandi berdasarkan variabel lingkungan dari layanan 'db'.
- Layanan 'db' MySQL akan memasang volume bernama 'mysqldata', dan memiliki jaringan 'mynet' yang sama.
- Dan kami mendefinisikan jaringan kustom 'mynet' dengan driver 'bridge', dan volume 'mysqldata' akan menggunakan driver 'local'.
Di bawah ini adalah konfigurasi 'docker-compose.yml' yang telah selesai:
versi:'3'services:#Laravel Aplikasi aplikasi:build:context:. dockerfile:Dockerfile image:hakase-labs/laravel container_name:app restart:tty kecuali dihentikan:true environment:SERVICE_NAME:app SERVICE_TAGS:dev working_dir:/var/www/html volumes:- ./:/var/www/html networks :- mynet #Nginx Service nginx:image:nginx:alpine container_name:nginx restart:tty kecuali dihentikan:true port:- "80:80" - "443:443" volume:- ./:/var/www/html - ./nginx/conf.d/:/etc/nginx/conf.d/ - ./nginx/ssl/:/etc/nginx/ssl/ jaringan:- mynet #MySQL Service db:image:mysql:5.7 container_name:db restart:tty kecuali dihentikan:true port:- "3306:3306" lingkungan:MYSQL_DATABASE:laraveldb MYSQL_USER:laravel MYSQL_PASSWORD:laravelpassworddb MYSQL_ROOT_PASSWORD:rootpasswordmysql volume:- mysqldata:/var/lib/mysql#s :mynet:driver:jembatan#Volumevolume:mysqldata:pengemudi:lokal
- Buat Nginx Virtual Host untuk Laravel
Di dalam direktori proyek 'myapp', buat direktori baru bernama 'nginx' yang akan berisi dua direktori lain 'conf.d' dan 'ssl'. Kemudian buat konfigurasi virtual host nginx baru 'laravel.conf' di dalam direktori 'conf.d'.
Jalankan perintah berikut.
mkdir -p nginx/{conf.d,ssl}
vim nginx/conf.d/laravel.conf
server { dengarkan 80; server_name laravel.hakase-labs.io; return 301 https://laravel.hakase-labs.io$request_uri;}server { dengarkan 443 ssl http2; server_name laravel.hakase-labs.io; ssl_certificate /etc/nginx/ssl/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/privkey.pem; # File log untuk Debug error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; # Direktori root web Laravel root /var/www/html/public; indeks index.php index.html; lokasi / { try_files $uri $uri/ /index.php?$query_string; gzip_static aktif; } # Nginx Melewati permintaan ke lokasi PHP-FPM ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; aplikasi fastcgi_pass:9000; fastcgi_index index.php; termasuk fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; }}
Simpan dan tutup.
Setelah itu, salin file sertifikat ssl Anda ke direktori 'nginx/ssl/'.
sudo cp /path/to/ssl/fullchain.pem nginx/ssl/
sudo cp /path/to/ssl/privkey.pem nginx/ssl/
- Buat Dockerfile untuk Aplikasi Laravel
Selanjutnya, buat Dockerfile baru untuk proyek Laravel.
Jalankan perintah berikut.
vim Dockerfile
Tempelkan konfigurasi di bawah.
# Atur master imageFROM php:7.2-fpm-alpine# Salin composer.lock dan composer.jsonCOPY composer.lock composer.json /var/www/html/# Atur direktori kerjaWORKDIR /var/www/html# Instal dependensi tambahanRUN pembaruan apk &&apk add --no-cache \ build-base shadow vim curl \ php7 \ php7-fpm \ php7-common \ php7-pdo \ php7-pdo_mysql \ php7-mysqli \ php7-mcrypt \ php7-mbstring \ php7- xml \ php7-openssl \ php7-json \ php7-phar \ php7-zip \ php7-gd \ php7-dom \ php7-session \ php7-zlib# Tambah dan Aktifkan Ekstensi PHP-PDORUN docker-php-ext-install pdo pdo_mysqlRUN docker-php-ext-enable pdo_mysql# Instal PHP ComposerRUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer# Hapus CacheRUN rm -rf /var/cache/apk/*# Tambahkan UID '1000' ke www-dataRUN usermod -u 1000 www- data# Salin izin direktori aplikasi yang adaCOPY --chown=www-data:www-data . /var/www/html# Ubah pengguna saat ini menjadi wwwUSER www-data# Buka port 9000 dan mulai php-fpm serverEXPOSE 9000CMD ["php-fpm"]
Simpan dan tutup konfigurasi.
Dan kami siap untuk membangun proyek Laravel 'myapp' dan menjalankan layanan kontainer yang telah kami tetapkan.
Langkah 4 - Bangun Laravel dengan Nginx dan Layanan MySQL
Bangun image buruh pelabuhan khusus untuk proyek Laravel kami menggunakan perintah berikut.
pembuatan docker-compose
Kemudian jalankan kembali perintah berikut.
docker-compose up -d
Ini akan mengunduh semua gambar buruh pelabuhan sesuai kebutuhan kita dan kemudian membangun layanan kontainer berdasarkan konfigurasi 'docker-compose.yml'.
Setelah selesai, verifikasi menggunakan perintah docker-compose di bawah ini.
docker-compose ps
Dan sebagai hasilnya, Anda akan mendapatkan tiga layanan kontainer yang aktif dan berjalan. 'Aplikasi' yang berjalan pada port default '9000' PHP-FPM, layanan 'nginx' pada port HTTP dan HTTPS, dan layanan 'db' MySQL pada port default MySQL '3306'.
Setelah itu, verifikasi kembali semua image buruh pelabuhan yang tersedia dan port yang terbuka pada sistem.
gambar komposisi buruh pelabuhan
netstat -plntu
Anda akan mendapatkan gambar buruh pelabuhan khusus 'hakase-labs/laravel' pada daftar, dan port HTTP dan HTTPS berada pada status 'LISTEN'.
Langkah 5 - Pasca-Instalasi Laravel
Sampai tahap ini, proyek Laravel aktif dan berjalan sebagai wadah Docker. Dan sekarang kita akan membuat file '.env' baru, menghasilkan kunci dan memigrasikan data Laravel menggunakan baris perintah Laravel 'artisan'.
Salin contoh file '.env' dan edit di dalam wadah.
cp .env.example .env
docker-compose exec app vim .env
Ubah konfigurasi database seperti di bawah ini.
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laraveldb
DB_USERNAME=laravel
DB_PASSWORD=laravelpassworddb
Simpan dan tutup.
Selanjutnya, buat kunci aplikasi Laravel dan hapus konfigurasi cache.
aplikasi docker-compose exec php artisan key:generate
docker-compose exec app php artisan config:cache
Setelah itu, migrasikan database menggunakan perintah berikut.
docker-compose exec app php artisan bermigrasi
Pastikan tidak ada kesalahan.
Sekarang buka browser web Anda dan ketik nama domain proyek Anda.
http://laravel.hakase-labs.io/
Dan Anda akan diarahkan ke koneksi HTTPS yang aman dan akan ditampilkan halaman beranda default Laravel seperti di bawah ini.
Akhirnya, proyek Dockerizing Laravel dengan server web Nginx dan database MySQL telah berhasil diselesaikan.