Menginstal server web di instans EC2 Anda - Amazon Aurora

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menginstal server web di instans EC2 Anda

Instal server web pada instans EC2 yang Anda buat di Luncurkan EC2 instance untuk terhubung dengan Anda. Server web terhubung ke klaster DB Amazon Aurora yang Anda buat di Membuat klaster DB Amazon Aurora.

Menginstal server web Apache dengan PHP dan MariaDB

Hubungkan ke instans EC2 Anda dan instal server web.

Menghubungkan ke instans EC2 dan menginstal server web Apache dengan PHP
  1. Connect ke instans EC2 yang Anda buat sebelumnya dengan mengikuti langkah-langkah di Connect to Linux Anda di Panduan Pengguna Amazon EC2.

    Sebaiknya Anda menghubungkan ke instans EC2 menggunakan SSH. Jika utilitas klien SSH diinstal di Windows, Linux, atau Mac, Anda dapat menghubungkan ke instans menggunakan format perintah berikut:

    ssh -i location_of_pem_file ec2-user@ec2-instance-public-dns-name

    Misalnya, asumsikan bahwa ec2-database-connect-key-pair.pem disimpan di /dir1 di Linux, dan DNS IPv4 publik untuk instans EC2 Anda adalah ec2-12-345-678-90.compute-1.amazonaws.com. Perintah SSH Anda akan tampak seperti berikut:

    ssh -i /dir1/ec2-database-connect-key-pair.pem ec2-user@ec2-12-345-678-90.compute-1.amazonaws.com
  2. Dapatkan pembaruan keamanan dan perbaikan bug terbaru dengan memperbarui perangkat lunak di instans EC2 Anda. Untuk melakukannya, gunakan perintah berikut.

    catatan

    Opsi -y menginstal pembaruan tanpa meminta konfirmasi. Hilangkan opsi ini untuk memeriksa pembaruan sebelum menginstal.

    sudo dnf update -y
  3. Setelah pembaruan selesai, instal server web Apache, PHP, dan MariaDB atau perangkat lunak PostgreSQL menggunakan perintah berikut. Perintah ini menginstal beberapa paket perangkat lunak dan dependensi terkait bersamaan.

    MariaDB & MySQL
    sudo dnf install -y httpd php php-mysqli mariadb105
    PostgreSQL
    sudo dnf install -y httpd php php-pgsql postgresql15

    Jika Anda mengalami kesalahan, instans Anda mungkin tidak diluncurkan dengan AMI Amazon Linux 2023. Sebaiknya gunakan AMI Amazon Linux 2 AMI. Anda dapat melihat versi Amazon Linux Anda menggunakan perintah berikut.

    cat /etc/system-release

    Untuk informasi selengkapnya, lihat Memperbarui perangkat lunak instans.

  4. Mulai server web dengan perintah yang ditampilkan berikut ini.

    sudo systemctl start httpd

    Anda dapat menguji apakah server web Anda terinstal dan berjalan dengan benar. Untuk melakukannya, masukkan nama Sistem Nama Domain (DNS) publik dari instans EC2 Anda di bilah alamat browser web, misalnya: http://ec2-42-8-168-21.us-west-1.compute.amazonaws.com. Jika server web Anda berjalan, maka Anda akan melihat halaman uji Apache.

    Jika Anda tidak melihat halaman uji Apache, periksa aturan masuk Anda untuk grup keamanan VPC yang Anda buat di Tutorial: Membuat VPC untuk digunakan dengan klaster DB (khusus IPv4). Pastikan aturan masuk Anda menyertakan aturan yang mengizinkan akses HTTP (port 80) untuk alamat IP agar terhubung ke server web.

    catatan

    Halaman uji Apache hanya muncul jika tidak ada konten di direktori root dokumen, /var/www/html. Setelah konten ditambahkan ke direktori root dokumen, konten tersebut akan muncul di alamat DNS publik dari instans EC2 Anda. Sebelumnya, konten tersebut muncul di halaman uji Apache.

  5. Konfigurasikan server web untuk memulai setiap boot sistem menggunakan perintah systemctl.

    sudo systemctl enable httpd

