GNU/Linux >> Belajar Linux >  >> Ubuntu

Dockerizing Laravel dengan Nginx MySQL dan Docker Compose di Ubuntu 18.04 LTS

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:

  1. Instal Docker dan Docker Compose
  2. Unduh Laravel dan Instal Dependensi
  3. 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
  4. Membangun Proyek Laravel
  5. 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:
      - mynet

Detail 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.


Ubuntu
  1. Ubuntu 20.04:WordPress dengan instalasi Nginx

  2. Cara Menginstal Phorum dengan Nginx di Ubuntu 18.04 LTS

  3. Cara Instal Nginx Dengan PHP5 Dan MySQL Di Ubuntu 11.10

  1. Siapkan lingkungan Pengembangan Ruby on Rails dengan Docker dan Docker Compose di Ubuntu

  2. Dockerizing Wordpress dengan Nginx dan PHP-FPM di Ubuntu 16.04

  3. Cara Menginstal Seafile dengan Nginx di Ubuntu 18.04 LTS

  1. Menginstal Nginx Dengan PHP5 (Dan PHP-FPM) Dan Dukungan MySQL (LEMP) Di Ubuntu 14.04 LTS

  2. Cara menginstal Wordpress dengan Nginx, MariaDB dan HHVM di Ubuntu 16.04 LTS

  3. Cara Menginstal Laravel 5 PHP Framework dengan Nginx di Ubuntu 16.04 LTS