Mem-build aplikasi dengan PHP 7/8

ID region

REGION_ID adalah kode singkat yang ditetapkan Google berdasarkan region yang Anda pilih saat membuat aplikasi. Kode ini tidak sesuai dengan negara atau provinsi, meskipun beberapa ID region mungkin tampak mirip dengan kode negara dan provinsi yang umum digunakan. Untuk aplikasi yang dibuat setelah Februari 2020, REGION_ID.r disertakan dalam URL App Engine. Untuk aplikasi lama yang dibuat sebelum tanggal tersebut, ID region bersifat opsional dalam URL.

Pelajari ID region lebih lanjut.

Pelajari cara mem-build aplikasi di App Engine menggunakan PHP versi 7.4 atau 8.1. Aplikasi contoh memungkinkan pengguna memposting judul, penulis, deskripsi, tanggal publikasi, dan gambar buku favorit mereka ke halaman web. Aplikasi menyimpan data tekstual di database Cloud SQL dan gambar di bucket Cloud Storage.

Struktur panduan

  1. Membuat project Google Cloud menggunakan Google Cloud CLI

  2. Mendownload aplikasi contoh

  3. Menentukan dependensi dengan composer.json

  4. Memulai aplikasi dan menentukan pengontrol depan

  5. Mengintegrasikan dengan layanan Google Cloud

  6. Mengonfigurasi aplikasi untuk App Engine

  7. Men-deploy aplikasi

Sebelum memulai

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Aktifkan Cloud Build API.

    Mengaktifkan API

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Aktifkan Cloud Build API.

    Mengaktifkan API

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. Instal Composer, alat pengelolaan dependensi PHP. Anda harus menginstal Composer secara global di sistem Linux dan Mac OS X.

Mendownload aplikasi contoh

  1. Pelajari kode di GitHub

  2. Download atau clone aplikasi.

    git clone https://github.com/GoogleCloudPlatform/php-docs-samples.git

    Atau download contoh sebagai file ZIP dan ekstrak.

  3. Buka direktori getting-started.

    cd php-docs-samples/appengine/standard/getting-started

Menentukan dependensi dengan composer.json

Aplikasi menggunakan pengontrol depan untuk merutekan permintaan. Kode contoh dalam panduan ini menggunakan Framework Slim, tetapi Anda dapat menggunakan framework web pilihan Anda.

  1. Buka file composer.json untuk meninjau semua dependensi langsung:

    {
      "require": {
        "google/cloud-storage": "^1.6",
        "slim/slim": "^4.0",
        "slim/psr7": "^1.0",
        "slim/twig-view": "^3.0",
        "php-di/slim-bridge": "^3.1",
        "symfony/yaml": "^5.2"
      },
      "autoload": {
         "psr-4": {
           "Google\\Cloud\\Samples\\AppEngine\\GettingStarted\\": "src"
         }
      }
    }
    
  2. Untuk menginstal dependensi dan menghasilkan file composer.lock, jalankan perintah berikut:

    composer install
    

    File composer.lock membantu aplikasi Anda mengambil versi paket yang sama dengan yang digunakan di beberapa build dan lingkungan.

Memulai aplikasi dan menentukan pengontrol depan

File index.php akan melakukan inisialisasi aplikasi dan meneruskan semua permintaan ke pengontrol yang ditentukan dalam file ./src/controllers.php.


// Use the composer autoloader to load dependencies.
require_once __DIR__ . '/vendor/autoload.php';

//  Load the application code.
/** @var Slim\App $app */
$app = require __DIR__ . '/src/app.php';
require __DIR__ . '/src/controllers.php';

// Bootstrap the slim framework to handle the request.
$app->run();

Untuk informasi selengkapnya tentang penanganan permintaan, baca pengaktifan aplikasi dan menangani permintaan.

Mengintegrasikan dengan layanan Google Cloud

App Engine mengharuskan aplikasi berintegrasi dengan sistem eksternal untuk penyimpanan data. Aplikasi contoh menyimpan data tekstual di Cloud SQL dan gambar di Cloud Storage.

Lihat halaman Choosing a Storage Option untuk semua opsi penyimpanan Google Cloud.

Menggunakan Cloud SQL

Dalam aplikasi contoh, pengguna memposting buku ke halaman web. Aplikasi ini menggunakan database Cloud SQL untuk menyimpan judul, penulis, tanggal publikasi, dan deskripsi buku.

Anda harus membuat instance Cloud SQL sebelum menambahkan konten ke database aplikasi.

Membuat instance Cloud SQL

Gunakan gcloud CLI untuk membuat instance Cloud SQL:

