Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bina kelompok aplikasi PHP berskala menggunakan Docker Compose, Nginx dan MariaDB

Bina kelompok aplikasi PHP berskala menggunakan Docker Compose, Nginx dan MariaDB

WBOY
WBOYasal
2023-10-12 13:39:17558semak imbas

使用Docker Compose、Nginx和MariaDB构建可伸缩的PHP应用程序集群

Bina kluster aplikasi PHP berskala menggunakan Docker Compose, Nginx dan MariaDB

Petikan:
Dalam pembangunan aplikasi moden, membina kelompok aplikasi berskala adalah penting. Dengan menggunakan Docker Compose, Nginx dan MariaDB, kami boleh membina kluster aplikasi PHP berskala dengan mudah yang menyediakan ketersediaan dan fleksibiliti tinggi kepada aplikasi kami. Dalam artikel ini, kami akan meneroka cara menggunakan alatan ini untuk membina gugusan aplikasi PHP yang mudah tetapi berkuasa dan menyediakan contoh kod konkrit.

Bahagian Pertama: Persediaan Persekitaran

Sebelum kita mula, kita perlu memastikan bahawa Docker dan Docker Compose telah dipasang. Buka terminal dalam persekitaran pembangunan anda dan jalankan arahan berikut untuk menyemak sama ada ia dipasang dengan betul:

$ docker --version
$ docker-compose --version

Jika maklumat versi yang sepadan dikembalikan, Docker dan Docker Compose telah berjaya dipasang. Seterusnya, kami akan mencipta direktori projek baharu dan mencipta fail docker-compose.yml di dalamnya.

$ mkdir my-php-cluster
$ cd my-php-cluster
$ touch docker-compose.yml

Bahagian Kedua: Menulis Fail Karang Docker
Seterusnya, kami akan mentakrifkan konfigurasi kelompok aplikasi kami dalam fail docker-compose.yml. Konfigurasi ini akan termasuk definisi perkhidmatan untuk PHP, Nginx dan MariaDB. Berikut ialah contoh fail asas docker-compose.yml:

version: '3'

services:
  php:
    build:
      context: .
      dockerfile: Dockerfile.php
    restart: always
    ports:
      - "8000:80"
  nginx:
    build:
      context: .
      dockerfile: Dockerfile.nginx
    restart: always
    ports:
      - "80:80"
    depends_on:
      - php
  db:
    image: mariadb
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: secret

Dalam contoh ini, kami mempunyai tiga perkhidmatan yang ditakrifkan: php, nginx dan db. Perkhidmatan php akan membina imej Docker yang mengandungi PHP dan memetakan port ke port 8000 hos. Perkhidmatan nginx akan membina imej Docker yang mengandungi Nginx dan memetakan port ke port 80 hos. Perkhidmatan db akan menggunakan imej Docker yang disediakan secara rasmi oleh MariaDB dan memetakan port ke port 3306 hos. Akhir sekali, kami juga menentukan pembolehubah persekitaran perkhidmatan db, yang digunakan untuk menetapkan kata laluan akar.

Bahagian 3: Menulis Fail Docker
Untuk imej kita berjaya dibina, kita juga perlu menulis Fail Docker.

Mula-mula, kami mencipta fail bernama Dockerfile.php dan menyalin kandungan berikut ke dalam fail:

FROM php:7.4-fpm

WORKDIR /var/www/html

RUN apt-get update && apt-get install -y 
    libzip-dev 
    zip 
    unzip 
    && docker-php-ext-install zip

COPY . .

RUN composer install --no-dev

Dockerfile ini menggunakan imej PHP 7.4 FPM rasmi sebagai imej asas dan memasang beberapa tambahan melalui kebergantungan arahan RUN. Kami kemudian menyalin keseluruhan direktori aplikasi ke direktori /var/www/html bekas dan menjalankan arahan pemasangan komposer untuk memasang kebergantungan PHP.

Seterusnya, kami mencipta fail bernama Dockerfile.nginx dan menyalin kandungan berikut ke dalam fail:

FROM nginx:latest

COPY nginx.conf /etc/nginx/nginx.conf

Dockerfile ini menggunakan imej rasmi Nginx terkini sebagai imej asas dan menambah fail nginx.conf tersuai Salin ke /etc /nginx/ direktori bekas.

Bahagian 4: Buat Fail Konfigurasi Nginx
Dalam Fail Docker kami, kami telah menyebut fail konfigurasi yang dipanggil nginx.conf. Sekarang, kami mencipta fail bernama nginx.conf dan menyalin kandungan berikut ke dalam fail:

events {}

http {
  upstream php {
    server php:9000;
  }

  server {
    listen 80;

    location / {
      proxy_pass http://php;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
    }
  }
}

Fail konfigurasi nginx.conf ini mentakrifkan pelayan huluan dipanggil php yang akan meminta proksi kepada perkhidmatan php Port 9000. Kami kemudiannya menentukan blok pelayan yang mendengar pada port 80 dan proksi semua permintaan ke pelayan huluan PHP.

Bahagian 5: Menjalankan Kluster Aplikasi
Kini, kami telah melengkapkan semua konfigurasi dan boleh memulakan kluster aplikasi kami dengan menjalankan perintah docker-compose up.

Di terminal, pergi ke direktori projek kami dan jalankan arahan berikut:

$ docker-compose up -d

Arahan di atas akan memulakan kluster aplikasi kami di latar belakang. Sila tunggu seketika sehingga semua perkhidmatan bermula dengan jayanya.

Bahagian Enam: Menguji Kluster Aplikasi
Setelah kluster aplikasi kami berjaya dimulakan, kami boleh mengujinya dengan mengakses http://localhost melalui penyemak imbas.

Masukkan http://localhost dalam penyemak imbas dan tekan Enter. Jika semuanya baik-baik saja, anda sepatutnya dapat melihat aplikasi anda berjalan.

Bahagian 7: Menskala Kluster Aplikasi
Dengan menggunakan ciri skala Docker Compose, kami boleh menskalakan kluster aplikasi kami dengan mudah.

Andaikan kita ingin menambah bilangan contoh perkhidmatan php, kita boleh menjalankan arahan berikut:

$ docker-compose up -d --scale php=3

Arahan di atas akan memulakan 3 contoh php untuk mencapai pengembangan mendatar kelompok aplikasi kami.

Kesimpulan:
Dengan menggunakan Docker Compose, Nginx dan MariaDB, kami boleh membina kluster aplikasi PHP berskala dengan mudah. Dalam artikel ini, kami menyediakan contoh asas untuk memulakan anda, serta contoh kod terperinci. Saya harap artikel ini membantu dan memberi inspirasi kepada anda untuk membina kelompok aplikasi yang lebih berkuasa.

Atas ialah kandungan terperinci Bina kelompok aplikasi PHP berskala menggunakan Docker Compose, Nginx dan MariaDB. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn