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.
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.
#!/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
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.
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 dengan menuju ke konsol Amazon ECR, mengklik Buat repositori dan menaip nama repositori. Untuk contoh ini, kami akan menggunakan apl demo.
Setelah dibuat, salin URI repositori. Anda akan memerlukan URI ini nanti.
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.
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:
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.
Jangan ubah apa-apa lagi dalam bahagian ini buat masa ini. Tatal ke bawah dan klik Buat.
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:
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.
Buka kluster yang baru anda buat, tatal ke bawah ke jadual Perkhidmatan, klik Buat dan taipkan nilai berikut:
Jangan klik Buat lagi.
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:
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.
Di bawah bahagian Kumpulan sasaran, laraskan nilai berikut:
Klik Buat.
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:
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.
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:
Salin nama DNS pengimbang beban.
Jika anda menggunakan Laluan 53, ikut arahan ini:
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.
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.
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!