Rumah >pembangunan bahagian belakang >tutorial php >Bahagian Menggunakan aplikasi PHP (Laravel) ke Amazon ECS

Bahagian Menggunakan aplikasi PHP (Laravel) ke Amazon ECS

DDD
DDDasal
2024-10-20 06:07:02260semak imbas

Dalam bahagian pertama siri tutorial kami ini, kami akan menjalankan langkah-langkah untuk menggunakan aplikasi PHP (Laravel) ke Amazon ECS. Kami akan bermula dengan mencipta imej Docker, menolaknya ke Amazon ECR, mencipta Definisi Tugasan ECS, Kluster ECS, Perkhidmatan ECS dan menyambungkan nama domain kepada perkhidmatan.

Bekerja dengan Docker dan ECR

Buat fail Docker dan konfigurasi nginx

Dalam akar repo git anda, buat fail Docker dengan kandungan berikut:

# Use the official PHP-FPM image as the base
FROM public.ecr.aws/docker/library/php:fpm

# Define a user variable
ARG user=www-data

# Install system dependencies and PHP extensions
RUN apt-get update && apt-get install -y \
    git curl \
    libpng-dev \
    libonig-dev \
    libxml2-dev \
    zip unzip libzip-dev \
    nginx \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* \
    && docker-php-ext-install \
        pdo_mysql \
        mbstring \
        exif \
        pcntl \
        bcmath \
        gd \
        zip

# Install Composer
COPY --from=public.ecr.aws/composer/composer:latest-bin /usr/bin/composer /usr/bin/composer

# Create a system user for running Composer and Artisan commands
RUN mkdir -p /home/$user/.composer && \
    chown -R $user:$user /home/$user

# Copy Nginx configuration and entrypoint script
COPY ./docker/default.conf /etc/nginx/sites-enabled/default
COPY ./docker/entrypoint.sh /etc/entrypoint.sh

# Make the entrypoint script executable
RUN chmod +x /etc/entrypoint.sh

# Set the working directory
WORKDIR /var/www

# Copy the application code
COPY --chown=www-data:www-data . /var/www

# Install PHP dependencies
RUN composer install

# Expose port 80
EXPOSE 80

# Define the entrypoint
ENTRYPOINT ["/etc/entrypoint.sh"]

Buat folder baharu bernama docker dan letakkan dua fail berikut di dalam.

  • docker/entrypoint.sh
#!/usr/bin/env bash

# Start Nginx service
service nginx start

# Run Laravel migrations
php artisan migrate --force

# Create symbolic link for storage
php artisan storage:link

# Clear and optimize the application cache
php artisan optimize:clear
php artisan optimize

# Start PHP-FPM
php-fpm
  • docker/default.conf
server {
    listen 80 default_server;
    index index.php index.html;
    server_name localhost;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/public;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;

        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_hide_header X-Powered-By;

        # Tells PHP we're using a reverse proxy with TLS termination
        fastcgi_param HTTPS on;
        fastcgi_param HTTP_X_FORWARDED_PROTO $scheme;
        fastcgi_param HTTP_X_FORWARDED_SSL on;
        add_header Content-Security-Policy "upgrade-insecure-requests" always;
    }

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
}

Dan jadikan entrypoint.sh boleh laku dengan menjalankan chmod x docker/entrypoint.sh.

Menolak imej ke Amazon ECR

Langkah pertama ialah menolak imej ke ECR. Anda perlu melakukan langkah ini secara manual terlebih dahulu, sebelum anda boleh meneruskan dan menggunakan aplikasi ke ECS.

Buat repositori ECR

Buat repositori ECR dengan menuju ke konsol Amazon ECR, mengklik Buat repositori dan menaip nama repositori. Untuk contoh ini, kami akan menggunakan apl demo.

Part  Deploying a PHP (Laravel) application to Amazon ECS

Setelah dibuat, salin URI repositori. Anda akan memerlukan URI ini nanti.

Tolak imej ke ECR

Pilih repositori yang baru anda buat, klik pada Lihat arahan tolak, dan jalankan arahan dalam terminal anda. Arahan akan kelihatan seperti ini (pastikan untuk memilih rantau yang betul dan menggunakan ID Akaun yang betul):

aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com
docker build -t demo-app .
docker tag demo-app:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/demo-app:latest
docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/demo-app:latest

Setelah arahan berjaya dijalankan, kembali ke konsol Amazon ECR, masukkan repositori dan sahkan bahawa imej telah berjaya ditolak dengan teg terkini.

Part  Deploying a PHP (Laravel) application to Amazon ECS

Bekerja dengan Amazon ECS

Buat Definisi Tugas ECS

