Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Amalan Terbaik untuk Docker Compose, Nginx dan MariaDB: Reka Bentuk Seni Bina Aplikasi PHP Sangat Tersedia

Amalan Terbaik untuk Docker Compose, Nginx dan MariaDB: Reka Bentuk Seni Bina Aplikasi PHP Sangat Tersedia

WBOY
WBOYasal
2023-10-12 11:33:11757semak imbas

Docker Compose、Nginx和MariaDB的最佳实践:高可用PHP应用程序架构设计

Amalan Terbaik untuk Docker Compose, Nginx dan MariaDB: Reka Bentuk Seni Bina Aplikasi PHP Yang Sangat Tersedia

Pengenalan:
Dalam era Internet hari ini, membina aplikasi yang sangat tersedia telah menjadi semakin penting. Apabila bilangan pengguna Internet meningkat, prestasi aplikasi, kebolehpercayaan dan skalabiliti menjadi pertimbangan utama. Artikel ini akan memperkenalkan cara menggunakan Docker Compose, Nginx dan MariaDB untuk mereka bentuk seni bina aplikasi PHP yang sangat tersedia, dan menyediakan contoh kod khusus.

Bahagian Pertama: Gambaran Keseluruhan Seni Bina
Kami ingin membina aplikasi PHP yang sangat tersedia yang perlu memenuhi keperluan berikut:

  1. Kebolehpercayaan tinggi: aplikasi yang boleh menyediakan ketersediaan tinggi apabila pelayan gagal atau rangkaian tidak normal bertukar secara automatik ke pelayan sandaran.
  2. Skalabiliti: Mampu menskalakan kapasiti aplikasi secara dinamik mengikut permintaan untuk mengatasi akses serentak tinggi secara tiba-tiba.
  3. Pengoptimuman Prestasi: Meningkatkan prestasi aplikasi dan responsif dengan menggunakan Nginx sebagai pelayan proksi terbalik dan pengimbang beban.
  4. Kebolehpercayaan Pangkalan Data: Gunakan MariaDB sebagai pangkalan data aplikasi anda dan pastikan kebolehpercayaan dan konsistensi data.

Bahagian 2: Membina Imej Docker
Sebelum membina aplikasi PHP yang sangat tersedia, kita perlu membungkus aplikasi dan semua kebergantungan ke dalam imej Docker terlebih dahulu. Anda boleh menggunakan Dockerfile untuk menentukan proses binaan imej Docker.

Berikut ialah contoh Dockerfile:

# 使用基础PHP镜像
FROM php:7.4-fpm

# 安装PHP依赖项
RUN apt-get update && apt-get install -y 
    git 
    zip 
    curl 
    libpng-dev 
    libonig-dev 
    libxml2-dev 
    && docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd

# 设置工作目录
WORKDIR /var/www/html

# 将应用程序复制到工作目录
COPY . .

# 安装依赖项
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN composer install --no-scripts --no-autoloader

# 自动生成Autoload文件
RUN composer dump-autoload --optimize

# 修改文件权限
RUN chown -R www-data:www-data /var/www/html/storage

# 启动PHP-FPM服务器
CMD ["php-fpm"]

# 暴露端口
EXPOSE 9000

Menggunakan Dockerfile di atas, kita boleh membina imej Docker yang mengandungi aplikasi dan semua kebergantungan. Imej boleh dibina menggunakan arahan berikut:

docker build -t myapp .

Bahagian Tiga: Membina Seni Bina Menggunakan Docker Compose
Seterusnya, kami akan menggunakan Docker Compose untuk mentakrif dan mengurus keseluruhan seni bina aplikasi PHP yang tersedia. Docker Compose ialah alat untuk mentakrif dan menjalankan aplikasi Docker berbilang bekas.

Berikut ialah contoh fail docker-compose.yaml:

version: '3'
services:
  app:
    build: 
      context: .
      dockerfile: Dockerfile
    volumes:
      - .:/var/www/html
    ports:
      - 9000
    networks:
      - my-network
  nginx:
    image: nginx
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./site.conf:/etc/nginx/conf.d/default.conf
    ports:
      - 80:80
    depends_on:
      - app
    networks:
      - my-network
  db:
    image: mariadb
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 'password'
    networks:
      - my-network

networks:
  my-network:

Dalam fail docker-compose.yaml bagi contoh di atas, kami mentakrifkan tiga perkhidmatan: app, nginx dan db. Antaranya, perkhidmatan aplikasi adalah imej aplikasi PHP yang kami bina sebelum ini. Perkhidmatan nginx menggunakan imej rasmi Nginx. Perkhidmatan db ialah imej rasmi MariaDB.

Kami juga mentakrifkan rangkaian yang dipanggil my-network untuk menyambung ketiga-tiga perkhidmatan ini.

Bahagian 4: Mengkonfigurasi Nginx sebagai pelayan proksi terbalik dan pengimbang beban
Untuk meningkatkan prestasi dan kelajuan tindak balas aplikasi, kami akan menggunakan Nginx sebagai pelayan proksi terbalik dan pengimbang beban.

Berikut ialah contoh fail nginx.conf:

user www-data;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

events {
    worker_connections 1024;
    multi_accept on;
}

http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    access_log /var/log/nginx/access.log combined;

    gzip on;
    gzip_disable "msie6";

    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    include /etc/nginx/conf.d/*.conf;
}

Dalam contoh di atas, kami menyatakan konfigurasi Nginx. Seterusnya, kita perlu menentukan konfigurasi tapak untuk Nginx.

Berikut ialah contoh fail site.conf:

server {
    listen 80;
    server_name myapp.example.com;

    location / {
        proxy_pass http://app:9000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        client_max_body_size 100M;

        proxy_buffering off;
        proxy_request_buffering off;
    }
}

Dalam contoh di atas, kami menentukan hos maya Nginx untuk memproksi semua permintaan HTTP ke port 9000 perkhidmatan aplikasi.

Bahagian 5: Seni Bina Berjalan
Gunakan arahan berikut untuk memulakan seni bina aplikasi PHP yang sangat tersedia yang kami takrifkan:

docker-compose up -d

Kini, aplikasi PHP kami yang sangat tersedia telah berjaya dijalankan. Kebolehgunaan dan prestasi aplikasi boleh diuji dengan melawati http://myapp.example.com.

Kesimpulan:
Dengan menggunakan Docker Compose, Nginx dan MariaDB, kami boleh mereka bentuk dan membina seni bina aplikasi PHP yang sangat tersedia. Docker Compose boleh membantu kami mentakrif dan mengurus aplikasi berbilang bekas, Nginx boleh menyediakan proksi songsang berprestasi tinggi dan fungsi imbangan beban, dan MariaDB boleh menyediakan perkhidmatan pangkalan data yang boleh dipercayai dan stabil. Melalui seni bina ini, kami boleh meningkatkan ketersediaan, kebolehpercayaan dan prestasi aplikasi serta memenuhi keperluan pengguna untuk aplikasi berkualiti tinggi.

Atas ialah kandungan terperinci Amalan Terbaik untuk Docker Compose, Nginx dan MariaDB: Reka Bentuk Seni Bina Aplikasi PHP Sangat Tersedia. 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