

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

# AL2 Tutorial
<a name="al2-tutorials"></a>

 Tutorial berikut menunjukkan cara melakukan tugas umum menggunakan instans Amazon EC2 yang berjalan. AL2 Untuk tutorial video, lihat [Video AWS instruksional dan lab](https://www.aws.training/). 

Untuk AL2023 petunjuk, lihat [Tutorial](https://docs.aws.amazon.com/linux/al2023/ug/tutorials-al2023.html) di *Panduan Pengguna Amazon Linux 2023*.

**Topics**
+ [Tutorial: Instal server LAMP AL2](ec2-lamp-amazon-linux-2.md)
+ [Tutorial: SSL/TLS Konfigurasikan AL2](SSL-on-amazon-linux-2.md)
+ [Tutorial: Tuan rumah WordPress blog di AL2](hosting-wordpress.md)

# Tutorial: Instal server LAMP AL2
<a name="ec2-lamp-amazon-linux-2"></a>

Prosedur berikut membantu Anda menginstal server web Apache dengan dukungan PHP dan [MariaDB](https://mariadb.org/about/) (fork MySQL yang dikembangkan komunitas) pada instance AL2 Anda (kadang-kadang disebut server web LAMP atau tumpukan LAMP). Anda dapat menggunakan server ini untuk melakukan host situs web statis atau melakukan deployment aplikasi PHP dinamis yang membaca dan menulis informasi ke basis data.

**penting**  
Jika Anda mencoba menyiapkan server web LAMP di distribusi yang berbeda seperti Ubuntu atau Red Hat Enterprise Linux, tutorial ini tidak bisa Anda gunakan. Untuk AL2023, lihat [Menginstal server LAMP pada AL2023](https://docs.aws.amazon.com//linux/al2023/ug/ec2-lamp-amazon-linux-2023.html). Untuk Ubuntu, lihat dokumentasi komunitas Ubuntu berikut: [ApacheMySQLPHP](https://help.ubuntu.com/community/ApacheMySQLPHP). Untuk distribusi lain, lihat dokumentasi spesifik mereka.

**Opsi: Selesaikan tutorial ini menggunakan otomatisasi**  
Untuk menyelesaikan tutorial ini menggunakan AWS Systems Manager Otomasi alih-alih tugas-tugas berikut, jalankan [AWS dokumen Docs-Install ALAMPServer - AL2](https://console.aws.amazon.com/systems-manager/automation/execute/AWSDocs-InstallALAMPServer-AL2) Automation.

**Topics**
+ [Langkah 1: Menyiapkan server LAMP](#prepare-lamp-server)
+ [Langkah 2: Menguji server LAMP Anda](#test-lamp-server)
+ [Langkah 3: Amankan server basis data](#secure-mariadb-lamp-server)
+ [Langkah 4: (Opsional) Instal phpMyAdmin](#install-phpmyadmin-lamp-server)
+ [Pemecahan Masalah](#lamp-troubleshooting)
+ [Topik terkait](#lamp-more-info)

## Langkah 1: Menyiapkan server LAMP
<a name="prepare-lamp-server"></a>

**Prasyarat**
+ Tutorial ini mengasumsikan bahwa Anda telah meluncurkan instance baru menggunakan AL2, dengan nama DNS publik yang dapat dijangkau dari internet. Untuk informasi selengkapnya, lihat [Meluncurkan instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html) di *Panduan Pengguna Amazon EC2*. Anda juga harus mengonfigurasi grup keamanan Anda untuk mengizinkan koneksi SSH (port 22), HTTP (port 80), dan HTTPS (port 443). *Untuk informasi selengkapnya tentang prasyarat ini, lihat [Aturan grup keamanan di Panduan Pengguna](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules.html) Amazon EC2.*
+ Prosedur berikut menginstal versi PHP terbaru yang tersedia AL2, saat ini`php8.2`. Jika Anda berencana menggunakan aplikasi PHP selain yang dijelaskan dalam tutorial ini, Anda harus memeriksa kompatibilitasnya dengan versi `php8.2`.<a name="install_apache-2"></a>

**Untuk menyiapkan server LAMP**

1. [Terhubung ke instans Anda](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html).

1. Untuk memastikan bahwa semua paket perangkat lunak Anda telah diperbarui, lakukan pembaruan perangkat lunak cepat di instans Anda. Proses ini mungkin memerlukan waktu beberapa menit, tetapi penting untuk memastikan bahwa Anda memiliki pembaruan keamanan dan perbaikan bug terbaru.

   Opsi `-y` akan menginstal pembaruan tanpa meminta konfirmasi. Jika Anda ingin memeriksa pembaruan sebelum menginstal, Anda dapat menghapus opsi ini.

   ```
   [ec2-user ~]$ sudo yum update -y
   ```

1. Instal repositori Amazon Linux Extras `mariadb10.5` untuk mendapatkan versi terbaru dari paket MariaDB.

   ```
   [ec2-user ~]$ sudo amazon-linux-extras install mariadb10.5
   ```

   Jika Anda menerima kesalahan yang menyatakan `sudo: amazon-linux-extras: command not found`, instans Anda tidak diluncurkan dengan AMI Amazon Linux 2 (mungkin Anda menggunakan AMI Amazon Linux sebagai gantinya). Anda dapat melihat versi Amazon Linux Anda menggunakan perintah berikut.

   ```
   cat /etc/system-release
   ```

1. Instal repositori `php8.2` Amazon Linux Extras untuk mendapatkan versi terbaru dari paket tersebut. PHP AL2

   ```
   [ec2-user ~]$ sudo amazon-linux-extras install php8.2
   ```

1. Sekarang, instans Anda sudah diperbarui, Anda dapat menginstal server web Apache, MariaDB, dan paket perangkat lunak PHP. Gunakan perintah yum install untuk menginstal banyak paket perangkat lunak dan semua dependensi yang terkait pada waktu bersamaan

   ```
   [ec2-user ~]$ sudo yum install -y httpd
   ```

   Anda dapat melihat versi paket saat ini menggunakan perintah berikut:

   ```
   yum info package_name
   ```

1. Mulai server web Apache.

   ```
   [ec2-user ~]$ sudo systemctl start httpd
   ```

1.  Gunakan perintah **systemctl** untuk mengonfigurasi server web Apache agar dimulai di setiap boot sistem. 

   ```
   [ec2-user ~]$ sudo systemctl enable httpd
   ```

   Anda dapat memverifikasi apakah **httpd** aktif dengan menjalankan perintah berikut:

   ```
   [ec2-user ~]$ sudo systemctl is-enabled httpd
   ```

1. Tambahkan aturan keamanan untuk mengizinkan koneksi HTTP (port 80) masuk ke instans Anda jika Anda belum melakukannya. Secara default, grup *N* keamanan **launch-wizard** telah disiapkan untuk instans Anda selama inisialisasi. Grup ini berisi satu aturan untuk mengizinkan koneksi SSH. 

   1. Buka konsol Amazon EC2 di. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)

   1. Pilih **Instans** dan pilih instans Anda.

   1. Pada tab **Keamanan**, lihat aturan masuk. Anda akan melihat aturan berikut ini:

      ```
      Port range   Protocol     Source
      22           tcp          0.0.0.0/0
      ```
**Awas**  
Menggunakan `0.0.0.0/0` memungkinkan semua IPv4 alamat untuk mengakses instans Anda menggunakan SSH. Hal ini dapat diterima untuk waktu yang singkat di lingkungan pengujian, tetapi tidak aman untuk lingkungan produksi. Dalam produksi, Anda dapat mengotorisasi alamat IP tertentu saja atau rentang alamat untuk mengakses instans Anda.

   1. Pilih tautan untuk grup keamanan. Menggunakan prosedur dalam [Menambahkan aturan ke grup keamanan](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule), tambahkan aturan keamanan masuk baru dengan nilai berikut:
      + **Jenis**: HTTP
      + **Protokol**: TCP
      + **Rentang Port**: 80
      + **Sumber**: Kustom

1. Uji server web Anda. Pada peramban web, ketikkan alamat DNS publik (atau alamat IP publik) instans Anda. Jika tidak ada konten di `/var/www/html`, Anda akan melihat halaman tes Apache. Anda dapat memperoleh DNS publik untuk instans Anda menggunakan konsol Amazon EC2 (centang kolom **DNS Publik**; jika kolom ini disembunyikan, pilih **Tampilkan/Sembunyikan Kolom** (ikon berbentuk gerigi) dan pilih **DNS Publik**).

   Verifikasi bahwa grup keamanan untuk instans berisi aturan untuk mengizinkan lalu lintas HTTP pada port 80. Untuk informasi selengkapnya, lihat [Menambahkan aturan ke grup keamanan](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule).
**penting**  
Jika Anda tidak menggunakan Amazon Linux, Anda mungkin juga perlu mengonfigurasi firewall pada instans untuk mengizinkan koneksi ini. Untuk informasi selengkapnya tentang cara mengonfigurasi firewall, lihat dokumentasi untuk distribusi tertentu Anda.  
![\[Tes server menunjukkan halaman uji Apache.\]](http://docs.aws.amazon.com/id_id/linux/al2/ug/images/apache_test_page_al2_2.4.png)

**httpd** Apache menyajikan file yang disimpan dalam direktori yang disebut root dokumen Apache. Root dokumen Amazon Linux Apache adalah `/var/www/html`, yang secara default dimiliki oleh root.

Untuk mengizinkan akun `ec2-user` untuk memanipulasi file dalam direktori ini, Anda harus memodifikasi kepemilikan dan izin direktori. 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.<a name="setting-file-permissions-2"></a>

**Untuk mengatur izin file**

1. Tambahkan pengguna Anda (dalam hal ini, `ec2-user`) ke grup `apache`.

   ```
   [ec2-user ~]$ sudo usermod -a -G apache ec2-user
   ```

1. Keluar dan masuk kembali untuk mengambil grup baru, lalu verifikasi keanggotaan Anda.

   1. Keluar (gunakan perintah **exit** atau tutup jendela terminal):

      ```
      [ec2-user ~]$ exit
      ```

   1. Untuk memverifikasi keanggotaan Anda di grup `apache`, hubungkan kembali ke instans Anda, lalu jalankan perintah berikut:

      ```
      [ec2-user ~]$ groups
      ec2-user adm wheel apache systemd-journal
      ```

1. Ubah kepemilikan grup `/var/www` dan kontennya ke grup `apache`.

   ```
   [ec2-user ~]$ sudo chown -R ec2-user:apache /var/www
   ```

1. Untuk menambahkan izin tulis grup dan untuk mengatur ID grup pada subdirektori mendatang, ubah izin direktori `/var/www` dan subdirektorinya.

   ```
   [ec2-user ~]$ sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;
   ```

1. Untuk menambahkan izin tulis grup, ubah izin file `/var/www` secara berulang dan subdirektorinya:

   ```
   [ec2-user ~]$ find /var/www -type f -exec sudo chmod 0664 {} \;
   ```

Sekarang, `ec2-user` (dan setiap anggota yang akan datang dari grup `apache`) dapat menambahkan, menghapus, dan mengedit file pada root dokumen Apache, sehingga Anda dapat menambahkan konten, seperti situs web statis atau aplikasi PHP.

**Untuk mengamankan server web Anda (Opsional)**  
Server web yang menjalankan protokol HTTP tidak memberikan keamanan transportasi untuk data yang dikirim atau diterimanya. Saat Anda terhubung ke server HTTP menggunakan browser web, URLs yang Anda kunjungi, konten halaman web yang Anda terima, dan konten (termasuk kata sandi) dari setiap formulir HTML yang Anda kirim semuanya akan terlihat oleh penyadap di mana saja di sepanjang jalur jaringan. Praktik terbaik untuk mengamankan server web Anda adalah dengan menginstal dukungan untuk HTTPS (HTTP Secure), yang melindungi data Anda dengan enkripsi SSL/TLS.

Untuk informasi tentang cara mengaktifkan HTTPS di server Anda, lihat [Tutorial: SSL/TLS Konfigurasikan AL2](SSL-on-amazon-linux-2.md).

## Langkah 2: Menguji server LAMP Anda
<a name="test-lamp-server"></a>

Jika server Anda diinstal dan dijalankan, dan izin file Anda diatur dengan benar, akun `ec2-user` seharusnya dapat membuat file PHP dalam direktori `/var/www/html` yang tersedia dari internet.

**Untuk menguji server LAMP Anda**

1. Buat file PHP pada root dokumen Apache.

   ```
   [ec2-user ~]$ echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
   ```

   Jika Anda mendapatkan pesan kesalahan “Izin ditolak” saat mencoba menjalankan perintah ini, cobalah keluar dan masuk kembali untuk mengambil izin grup yang sesuai yang Anda konfigurasikan di [Untuk mengatur izin file](#setting-file-permissions-2).

1. Pada peramban web, ketik URL file yang baru saja Anda buat. URL ini adalah alamat DNS publik dari instans Anda diikuti dengan garis miring ke depan dan nama file. Sebagai contoh:

   ```
   http://my.public.dns.amazonaws.com/phpinfo.php
   ```

   Anda akan melihat halaman informasi PHP:  
![\[Tes server LAMP menunjukkan halaman informasi PHP.\]](http://docs.aws.amazon.com/id_id/linux/al2/ug/images/phpinfo7.2.10.png)

   Jika Anda tidak melihat halaman ini, periksa apakah file `/var/www/html/phpinfo.php` dibuat dengan benar pada langkah sebelumnya. Anda juga dapat memverifikasi apakah semua paket yang diperlukan diinstal dengan perintah berikut.

   ```
   [ec2-user ~]$ sudo yum list installed httpd mariadb-server php-mysqlnd
   ```

   Jika salah satu paket yang diperlukan tidak tercantum di output Anda, instal dengan perintah **sudo yum install *package***. Verifikasi juga bahwa ekstra `php7.2` dan `lamp-mariadb10.2-php7.2` diaktifkan di output perintah **amazon-linux-extras**.

1. Hapus file `phpinfo.php`. Meskipun ini dapat menjadi informasi yang berguna, sebaiknya tidak disiarkan ke internet untuk alasan keamanan.

   ```
   [ec2-user ~]$ rm /var/www/html/phpinfo.php
   ```

Sekarang, seharusnya Anda telah memiliki server web LAMP yang berfungsi sepenuhnya. Jika Anda menambahkan konten ke akar dokumen Apache di `/var/www/html`, Anda harus dapat melihat konten tersebut di alamat DNS publik untuk instans Anda. 

## Langkah 3: Amankan server basis data
<a name="secure-mariadb-lamp-server"></a>

Instalasi default dari server MariaDB memiliki beberapa fitur yang bagus untuk pengujian dan pengembangan, tetapi harus dinonaktifkan atau dihapus untuk server produksi. Perintah **mysql\$1secure\$1installation** memandu Anda melalui proses pengaturan kata sandi root dan menghapus fitur yang tidak aman dari instalasi Anda. Meskipun Anda tidak berencana menggunakan server MariaDB, kami sarankan untuk melakukan prosedur ini.<a name="securing-maria-db"></a>

**Untuk mengamankan server MariaDB**

1. Mulai server MariaDB.

   ```
   [ec2-user ~]$ sudo systemctl start mariadb
   ```

1. Jalankan **mysql\$1secure\$1installation**.

   ```
   [ec2-user ~]$ sudo mysql_secure_installation
   ```

   1. Saat diminta, ketikkan kata sandi untuk akun root.

      1. Ketikkan kata sandi root saat ini. Secara default, akun root tidak memiliki pengaturan kata sandi. Tekan Enter.

      1. Ketik **Y** untuk mengatur kata sandi, dan ketik kata sandi yang aman sebanyak dua kali. Untuk informasi selengkapnya tentang membuat kata sandi aman, lihat [https://identitysafe.norton.com/password-generator/](https://identitysafe.norton.com/password-generator/). Pastikan untuk menyimpan kata sandi ini di tempat yang aman.

         Mengatur kata sandi root untuk MariaDB hanyalah langkah paling dasar untuk mengamankan basis data Anda. Saat Anda membangun atau menginstal aplikasi yang didorong basis data, Anda biasanya membuat pengguna layanan basis data untuk aplikasi tersebut dan menghindari penggunaan akun root untuk apa pun selain administrasi basis data. 

   1. Ketik **Y** untuk menghapus akun pengguna anonim.

   1. Ketik **Y** untuk menonaktifkan login root jarak jauh.

   1. Ketik **Y** untuk menghapus basis data pengujian.

   1. Ketik **Y** untuk memuat ulang tabel istimewa dan menyimpan perubahan Anda.

1. (Opsional) Jika Anda tidak berencana untuk langsung menggunakan server MariaDB, segera hentikan. Anda dapat memulainya ulang saat membutuhkannya lagi.

   ```
   [ec2-user ~]$ sudo systemctl stop mariadb
   ```

1. (Opsional) Jika Anda ingin server MariaDB untuk dimulai di setiap boot, ketik perintah berikut.

   ```
   [ec2-user ~]$ sudo systemctl enable mariadb
   ```

## Langkah 4: (Opsional) Instal phpMyAdmin
<a name="install-phpmyadmin-lamp-server"></a>

[phpMyAdmin](https://www.phpmyadmin.net/)adalah alat manajemen basis data berbasis web yang dapat Anda gunakan untuk melihat dan mengedit database MySQL pada instans EC2 Anda. Ikuti langkah-langkah di bawah ini untuk menginstal dan mengonfigurasi `phpMyAdmin` di instans Amazon Linux Anda.

**penting**  
Kami tidak menyarankan penggunaan `phpMyAdmin` untuk mengakses server LAMP kecuali Anda telah mengaktifkan SSL/TLS di Apache; jika tidak, kata sandi administrator database Anda dan data lainnya ditransmisikan secara tidak aman di internet. Untuk rekomendasi keamanan dari pengembang, lihat [Mengamankan phpMyAdmin instalasi Anda](https://docs.phpmyadmin.net/en/latest/setup.html#securing-your-phpmyadmin-installation). Untuk informasi umum tentang cara mengamankan server web di instans EC2, lihat [Tutorial: SSL/TLS Konfigurasikan AL2](SSL-on-amazon-linux-2.md).

**Untuk menginstal phpMyAdmin**

1. Pasang dependensi yang diperlukan.

   ```
   [ec2-user ~]$ sudo yum install php-mbstring php-xml -y
   ```

1. Mulai Ulang Apache.

   ```
   [ec2-user ~]$ sudo systemctl restart httpd
   ```

1. Mulai ulang `php-fpm`.

   ```
   [ec2-user ~]$ sudo systemctl restart php-fpm
   ```

1. Navigasi ke akar dokumen Apache di `/var/www/html`.

   ```
   [ec2-user ~]$ cd /var/www/html
   ```

1. Pilih paket sumber untuk phpMyAdmin rilis terbaru dari [https://www.phpmyadmin.net/downloads](https://www.phpmyadmin.net/downloads). Untuk mengunduh file secara langsung ke instans Anda, salin tautan dan tempel ke perintah **wget**, seperti dalam contoh ini:

   ```
   [ec2-user html]$ wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
   ```

1. Buat folder `phpMyAdmin` dan ekstrak paket ke folder tersebut dengan perintah berikut.

   ```
   [ec2-user html]$ mkdir phpMyAdmin && tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C phpMyAdmin --strip-components 1
   ```

1. Hapus *phpMyAdmin-latest-all-languages.tar.gz* tarball.

   ```
   [ec2-user html]$ rm phpMyAdmin-latest-all-languages.tar.gz
   ```

1.  (Opsional) Jika server MySQL tidak dijalankan, mulailah.

   ```
   [ec2-user ~]$ sudo systemctl start mariadb
   ```

1. Di browser web, ketik URL phpMyAdmin instalasi Anda. URL ini adalah alamat DNS publik (atau alamat IP publik) dari instans Anda diikuti dengan garis miring ke depan dan nama direktori instalasi Anda. Contoh:

   ```
   http://my.public.dns.amazonaws.com/phpMyAdmin
   ```

   Anda akan melihat halaman phpMyAdmin login:  
![\[Hasil mengetik URL phpMyAdmin instalasi Anda adalah layar phpMyAdmin login.\]](http://docs.aws.amazon.com/id_id/linux/al2/ug/images/phpmyadmin_login.png)

1. Masuk ke phpMyAdmin instalasi Anda dengan nama `root` pengguna dan kata sandi root MySQL yang Anda buat sebelumnya.

   Instalasi Anda harus tetap dikonfigurasi sebelum Anda menggunakannya. Sebaiknya Anda memulai dengan membuat file konfigurasi secara manual, sebagai berikut:

   1. Untuk memulai dengan file konfigurasi minimal, gunakan editor teks favorit Anda untuk membuat file baru, lalu salin isi `config.sample.inc.php` ke dalamnya.

   1. Simpan file seperti `config.inc.php` pada phpMyAdmin direktori yang berisi`index.php`.

   1. Lihat instruksi pembuatan pasca-file di bagian [Menggunakan skrip Pengaturan](https://docs.phpmyadmin.net/en/latest/setup.html#using-the-setup-script) dari instruksi phpMyAdmin penginstalan untuk pengaturan tambahan apa pun.

    Untuk informasi tentang penggunaan phpMyAdmin, lihat [Panduan phpMyAdmin Pengguna](http://docs.phpmyadmin.net/en/latest/user.html).

## Pemecahan Masalah
<a name="lamp-troubleshooting"></a>

Bagian ini memberikan saran untuk menyelesaikan masalah umum yang mungkin Anda hadapi saat menyiapkan server LAMP baru. 

### Saya tidak dapat terhubung ke server menggunakan peramban web
<a name="is_apache_on"></a>

Lakukan pemeriksaan berikut untuk melihat apakah server web Apache Anda berfungsi dan dapat diakses.
+ **Apakah server web berfungsi?**

  Anda dapat memverifikasi apakah **httpd** aktif dengan menjalankan perintah berikut:

  ```
  [ec2-user ~]$ sudo systemctl is-enabled httpd
  ```

  Jika proses **httpd** tidak berjalan, ulangi langkah-langkah yang dijelaskan dalam [Untuk menyiapkan server LAMP](#install_apache-2).
+ **Apakah firewall dikonfigurasi dengan benar?**

  Verifikasi bahwa grup keamanan untuk instans berisi aturan untuk mengizinkan lalu lintas HTTP pada port 80. Untuk informasi selengkapnya, lihat [Menambahkan aturan ke grup keamanan](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule).

### Saya tidak dapat terhubung ke server menggunakan HTTPS
<a name="is-https-enabled"></a>

Lakukan pemeriksaan berikut untuk melihat apakah server web Apache Anda dikonfigurasi untuk mendukung HTTPS.
+ **Apakah server web dikonfigurasi dengan benar?**

  Setelah Anda menginstal Apache, server dikonfigurasi untuk lalu lintas HTTP. Untuk mendukung HTTPS, aktifkan TLS pada server dan instal sertifikat SSL. Untuk informasi, lihat [Tutorial: SSL/TLS Konfigurasikan AL2](SSL-on-amazon-linux-2.md).
+ **Apakah firewall dikonfigurasi dengan benar?**

  Verifikasi bahwa grup keamanan untuk instans berisi aturan untuk mengizinkan lalu lintas HTTPS pada port 443. Untuk informasi selengkapnya, lihat [Menambahkan aturan ke grup keamanan](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule).

## Topik terkait
<a name="lamp-more-info"></a>

Untuk informasi lebih lanjut tentang cara memindahkan file ke instans Anda atau cara menginstal blog WordPress di server web Anda, lihat dokumentasi berikut:
+ [Transfer file ke instance Linux Anda menggunakan WinSCP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html#Transfer_WinSCP).
+ [Transfer file ke instance Linux menggunakan SCP klien](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-linux-inst-ssh.html#linux-file-transfer-scp).
+ [Tutorial: Tuan rumah WordPress blog di AL2](hosting-wordpress.md)

Untuk informasi selengkapnya tentang perintah dan perangkat lunak yang digunakan dalam tutorial ini, lihat halaman web berikut ini:
+ Server web Apache: [http://httpd.apache.org/](http://httpd.apache.org/)
+ Server basis data MariaDB: [https://mariadb.org/](https://mariadb.org/)
+ Bahasa pemrograman PHP: [http://php.net/](http://php.net/)
+ `chmod`Perintah: [https://en.wikipedia. org/wiki/Chmod](https://en.wikipedia.org/wiki/Chmod)
+ `chown`Perintah: [https://en.wikipedia. org/wiki/Chown](https://en.wikipedia.org/wiki/Chown)

Untuk informasi selengkapnya tentang cara mendaftarkan nama domain untuk server web Anda, atau mentransfer nama domain yang ada ke host ini, lihat [Membuat dan Memigrasikan Domain serta Subdomain ke Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/creating-migrating.html) dalam *Panduan Developer Amazon Route 53*.

# Tutorial: SSL/TLS Konfigurasikan AL2
<a name="SSL-on-amazon-linux-2"></a>

Secure Sockets Layer/Transport Layer Security (SSL/TLS) creates an encrypted channel between a web server and web client that protects data in transit from being eavesdropped on. This tutorial explains how to add support manually for SSL/TLSpada instans EC2 dengan AL2 dan server web Apache. Tutorial ini mengasumsikan bahwa Anda tidak menggunakan penyeimbang beban. Jika menggunakan Elastic Load Balancing, Anda dapat memilih untuk mengonfigurasi pemindahan SSL pada penyeimbang beban dengan menggunakan sertifikat dari [AWS Certificate Manager](https://aws.amazon.com/certificate-manager/) sebagai gantinya.

Untuk alasan historis, enkripsi web sering disebut hanya sebagai SSL. Sementara browser web masih mendukung SSL, protokol penerusnya TLS kurang rentan terhadap serangan. AL2menonaktifkan dukungan sisi server untuk semua versi SSL secara default. [Badan standar keamanan](https://www.ssl.com/article/deprecating-early-tls/) menganggap TLS 1.0 tidak aman. TLS 1.0 dan TLS 1.1 secara resmi [usang](https://datatracker.ietf.org/doc/rfc8996/) pada Maret 2021. Tutorial ini berisi panduan yang secara eksklusif didasarkan pada pengaktifan TLS 1.2. TLS 1.3 diselesaikan pada tahun 2018 dan tersedia AL2 selama perpustakaan TLS yang mendasarinya (OpenSSL dalam tutorial ini) didukung dan diaktifkan. [Klien harus mendukung TLS 1.2 atau versi yang lebih baru pada 28 Juni 2023](https://aws.amazon.com/blogs/security/tls-1-2-required-for-aws-endpoints/). Untuk informasi selengkapnya tentang standar enkripsi yang diperbarui, lihat [RFC 7568](https://tools.ietf.org/html/rfc7568) dan [RFC 8446](https://tools.ietf.org/html/rfc8446).

Tutorial ini mengacu pada enkripsi web modern hanya sebagai TLS.

**penting**  
Prosedur ini dimaksudkan untuk digunakan dengan AL2. Kami juga berasumsi bahwa Anda memulai dengan instans Amazon EC2 baru. Jika Anda mencoba menyiapkan instans EC2 yang menjalankan distribusi yang berbeda, atau instance yang menjalankan versi lama AL2, beberapa prosedur dalam tutorial ini mungkin tidak berfungsi. Untuk Ubuntu, lihat dokumentasi komunitas berikut ini: [Buka SSL di Ubuntu](https://help.ubuntu.com/community/OpenSSL). Untuk Red Hat Enterprise Linux, lihat yang berikut ini: [Menyiapkan Server Web Apache HTTP](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/deploying_different_types_of_servers/setting-apache-http-server_deploying-different-types-of-servers). Untuk distribusi lain, lihat dokumentasi spesifik mereka.

**catatan**  
Atau, Anda dapat menggunakan AWS Certificate Manager (ACM) untuk kantong AWS Nitro, yang merupakan aplikasi enclave yang memungkinkan Anda menggunakan SSL/TLS sertifikat publik dan pribadi dengan aplikasi web dan server Anda yang berjalan di instans Amazon EC2 dengan Nitro Enclave. AWS Nitro Enclave adalah kemampuan Amazon EC2 yang memungkinkan pembuatan lingkungan komputasi terisolasi untuk melindungi dan memproses data yang sangat sensitif dengan aman, seperti sertifikat dan kunci pribadi. SSL/TLS   
ACM for Nitro Enclave bekerja dengan **nginx** yang berjalan di instans Amazon EC2 Linux Anda untuk membuat kunci privat, mendistribusikan sertifikat dan kunci privat, dan mengelola perpanjangan sertifikat.  
Untuk menggunakan ACM for Nitro Enclave, Anda harus menggunakan instans Linux mendukung enclave.  
Untuk informasi lebih lanjut, lihat [Apa itu Enklaf AWS Nitro?](https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html) dan [AWS Certificate Manager untuk Enklaf Nitro di Panduan Pengguna *AWS Nitro* Enclave](https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave-refapp.html).

**Topics**
+ [Prasyarat](#ssl_prereq)
+ [Langkah 1: Aktifkan TLS di server](#ssl_enable)
+ [Langkah 2: Mendapatkan sertifikat yang ditandatangani CA](#ssl_certificate)
+ [Langkah 3: Menguji dan memperkuat konfigurasi keamanan](#ssl_test)
+ [Pemecahan Masalah](#troubleshooting)

## Prasyarat
<a name="ssl_prereq"></a>

Sebelum memulai tutorial ini, selesaikan langkah-langkah berikut:
+ Luncurkan AL2 instans yang didukung Amazon EBS. Untuk informasi selengkapnya, lihat [Meluncurkan instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html) di *Panduan Pengguna Amazon EC2*.
+ Konfigurasikan grup keamanan Anda agar instans Anda dapat menerima koneksi di port TCP berikut: 
  + SSH (port 22)
  + HTTP (port 80)
  + HTTPS (port 443)

  Untuk informasi selengkapnya, lihat [Aturan grup keamanan](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules.html) di *Panduan Pengguna Amazon EC2*.
+ Instal server web Apache. Untuk step-by-step petunjuk, lihat [Tutorial: Menginstal Server Web LAMP pada AL2](ec2-lamp-amazon-linux-2.md). Hanya paket httpd dan dependensinya yang diperlukan, jadi Anda dapat mengabaikan instruksi yang melibatkan PHP dan MariaDB.
+ Untuk mengidentifikasi dan mengautentikasi situs web, infrastruktur kunci publik (PKI) TLS mengandalkan Sistem Nama Domain (DNS). Untuk menggunakan instans EC2 guna meng-host situs web publik, Anda perlu mendaftarkan nama domain untuk server web atau mentransfer nama domain yang ada ke host Amazon EC2 Anda. Berbagai pendaftaran domain pihak ketiga dan layanan hosting DNS tersedia untuk ini, atau Anda dapat menggunakan [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html). 

## Langkah 1: Aktifkan TLS di server
<a name="ssl_enable"></a>

**Opsi: Selesaikan tutorial ini menggunakan otomatisasi**  
Untuk menyelesaikan tutorial ini menggunakan AWS Systems Manager Otomasi alih-alih tugas-tugas berikut, jalankan [dokumen otomatisasi](https://console.aws.amazon.com/systems-manager/documents/AWSDocs-Configure-SSL-TLS-AL2/).

Prosedur ini membawa Anda melalui proses pengaturan TLS AL2 dengan sertifikat digital yang ditandatangani sendiri. 

**catatan**  
Sertifikat yang ditandatangani sendiri dapat diterima untuk pengujian, tetapi bukan produksi. Jika Anda menampilkan sertifikat yang ditandatangani sendiri ke internet, pengunjung ke situs Anda disambut oleh peringatan keamanan. 

**Untuk mengaktifkan TLS di server**

1. [Sambungkan ke instans Anda](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html) dan konfirmasi bahwa Apache sedang berjalan.

   ```
   [ec2-user ~]$ sudo systemctl is-enabled httpd
   ```

   Jika nilai yang dikembalikan bukan "diaktifkan", mulai Apache dan atur Apache untuk memulai setiap kali sistem booting.

   ```
   [ec2-user ~]$ sudo systemctl start httpd && sudo systemctl enable httpd
   ```

1. Untuk memastikan bahwa semua paket perangkat lunak Anda telah diperbarui, lakukan pembaruan perangkat lunak cepat di instans Anda. Proses ini mungkin memerlukan waktu beberapa menit, tetapi penting untuk memastikan bahwa Anda memiliki pembaruan keamanan dan perbaikan bug terbaru.
**catatan**  
Opsi `-y` akan menginstal pembaruan tanpa meminta konfirmasi. Jika Anda ingin memeriksa pembaruan sebelum menginstal, Anda dapat menghapus opsi ini.

   ```
   [ec2-user ~]$ sudo yum update -y
   ```

1. Setelah instans Anda diperbarui, tambahkan dukungan TLS dengan menginstal modul Apache `mod_ssl`.

   ```
   [ec2-user ~]$ sudo yum install -y mod_ssl
   ```

   Instans Anda sekarang memiliki file berikut yang Anda gunakan untuk mengonfigurasi server aman dan membuat sertifikat untuk pengujian:
   +  `/etc/httpd/conf.d/ssl.conf` 

     File konfigurasi untuk mod\$1ssl. File tersebut berisi *arahan* yang memberi tahu Apache tempat untuk menemukan kunci dan sertifikat enkripsi, versi protokol TLS yang akan dimungkinkan, dan cipher enkripsi yang akan diterima. 
   + `/etc/pki/tls/certs/make-dummy-cert`

     Skrip untuk membuat sertifikat X.509 yang ditandatangani sendiri dan kunci privat untuk host server Anda. Sertifikat ini berguna untuk menguji apakah Apache telah diatur dengan benar untuk menggunakan TLS. Karena tidak menawarkan bukti identitas, sertifikat ini tidak boleh digunakan dalam produksi. Jika digunakan dalam produksi, sertifikat ini memicu peringatan di peramban Web.

1. Jalankan skrip untuk membuat sertifikat tiruan yang ditandatangani sendiri dan kunci untuk pengujian.

   ```
   [ec2-user ~]$ cd /etc/pki/tls/certs
   sudo ./make-dummy-cert localhost.crt
   ```

   Ini menghasilkan file baru `localhost.crt` dalam direktori `/etc/pki/tls/certs/`. Nama file yang ditentukan cocok dengan default yang ditetapkan dalam arahan **SSLCertificateFile** di `/etc/httpd/conf.d/ssl.conf`. 

   File ini berisi sertifikat yang ditandatangani sendiri dan kunci privat sertifikat. Apache memerlukan sertifikat dan kunci dalam format PEM, yang terdiri dari karakter ASCII berenkode Base64 yang dibingkai dengan baris “BEGIN” dan “END” seperti dalam contoh singkat berikut.

   ```
   -----BEGIN PRIVATE KEY-----
   MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQD2KKx/8Zk94m1q
   3gQMZF9ZN66Ls19+3tHAgQ5Fpo9KJDhzLjOOCI8u1PTcGmAah5kEitCEc0wzmNeo
   BCl0wYR6G0rGaKtK9Dn7CuIjvubtUysVyQoMVPQ97ldeakHWeRMiEJFXg6kZZ0vr
   GvwnKoMh3DlK44D9dX7IDua2PlYx5+eroA+1Lqf32ZSaAO0bBIMIYTHigwbHMZoT
   ...
   56tE7THvH7vOEf4/iUOsIrEzaMaJ0mqkmY1A70qQGQKBgBF3H1qNRNHuyMcPODFs
   27hDzPDinrquSEvoZIggkDMlh2irTiipJ/GhkvTpoQlv0fK/VXw8vSgeaBuhwJvS
   LXU9HvYq0U6O4FgD3nAyB9hI0BE13r1HjUvbjT7moH+RhnNz6eqqdscCS09VtRAo
   4QQvAqOa8UheYeoXLdWcHaLP
   -----END PRIVATE KEY-----                    
   
   -----BEGIN CERTIFICATE-----
   MIIEazCCA1OgAwIBAgICWxQwDQYJKoZIhvcNAQELBQAwgbExCzAJBgNVBAYTAi0t
   MRIwEAYDVQQIDAlTb21lU3RhdGUxETAPBgNVBAcMCFNvbWVDaXR5MRkwFwYDVQQK
   DBBTb21lT3JnYW5pemF0aW9uMR8wHQYDVQQLDBZTb21lT3JnYW5pemF0aW9uYWxV
   bml0MRkwFwYDVQQDDBBpcC0xNzItMzEtMjAtMjM2MSQwIgYJKoZIhvcNAQkBFhVy
   ...
   z5rRUE/XzxRLBZOoWZpNWTXJkQ3uFYH6s/sBwtHpKKZMzOvDedREjNKAvk4ws6F0
   CuIjvubtUysVyQoMVPQ97ldeakHWeRMiEJFXg6kZZ0vrGvwnKoMh3DlK44D9dlU3
   WanXWehT6FiSZvB4sTEXXJN2jdw8g+sHGnZ8zCOsclknYhHrCVD2vnBlZJKSZvak
   3ZazhBxtQSukFMOnWPP2a0DMMFGYUHOd0BQE8sBJxg==
   -----END CERTIFICATE-----
   ```

   Nama dan ekstensi file mudah dan tidak memengaruhi fungsi. Misalnya, Anda dapat meminta sertifikat `cert.crt`, `cert.pem`, atau nama file lainnya, selama arahan terkait dalam file `ssl.conf` menggunakan nama yang sama.
**catatan**  
Ketika Anda mengganti file TLS default dengan file kustom milik Anda sendiri, pastikan file tersebut dalam format PEM. 

1. Buka file `/etc/httpd/conf.d/ssl.conf` menggunakan editor teks favorit Anda (seperti **vim** atau **nano**) sebagai pengguna root dan komentari baris berikut, karena sertifikat tiruan yang ditandatangani sendiri juga berisi kunci. Jika Anda tidak memberikan komentar pada baris ini sebelum menyelesaikan langkah berikutnya, layanan Apache gagal dimulai.

   ```
   SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
   ```

1. Mulai Ulang Apache.

   ```
   [ec2-user ~]$ sudo systemctl restart httpd
   ```
**catatan**  
Pastikan bahwa TCP port 443 dapat diakses di instans EC2 Anda, seperti yang dijelaskan sebelumnya.

1. Server web Apache Anda sekarang dapat mendukung HTTPS (HTTP aman) melalui port 443. Uji web tersebut dengan memasukkan alamat IP atau nama domain instans EC2 Anda yang sepenuhnya memenuhi syarat ke dalam bilah URL peramban dengan prefiks **https://**.

   Karena Anda terhubung ke situs dengan sertifikat host yang ditandatangani sendiri dan tidak tepercaya, peramban Anda dapat menampilkan serangkaian peringatan keamanan. Abaikan peringatan tersebut dan lanjutkan ke situs. 

   Jika halaman uji Apache default terbuka, berarti Anda telah berhasil mengonfigurasi TLS di server Anda. Semua data yang masuk antara peramban dan server sekarang terenkripsi.
**catatan**  
Untuk mencegah pengunjung situs menghadapi layar peringatan, Anda harus mendapatkan sertifikat tepercaya yang ditandatangani CA yang tidak hanya mengenkripsi, tetapi juga mengautentikasi Anda sebagai pemilik situs. 

## Langkah 2: Mendapatkan sertifikat yang ditandatangani CA
<a name="ssl_certificate"></a>

Anda dapat menggunakan proses berikut untuk mendapatkan sertifikat yang ditandatangani CA:
+ Membuat permintaan penandatanganan sertifikat (CSR) dari kunci privat
+ Kirim CSR ke otoritas sertifikasi (CA)
+ Dapatkan sertifikat host yang ditandatangani
+ Konfigurasikan Apache untuk menggunakan sertifikat

Sertifikat host TLS X.509 yang ditandatangani sendiri bersifat identik secara kriptologi dengan sertifikat yang ditandatangani CA. Perbedaannya bersifat sosial, bukan matematika. CA menjanjikan, setidaknya, untuk memvalidasi kepemilikan domain sebelum menerbitkan sertifikat kepada pemohon. Setiap browser web berisi daftar yang CAs dipercaya oleh vendor browser untuk melakukan hal ini. Sertifikat X.509 utamanya terdiri dari kunci publik yang sesuai dengan kunci server privat Anda, dan tanda tangan oleh CA yang terhubung secara kriptografi dengan kunci publik. Ketika browser terhubung ke server web melalui HTTPS, server menyajikan sertifikat untuk browser untuk memeriksa daftar tepercaya CAs. Jika penandatangan ada di daftar, atau dapat diakses melalui *rantai kepercayaan* yang terdiri dari penanda tangan tepercaya lainnya, peramban menegosiasikan saluran data terenkripsi cepat dengan server dan memuat halaman. 

Sertifikat umumnya memerlukan biaya karena tenaga kerja yang terlibat dalam memvalidasi permintaan tersebut, jadi tidak masalah untuk mempertimbangkan berbagai kemungkinan. Beberapa CAs menawarkan sertifikat tingkat dasar secara gratis. Yang paling menonjol dari ini CAs adalah proyek [Let's Encrypt](https://letsencrypt.org/), yang juga mendukung otomatisasi proses pembuatan dan pembaruan sertifikat. Untuk informasi selengkapnya tentang penggunaan sertifikat Let's Encrypt, lihat [Mendapatkan Certbot](https://eff-certbot.readthedocs.io/en/stable/install.html).

Jika Anda berencana untuk menawarkan layanan kelas komersial, [AWS Certificate Manager](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) adalah pilihan yang baik.

Yang mendasari sertifikat host adalah kuncinya. Sejak tahun 2019, [pemerintah](http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-57pt1r4.pdf) dan kelompok [industri](https://cabforum.org/wp-content/uploads/CA-Browser-Forum-BR-1.6.5.pdf) merekomendasikan penggunaan ukuran kunci minimum (modulus) sebesar 2048 bit untuk kunci RSA yang ditujukan untuk melindungi dokumen, hingga tahun 2030. Ukuran modulus default yang dihasilkan oleh OpenSSL AL2 in adalah 2048 bit, yang cocok untuk digunakan dalam sertifikat yang ditandatangani CA. Dalam prosedur berikut, langkah opsional yang disediakan bagi mereka yang menginginkan kunci yang disesuaikan, misalnya, kunci dengan modulus yang lebih besar atau menggunakan algoritma enkripsi berbeda.

**penting**  
Instruksi untuk memperoleh sertifikat host yang ditandatangani CA ini tidak berfungsi kecuali Anda memiliki domain DNS yang terdaftar dan di-hosting.

**Untuk mendapatkan sertifikat yang ditandatangani CA**

1.  [Connect](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html) ke instans Anda dan navigasikan ke/etc/pki/tls/private/. Ini adalah direktori tempat Anda menyimpan kunci privat server untuk TLS. Jika Anda memilih untuk menggunakan kunci host yang ada untuk membuat CSR, lewati ke Langkah 3.

1. (Opsional) Buat kunci privat baru. Berikut ini adalah beberapa contoh konfigurasi kunci. Setiap kunci yang dihasilkan dapat berfungsi dengan server web Anda, tetapi memiliki tingkat dan tipe keamanan yang berbeda-beda dalam penerapannya.
   + **Contoh 1:** Buat kunci host RSA default. File yang dihasilkan, **custom.key**, adalah kunci privat RSA 2048-bit.

     ```
     [ec2-user ~]$ sudo openssl genrsa -out custom.key
     ```
   + **Contoh 2:** Buat kunci RSA yang lebih kuat dengan modulus yang lebih besar. File yang dihasilkan, **custom.key**, adalah kunci privat RSA 4096-bit.

     ```
     [ec2-user ~]$ sudo openssl genrsa -out custom.key 4096
     ```
   + **Contoh 3:** Buat kunci RSA yang dienkripsi 4096-bit dengan perlindungan kata sandi. File yang dihasilkan, **custom.key**, adalah kunci privat RSA 4096-bit yang dienkripsi dengan cipher AES-128.
**penting**  
Mengenkripsi kunci akan memberikan keamanan yang lebih besar, tetapi karena kunci terenkripsi memerlukan kata sandi, layanan yang bergantung pada kata sandi tersebut tidak dapat dimulai secara otomatis. Setiap kali menggunakan kunci ini, Anda harus memberikan kata sandi (dalam contoh sebelumnya, "abcde12345") melalui koneksi SSH.

     ```
     [ec2-user ~]$ sudo openssl genrsa -aes128 -passout pass:abcde12345 -out custom.key 4096
     ```
   + **Contoh 4:** Buat kunci menggunakan cipher non-RSA. Kriptografi RSA dapat menjadi cukup lambat karena ukuran kunci publiknya, yang didasarkan pada produk dua angka utama yang besar. Namun, kunci untuk TLS yang menggunakan cipher non-RSA masih dapat dibuat. Kunci-kunci berdasarkan matematika kurva eliptik ukurannya lebih kecil dan secara komputasi lebih cepat ketika memberikan tingkat keamanan yang setara.

     ```
     [ec2-user ~]$ sudo openssl ecparam -name prime256v1 -out custom.key -genkey
     ```

     Hasilnya adalah kunci privat kurva eliptik 256-bit menggunakan prime256v1, "kurva yang diberi nama" yang didukung OpenSSL. Kekuatan kriptografinya sedikit lebih besar dari kunci RSA 2048-bit, [menurut NIST](http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-57pt1r4.pdf).
**catatan**  
Tidak semua CAs memberikan tingkat dukungan yang sama untuk elliptic-curve-based kunci seperti untuk kunci RSA.

   Pastikan bahwa kunci pribadi baru memiliki kepemilikan dan izin yang sangat ketat (owner=root, group=root, hanya untuk pemilik). read/write Perintah akan seperti yang ditunjukkan dalam contoh berikut.

   ```
   [ec2-user ~]$ sudo chown root:root custom.key
   [ec2-user ~]$ sudo chmod 600 custom.key
   [ec2-user ~]$ ls -al custom.key
   ```

   Perintah sebelumnya akan memberikan hasil berikut.

   ```
   -rw------- root root custom.key
   ```

    Setelah membuat dan mengonfigurasikan kunci yang memuaskan, Anda dapat membuat CSR. 

1. Buat CSR dengan menggunakan kunci yang Anda kehendaki. Contoh berikut menggunakan **custom.key**.

   ```
   [ec2-user ~]$ sudo openssl req -new -key custom.key -out csr.pem
   ```

   OpenSSL membuka dialog dan meminta Anda memasukkan informasi yang ditampilkan dalam tabel berikut. Semua kolom kecuali **Nama Umum** adalah opsional untuk sertifikat host dasar yang divalidasi domain.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/linux/al2/ug/SSL-on-amazon-linux-2.html)

   Terakhir, OpenSSL meminta kata sandi tantangan opsional dari Anda. Kata sandi ini hanya berlaku untuk CSR dan transaksi antara Anda dan CA Anda, maka ikutilah rekomendasi CA tentang hal ini dan bidang pilihan lainnya, nama perusahaan opsional. Kata sandi tantangan CSR tidak berpengaruh pada operasi server.

   File yang dihasilkan **csr.pem** berisi kunci publik, tanda tangan digital kunci publik Anda, dan metadata yang Anda masukkan.

1. Kirimkan CSR ke CA. Hal ini biasanya mencakup membuka file CSR Anda dalam sebuah editor teks dan menyalin konten ke dalam bentuk web. Pada saat ini, Anda mungkin diminta untuk memberikan satu atau lebih nama alternatif subjek (SANs) untuk ditempatkan pada sertifikat. Jika **www.example.com** adalah nama umum, **example.com** akan menjadi SAN yang baik, dan sebaliknya. Pengunjung ke situs Anda yang memasukkan nama-nama ini akan melihat koneksi tanpa kesalahan. Jika formulir web CA Anda mengizinkannya, sertakan nama umum dalam daftar SANs. Beberapa CAs memasukkannya secara otomatis.

   Setelah permintaan Anda disetujui, Anda menerima sertifikat host baru yang ditandatangani oleh CA. Anda mungkin juga diminta mengunduh file *sertifikat menengah* yang berisi sertifikat tambahan yang diperlukan untuk melengkapi rantai kepercayaan CA. 
**catatan**  
CA Anda mungkin mengirimi Anda file dalam banyak format yang dimaksudkan untuk berbagai tujuan. Untuk tutorial ini, Anda hanya dapat menggunakan file sertifikat dalam format PEM, yang biasanya (tetapi tidak selalu) ditandai dengan ekstensi file `.pem` atau `.crt`. Jika Anda tidak yakin file mana yang akan digunakan, buka file dengan editor teks dan temukan yang berisi satu atau beberapa blok yang dimulai dengan baris berikut.  

   ```
   - - - - -BEGIN CERTIFICATE - - - - - 
   ```
File juga harus berakhir dengan baris berikut.  

   ```
   - - - -END CERTIFICATE - - - - -
   ```
Anda juga dapat menguji file pada baris perintah seperti yang ditunjukkan pada hal berikut.  

   ```
   [ec2-user certs]$ openssl x509 -in certificate.crt -text
   ```
Pastikan baris ini muncul di file. Jangan gunakan file yang diakhiri dengan `.p7b`, `.p7c`, atau ekstensi file serupa.

1. Letakkan sertifikat baru yang ditandatangani CA dan setiap sertifikat menengah di direktori `/etc/pki/tls/certs`.
**catatan**  
Ada beberapa cara untuk mengunggah sertifikat baru Anda ke instans EC2 Anda, tetapi cara yang paling sederhana dan informatif adalah dengan membuka teks editor (misalnya, vi, nano, atau notepad) di komputer lokal dan instans Anda, lalu menyalin dan menempelkan konten file di antaranya. Anda memerlukan izin [sudo] root ketika melakukan operasi ini pada instans EC2. Dengan cara ini, Anda dapat segera melihat apakah ada masalah perizinan atau jalur. Namun, berhati-hatilah untuk tidak menambahkan baris tambahan saat menyalin konten, atau untuk mengubahnya dengan cara apa pun. 

   Dari dalam `/etc/pki/tls/certs` direktori, periksa apakah pengaturan kepemilikan file, grup, dan izin cocok dengan AL2 default yang sangat ketat (owner=root, group=root, hanya untuk pemilik). read/write Contoh berikut menunjukkan perintah yang dapat digunakan. 

   ```
   [ec2-user certs]$ sudo chown root:root custom.crt
   [ec2-user certs]$ sudo chmod 600 custom.crt
   [ec2-user certs]$ ls -al custom.crt
   ```

   Perintah ini akan memberikan hasil berikut. 

   ```
   -rw------- root root custom.crt
   ```

   Izin untuk file sertifikat menengah tidak terlalu ketat (pemilik=root, grup=root, pemilik dapat menulis, grup dapat membaca, dunia dapat membaca). Contoh berikut menunjukkan perintah yang dapat digunakan. 

   ```
   [ec2-user certs]$ sudo chown root:root intermediate.crt
   [ec2-user certs]$ sudo chmod 644 intermediate.crt
   [ec2-user certs]$ ls -al intermediate.crt
   ```

   Perintah ini akan memberikan hasil berikut.

   ```
   -rw-r--r-- root root intermediate.crt
   ```

1. Tempatkan kunci privat yang Anda gunakan untuk membuat CSR di direktori `/etc/pki/tls/private/`. 
**catatan**  
Ada beberapa cara untuk mengunggah kunci kustom Anda ke instans EC2, tetapi cara yang paling sederhana dan informatif adalah dengan membuka teks editor (misalnya, vi, nano, atau notepad) di komputer lokal dan instans Anda, lalu menyalin dan menempelkan konten file di antaranya. Anda memerlukan izin [sudo] root ketika melakukan operasi ini pada instans EC2. Dengan cara ini, Anda dapat segera melihat apakah ada masalah perizinan atau jalur. Namun, berhati-hatilah untuk tidak menambahkan baris tambahan saat menyalin konten, atau untuk mengubahnya dengan cara apa pun.

   Dari dalam `/etc/pki/tls/private` direktori, gunakan perintah berikut untuk memverifikasi bahwa kepemilikan file, grup, dan pengaturan izin cocok dengan AL2 default yang sangat ketat (owner=root, group=root, hanya untuk pemilik). read/write 

   ```
   [ec2-user private]$ sudo chown root:root custom.key
   [ec2-user private]$ sudo chmod 600 custom.key
   [ec2-user private]$ ls -al custom.key
   ```

   Perintah ini akan memberikan hasil berikut.

   ```
   -rw------- root root custom.key
   ```

1. Edit `/etc/httpd/conf.d/ssl.conf` untuk mencerminkan sertifikat dan file kunci baru Anda.

   1. Berikan jalur dan nama file sertifikat host yang ditandatangani CA dalam arahan `SSLCertificateFile` Apache:

      ```
      SSLCertificateFile /etc/pki/tls/certs/custom.crt
      ```

   1. Jika Anda menerima file sertifikat menengah (`intermediate.crt` dalam contoh ini), berikan jalur dan nama file menggunakan arahan `SSLCACertificateFile`Apache:

      ```
      SSLCACertificateFile /etc/pki/tls/certs/intermediate.crt
      ```
**catatan**  
Beberapa CAs menggabungkan sertifikat host dan sertifikat perantara dalam satu file, membuat `SSLCACertificateFile` arahan tidak diperlukan. Baca petunjuk yang diberikan oleh CA Anda.

   1. Berikan jalur dan nama file kunci privat (`custom.key` dalam contoh ini) dalam arahan `SSLCertificateKeyFile` Apache:

      ```
      SSLCertificateKeyFile /etc/pki/tls/private/custom.key
      ```

1. Simpan `/etc/httpd/conf.d/ssl.conf` dan mulai ulang Apache.

   ```
   [ec2-user ~]$ sudo systemctl restart httpd
   ```

1. Uji server Anda dengan memasukkan nama domain ke dalam bilah URL peramban menggunakan prefiks `https://`. Peramban Anda harus memuat halaman uji melalui HTTPS tanpa menghasilkan kesalahan.

## Langkah 3: Menguji dan memperkuat konfigurasi keamanan
<a name="ssl_test"></a>

Setelah TLS Anda beroperasi dan terbuka ke publik, Anda harus menguji seberapa kuat TLS itu sesungguhnya. Hal ini mudah dilakukan menggunakan layanan daring seperti [Qualys SSL Labs](https://www.ssllabs.com/ssltest/analyze.html), yang melakukan analisis yang bebas dan menyeluruh atas pengaturan keamanan Anda. Berdasarkan hasilnya, Anda dapat memutuskan untuk memperkuat konfigurasi keamanan default dengan mengendalikan protokol mana yang diterima, cipher mana yang lebih disukai, dan hal mana yang tidak Anda sertakan. Untuk informasi selengkapnya, lihat [cara Qualys merumuskan nilainya](https://github.com/ssllabs/research/wiki/SSL-Server-Rating-Guide).

**penting**  
Pengujian di dunia nyata sangat penting untuk keamanan server Anda. Kesalahan konfigurasi kecil dapat menyebabkan pelanggaran keamanan serius dan hilangnya data. Karena praktik keamanan yang direkomendasikan terus berubah sebagai respons terhadap penelitian dan ancaman yang muncul, audit keamanan secara berkala sangat penting untuk administrasi server yang baik. 

Pada situs [Qualys SSL Labs](https://www.ssllabs.com/ssltest/analyze.html), masukkan nama domain server Anda yang sepenuhnya memenuhi syarat, dalam formulir **www.example.com**. Setelah sekitar dua menit, Anda menerima nilai (dari A sampai F) untuk situs Anda dan detail perincian dari temuan. Tabel berikut merangkum laporan untuk domain dengan pengaturan yang identik dengan konfigurasi Apache default AL2, dan dengan sertifikat Certbot default. 


|  |  | 
| --- |--- |
| Penilaian secara keseluruhan | B | 
| Sertifikat | 100% | 
| Dukungan protokol | 95% | 
| Pertukaran kunci | 70% | 
| Kekuatan cipher | 90% | 

Meskipun gambaran umum menunjukkan bahwa konfigurasi sebagian besar baik, laporan terperinci menunjukkan beberapa potensi masalah, yang tercantum dalam urutan keparahan:

✗ ** RC4 Cipher didukung untuk digunakan oleh browser lama tertentu**. Cipher adalah inti matematika dari algoritma enkripsi. RC4[, cipher cepat yang digunakan untuk mengenkripsi aliran data TLS, diketahui memiliki beberapa kelemahan serius.](http://www.imperva.com/docs/hii_attacking_ssl_when_using_rc4.pdf) Kecuali jika Anda memiliki alasan yang sangat bagus untuk mendukung peramban terdahulu, Anda harus menonaktifkan cipher ini.

✗ **Versi TLS lama dapat didukung.** Konfigurasi ini mendukung TLS 1.0 (sudah usang) dan TLS 1.1 (akan usang). Hanya TLS 1.2 yang telah direkomendasikan sejak 2018.

✗ **Forward secrecy tidak sepenuhnya didukung.** [Forward secrecy](https://en.wikipedia.org/wiki/Forward_secrecy) adalah fitur algoritma yang mengenkripsi menggunakan kunci sesi sementara (ephemeral) yang berasal dari kunci privat. Artinya, dalam praktiknya, penyerang tidak dapat mendekripsi data HTTPS bahkan jika mereka memiliki kunci privat jangka panjang server web.

**Untuk mengoreksi dan memperkuat konfigurasi TLS untuk masa mendatang**

1. Buka file konfigurasi `/etc/httpd/conf.d/ssl.conf` dalam editor teks dan berikan komentar pada baris berikut dengan memasukkan “\$1” di awal baris.

   ```
   #SSLProtocol all -SSLv3
   ```

1. Tambahkan arahan berikut:

   ```
   #SSLProtocol all -SSLv3
   SSLProtocol -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2
   ```

   Arahan ini secara eksplisit menonaktifkan SSL versi 2 dan 3, serta TLS versi 1.0 dan 1.1. Server sekarang menolak untuk menerima koneksi terenkripsi dengan klien menggunakan apa pun selain TLS 1.2. Kata-kata yang bertele-tele dalam arahan, bagi pembaca manusia, justru mengungkapkan dengan lebih jelas tentang apa yang akan dilakukan server sesuai konfigurasinya.
**catatan**  
Menonaktifkan TLS versi 1.0 dan 1.1 dengan cara ini akan memblokir sebagian kecil peramban web lama dari akses ke situs Anda.

**Untuk mengubah daftar cipher yang diperbolehkan**

1. Di file konfigurasi `/etc/httpd/conf.d/ssl.conf`, temukan bagian dengan arahan **SSLCipherSuite** dan berikan komentar pada baris yang sudah ada dengan memasukkan “\$1” di awal baris.

   ```
   #SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
   ```

1. Tentukan suite cipher yang eksplisit dan urutan cipher yang memprioritaskan forward secrecy serta menghindari cipher yang tidak aman. Arahan `SSLCipherSuite` yang digunakan di sini didasarkan pada output dari [Mozilla SSL Configuration Generator](https://mozilla.github.io/server-side-tls/ssl-config-generator/), yang menyesuaikan konfigurasi TLS dengan perangkat lunak tertentu yang berjalan di server Anda. Pertama, tentukan Apache Anda dan versi OpenSSL dengan menggunakan output dari perintah berikut.

   ```
   [ec2-user ~]$ yum list installed | grep httpd
   
   [ec2-user ~]$ yum list installed | grep openssl
   ```

   Misalnya, jika informasi yang dikembalikan adalah Apache 2.4.34 dan 1.0.2, kita memasukkannya ke generator. Jika Anda memilih model kompatibilitas "modern", ini menciptakan arahan `SSLCipherSuite` yang secara agresif menegakkan keamanan, tetapi tetap berfungsi di sebagian besar peramban. Jika perangkat lunak Anda tidak mendukung konfigurasi modern, Anda dapat memperbarui perangkat lunak atau memilih konfigurasi "menengah".

   ```
   SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:
   ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:
   ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
   ```

   Cipher yang dipilih memiliki *ECDHE* dalam nama mereka, singkatan untuk *Elliptic Curve Diffie-Hellman Ephemeral *. Istilah *ephemeral* menunjukkan forward secrecy. Sebagai produk sampingan, cipher ini tidak mendukung. RC4

   Sebaiknya Anda menggunakan daftar cipher secara eksplisit alih-alih mengandalkan arahan yang ringkas atau default yang kontennya tidak dapat dilihat.

   Salin arahan yang dihasilkan ke `/etc/httpd/conf.d/ssl.conf`.
**catatan**  
Meskipun ditampilkan di sini pada beberapa baris untuk keterbacaan, arahan harus pada satu baris saat disalin ke `/etc/httpd/conf.d/ssl.conf`, dengan hanya tanda titik dua (tanpa spasi) di antara nama-nama cipher.

1. Terakhir, batalkan komentar pada baris berikut dengan menghapus “\$1” di awal baris.

   ```
   #SSLHonorCipherOrder on
   ```

   Arahan ini memaksa server untuk lebih memilih cipher berperingkat tinggi, termasuk (dalam hal ini) cipher yang mendukung forward secrecy. Dengan arahan yang diaktifkan ini, server mencoba membangun koneksi aman yang kuat sebelum kembali ke ciphers yang diizinkan dengan keamanan lebih rendah.

Setelah menyelesaikan kedua prosedur ini, simpan perubahan ke `/etc/httpd/conf.d/ssl.conf` dan mulai ulang Apache.

Jika Anda menguji domain lagi di [Qualys SSL Labs](https://www.ssllabs.com/ssltest/analyze.html), Anda akan melihat bahwa RC4 kerentanan dan peringatan lainnya hilang dan ringkasannya terlihat seperti berikut ini.


|  |  | 
| --- |--- |
| Penilaian secara keseluruhan | A | 
| Sertifikat | 100% | 
| Dukungan protokol | 100% | 
| Pertukaran kunci | 90% | 
| Kekuatan cipher | 90% | 

Setiap pembaruan untuk OpenSSL memperkenalkan cipher baru dan menghapus dukungan untuk cipher lama. Simpan AL2 instans EC2 Anda up-to-date, perhatikan pengumuman keamanan dari [OpenSSL](https://www.openssl.org/), dan waspada terhadap laporan eksploitasi keamanan baru di pers teknis.

## Pemecahan Masalah
<a name="troubleshooting"></a>
+ **Server web My Apache tidak memulai kecuali jika saya memasukkan kata sandi**

  Ini adalah perkiraan perilaku jika Anda menginstal kunci server privat yang dienkripsi dan dilindungi dengan kata sandi.

  Anda dapat menghapus persyaratan enkripsi dan kata sandi dari kunci. Dengan asumsi bahwa Anda memiliki kunci RSA terenkripsi privat yang disebut `custom.key` dalam direktori default, dan kata sandi di sana adalah **abcde12345**, jalankan perintah berikut pada instans EC2 Anda untuk membuat versi kunci yang tidak terenkripsi.

  ```
  [ec2-user ~]$ cd /etc/pki/tls/private/
  [ec2-user private]$ sudo cp custom.key custom.key.bak
  [ec2-user private]$ sudo openssl rsa -in custom.key -passin pass:abcde12345 -out custom.key.nocrypt 
  [ec2-user private]$ sudo mv custom.key.nocrypt custom.key
  [ec2-user private]$ sudo chown root:root custom.key
  [ec2-user private]$ sudo chmod 600 custom.key
  [ec2-user private]$ sudo systemctl restart httpd
  ```

  Apache sekarang akan dimulai tanpa meminta kata sandi Anda.
+  **Saya mendapatkan kesalahan saat menjalankan sudo yum install -y mod\$1ssl.**

  Saat menginstal paket yang diperlukan untuk SSL, Anda mungkin melihat kesalahan yang serupa dengan yang berikut.

  ```
  Error: httpd24-tools conflicts with httpd-tools-2.2.34-1.16.amzn1.x86_64
  Error: httpd24 conflicts with httpd-2.2.34-1.16.amzn1.x86_64
  ```

  Ini biasanya berarti bahwa instans EC2 Anda tidak berjalan AL2. Tutorial ini hanya mendukung instance yang baru dibuat dari AL2 AMI resmi.

# Tutorial: Tuan rumah WordPress blog di AL2
<a name="hosting-wordpress"></a>

Prosedur berikut akan membantu Anda menginstal, mengkonfigurasi, dan mengamankan WordPress blog di instans AL2 Anda. Tutorial ini adalah pengantar yang baik untuk menggunakan Amazon EC2 karena Anda memiliki kontrol penuh atas server web yang meng-host WordPress blog Anda, yang tidak khas dengan layanan hosting tradisional.

Anda bertanggung jawab untuk memperbarui paket perangkat lunak dan memelihara patch keamanan untuk server Anda. Untuk WordPress instalasi yang lebih otomatis yang tidak memerlukan interaksi langsung dengan konfigurasi server web, CloudFormation layanan ini menyediakan WordPress template yang juga dapat membantu Anda memulai dengan cepat. Untuk informasi selengkapnya, lihat [Memulai](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/GettingStarted.Walkthrough.html) di *Panduan Pengguna AWS CloudFormation *. *Jika Anda memerlukan solusi ketersediaan tinggi dengan database terpisah, lihat [Menerapkan situs web dengan ketersediaan tinggi WordPress di Panduan Pengembang](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/php-hawordpress-tutorial.html).AWS Elastic Beanstalk *

**penting**  
Prosedur ini dimaksudkan untuk digunakan dengan AL2. Untuk informasi tentang distribusi lain selengkapnya, lihat dokumentasi spesifik tentangnya. Banyak langkah dalam tutorial ini yang tidak berfungsi pada instans Ubuntu. Untuk bantuan menginstal WordPress pada instance Ubuntu, lihat [WordPress](https://help.ubuntu.com/community/WordPress)di dokumentasi Ubuntu. Anda juga dapat menggunakan [CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/tutorials-wordpress-launch-instance.html)untuk menyelesaikan tugas ini di Amazon Linux, macOS, atau sistem Unix.

**Topics**
+ [Prasyarat](#hosting-wordpress-prereqs)
+ [Instal WordPress](#install-wordpress)
+ [Langkah selanjutnya](#wordpress-next-steps)
+ [Tolong\$1 Nama DNS publik saya berubah dan sekarang blog saya rusak](#wordpress-troubleshooting)

## Prasyarat
<a name="hosting-wordpress-prereqs"></a>

Tutorial ini mengasumsikan bahwa Anda telah meluncurkan sebuah AL2 instance dengan server web fungsional dengan dukungan PHP dan database (baik MySQL atau MariaDB) dengan mengikuti semua langkah dalam. [Tutorial: Instal server LAMP AL2](ec2-lamp-amazon-linux-2.md) Tutorial ini juga memiliki langkah-langkah untuk mengonfigurasi grup keamanan agar mengizinkan lalu lintas `HTTP` dan `HTTPS`, serta beberapa langkah untuk memastikan bahwa izin file diatur dengan benar untuk server web Anda. Untuk informasi tentang menambahkan aturan ke grup keamanan Anda, lihat [Menambahkan aturan ke grup keamanan](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule).

Kami sangat menyarankan Anda mengaitkan alamat IP Elastis (EIP) dengan instans yang Anda gunakan untuk meng-host WordPress blog. Ini mencegah alamat DNS publik untuk instans Anda agar tidak mengubah dan merusak instalasi. Jika Anda memiliki nama domain dan ingin menggunakannya untuk blog, Anda dapat memperbarui catatan DNS untuk nama domain tersebut agar mengarah ke alamat EIP Anda (untuk bantuan tentang hal ini, hubungi registrar domain Anda). Anda dapat memiliki satu alamat EIP yang dikaitkan dengan instans berjalan tanpa biaya. Untuk informasi selengkapnya, lihat [Alamat IP Elastis](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) di *Panduan Pengguna Amazon EC2*.

Jika Anda belum memiliki nama domain untuk blog Anda, Anda dapat mendaftarkan nama domain dengan Route 53 dan mengaitkan alamat EIP instans dengan nama domain Anda. Untuk informasi selengkapnya, lihat [Mendaftarkan nama domain dengan Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/registrar.html) di *Panduan Developer Amazon Route 53*.

## Instal WordPress
<a name="install-wordpress"></a>

**Opsi: Selesaikan tutorial ini menggunakan otomatisasi**  
Untuk menyelesaikan tutorial ini menggunakan AWS Systems Manager Otomasi alih-alih tugas-tugas berikut, jalankan [dokumen otomatisasi](https://console.aws.amazon.com/systems-manager/documents/AWSDocs-HostingAWordPressBlog/).

Connect ke instans Anda, dan unduh paket WordPress instalasi.

**Untuk mengunduh dan membuka zip paket WordPress instalasi**

1. Unduh paket WordPress instalasi terbaru dengan **wget** perintah. Perintah berikut harus selalu mengunduh rilis terbaru.

   ```
   [ec2-user ~]$ wget https://wordpress.org/latest.tar.gz
   ```

1. Ekstrak dan buka arsip paket instalasi. Folder instalasi diekstrak ke folder bernama `wordpress`.

   ```
   [ec2-user ~]$ tar -xzf latest.tar.gz
   ```<a name="create_user_and_database"></a>

**Untuk membuat pengguna database dan database untuk WordPress instalasi Anda**

 WordPress Instalasi Anda perlu menyimpan informasi, seperti posting blog dan komentar pengguna, dalam database. Prosedur ini membantu Anda membuat basis data blog dan pengguna yang berwenang untuk membaca dan menyimpan informasi ke dalamnya. 

1. Mulai server basis data.
   + 

     ```
     [ec2-user ~]$ sudo systemctl start mariadb
     ```

1. Masuk ke server basis data sebagai pengguna `root`. Masukkan kata sandi `root` basis data Anda saat diminta; ini mungkin berbeda dengan kata sandi sistem `root`, atau bahkan mungkin kosong jika Anda belum mengamankan server basis data Anda.

   Jika Anda belum mengamankan server basis data Anda, penting bagi Anda untuk melakukannya. Untuk informasi lebih lanjut, lihat [Untuk mengamankan server MariaDB](ec2-lamp-amazon-linux-2.md#securing-maria-db) (AL2).

   ```
   [ec2-user ~]$ mysql -u root -p
   ```

1. <a name="create_database_user"></a>Buat pengguna dan kata sandi untuk basis data MySQL. WordPressInstalasi Anda menggunakan nilai-nilai ini untuk berkomunikasi dengan database MySQL Anda. 

   Pastikan Anda membuat kata sandi yang kuat untuk pengguna. Jangan menggunakan tanda petik tunggal ( ' ) dalam kata sandi Anda, karena hal ini akan memutus perintah sebelumnya. Jangan menggunakan ulang kata sandi yang sudah ada, dan pastikan untuk menyimpan kata sandi ini di tempat yang aman.

   Masukkan perintah berikut, yang menggantikan nama pengguna dan kata sandi unik.

   ```
   CREATE USER 'wordpress-user'@'localhost' IDENTIFIED BY 'your_strong_password';
   ```

1. <a name="create_database"></a>Buat basis data Anda. Berikan nama yang deskriptif dan bermakna untuk basis data Anda, misalnya `wordpress-db`.
**catatan**  
Tanda baca yang mengelilingi nama basis data pada perintah di bawah ini disebut backtick. Kunci backtick (```) biasanya terletak di atas kunci `Tab` pada keyboard standar. Backtick tidak selalu diperlukan, tetapi memungkinkan Anda untuk menggunakan karakter ilegal, seperti tanda hubung, pada nama basis data.

   ```
   CREATE DATABASE `wordpress-db`;
   ```

1. Berikan hak istimewa penuh untuk database Anda kepada WordPress pengguna yang Anda buat sebelumnya.

   ```
   GRANT ALL PRIVILEGES ON `wordpress-db`.* TO "wordpress-user"@"localhost";
   ```

1. Hapus hak istimewa basis data untuk mengambil semua perubahan Anda.

   ```
   FLUSH PRIVILEGES;
   ```

1. Keluar dari klien `mysql`.

   ```
   exit
   ```

**Untuk membuat dan mengedit file wp-config.php**

Folder WordPress instalasi berisi file konfigurasi sampel yang disebut`wp-config-sample.php`. Dalam prosedur ini, Anda menyalin file ini dan mengeditnya agar sesuai dengan konfigurasi spesifik Anda.

1. Salin file `wp-config-sample.php` ke file yang bernama `wp-config.php`. Tindakan ini membuat file konfigurasi baru dan menyimpan file sampel asli secara utuh sebagai cadangan.

   ```
   [ec2-user ~]$ cp wordpress/wp-config-sample.php wordpress/wp-config.php
   ```

1. Edit file `wp-config.php` dengan editor teks favorit Anda (seperti **nano** atau **vim**) dan masukkan nilai untuk instalasi Anda. Jika Anda tidak memiliki editor teks favorit, `nano` cocok untuk pemula.

   ```
   [ec2-user ~]$ nano wordpress/wp-config.php
   ```

   1. Cari baris yang menentukan `DB_NAME` dan ubah `database_name_here` ke nama basis data yang Anda buat di [Step 4](#create_database) dari [Untuk membuat pengguna database dan database untuk WordPress instalasi Anda](#create_user_and_database).

      ```
      define('DB_NAME', 'wordpress-db');
      ```

   1. Cari baris yang menentukan `DB_USER` dan ubah `username_here` ke pengguna basis data yang Anda buat di [Step 3](#create_database_user) dari [Untuk membuat pengguna database dan database untuk WordPress instalasi Anda](#create_user_and_database).

      ```
      define('DB_USER', 'wordpress-user');
      ```

   1. Cari baris yang menentukan `DB_PASSWORD` dan ubah `password_here` ke kata sandi kuat yang Anda buat di [Step 3](#create_database_user) dari [Untuk membuat pengguna database dan database untuk WordPress instalasi Anda](#create_user_and_database).

      ```
      define('DB_PASSWORD', 'your_strong_password');
      ```

   1. Temukan bagian yang disebut `Authentication Unique Keys and Salts`. Ini `KEY` dan `SALT` nilai-nilai menyediakan lapisan enkripsi ke cookie browser yang disimpan WordPress pengguna di mesin lokal mereka. Pada dasarnya, menambahkan nilai yang panjang dan acak di sini membuat situs Anda lebih aman. Kunjungi [https://api.wordpress. org/secret-key/1.1/salt](https://api.wordpress.org/secret-key/1.1/salt/)/untuk secara acak menghasilkan satu set nilai kunci yang dapat Anda salin dan tempel ke `wp-config.php` file Anda. Untuk menempelkan teks ke terminal PuTTY, letakkan kursor di tempat Anda ingin menempelkan teks dan klik kanan mouse di dalam terminal PuTTY .

      Untuk informasi lebih lanjut tentang kunci keamanan, kunjungi [https://wordpress. org/support/article/editing-wp-config-php/\$1security -keys](https://wordpress.org/support/article/editing-wp-config-php/#security-keys).
**catatan**  
Nilai-nilai di bawah ini hanya sebagai contoh; jangan gunakan nilai ini untuk instalasi Anda.

      ```
      define('AUTH_KEY',         ' #U$$+[RXN8:b^-L 0(WU_+ c+WFkI~c]o]-bHw+)/Aj[wTwSiZ<Qb[mghEXcRh-');
      define('SECURE_AUTH_KEY',  'Zsz._P=l/|y.Lq)XjlkwS1y5NJ76E6EJ.AV0pCKZZB,*~*r ?6OP$eJT@;+(ndLg');
      define('LOGGED_IN_KEY',    'ju}qwre3V*+8f_zOWf?{LlGsQ]Ye@2Jh^,8x>)Y |;(^[Iw]Pi+LG#A4R?7N`YB3');
      define('NONCE_KEY',        'P(g62HeZxEes|LnI^i=H,[XwK9I&[2s|:?0N}VJM%?;v2v]v+;+^9eXUahg@::Cj');
      define('AUTH_SALT',        'C$DpB4Hj[JK:?{ql`sRVa:{:7yShy(9A@5wg+`JJVb1fk%_-Bx*M4(qc[Qg%JT!h');
      define('SECURE_AUTH_SALT', 'd!uRu#}+q#{f$Z?Z9uFPG.${+S{n~1M&%@~gL>U>NV<zpD-@2-Es7Q1O-bp28EKv');
      define('LOGGED_IN_SALT',   ';j{00P*owZf)kVD+FVLn-~ >.|Y%Ug4#I^*LVd9QeZ^&XmK|e(76miC+&W&+^0P/');
      define('NONCE_SALT',       '-97r*V/cgxLmp?Zy4zUU4r99QQ_rGs2LTd%P;|_e1tS)8_B/,.6[=UK<J_y9?JWG');
      ```

   1. Simpan file dan keluar dari editor teks Anda.

**Untuk menginstal WordPress file Anda di bawah root dokumen Apache**
+ Sekarang setelah Anda membuka ritsleting folder instalasi, membuat database dan pengguna MySQL, dan menyesuaikan file WordPress konfigurasi, Anda siap untuk menyalin file instalasi Anda ke root dokumen server web Anda sehingga Anda dapat menjalankan skrip instalasi yang menyelesaikan instalasi Anda. Lokasi file-file ini tergantung pada apakah Anda ingin WordPress blog Anda tersedia di root sebenarnya dari server web Anda (misalnya,`my.public.dns.amazonaws.com`) atau di subdirektori atau folder di bawah root (misalnya,`my.public.dns.amazonaws.com/blog`).
  + Jika Anda WordPress ingin menjalankan root dokumen Anda, salin isi direktori instalasi wordpress (tetapi bukan direktori itu sendiri) sebagai berikut: 

    ```
    [ec2-user ~]$ cp -r wordpress/* /var/www/html/
    ```
  + Jika Anda WordPress ingin menjalankan direktori alternatif di bawah root dokumen, pertama buat direktori itu, lalu salin file ke sana. Dalam contoh ini, WordPress akan berjalan dari direktori `blog`:

    ```
    [ec2-user ~]$ mkdir /var/www/html/blog
    [ec2-user ~]$ cp -r wordpress/* /var/www/html/blog/
    ```

**penting**  
Untuk tujuan keamanan, jika Anda tidak segera beralih ke prosedur berikutnya, hentikan server web Apache (`httpd`) sekarang. Setelah Anda memindahkan instalasi Anda di bawah root dokumen Apache, skrip WordPress instalasi tidak terlindungi dan penyerang bisa mendapatkan akses ke blog Anda jika server web Apache sedang berjalan. Untuk menghentikan server web Apache, masukkan perintah **sudo systemctl stop httpd**. Jika Anda melanjutkan ke prosedur berikutnya, Anda tidak perlu menghentikan server web Apache.

**Untuk memungkinkan WordPress untuk menggunakan permalink**

WordPress permalink perlu menggunakan `.htaccess` file Apache agar berfungsi dengan baik, tetapi ini tidak diaktifkan secara default di Amazon Linux. Gunakan prosedur ini untuk mengizinkan semua penggantian dalam root dokumen Apache.

1. Buka file `httpd.conf` menggunakan editor teks favorit Anda (seperti **nano** atau **vim**). Jika Anda tidak memiliki editor teks favorit, `nano` cocok untuk pemula.

   ```
   [ec2-user ~]$ sudo vim /etc/httpd/conf/httpd.conf
   ```

1. Temukan bagian yang dimulai dengan `<Directory "/var/www/html">`.

   ```
   <Directory "/var/www/html">
       #
       # Possible values for the Options directive are "None", "All",
       # or any combination of:
       #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
       #
       # Note that "MultiViews" must be named *explicitly* --- "Options All"
       # doesn't give it to you.
       #
       # The Options directive is both complicated and important.  Please see
       # http://httpd.apache.org/docs/2.4/mod/core.html#options
       # for more information.
       #
       Options Indexes FollowSymLinks
   
       #
       # AllowOverride controls what directives may be placed in .htaccess files.
       # It can be "All", "None", or any combination of the keywords:
       #   Options FileInfo AuthConfig Limit
       #
       AllowOverride None
   
       #
       # Controls who can get stuff from this server.
       #
       Require all granted
   </Directory>
   ```

1. Ubah baris `AllowOverride None` di bagian di atas untuk membaca `AllowOverride All`.
**catatan**  
Ada banyak baris `AllowOverride` dalam file ini; pastikan Anda mengubah baris di bagian `<Directory "/var/www/html">`.

   ```
   AllowOverride All
   ```

1. Simpan file dan tutup editor teks Anda.

**Untuk menginstal perpustakaan gambar grafis PHP pada AL2**  
Pustaka gambar grafik untuk PHP memungkinkan Anda memodifikasi gambar. Instal pustaka ini jika Anda ingin memotong gambar header untuk blog Anda. Versi phpMyAdmin yang Anda instal mungkin memerlukan versi minimum tertentu dari pustaka ini (misalnya, versi 7.2).

Gunakan perintah berikut untuk menginstal perpustakaan gambar grafis PHP pada AL2. Misalnya, jika Anda menginstal php7.2 dari amazon-linux-extras sebagai bagian dari menginstal tumpukan LAMP, perintah ini menginstal versi 7.2 dari perpustakaan gambar grafis PHP.

```
[ec2-user ~]$ sudo yum install php-gd
```

Untuk memverifikasi versi terinstal, gunakan perintah berikut:

```
[ec2-user ~]$ sudo yum list installed php-gd
```

Berikut ini adalah output contoh:

```
php-gd.x86_64                     7.2.30-1.amzn2             @amzn2extra-php7.2
```

**Untuk memperbaiki izin file untuk server web Apache**

Beberapa fitur yang tersedia WordPress memerlukan akses tulis ke root dokumen Apache (seperti mengunggah media melalui layar Administrasi). Jika Anda belum melakukannya, terapkan keanggotaan dan izin grup berikut (seperti yang dijelaskan secara lebih rinci di[Tutorial: Instal server LAMP AL2](ec2-lamp-amazon-linux-2.md)).

1. Berikan kepemilikan file `/var/www` dan kontennya kepada pengguna `apache`.

   ```
   [ec2-user ~]$ sudo chown -R apache /var/www
   ```

1. Berikan kepemilikan grup `/var/www` dan kontennya kepada grup `apache`.

   ```
   [ec2-user ~]$ sudo chgrp -R apache /var/www
   ```

1. Ubah izin direktori `/var/www` dan subdirektorinya untuk menambahkan izin tulis grup dan untuk mengatur ID grup pada subdirektori mendatang.

   ```
   [ec2-user ~]$ sudo chmod 2775 /var/www
   [ec2-user ~]$ find /var/www -type d -exec sudo chmod 2775 {} \;
   ```

1. Secara rekursif mengubah izin file `/var/www` dan subdirektorinya.

   ```
   [ec2-user ~]$ find /var/www -type f -exec sudo chmod 0644 {} \;
   ```
**catatan**  
 Jika Anda berniat untuk juga menggunakan WordPress sebagai server FTP, Anda akan memerlukan pengaturan Grup yang lebih permisif di sini. Harap tinjau [langkah-langkah dan pengaturan keamanan](https://wordpress.org/support/article/changing-file-permissions/) yang disarankan WordPress untuk mencapai hal ini. 

1. Mulai ulang server web Apache untuk mengambil grup dan izin baru.
   + 

     ```
     [ec2-user ~]$ sudo systemctl restart httpd
     ```

**Jalankan skrip WordPress instalasi dengan AL2**

Anda siap untuk menginstal WordPress. Perintah yang Anda gunakan bergantung pada sistem operasi. Perintah dalam prosedur ini adalah untuk digunakan dengan AL2.

1. Gunakan perintah **systemctl** untuk memastikan bahwa `httpd` dan layanan basis data dimulai di setiap booting sistem.

   ```
   [ec2-user ~]$ sudo systemctl enable httpd && sudo systemctl enable mariadb
   ```

1. Verifikasi apakah server basis data sedang dijalankan.

   ```
   [ec2-user ~]$ sudo systemctl status mariadb
   ```

   Jika layanan basis data tidak berjalan, mulailah.

   ```
   [ec2-user ~]$ sudo systemctl start mariadb
   ```

1. Verifikasi apakah server web Apache (`httpd`) sedang dijalankan.

   ```
   [ec2-user ~]$ sudo systemctl status httpd
   ```

   Jika layanan `httpd` tidak dijalankan, mulailah.

   ```
   [ec2-user ~]$ sudo systemctl start httpd
   ```

1. Di browser web, ketik URL WordPress blog Anda (baik alamat DNS publik untuk instance Anda, atau alamat yang diikuti oleh `blog` folder). Anda akan melihat skrip WordPress instalasi. Berikan informasi yang dibutuhkan oleh WordPress instalasi. Pilih **Instal WordPress** untuk menyelesaikan instalasi. Untuk informasi selengkapnya, lihat [Langkah 5: Jalankan Skrip Instal](https://wordpress.org/support/article/how-to-install-wordpress/#step-5-run-the-install-script) di WordPress situs web.

## Langkah selanjutnya
<a name="wordpress-next-steps"></a>

Setelah Anda menguji WordPress blog Anda, pertimbangkan untuk memperbarui konfigurasinya.

**Gunakan nama domain kustom**  
Jika Anda memiliki nama domain yang dikaitkan dengan alamat EIP instans EC2, Anda dapat mengonfigurasi blog untuk menggunakan nama tersebut alih-alih alamat DNS publik EC2. Untuk informasi selengkapnya, lihat [Mengubah URL Situs](https://wordpress.org/support/article/changing-the-site-url/) di WordPress situs web.

**Konfigurasi blog Anda**  
Anda dapat mengonfigurasi blog Anda untuk menggunakan [tema](https://wordpress.org/themes/) dan [plugin](https://wordpress.org/plugins/) yang berbeda untuk menawarkan pengalaman yang lebih personal bagi pembaca Anda. Namun, terkadang proses instalasi dapat menjadi bumerang, menyebabkan Anda kehilangan seluruh blog. Kami sangat menyarankan agar Anda membuat cadangan Amazon Machine Image (AMI) instans sebelum mencoba menginstal tema atau plugin apa pun sehingga Anda dapat memulihkan blog jika terjadi kesalahan selama proses instalasi. Untuk informasi selengkapnya, lihat [Membuat AMI Anda sendiri](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html#creating-an-ami).

**Tingkatkan kapasitas**  
Jika WordPress blog Anda menjadi populer dan Anda membutuhkan lebih banyak daya komputasi atau penyimpanan, pertimbangkan langkah-langkah berikut:
+ Perbesar ruang penyimpanan di instans Anda. Untuk informasi selengkapnya, lihat [Volume Elastis Amazon EBS](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-modify-volume.html) di *Panduan Pengguna Amazon EBS*.
+ Pindahkan basis data MySQL ke [Amazon RDS](https://aws.amazon.com/rds) untuk memanfaatkan kemampuan layanan guna menskalakan dengan mudah.

**Meningkatkan performa jaringan lalu lintas internet Anda**  
Jika Anda mengharapkan blog Anda untuk mendorong lalu lintas dari pengguna yang berada di seluruh dunia, pertimbangkan [Global Accelerator AWS](https://aws.amazon.com/global-accelerator). Global Accelerator membantu Anda mencapai latensi yang lebih rendah dengan meningkatkan kinerja lalu lintas internet antara perangkat klien pengguna Anda dan WordPress aplikasi yang sedang berjalan. AWS Global Accelerator menggunakan [jaringan AWS global](https://aws.amazon.com/about-aws/global-infrastructure/global_network/) untuk mengarahkan lalu lintas ke titik akhir aplikasi yang sehat di AWS Wilayah yang paling dekat dengan klien.

**Pelajari lebih lanjut tentang WordPress**  
Untuk selengkapnya WordPress, lihat dokumentasi bantuan WordPress Codex di [http://codex.wordpress.org/.](http://codex.wordpress.org/)

Untuk informasi selengkapnya tentang pemecahan masalah penginstalan Anda, lihat Masalah [instalasi umum](https://wordpress.org/support/article/how-to-install-wordpress/#common-installation-problems).

Untuk informasi tentang membuat WordPress blog Anda lebih aman, lihat [Pengerasan. WordPress](https://wordpress.org/support/article/hardening-wordpress/)

Untuk informasi tentang menjaga WordPress blog Anda up-to-date, lihat [Memperbarui WordPress](https://wordpress.org/support/article/updating-wordpress/).

## Tolong\$1 Nama DNS publik saya berubah dan sekarang blog saya rusak
<a name="wordpress-troubleshooting"></a>

 WordPress Instalasi Anda secara otomatis dikonfigurasi menggunakan alamat DNS publik untuk instans EC2 Anda. Jika Anda menghentikan dan memulai ulang instans, alamat DNS publik akan berubah (kecuali jika dikaitkan dengan alamat IP Elastis) dan blog Anda tidak akan berfungsi lagi karena merujuk sumber daya di alamat yang sudah tidak ada lagi (atau ditetapkan ke instans EC2 lain). Penjelasan yang lebih rinci tentang masalah dan beberapa solusi yang mungkin diuraikan dalam [Mengubah URL Situs](https://wordpress.org/support/article/changing-the-site-url/).

Jika ini terjadi pada WordPress instalasi Anda, Anda mungkin dapat memulihkan blog Anda dengan prosedur di bawah ini, yang menggunakan antarmuka baris **wp-cli** perintah untuk WordPress.

**Untuk mengubah URL WordPress situs Anda dengan **wp-cli****

1. Hubungkan ke instans EC2 Anda dengan SSH. 

1. Catat URL situs lama dan URL situs baru untuk instans Anda. URL situs lama kemungkinan adalah nama DNS publik untuk instans EC2 Anda saat Anda menginstal. WordPress URL situs baru adalah nama DNS publik saat ini untuk instans EC2 Anda. Jika Anda tidak yakin dengan URL situs lama Anda, Anda dapat menggunakan **curl** untuk menemukannya dengan perintah berikut ini.

   ```
   [ec2-user ~]$ curl localhost | grep wp-content
   ```

   Anda akan melihat referensi ke nama DNS publik lama Anda di output, yang akan terlihat seperti ini (URL situs lama berwarna merah):

   ```
   <script type='text/javascript' src='http://ec2-52-8-139-223.us-west-1.compute.amazonaws.com/wp-content/themes/twentyfifteen/js/functions.js?ver=20150330'></script>
   ```

1. Unduh **wp-cli** dengan perintah berikut ini.

   ```
   [ec2-user ~]$ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
   ```

1. Cari dan ganti URL situs lama di WordPress instalasi Anda dengan perintah berikut. Gantikan URL situs lama dan baru untuk instans EC2 Anda dan jalur ke WordPress instalasi Anda (biasanya `/var/www/html` atau`/var/www/html/blog`).

   ```
   [ec2-user ~]$ php wp-cli.phar search-replace 'old_site_url' 'new_site_url' --path=/path/to/wordpress/installation --skip-columns=guid
   ```

1. Di browser web, masukkan URL situs baru WordPress blog Anda untuk memverifikasi bahwa situs tersebut berfungsi dengan baik lagi. Jika tidak, lihat [Mengubah URL Situs](https://wordpress.org/support/article/changing-the-site-url/) dan [Masalah instalasi umum](https://wordpress.org/support/article/how-to-install-wordpress/#common-installation-problems) untuk informasi selengkapnya.