gcloud sql instances create INSTANCE_NAME --tier=MACHINE_TYPE --region=REGION

Misalnya, jika Anda ingin memberi nama instance bookshelf dan menggunakan jenis mesin db-n1-standard-2 di region Amerika Serikat bagian tengah:

gcloud sql instances create bookshelf --tier=db-n1-standard-2 --region=us-central1

Menyiapkan pengguna root MySQL

Anda dapat menggunakan gcloud CLI untuk menetapkan sandi pengguna root instance Cloud SQL Anda:

gcloud sql users set-password USER --host=HOST --instance=INSTANCE_NAME --password=PASSWORD

Misalnya, jika Anda ingin menetapkan sandi pengguna root untuk instance Cloud SQL bookshelf ke passw0rd!:

gcloud sql users set-password root --host=% --instance=bookshelf --password=passw0rd!

Menyiapkan database pada instance Cloud SQL

Untuk menyimpan penulis, judul, tanggal publikasi, dan deskripsi buku, buat database MySQL:

gcloud sql databases create DATABASE_NAME --instance=INSTANCE_NAME

Misalnya, jika Anda ingin membuat database bernama book-data di instance Cloud SQL bookshelf:

gcloud sql databases create book-data --instance=bookshelf

Terhubung ke database Cloud SQL

Aplikasi contoh menggunakan PDO PHP untuk berinteraksi dengan database MySQL.

// Fill the variables below to match your Cloud SQL configuration.
// $dbConn = 'YOUR_CLOUDSQL_CONNECTION_NAME';
// $dbName = 'YOUR_CLOUDSQL_DATABASE_NAME';
// $dbUser = 'YOUR_CLOUDSQL_USER';
// $dbPass = 'YOUR_CLOUDSQL_PASSWORD';
$dsn = "mysql:unix_socket=/cloudsql/{$dbConn};dbname={$dbName}";
$pdo = new PDO($dsn, $dbUser, $dbPass);

Untuk tutorial ini, parameter ini ditentukan sebagai variabel lingkungan di bawah ini dalam artikel Mengonfigurasi aplikasi.

Membuat kueri suatu baris

Saat pengguna mengklik buku, aplikasi akan mengkueri database dan menampilkan satu baris yang mencakup judul, penulis, tanggal publikasi, dan deskripsi buku.

$statement = $pdo->prepare('SELECT * FROM books WHERE id = :id');
$statement->bindValue('id', $id, PDO::PARAM_INT);
$statement->execute();
$result = $statement->fetch(PDO::FETCH_ASSOC);

Menggunakan Cloud Storage

Aplikasi contoh menggunakan Cloud Storage untuk menyimpan gambar, yang merupakan file biner, yang diupload oleh pengguna.

Membuat bucket Cloud Storage

Cloud Storage menggunakan bucket untuk mengatur dan mengontrol akses ke data Anda.

Gunakan gcloud CLI untuk membuat bucket Cloud Storage:

gsutil mb -l BUCKET_REGION gs://BUCKET_NAME/

Misalnya, jika Anda ingin membuat bucket bernama picture-storage di region us-central1:

gsutil mb -l us-central1 gs://picture-storage/
  • Jika berhasil, Anda akan melihat output berikut:

    Creating gs://BUCKET_NAME/
  • Jika tidak berhasil, Anda mungkin akan melihat output berikut:

    ServiceException: 409 Bucket BUCKET_NAME already exists

    Coba lagi dengan nama bucket yang berbeda.

Menghubungkan project ke bucket Cloud Storage

Untuk menggunakan Cloud Storage, Anda perlu menentukan library Cloud Storage.

use Google\Cloud\Storage\StorageClient;

Menyimpan gambar

Setelah membuat bucket Cloud Storage dan menyiapkan koneksi, Anda dapat menyimpan gambar. Gambar dapat diupload dengan daftar kontrol akses (ACL) standar untuk mengontrol akses ke image.

Dalam aplikasi contoh ini, gambar yang diupload akan memiliki public-read ACL yang telah ditetapkan. URL publik dapat diakses melalui properti mediaLink dari objek Cloud Storage Anda. Anda dapat menggunakan URL ini di tag gambar HTML.

// Set your own image file path and content type below to upload an
// image to Cloud Storage.
// $imageStream = fopen('/path/to/your_image.jpg', 'r');
// $imageContentType = 'image/jpg';
$object = $bucket->upload($imageStream, [
    'metadata' => ['contentType' => $imageContentType],
    'predefinedAcl' => 'publicRead',
]);
$imageUrl = $object->info()['mediaLink'];

Untuk petunjuk cara membaca objek Cloud Storage pribadi, lihat halaman Mendownload Objek.

