Pengumuman baru-baru ini di Laraconus telah mencetuskan minat yang diperbaharui dalam penyebaran berasaskan awan dalam komuniti Laravel. Oleh kerana perdebatan berterusan mengenai cara menggunakan aplikasi anda, satu perkara yang jelas: awan menjadi pilihan yang lebih baik untuk pengguna Laravel.
Dalam artikel ini, kami akan meneroka cara menyediakan aplikasi Laravel anda untuk digunakan dalam persekitaran awan menggunakan Frankenphp, Caddy, Dockerfiles, dan akhirnya mengerahkannya ke Sevalla.
Demi kesederhanaan, kami akan menganggap anda mempunyai aplikasi Laravel segar yang dipasang pada mesin tempatan anda, yang menghubungkan ke pangkalan data PostgreSQL untuk membaca/menulis beberapa data.
Sebelum kita bergerak, pastikan anda mempunyai fail
di akar projek anda dengan kandungan berikut:
.env
:
.env
Setelah disahkan, kita boleh mula membina. ? ☕️ <!-- Syntax highlighted by torchlight.dev -->...
DB_CONNECTION=pgsql
...
Adalah idea yang baik untuk mempunyai persekitaran pembangunan tempatan yang menyerupai persekitaran pengeluaran anda. Dengan cara ini, anda boleh menangkap sebarang masalah awal dan mengelakkan kejutan apabila anda menggunakan aplikasi anda dalam pengeluaran.
untuk meniru persediaan pengeluaran kami akan menggunakan Docker dan Docker menyusun. Jika anda tidak memasang Docker di mesin anda, anda boleh memuat turunnya dari laman web rasmi.
#Running Laravel tanpa pangkalan data
Pertama, buat fail baru yang dipanggil
dalam akar projek Laravel anda dan tambahkan kandungan berikut:
compose.yml
:
compose.yml
Fail konfigurasi ini mentakrifkan perkhidmatan yang dipanggil <!-- Syntax highlighted by torchlight.dev -->services:
php:
image: dunglas/frankenphp:php8.3-bookworm
environment:
SERVER_NAME: ":8080"
ports:
- 8080:8080
volumes:
- .:/app
yang menggunakan imej , yang merupakan imej Frankenphp yang merangkumi sambungan yang diperlukan untuk menjalankan aplikasi Laravel.
Pembolehubah persekitaran php
mengkonfigurasi Caddy untuk mendengar di Port dunglas/frankenphp:php8.3-bookworm
.
Kami juga mendedahkan port SERVER_NAME
untuk mengakses aplikasi dari mesin tuan rumah. 8080
8080
Untuk menguji konfigurasi anda, cuba jalankan arahan berikut di terminal anda:
anda harus melihat halaman ralat Laravel yang menjelaskan sambungan itu tidak ditubuhkan ke pangkalan data kerana pemandu yang hilang apabila anda menavigasi ke <!-- Syntax highlighted by torchlight.dev -->docker compose up [-d]
dalam penyemak imbas anda. Ini dijangkakan kerana kami belum menghubungkan aplikasi Laravel kami ke pangkalan data.
http://localhost:8080
Awesome, setakat ini kami telah mengkonfigurasi aplikasi Laravel kami untuk disampaikan oleh pelayan Frankenphp.
Seterusnya, mari kita sambungkan aplikasi tempatan kami dengan pangkalan data PostgreSQL!
#Running Laravel dengan pangkalan data
Untuk menyambungkan aplikasi Laravel anda ke pangkalan data PostgreSQL, kami perlu melakukan beberapa perkara.
Pertama, kita perlu menetapkan pembolehubah persekitaran berikut dalam fail
anda:
.env
:
<!-- Syntax highlighted by torchlight.dev -->...
DB_CONNECTION=pgsql
...
Mengikuti itu, anda perlu menambah perkhidmatan baru ke fail compose.yml
anda, dan buat Custom Dockerfile
untuk persekitaran dev anda. Buat dan kemas kini fail dengan kandungan berikut:
Dockerfile.dev
:
<!-- Syntax highlighted by torchlight.dev -->services:
php:
image: dunglas/frankenphp:php8.3-bookworm
environment:
SERVER_NAME: ":8080"
ports:
- 8080:8080
volumes:
- .:/app
Dockerfile.dev
hanya dimaksudkan untuk digunakan oleh persekitaran tempatan/pembangunan anda, dan ia memanjangkan imej dunglas/frankenphp:php8.3-bookworm
untuk memasukkan lanjutan pdo_pgsql
, yang diperlukan untuk menyambung ke pangkalan data PostgreSQL.
compose.yml
:
<!-- Syntax highlighted by torchlight.dev -->docker compose up [-d]
ada banyak yang berlaku di sini, mari kita lihat apa yang telah berubah dan mengapa:
- Kami telah mengemas kini perkhidmatan
php
untuk menggunakan dockerfile tersuai yang dipanggil Dockerfile.dev
untuk membina imej baru yang merangkumi sambungan yang diperlukan untuk menyambung ke pangkalan data PostgreSQL.
- Kami telah menambah perkhidmatan baru yang dipanggil
db
yang menggunakan imej postgres:16.4-alpine
untuk menjalankan pangkalan data PostgreSQL. Kami juga telah menentukan beberapa pembolehubah persekitaran untuk menubuhkan pengguna pangkalan data, kata laluan, dan nama pangkalan data.
- kami telah mencipta jumlah baru yang dipanggil
db_data
untuk meneruskan data dalam pangkalan data pada mesin anda, dan Docker boleh menggunakannya semula apabila anda memulakan semula perkhidmatan.
Perkhidmatan baru yang dipanggil - juga ditambah bahawa reuses
init
. Imej ini digunakan untuk menjalankan perintah Dockerfile.dev
untuk menjalankan migrasi pangkalan data anda. Kunci php artisan migrate
memastikan bahawa perkhidmatan depends_on
berjalan dan berjalan sebelum migrasi dijalankan. db
Perkhidmatan - sekarang bergantung pada perkhidmatan
php
untuk memastikan bahawa migrasi pangkalan data dijalankan sebelum aplikasi Laravel bermula. init
Kami telah menambah pemeriksaan kesihatan ke perkhidmatan - untuk memastikan bahawa pangkalan data PostgreSQL selesai dan berjalan sebelum perkhidmatan
db
menjalankan migrasi. init
Untuk menguji konfigurasi anda, jalankan arahan berikut di terminal anda:
<!-- Syntax highlighted by torchlight.dev -->...
DB_CONNECTION=pgsql
DB_HOST=db
DB_PORT=5432 # default PostgreSQL port
DB_DATABASE=main
DB_USERNAME=admin
DB_PASSWORD=password
Aplikasi anda kini harus menyambung ke pangkalan data PostgreSQL anda, dan migrasi pangkalan data anda sentiasa dijalankan. ?
Envnironment tempatan anda kini bersedia untuk meniru persekitaran pengeluaran anda. Anda kini boleh membangunkan aplikasi anda secara tempatan dan menguji persediaan yang sama seperti yang akan anda gunakan dalam pengeluaran.
#Preparing untuk Pengeluaran
sudah tiba masanya untuk membuat perubahan yang diperlukan untuk persekitaran pengeluaran anda.
Langkah pertama adalah untuk memberitahu Docker mana direktori yang dapat diabaikan dengan selamat ketika membina imej pengeluaran. Buat fail baru yang dipanggil dalam akar projek Laravel anda dan tambahkan kandungan berikut: .dockerignore
: .dockerignore
<!-- Syntax highlighted by torchlight.dev -->FROM dunglas/frankenphp:php8.3-bookworm
RUN install-php-extensions pdo_pgsql
Fail ini memberitahu Docker untuk mengabaikan direktori , vendor
, dan bootstrap/cache
. tests
Kemudian, buat Dockerfile
yang akan digunakan untuk membina imej pengeluaran anda:
Dockerfile
:
<!-- Syntax highlighted by torchlight.dev -->...
DB_CONNECTION=pgsql
...
ini Dockerfile
sama dengan Dockerfile.dev
yang kami buat sebelum ini, tetapi ia termasuk beberapa langkah tambahan:
- Sebagai imej Frankenphp menggunakan Caddy sebagai pelayan web lalai, kami telah menetapkan pembolehubah persekitaran
SERVER_NAME
untuk :8080
untuk mengarahkan Caddy untuk mendengar di port 8080
.
- Kami memasang lanjutan
@composer
php untuk memasang komposer dalam imej.
-
composer install
perintah dijalankan untuk memasang kebergantungan aplikasi Laravel anda.
- kami telah menetapkan direktori kerja ke
/app
dan menyalin kandungan aplikasi Laravel anda ke imej.
Untuk menguji perubahan anda dalam persekitaran tempatan anda, anda perlu menghasilkan pengeluaran aplikasi anda. Jalankan arahan berikut di terminal anda:
<!-- Syntax highlighted by torchlight.dev -->services:
php:
image: dunglas/frankenphp:php8.3-bookworm
environment:
SERVER_NAME: ":8080"
ports:
- 8080:8080
volumes:
- .:/app
Perintah ini membina imej Docker baru yang dipanggil my-laravel-app
berdasarkan Dockerfile
dalam direktori semasa.
Untuk menguji imej pengeluaran yang baru dibina, gunakan arahan berikut:
<!-- Syntax highlighted by torchlight.dev -->docker compose up [-d]
Ganti <your-app-key>
dengan nilai pembolehubah persekitaran APP_KEY
dalam fail .env
anda atau ambil kunci dari sini.
Lawati localhost: 8080 dalam penyemak imbas anda, dan aplikasi anda harus bermula dalam mod pengeluaran. Ia mungkin kesilapan kerana kekurangan sambungan pangkalan data, tetapi itu dijangka.
#deploying to the Cloud
Sekarang bahawa anda mempunyai imej Docker yang siap pengeluaran, anda boleh menggunakannya ke pembekal awan. ?
Dalam tutorial ini, kami akan menggunakan Sevalla, pembekal awan baru yang menawarkan cara mudah untuk menggunakan penyebaran berasaskan Dockerfile
.
Sebagai aplikasi anda bergantung pada pangkalan data PostgreSQL, anda lebih baik menyediakan pangkalan data PostgreSQL baru di Sevalla terlebih dahulu. Sebaik sahaja anda log masuk ke papan pemuka Sevalla,
- navigasi ke modal modal modal
- Pilih Pangkalan Data PostgreSQL
- Sahkan tetapan dan buat pangkalan data
Setelah pangkalan data anda siap, anda boleh membuat aplikasi Laravel anda di Sevalla.
- navigasi ke mode cipta modal
- Pilih repositori aplikasi anda dari penyedia git pilihan anda
- Pastikan untuk memilih pusat data yang sama pangkalan data anda di
- Tetapkan pembolehubah persekitaran
APP_KEY
yang diperlukan oleh Laravel
- pilih
Dockerfile
sebagai jenis binaan
- Sahkan selebihnya tetapan dan tekan butang "Deploy kemudian"
Jika aplikasi anda siap, kini anda boleh menyambungkannya dengan pangkalan data PostgreSQL anda.
- navigasi ke halaman aplikasi
- pergi ke tab "Rangkaian"
- Klik pada butang "Tambah Sambungan" dan pilih pangkalan data PostgreSQL anda
- Sahkan tetapan dan tekan "Sambung"
Kemudian, tetapkan pembolehubah persekitaran berikut dalam tab "Pembolehubah Alam Sekitar" dengan butiran sambungan pangkalan data anda:
-
DB_CONNECTION
-
DB_HOST
-
DB_PORT
-
DB_DATABASE
-
DB_USERNAME
-
DB_PASSWORD
kami mengesyorkan menggunakan alamat rangkaian dalaman pangkalan data anda sebagai nilai
. Dengan cara ini, aplikasi anda boleh menyambung ke pangkalan data melalui rangkaian peribadi.
Langkah terakhir adalah untuk menubuhkan proses kerja untuk aplikasi anda untuk menjalankan miRgations pangkalan data sebelum memulakan aplikasi.
Navigasi ke tab "Proses" DB_HOST
Klik pada butang "Buat Proses" dan pilih "Job"
tetapkan arahan ke -
Tetapkan dasar Mula untuk "sebelum penempatan" -
Sahkan tetapan dan tekan "Buat" -
php artisan migrate --force
-
-
Jika ini juga dilakukan, kini anda boleh memulakan penggunaan manual aplikasi anda dalam tab Deployments. ?
Jika semua berjalan lancar, selamat! Anda telah berjaya menyediakan aplikasi Laravel anda untuk awan. ?
#conclusion
Dalam artikel ini, kami telah meneroka:
cara menyediakan persekitaran tempatan anda untuk meniru persekitaran pengeluaran anda menggunakan Docker dan .
Cara menyediakan aplikasi Laravel anda untuk digunakan dalam persekitaran awan menggunakan Docker, Frankenphp, dan Caddy.
Kami juga telah meliputi cara menggunakan aplikasi anda ke pembekal awan seperti Sevalla. -
docker compose
Dengan mengikuti langkah-langkah ini, anda boleh mengambil aplikasi Laravel anda ke ketinggian baru dan menikmati manfaat penyebaran berasaskan awan. ? -
#update: 8 September, 2024 -
kami menerima maklum balas yang berharga daripada komuniti melalui perbincangan mengenai X.
Titik pertama menekankan bahawa termasuk arahan
dalam fail tidak perlu, kerana ia melangkaui pelayan Frankenphp. Kami telah membetulkannya dengan mengemas kini bahagian yang relevan dari fail
.
Titik kedua, dikongsi oleh Kévin Dunglas (pencipta Frankenphp), disyorkan menggunakan imej berasaskan Debian (bookworm
) dan bukannya Alpine (alpine
), kerana Debian menawarkan keserasian yang lebih baik dengan PHP dan prestasi yang lebih baik dengan Frankenphp. Akibatnya, kami mengemas kini fail Dockerfile.dev
dan Dockerfile
.
Kami berterima kasih atas sokongan dan maklum balas masyarakat. ? ❤️
Atas ialah kandungan terperinci Sediakan aplikasi Laravel anda untuk awan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!