Langkah seterusnya ialah mencipta Definisi Tugasan ECS dengan imej Docker yang baru kami tolak ke ECR.
Mulakan dengan menuju ke konsol Amazon ECS, di bawah Takrifan Tugasan, klik Buat definisi tugas baharu.

Pilih nama unik untuk definisi tugasan (kami akan menggunakan apl demo), dan pastikan Fargate dipilih sebagai jenis pelancaran. Jangan ubah apa-apa lagi dalam bahagian ini buat masa ini.

Tatal ke bawah ke bahagian Bekas - 1 dan taipkan nilai berikut:

  • Nama: apl tunjuk cara
  • Imej: 123456789012.dkr.ecr.us-east-1.amazonaws.com/demo-app:latest (ganti dengan URI ECR anda sendiri yang kami salin tadi)

Kemudian, anda mungkin mahu melaraskan tetapan memori dan CPU bergantung pada aplikasi anda. Anda juga boleh menambah Pembolehubah Persekitaran dan Jilid EFS di sini, jika anda perlu. Kami akan membincangkannya dalam tutorial berasingan.

Part  Deploying a PHP (Laravel) application to Amazon ECS

Jangan ubah apa-apa lagi dalam bahagian ini buat masa ini. Tatal ke bawah dan klik Buat.

Buat Kluster ECS

Kami kini perlu mencipta Kluster ECS. Kluster ialah tempat kami menjalankan perkhidmatan yang ditakrifkan dalam definisi tugas yang baru kami buat.

Pergi ke konsol Amazon ECS, di bawah Kluster, klik Buat kluster, taip nama kluster dan pastikan anda memilih AWS Fargate (tanpa pelayan) sebagai infrastruktur:

Part  Deploying a PHP (Laravel) application to Amazon ECS

Kluster akan mengambil masa beberapa minit untuk dibuat. Penciptaan kluster kadangkala boleh gagal, terutamanya pada akaun baharu; cuma tunggu beberapa minit dan cuba lagi, pilih nama kluster yang berbeza.

Buat Perkhidmatan ECS

Buka kluster yang baru anda buat, tatal ke bawah ke jadual Perkhidmatan, klik Buat dan taipkan nilai berikut:

  • Keluarga: apl tunjuk cara
  • Semakan: 1 (biarkan ini seperti sedia ada)
  • Nama perkhidmatan: apl demo

Part  Deploying a PHP (Laravel) application to Amazon ECS

Jangan klik Buat lagi.

Tambah Pengimbang Beban

Memandangkan kami mungkin menyediakan aplikasi melalui HTTPS, kami ingin menambah pengimbang beban. Anda tidak boleh melakukannya kemudian.

Tatal ke bawah ke bahagian Rangkaian dan pilih VPC yang anda mahu gunakan perkhidmatan itu. Pastikan VPC mempunyai Subnet Awam dengan Gerbang Internet dilampirkan padanya. Jika anda tidak mempunyai VPC, anda boleh menciptanya dengan mengklik Buat VPC baharu dan mengikut wizard.

Setelah anda memilih VPC, teruskan membaca.

Tatal ke bawah ke bahagian Pengimbangan beban, pilih Pengimbang Beban Aplikasi dan pilih pilihan Buat pengimbang beban baharu.

Jika pilihan ini tidak tersedia, anda mungkin tidak memilih VPC dalam langkah sebelumnya.

Laraskan nilai berikut:

  • Nama pengimbang beban: demo-app-alb
  • Tempoh tangguh pemeriksaan kesihatan: 300 (Saya syorkan tetapkan ini kepada 300 saat, iaitu 5 minit, untuk membolehkan apl anda bermula dan stabil)

Di bawah bahagian Pendengar, pastikan pilihan Buat pendengar baharu dipilih, tetapi laraskan nilai untuk menggunakan port 443 dan protokol HTTPS. Untuk mengesahkan pemilihan ini, anda memerlukan sijil ACM untuk domain yang ingin anda gunakan; lihat dokumentasi AWS untuk mendapatkan maklumat lanjut tentang cara mendapatkannya.

Part  Deploying a PHP (Laravel) application to Amazon ECS

Di bawah bahagian Kumpulan sasaran, laraskan nilai berikut:

  • Protokol: HTTP (ia adalah lalai, pastikan untuk menyimpannya kerana bekas nginx kami mendengar pada port 80)
  • Kelewatan penyahdaftaran: 60 (Saya syorkan untuk menetapkan ini kepada 60 saat dan bukannya 5 minit lalai untuk membuat penggunaan lebih cepat)
  • Laluan pemeriksaan kesihatan: / (Saya syorkan untuk menetapkan ini kepada laluan, seperti /healthcheck, anda buat secara khusus dalam apl anda; anda boleh membiarkannya sebagai lalai buat masa ini)