Untuk mengizinkan ec2-user mengelola file di direktori root default untuk server web Apache Anda, ubah kepemilikan dan izin direktori /var/www. Ada banyak cara untuk menyelesaikan tugas ini. Dalam tutorial ini, Anda menambahkan ec2-user ke grup apache, untuk memberikan kepemilikan grup apache atas direktori /var/www dan menetapkan izin tulis ke grup.

Mengatur izin file untuk server web Apache
  1. Tambahkan pengguna ec2-user ke grup apache.

    sudo usermod -a -G apache ec2-user
  2. Keluar untuk menyegarkan izin Anda dan masukkan grup apache baru.

    exit
  3. Masuk kembali dan verifikasi apakah grup apache ada dengan perintah groups.

    groups

    Output Anda akan terlihat seperti berikut ini:

    ec2-user adm wheel apache systemd-journal
  4. Ubah kepemilikan grup atas direktori /var/www dan kontennya ke grup apache.

    sudo chown -R ec2-user:apache /var/www
  5. Ubah izin direktori atas /var/www dan subdirektorinya untuk menambahkan izin tulis grup dan atur ID grup pada subdirektori yang dibuat di masa mendatang.

    sudo chmod 2775 /var/www find /var/www -type d -exec sudo chmod 2775 {} \;
  6. Ubah izin file secara berulang di direktori /var/www dan subdirektorinya untuk menambahkan izin tulis grup.

    find /var/www -type f -exec sudo chmod 0664 {} \;

Sekarang, ec2-user (dan setiap anggota grup apache mendatang) dapat menambahkan, menghapus, dan mengedit file pada root dokumen Apache. Ini memungkinkan Anda untuk menambahkan konten, seperti situs web statis atau aplikasi PHP.

catatan

Server web yang menjalankan protokol HTTP tidak memberikan keamanan transportasi untuk data yang dikirim atau diterimanya. Saat Anda menghubungkan ke server HTTP menggunakan browser web, banyak informasi yang terlihat oleh penyadap di mana saja di sepanjang jalur jaringan. Informasi ini mencakup URL yang Anda kunjungi, konten halaman web yang Anda terima, dan konten (termasuk kata sandi) dari setiap formulir HTML.

Praktik terbaik untuk mengamankan server web Anda adalah dengan menginstal dukungan untuk HTTPS (HTTP Secure). Protokol ini melindungi data Anda dengan enkripsi SSL/TLS. Untuk informasi selengkapnya, lihat Tutorial: Mengonfigurasi SSL/TLS dengan Amazon Linux AMI di Panduan Pengguna Amazon EC2.

Menghubungkan server web Apache ke klaster DB

Selanjutnya, Anda menambahkan konten ke server web Apache yang terhubung ke klaster DB Amazon Aurora.