Menghapus beberapa gambar

Saat pengguna menghapus buku dari aplikasi, kode ini akan menghapus gambar dari bucket Cloud Storage.

$object = $bucket->object($objectName);
$object->delete();

Mengonfigurasi aplikasi

Anda mengonfigurasi aplikasi untuk berjalan di App Engine menggunakan file app.yaml, yang menentukan runtime aplikasi, variabel lingkungan, dan setelan lainnya.

Untuk aplikasi dengan persyaratan konfigurasi minimal, file app.yaml dapat berupa satu baris:

PHP 8.1

runtime: php81

PHP 7.4

runtime: php74

Anda dapat menambahkan opsi konfigurasi lebih lanjut dan variabel lingkungan khusus aplikasi ke dalam file konfigurasi app.yaml.

Menambahkan variabel lingkungan

File app.yaml adalah tempat konfigurasi lingkungan disediakan untuk aplikasi. Contoh rak buku yang digunakan dalam panduan ini memerlukan konfigurasi yang disediakan sebagai variabel lingkungan untuk mengetahui cara terhubung ke instance Cloud SQL yang benar dan bucket Cloud Storage.

Untuk men-deploy aplikasi, Anda perlu mengedit file konfigurasi app.yaml:

# See https://cloud.google.com/appengine/docs/standard/php/config/appref for a
# complete list of `app.yaml` directives.

runtime: php81

env_variables:
    GOOGLE_STORAGE_BUCKET: ""
    # populate these to use the "mysql" or "postres" backends
    CLOUDSQL_CONNECTION_NAME: ""
    CLOUDSQL_USER: ""
    CLOUDSQL_PASSWORD: ""
    ## Uncomment to give your database a name other than "bookshelf"
    # CLOUDSQL_DATABASE_NAME: ""
  1. Tetapkan variabel GOOGLE_STORAGE_BUCKET ke nama bucket Cloud Storage Anda.

  2. Tetapkan variabel CLOUDSQL_CONNECTION_NAME ke app-name:region:instance-name Anda dapat mengambil detail yang diperlukan dengan menggunakan perintah gcloud berikut:

    gcloud sql instances describe INSTANCE

    Untuk instance Cloud SQL Generasi Kedua, CLOUDSQL_CONNECTION_NAME akan memiliki format berikut: your_project_name:your_region:your_instance

  3. Hapus tanda komentar dan tetapkan variabel CLOUD_SQL_DATABASE_NAME jika database yang telah Anda buat memiliki nama selain bookshelf. Dalam contoh ini, database te dibuat dengan nama book-data.

  4. Tinjau file app.yaml Anda, yang seharusnya terlihat seperti ini:

PHP 8.1

runtime: php81

env_variables:
  GOOGLE_STORAGE_BUCKET: picture-storage
  CLOUDSQL_CONNECTION_NAME: sample-application:us-central1:bookshelf
  CLOUDSQL_USER: root
  CLOUDSQL_PASSWORD: passw0rd!
  CLOUDSQL_DATABASE_NAME: book-data

PHP 7.4

runtime: php74

env_variables:
  GOOGLE_STORAGE_BUCKET: picture-storage
  CLOUDSQL_CONNECTION_NAME: sample-application:us-central1:bookshelf
  CLOUDSQL_USER: root
  CLOUDSQL_PASSWORD: passw0rd!
  CLOUDSQL_DATABASE_NAME: book-data

Men-deploy aplikasi

  1. Untuk men-deploy aplikasi, buka direktori getting-started dan jalankan perintah berikut:

    gcloud app deploy
  2. Saat permintaan lokasi muncul, pilih lokasi di dekat pengguna aplikasi Anda. App Engine bersifat regional, yang berarti infrastruktur yang menjalankan aplikasi Anda terletak di area geografis tertentu. Misalnya, tutorial ini telah menggunakan region us-central1 untuk men-deploy resource penyimpanannya. Deploy aplikasi di region yang sama untuk mengurangi latensi dan meningkatkan performa.

    Secara umum, memilih lokasi di dekat pengguna merupakan ide yang bagus, tetapi sebaiknya men-deploy aplikasi yang dekat dengan lokasi resource-nya. Baca lokasi App Engine dan lokasi resource yang tersedia.

  3. Melihat aplikasi:

    gcloud app browse

Pembersihan

Hapus project Google Cloud Anda untuk menghentikan penagihan resource yang digunakan dalam project tersebut.

Untuk menghapus project Anda menggunakan perintah berikut:

gcloud projects delete PROJECT_ID

Untuk memverifikasi bahwa project sudah dihapus, cantumkan project Anda:

gcloud projects list

Langkah selanjutnya