Part  Deploying a PHP (Laravel) application to Amazon ECS

Klik Buat.

Semak Status Perkhidmatan

Perkhidmatan mungkin mengambil masa beberapa minit untuk dipaparkan dalam jadual Perkhidmatan. Tunggu sebentar dan muat semula halaman jika anda tidak melihat perkhidmatan baharu dengan segera.

Jika semuanya berjalan lancar, anda seharusnya melihat perkhidmatan yang disenaraikan dalam jadual Perkhidmatan, dengan status Aktif dan Pengerahan dan tugas menunjukkan 1/1 menjalankan tugas.

Ralat agihan ditunjukkan seperti ini:

Part  Deploying a PHP (Laravel) application to Amazon ECS

Untuk menyahpepijat ralat penggunaan, buka perkhidmatan, kemudian klik pada tab Pengaturan; tatal ke bawah ke bahagian Acara, dan klik pada Id tugasan yang paling baru dimulakan. Bahagian Log pelaksanaan tugas akan menunjukkan kepada anda butiran lanjut tentang perkara yang salah.

Laravel biasanya mengadu tentang struktur folder storan yang tidak lengkap (mis., kehilangan salah satu rangka kerja, cache, sesi). Kami akan melihat cara untuk melampirkan volum EFS pada definisi tugasan untuk membetulkannya dalam tutorial yang berasingan.

Sambungkan nama domain kepada perkhidmatan

Anda mungkin ingin menyambungkan nama domain kepada perkhidmatan yang baru kami gunakan. Dalam langkah sebelumnya, kami telah mencipta Pengimbang Beban Aplikasi, iaitu komponen AWS yang bertanggungjawab untuk menghalakan trafik internet ke perkhidmatan.

Kami juga telah menyediakan sijil ACM, yang digunakan untuk menyulitkan trafik antara pengguna akhir dan pengimbang beban.

Untuk melengkapkan proses dan menjadikan aplikasi anda boleh diakses melalui HTTPS daripada internet awam, anda perlu mencipta rekod DNS yang menghalakan nama domain anda ke pengimbang beban. Proses ini berbeza bergantung pada pembekal DNS yang anda gunakan; sila rujuk dokumentasi mereka untuk maklumat lanjut.

Mulakan dengan mendapatkan nama DNS Pengimbang Beban Aplikasi. Navigasi ke bar Carian dalam AWS Console (Pilihan S pada macOS), taip Pengimbang Beban dan pilih Pengimbang Beban (Ciri EC2). Anda akan melihat jadual dengan Pengimbang Beban yang kami perlukan untuk menyambungkan nama domain kami kepada:

Part  Deploying a PHP (Laravel) application to Amazon ECS

Salin nama DNS pengimbang beban.

Jika anda menggunakan Laluan 53, ikut arahan ini:

  • Navigasi ke konsol Laluan 53, klik pada Zon dihoskan dan pilih nama domain anda.
  • Klik pada butang Buat rekod.
  • Tetapkan jenis rekod kepada A.
  • Semak pilihan Alias.
  • Dalam medan Halakan trafik ke, pilih Alias ​​ke Aplikasi dan Pengimbang Beban Klasik dan pilih kawasan pengimbang beban.
  • Daripada menu lungsur Pilih pengimbang beban, pilih pengimbang beban yang kami perlukan untuk menyambungkan nama domain kami. Jika anda mempunyai berbilang pengimbang beban, semak yang anda pilih daripada menu lungsur mesti sepadan dengan nama DNS pengimbang beban yang kami salin sebelum ini.
  • Matikan Nilai Kesihatan Sasaran.
  • Klik pada Buat rekod.

Jika anda tidak menggunakan Laluan 53:

Sila rujuk dokumentasi pembekal DNS anda untuk mendapatkan maklumat lanjut. Anda mungkin perlu mencipta rekod CNAME yang mempunyai nama DNS pengimbang beban sebagai sasaran/nilainya.

tahniah

Setelah anda mencipta rekod DNS, tunggu beberapa minit untuk merebak, kemudian cuba akses aplikasi anda melalui nama domain.

Tahniah! Anda kini telah berjaya menggunakan aplikasi PHP (Laravel) ke AWS ECS.

Akan datang dalam siri tutorial ini

  • Melampirkan volum EFS pada definisi tugas untuk menyelesaikan masalah struktur folder storan Laravel
  • Menggunakan AWS CodePipeline untuk menggunakan kod baharu secara automatik pada perkhidmatan
  • Mengautomasikan peruntukan infrastruktur dengan AWS CDK

Atas ialah kandungan terperinci Bahagian Menggunakan aplikasi PHP (Laravel) ke Amazon ECS. 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