Menambahkan konten ke server web Apache yang terhubung ke klaster DB Anda
  1. Saat masih terhubung ke instans EC2, ubah direktori ke /var/www dan buat subdirektori baru yang diberi nama inc.

    cd /var/www mkdir inc cd inc
  2. Buat file baru dalam direktori inc yang diberi nama dbinfo.inc, lalu edit file tersebut dengan menggunakan nano (atau editor pilihan Anda).

    >dbinfo.inc nano dbinfo.inc
  3. Tambahkan konten berikut ini ke file dbinfo.inc. Di sini, db_instance_endpoint adalah titik akhir tulis klaster DB, tanpa port, untuk klaster DB Anda.

    catatan

    Sebaiknya tempatkan nama pengguna dan informasi kata sandi dalam folder yang bukan bagian dari root dokumen untuk server web Anda. Hal ini mengurangi kemungkinan informasi keamanan Anda terungkap.

    Pastikan untuk mengubah master password ke kata sandi yang sesuai di aplikasi Anda.

    <?php define('DB_SERVER', 'db_cluster_writer_endpoint'); define('DB_USERNAME', 'tutorial_user'); define('DB_PASSWORD', 'master password'); define('DB_DATABASE', 'sample'); ?>
  4. Simpan dan tutup file dbinfo.inc. Jika Anda menggunakan nano, simpan dan tutup file dengan menggunakan Ctrl+S dan Ctrl+X.

  5. Ubah direktori ke /var/www/html.

    cd /var/www/html
  6. Buat file baru dalam direktori html yang diberi nama SamplePage.php, lalu edit file tersebut dengan menggunakan nano (atau editor pilihan Anda).

    >SamplePage.php nano SamplePage.php
  7. Tambahkan konten berikut ini ke file SamplePage.php:

    MariaDB & MySQL
    <?php include "../inc/dbinfo.inc"; ?> <html> <body> <h1>Sample page</h1> <?php /* Connect to MySQL and select the database. */ $connection = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD); if (mysqli_connect_errno()) echo "Failed to connect to MySQL: " . mysqli_connect_error(); $database = mysqli_select_db($connection, DB_DATABASE); /* Ensure that the EMPLOYEES table exists. */ VerifyEmployeesTable($connection, DB_DATABASE); /* If input fields are populated, add a row to the EMPLOYEES table. */ $employee_name = htmlentities($_POST['NAME']); $employee_address = htmlentities($_POST['ADDRESS']); if (strlen($employee_name) || strlen($employee_address)) { AddEmployee($connection, $employee_name, $employee_address); } ?> <!-- Input form --> <form action="<?PHP echo $_SERVER['SCRIPT_NAME'] ?>" method="POST"> <table border="0"> <tr> <td>NAME</td> <td>ADDRESS</td> </tr> <tr> <td> <input type="text" name="NAME" maxlength="45" size="30" /> </td> <td> <input type="text" name="ADDRESS" maxlength="90" size="60" /> </td> <td> <input type="submit" value="Add Data" /> </td> </tr> </table> </form> <!-- Display table data. --> <table border="1" cellpadding="2" cellspacing="2"> <tr> <td>ID</td> <td>NAME</td> <td>ADDRESS</td> </tr> <?php $result = mysqli_query($connection, "SELECT * FROM EMPLOYEES"); while($query_data = mysqli_fetch_row($result)) { echo "<tr>"; echo "<td>",$query_data[0], "</td>", "<td>",$query_data[1], "</td>", "<td>",$query_data[2], "</td>"; echo "</tr>"; } ?> </table> <!-- Clean up. --> <?php mysqli_free_result($result); mysqli_close($connection); ?> </body> </html> <?php /* Add an employee to the table. */ function AddEmployee($connection, $name, $address) { $n = mysqli_real_escape_string($connection, $name); $a = mysqli_real_escape_string($connection, $address); $query = "INSERT INTO EMPLOYEES (NAME, ADDRESS) VALUES ('$n', '$a');"; if(!mysqli_query($connection, $query)) echo("<p>Error adding employee data.</p>"); } /* Check whether the table exists and, if not, create it. */ function VerifyEmployeesTable($connection, $dbName) { if(!TableExists("EMPLOYEES", $connection, $dbName)) { $query = "CREATE TABLE EMPLOYEES ( ID int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY, NAME VARCHAR(45), ADDRESS VARCHAR(90) )"; if(!mysqli_query($connection, $query)) echo("<p>Error creating table.</p>"); } } /* Check for the existence of a table. */ function TableExists($tableName, $connection, $dbName) { $t = mysqli_real_escape_string($connection, $tableName); $d = mysqli_real_escape_string($connection, $dbName); $checktable = mysqli_query($connection, "SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME = '$t' AND TABLE_SCHEMA = '$d'"); if(mysqli_num_rows($checktable) > 0) return true; return false; } ?>
    PostgreSQL
    <?php include "../inc/dbinfo.inc"; ?> <html> <body> <h1>Sample page</h1> <?php /* Connect to PostgreSQL and select the database. */ $constring = "host=" . DB_SERVER . " dbname=" . DB_DATABASE . " user=" . DB_USERNAME . " password=" . DB_PASSWORD ; $connection = pg_connect($constring); if (!$connection){ echo "Failed to connect to PostgreSQL"; exit; } /* Ensure that the EMPLOYEES table exists. */ VerifyEmployeesTable($connection, DB_DATABASE); /* If input fields are populated, add a row to the EMPLOYEES table. */ $employee_name = htmlentities($_POST['NAME']); $employee_address = htmlentities($_POST['ADDRESS']); if (strlen($employee_name) || strlen($employee_address)) { AddEmployee($connection, $employee_name, $employee_address); } ?> <!-- Input form --> <form action="<?PHP echo $_SERVER['SCRIPT_NAME'] ?>" method="POST"> <table border="0"> <tr> <td>NAME</td> <td>ADDRESS</td> </tr> <tr> <td> <input type="text" name="NAME" maxlength="45" size="30" /> </td> <td> <input type="text" name="ADDRESS" maxlength="90" size="60" /> </td> <td> <input type="submit" value="Add Data" /> </td> </tr> </table> </form> <!-- Display table data. --> <table border="1" cellpadding="2" cellspacing="2"> <tr> <td>ID</td> <td>NAME</td> <td>ADDRESS</td> </tr> <?php $result = pg_query($connection, "SELECT * FROM EMPLOYEES"); while($query_data = pg_fetch_row($result)) { echo "<tr>"; echo "<td>",$query_data[0], "</td>", "<td>",$query_data[1], "</td>", "<td>",$query_data[2], "</td>"; echo "</tr>"; } ?> </table> <!-- Clean up. --> <?php pg_free_result($result); pg_close($connection); ?> </body> </html> <?php /* Add an employee to the table. */ function AddEmployee($connection, $name, $address) { $n = pg_escape_string($name); $a = pg_escape_string($address); echo "Forming Query"; $query = "INSERT INTO EMPLOYEES (NAME, ADDRESS) VALUES ('$n', '$a');"; if(!pg_query($connection, $query)) echo("<p>Error adding employee data.</p>"); } /* Check whether the table exists and, if not, create it. */ function VerifyEmployeesTable($connection, $dbName) { if(!TableExists("EMPLOYEES", $connection, $dbName)) { $query = "CREATE TABLE EMPLOYEES ( ID serial PRIMARY KEY, NAME VARCHAR(45), ADDRESS VARCHAR(90) )"; if(!pg_query($connection, $query)) echo("<p>Error creating table.</p>"); } } /* Check for the existence of a table. */ function TableExists($tableName, $connection, $dbName) { $t = strtolower(pg_escape_string($tableName)); //table name is case sensitive $d = pg_escape_string($dbName); //schema is 'public' instead of 'sample' db name so not using that $query = "SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME = '$t';"; $checktable = pg_query($connection, $query); if (pg_num_rows($checktable) >0) return true; return false; } ?>
  8. Simpan dan tutup file SamplePage.php.

  9. Verifikasi bahwa server web Anda berhasil terhubung ke klaster DB Anda dengan membuka browser web dan menelusuri ke http://EC2 instance endpoint/SamplePage.php, misalnya: http://ec2-12-345-67-890.us-west-2.compute.amazonaws.com/SamplePage.php.

Anda dapat menggunakan SamplePage.php untuk menambahkan data ke klaster DB Anda. Data yang Anda tambahkan kemudian ditampilkan di halaman. Untuk memverifikasi apakah data dimasukkan ke dalam tabel, instal klien MySQL pada instans Amazon EC2. Kemudian, hubungkan ke klaster DB dan kueri tabelnya.

Untuk informasi tentang menghubungkan ke klaster DB, lihat Menghubungkan ke klaster DB Amazon Aurora.

Untuk memastikan klaster DB Anda seaman mungkin, verifikasi bahwa sumber di luar VPC tidak dapat menghubungkan ke klaster DB Anda.

Setelah selesai menguji server web dan database, Anda harus menghapus klaster DB dan instans Amazon EC2 Anda.