One place for hosting & domains

      Cara Menginstal tumpukan Linux, Apache, MySQL, PHP (LAMP) pada Ubuntu 20.04


      Pengantar

      Tumpukan “LAMP” adalah sekumpulan perangkat lunak sumber terbuka yang biasanya diinstal bersama untuk memungkinkan server menjadi hos dari situs web yang dinamis dan aplikasi web yang ditulis dalam PHP. Istilah ini sebenarnya merupakan singkatan yang mewakili sistem operasi Linux dengan server web Apache. Data situs disimpan di dalam basis data MySQL dan konten dinamis diolah dengan menggunakan PHP.

      Dalam panduan ini, kita akan menginstal tumpukan LAMP pada server Ubuntu 20.04.

      Prasyarat

      Untuk menyelesaikan tutorial ini, Anda akan memerlukan server Ubuntu 20.04 dengan akun pengguna yang mendukung sudo non-root dan firewall dasar. Ini dapat dikonfigurasi menggunakan panduan penyiapan server awal untuk Ubuntu 20.04 kami.

      Langkah 1 — Menginstal Apache dan Memperbarui Firewall

      Server web Apache adalah salah satu server web paling populer di dunia. Server web Apache terdokumentasi dengan baik, memiliki komunitas pengguna yang aktif, dan digunakan secara luas dalam sejarah web, yang membuatnya menjadi pilihan asali yang hebat untuk menjadi hos situs web.

      Instal Apache menggunakan manajer paket Ubuntu, apt:

      • sudo apt update
      • sudo apt install apache2

      Jika ini adalah kali pertama Anda menggunakan sudo dalam sesi ini, Anda akan diminta memberikan kata sandi pengguna Anda untuk memastikan Anda memiliki privilese yang benar untuk mengelola paket sistem dengan apt. Anda juga akan diminta mengonfirmasi instalasi Apache dengan menekan Y, lalu ENTER.

      Setelah instalasi selesai, Anda akan perlu menyesuaikan pengaturan firewall Anda untuk memperbolehkan lalu lintas HTTP. UFW memiliki berbagai profil aplikasi berbeda yang dapat Anda manfaatkan untuk menyelesaikannya. Untuk mendapatkan daftar semua profil aplikasi UFW yang tersedia, Anda dapat menjalankan:

      Anda akan melihat keluaran seperti ini:

      Output

      Available applications: Apache Apache Full Apache Secure OpenSSH

      Berikut adalah makna dari setiap profil ini:

      • Apache: Profil ini hanya membuka porta 80 (lalu lintas web normal dan tidak terenkripsi).
      • Apache Full: Profil ini membuka baik porta 80 (lalu lintas web normal dan tidak terenkripsi) dan porta 443 (lalu lintas terenkripsi TLS/SSL).
      • Apache Secure: Profile ini hanya membuka porta 443 (lalu lintas terenkripsi TLS/SSL).

      Untuk saat ini, sebaiknya izinkan hanya koneksi pada porta 80, karena ini adalah instalasi Apache yang baru dan Anda belum memiliki sertifikat TLS/SSL yang dikonfigurasi untuk mengizinkan lalu lintas HTTPS di server Anda.

      Untuk hanya memperbolehkan lalu lintas pada porta 80, gunakan profil Apache:

      • sudo ufw allow in "Apache"

      Anda dapat memverifikasi perubahan dengan:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6)

      Lalu lintas pada porta 80 sekarang diperbolehkan melewati firewall.

      Anda dapat melakukan pemeriksaan cepat untuk memastikan segalanya berjalan sesuai rencana dengan mengunjungi alamat IP publik server Anda di peramban web Anda (lihat catatan di bawah judul berikutnya untuk mengetahui alamat IP publik Anda jika Anda belum memiliki informasi ini):

      http://your_server_ip
      

      Anda akan melihat laman web Apache Ubuntu 20.04 asali, yang tersedia dengan tujuan pengujian dan informasi. Laman itu akan terlihat seperti ini:

      Ubuntu 20.04 Apache asali

      Jika Anda melihat halaman ini, maka server web Anda telah terinstal dengan benar dan dapat diakses melalui firewal Anda.

      Cara Menemukan Alamat IP Publik Server Anda

      Jika Anda tidak mengetahui alamat IP publik server Ada, ada sejumlah cara untuk mengetahuinya. Biasanya, ini adalah alamat yang digunakan untuk terhubung ke server Anda melalui SSH.

      Ada beberapa cara untuk melakukannya dari baris perintah. Pertama, Anda dapat menggunakan alat iproute2 untuk mengetahui alamat IP dengan mengetik ini:

      • ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's//.*$//'

      Ini akan menampilkan dua atau tiga baris tanggapan. Semua adalah alamat yang benar, tetapi komputer Anda mungkin hanya dapat menggunakan salah satunya, jadi silakan mencoba masing-masing alamat itu.

      Cara alternatifnya adalah menggunakan utilitas curl untuk menghubungi pihak luar supaya memberitahukan bagaimana pihak luar melihat server Anda. Hal ini dilakukan dengan menanyakan alamat IP Anda kepada server tertentu:

      • curl http://icanhazip.com

      Terlepas dari cara yang digunakan untuk mengetahui alamat IP Anda, ketik alamat IP pada bilah alamat di peramban web Anda untuk melihat laman Apache asali.

      Langkah 2 — Menginstal MySQL

      Setelah server web hidup dan berfungsi, Anda perlu menginstal sistem basis data agar dapat menyimpan dan mengelola data untuk situs Anda. MySQL adalah sistem manajemen basis data populer yang digunakan dalam lingkungan PHP.

      Sekali lagi, gunakan apt untuk memperoleh dan menginstal perangkat lunak ini:

      • sudo apt install mysql-server

      Ketika diminta, lakukan konfirmasi instalasi dengan mengetik Y, lalu ENTER.

      Ketika instalasi selesai, Anda disarankan untuk menjalankan skrip keamanan yang sudah terinstal sebelumnya dengan MySQL. Skrip ini akan menghapus beberapa pengaturan asali yang tidak aman dan mengunci akses ke sistem basis data Anda. Mulai skrip interaktif dengan menjalankan:

      • sudo mysql_secure_installation

      Anda akan ditanya apakah Anda ingin mengonfigurasi VALIDATE PASSWORD PLUGIN.

      Catatan: Mengaktifkan fitur ini merupakan keputusan yang Anda pertimbangkan sendiri. Jika diaktifkan, kata sandi yang tidak cocok dengan kriteria yang ditentukan akan ditolak oleh MySQL dengan suatu kesalahan. Akan lebih aman jika Anda tetap menonaktifkan validasi, tetapi Anda harus selalu menggunakan kata sandi yang kuat dan unik untuk kredensial basis data.

      Jawab Y untuk ya, atau jawaban lain untuk melanjutkan tanpa mengaktifkan.

      VALIDATE PASSWORD PLUGIN can be used to test passwords
      and improve security. It checks the strength of password
      and allows the users to set only those passwords which are
      secure enough. Would you like to setup VALIDATE PASSWORD plugin?
      
      Press y|Y for Yes, any other key for No:
      

      Jika Anda menjawab “ya”, Anda akan diminta untuk memilih tingkat validasi kata sandi. Harap ingat bahwa jika Anda memasukkan 2 sebagai tingkat terkuat, Anda akan menjumpai kesalahan saat berusaha menentukan kata sandi yang tidak mengandung angka, huruf kapital dan huruf kecil, serta karakter khusus, atau kata sandi yang berdasarkan pada kata-kata kamus umum.

      There are three levels of password validation policy:
      
      LOW    Length >= 8
      MEDIUM Length >= 8, numeric, mixed case, and special characters
      STRONG Length >= 8, numeric, mixed case, special characters and dictionary              file
      
      Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
      

      Terlepas dari pilihan pengaturan VALIDATE PASSWORD PLUGIN, server Anda akan meminta Anda untuk memilih dan mengonfirmasi kata sandi untuk pengguna root MySQL. Ini tidak sama dengan root sistem. Pengguna root basis data adalah pengguna administratif dengan privilese penuh terhadap sistem basis data. Meskipun metode autentikasi asali untuk pengguna root MySQL mengecualikan penggunaan kata sandi, sekalipun kata kata sandi sudah dibuat, Anda tetap harus menentukan kata sandi yang kuat di sini sebagai langkah keamanan tambahan. Kita akan membahas hal ini sebentar lagi.

      Jika Anda mengaktifkan validasi kata sandi, Anda akan diperlihatkan kekuatan kata sandi untuk kata sandi root yang baru saja Anda masukkan dan server Anda akan bertanya apakah Anda ingin melanjutkan dengan kata sandi itu. Jika Anda puas dengan kata sandi ini, tekan Y untuk “ya” di prompt:

      Estimated strength of the password: 100
      Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
      

      Untuk pertanyaan lainnya, tekan Y dan tombol ENTER pada setiap pertanyaan. Ini akan menghapus sebagian pengguna anonim dan basis data percobaan, menonaktifkan log masuk root dari jarak jauh, dan memuat aturan-aturan baru ini sehingga MySQL segera menerapkan perubahan yang Anda buat.

      Setelah Anda selesai, lakukan percobaan apakah Anda dapat melakukan log masuk ke konsol MySQL dengan mengetik:

      Ini akan menghubungkan ke server MySQL sebagai root pengguna basis data administratif, yang ditentukan berdasarkan penggunaan sudo saat menjalankan perintah ini. Anda akan melihat keluaran seperti ini:

      Output

      Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 22 Server version: 8.0.19-0ubuntu5 (Ubuntu) Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql>

      Untuk keluar dari konsol MySQL, ketik:

      Perhatikan bahwa Anda tidak perlu memberikan kata sandi untuk terhubung sebagai pengguna root, meskipun Anda telah menentukannya saat menjalankan skrip mysql_secure_installation. Hal itu dikarenakan metode autentikasi asali untuk pengguna MySQL administratif adalah unix_socket alih-alih kata sandi. Meskipun awalnya ini mungkin terlihat seperti masalah keamanan, tetapi ini membuat server basis data menjadi lebih aman karena pengguna yang diizinkan melakukan log masuk sebagai pengguna MySQL root hanya pengguna sistem dengan privilese sudo yang terhubung dari konsol atau melalui aplikasi yang berjalan dengan privilese yang sama. Dalam praktiknya, itu berarti Anda tidak akan dapat menggunakan pengguna root basis data administratif untuk terhubung dari aplikasi PHP. Pengaturan kata sandi untuk akun MySQL root berfungsi sebagai perlindungan, apabila metode autentikasi asali diubah dari unix_socket menjadi kata sandi.

      Untuk keamanan yang lebih baik, saran terbaiknya adalah memiliki akun pengguna khusus dengan pengaturan privilese yang lebih sempit untuk setiap basis data, terutama jika Anda berencana memiliki beberapa basis data di mana server Anda adalah hosnya.

      Catatan: Saat menyusun tulisan ini, pustaka PHP MySQL asli mysqlnd tidak mendukung caching_sha2_authentication, metode autentikasi asali untuk MySQL 8. Karena itu, saat menciptakan pengguna basis data untuk aplikasi PHP di MySQL 8, Anda perlu memastikan pengguna telah dikonfigurasi untuk menggunakan mysql_native_password. Kami akan mendemonstrasikan caranya di Langkah 6.

      Server MySQL Anda kini telah terinstal dan terlindungi. Selanjutnya, kita akan menginstal PHP, komponen terakhir dalam tumpukan LAMP.

      Langkah 3 — Menginstal PHP

      Anda telah memiliki Apache terinstal untuk menyajikan konten dan MySQL terinstal untuk menyimpan dan mengelola data Anda. PHP adalah komponen persiapan kita yang akan memproses kode untuk menampilkan konten dinamis ke pengguna akhir. Selain paket php, Anda akan memerlukan php-mysql, suatu modul PHP yang memungkinkan PHP berkomunikasi dengan basis data yang berbasis MySQL. Anda juga akan memerlukan libapache2-mod-php untuk memungkinkan Apache menangani berkas PHP. Paket PHP inti akan secara otomatis terinstal sebagai dependensi.

      Untuk menginstal paket ini, jalankan:

      • sudo apt install php libapache2-mod-php php-mysql

      Setelah instalasi selesai, Anda dapat menjalankan perintah berikut ini untuk mengonfirmasi versi PHP Anda:

      Output

      PHP 7.4.3 (cli) (built: Mar 26 2020 20:24:23) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies

      Di titik ini, tumpukan LAMP Anda sudah berfungsi sepenuhnya, tetapi sebelum Anda dapat menguji setelan Anda dengan skrip PHP, sebaiknya instal Apache Virtual Host yang tepat untuk menyimpan berkas dan folder situs web Anda. Kita akan melakukan itu di langkah selanjutnya.

      Langkah 4 — Menciptakan Hos Virtual untuk Situs Web Anda

      Ketika menggunakan server web Apache, Anda bisa menciptakan hos virtual (serupa dengan blok server di Nginx) untuk merangkum detail konfigurasi dan menjadi hos dari lebih dari satu domain dari server tunggal. Dalam panduan ini, kita akan menyiapkan domain bernama your_domain, tetapi Anda harus menggantinya dengan nama domain Anda sendiri.

      Catatan: Jika Anda menggunakan DigitalOcean sebagai penyedia hos DNS, lihat dokumen produk kami untuk instruksi mendetail tentang cara mempersiapkan nama domain baru dan mengarahkannya ke server Anda.

      Apache pada Ubuntu 20.04 memiliki satu blok server yang aktif secara asali, yang dikonfigurasi untuk menyajikan dokumen-dokumen dari direktori /var/www/html. Meskipun ini berfungsi baik untuk situs tunggal, ini bisa menjadi sulit dijalankan jika Anda menjadi hos dari beberapa situs. Alih-alih memodifikasi /var/www/html, kita akan menciptakan suatu struktur direktori dalam /var/www untuk situs your_domain, dengan membiarkan /var/www/html sebagai direktori asali yang akan ditampilkan jika permintaan klien tidak cocok dengan situs lain.

      Buat direktori untuk your_domain sebagai berikut:

      • sudo mkdir /var/www/your_domain

      Selanjutnya, tentukan kepemilikan direktori dengan variabel lingkungan $USER, yang akan merujuk pada pengguna sistem Anda saat ini:

      • sudo chown -R $USER:$USER /var/www/your_domain

      Kemudian, buka berkas konfigurasi baru dalam direktori sites-available Apache dengan menggunakan editor baris perintah yang Anda sukai. Di sini, kita akan menggunakan nano:

      • sudo nano /etc/apache2/sites-available/your_domain.conf

      Ini akan menciptakan berkas kosong yang baru. Tempelkan konfigurasi dasar berikut:

      /etc/apache2/sites-available/your_domain.conf

      <VirtualHost *:80>
          ServerName your_domain
          ServerAlias www.your_domain
          ServerAdmin webmaster@localhost
          DocumentRoot /var/www/your_domain
          ErrorLog ${APACHE_LOG_DIR}/error.log
          CustomLog ${APACHE_LOG_DIR}/access.log combined
      </VirtualHost>
      

      Simpan dan tutup berkas setelah Anda selesai. Jika Anda menggunakan nano, Anda dapat melakukannya dengan menekan CTRL+X, kemudian Y dan ENTER.

      Dengan konfigurasi VirtualHost ini, kita menyuruh Apache untuk menyajikan your_domain menggunakan /var/www/your_domain sebagai direktori root web. Jika Anda ingin menguji Apache tanpa nama domain, Anda dapat menghapus atau memberikan komentar pada opsi ServerName dan ServerAlias dengan menambahkan karakter # di depan masing-masing baris opsi.

      Anda dapat menggunakan a2ensite untuk mengaktifkan hos virtual yang baru:

      • sudo a2ensite your_domain

      Anda mungkin ingin menonaktifkan situs web asali yang terinstal dengan Apache. Ini diperlukan jika Anda tidak menggunakan nama domain khusus, karena dalam hal ini, konfigurasi asali Apache akan menimpa hos virtual Anda. Untuk menonaktifkan situs web asali Apache, ketikkan:

      • sudo a2dissite 000-default

      Untuk memastikan berkas konfigurasi Anda tidak berisi kesalahan sintaks, jalankan:

      • sudo apache2ctl configtest

      Terakhir, muat ulang Apache agar perubahan ini diterapkan:

      • sudo systemctl reload apache2

      Situs web Anda yang baru kini sudah aktif, tetapi root web /var/www/your_domain masih kosong. Buat berkas index.html di dalam lokasi itu sehingga kita dapat menguji apakah hos virtual bekerja sesuai harapan:

      • nano /var/www/your_domain/index.html

      Sertakan konten berikut di dalam berkas ini:

      /var/www/your_domain/index.html

      <html>
        <head>
          <title>your_domain website</title>
        </head>
        <body>
          <h1>Hello World!</h1>
      
          <p>This is the landing page of <strong>your_domain</strong>.</p>
        </body>
      </html>
      

      Sekarang, buka peramban Anda dan akses nama domain server atau alamat IP Anda sekali lagi:

      http://server_domain_or_IP
      

      Anda akan melihat sebuah laman seperti ini:

      Pengujian hos virtual Apache

      Jika Anda melihat laman ini, ini berarti hos virtual Apache Anda bekerja sesuai harapan.

      Anda dapat meninggalkan berkas ini di lokasinya saat ini sebagai laman landas sementara untuk aplikasi Anda sampai Anda menyiapkan berkas index.php untuk menggantinya. Setelah Anda melakukannya, ingat untuk menghapus atau mengganti nama berkas index.html dari root dokumen Anda, karena berkas ini lebih diutamakan daripada berkas index.php secara asali.

      Catatan Tentang DirectoryIndex pada Apache

      Dengan pengaturan DirectoryIndex asali pada Apache, berkas yang diberi nama index.html akan selalu lebih diutamakan daripada berkas index.php. Ini berguna untuk menyiapkan laman pemeliharaan di aplikasi PHP, dengan menciptakan berkas index.html sementara yang mengandung suatu pesan informatif bagi pengunjung. Karena lebih diutamakan daripada laman index.php, laman ini akan menjadi laman landas untuk aplikasi. Setelah pemeliharaan selesai, index.html diubah namanya atau dihapus dari root dokumen, sehingga mengembalikan laman aplikasi reguler.

      Jika Anda ingin mengubah perilaku ini, Anda akan perlu mengedit berkas /etc/apache2/mods-enabled/dir.conf dan memodifikasi urutan di mana berkas index.php terdaftar di dalam arahan DirectoryIndex:

      • sudo nano /etc/apache2/mods-enabled/dir.conf

      /etc/apache2/mods-enabled/dir.conf

      <IfModule mod_dir.c>
              DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
      </IfModule>
      

      Setelah menyimpan dan menutup berkas, Anda perlu memuat ulang Apache agar perubahan tersebut diterapkan:

      • sudo systemctl reload apache2

      Dalam langkah berikutnya, kita akan menciptakan skrip PHP untuk menguji apakah PHP telah terinstal dan terkonfigurasi dengan benar di server Anda.

      Langkah 5 — Menguji Pemrosesan PHP pada Server Web

      Kini setelah Anda memiliki lokasi khusus untuk menjadi hos dari berkas dan folder situs web Anda, kita akan menciptakan skrip percobaan PHP untuk mengonfirmasi bahwa Apache dapat menangani dan memproses permintaan untuk berkas PHP.

      Buat berkas baru bernama info.php di dalam folder root web khusus Anda:

      • nano /var/www/your_domain/info.php

      Ini akan membuka suatu berkas kosong. Tambahkan teks berikut, yang merupakan kode PHP yang valid, di dalam berkas:

      /var/www/your_domain/info.php

      <?php
      phpinfo();
      

      Setelah Anda selesai, simpan dan tutup berkas.

      Untuk menguji skrip ini, buka peramban web Anda dan akses alamat IP atau nama domain server Anda, diikuti dengan nama skrip, yang dalam hal ini adalah info.php:

      http://server_domain_or_IP/info.php
      

      Anda akan melihat halaman yang serupa dengan ini:

      Info PHP Ubuntu 20.04

      Laman ini menyajikan informasi tentang server Anda dari sudut pandang PHP. Ini berguna untuk mengawakutu dan memastikan pengaturan Anda telah diterapkan dengan benar.

      Jika Anda dapat melihat laman ini di peramban Abda, maka instalasi PHP Anda bekerja sesuai harapan.

      Setelah memeriksa informasi yang relevan mengenai server PHP Anda melalui laman itu, sebaiknya hapus berkas yang Anda buat, karena berkas tersebut mengandung informasi sensitif tentang lingkungan PHP A dan server Ubuntu Anda. Anda dapat menggunakan rm untuk melakukannya:

      • sudo rm /var/www/your_domain/info.php

      Anda selalu dapat menciptakan kembali laman ini jika Anda perlu mengakses kembali informasi tersebut sewaktu-waktu.

      Langkah 6 — Menguji Koneksi Basis Data dari PHP (Opsional)

      Jika Anda ingin menguji apakah PHP dapat terhubung ke MySQL dan menjalankan kueri basis data, Anda dapat menciptakan tabel percobaan dengan kueri dan data semu sebagai kontennya dari skrip PHP. Sebelum melakukan itu, kita perlu menciptakan basis data percobaan dan pengguna MySQL baru yang dikonfigurasi dengan benar untuk mengaksesnya.

      Saat menyusun tulisan ini, pustaka PHP MySQL asli mysqlndtidak mendukung caching_sha2_authentication, metode autentikasi asali untuk MySQL 8. Kita akan perlu menciptakan pengguna baru dengan metode autentikasi mysql_native_password agar dapat terhubung ke basis data MySQL dari PHP.

      Kita akan menciptakan basis data bernama example_database dan pengguna bernama example_user, tetapi Anda dapat mengganti nama-nama ini dengan nilai yang berbeda.

      Pertama, hubungkan ke konsol MySQL menggunakan akun root:

      Untuk menciptakan basis data baru, jalankan perintah berikut dari konsol MySQL:

      • CREATE DATABASE example_database;

      Sekarang Anda dapat menciptakan pengguna baru dan memberikan mereka privilese penuh pada basis data khusus yang baru saja Anda ciptakan.

      Perintah berikut menciptakan pengguna baru bernama example_user, yang menggunakan mysql_native_password sebagai metode autentikasi asali. Kita mendefinisikan kata sandi pengguna ini sebagai password, tetapi Anda harus mengganti nilai ini dengan kata sandi pilihan Anda yang aman.

      • CREATE USER 'example_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

      Sekarang, kita perlu memberikan izin terhadap basis data example_database kepada pengguna ini:

      • GRANT ALL ON example_database.* TO 'example_user'@'%';

      Ini akan memberikan pengguna example_user privilese penuh terhadap basis data example_database database, yang juga mencegah pengguna ini untuk tidak membuat atau memodifikasi basis data lainnya di server Anda.

      Sekarang, keluar dari shell MySQL dengan:

      Anda dapat menguji apakah pengguna baru memiliki izin yang tepat dengan melakukan log masuk ke konsol MySQL lagi, kali ini dengan menggunakan kredensial pengguna khusus:

      Perhatikan tanda -p dalam perintah ini, yang akan meminta Anda kata sandi yang digunakan saat menciptakan pengguna example_user. Setelah log masuk ke konsol MySQL, pastikan Anda memiliki akses ke basis data example_database:

      Ini akan menampilkan keluaran berikut:

      Output

      +--------------------+ | Database | +--------------------+ | example_database | | information_schema | +--------------------+ 2 rows in set (0.000 sec)

      Selanjutnya, kita akan menciptakan tabel percobaan bernama todo_list. Dari konsol MySQL, jalankan pernyataan berikut:

      • CREATE TABLE example_database.todo_list (
      • item_id INT AUTO_INCREMENT,
      • content VARCHAR(255),
      • PRIMARY KEY(item_id)
      • );

      Masukkan beberapa baris konten ke dalam tabel percobaan. Anda mungkin ingin mengulangi perintah selanjutnya beberapa kali lagi, dengan menggunakan nilai yang berbeda:

      • INSERT INTO example_database.todo_list (content) VALUES ("My first important item");

      Untuk memastikan data berhasil tersimpan di tabel, jalankan:

      • SELECT * FROM example_database.todo_list;

      Anda akan melihat keluaran berikut:

      Output

      +---------+--------------------------+ | item_id | content | +---------+--------------------------+ | 1 | My first important item | | 2 | My second important item | | 3 | My third important item | | 4 | and this one more thing | +---------+--------------------------+ 4 rows in set (0.000 sec)

      Setelah memastikan Anda memiliki data yang valid dalam tabel percobaan, Anda dapat keluar dari konsol MySQL:

      Sekarang Anda dapat menciptakan skrip PHP yang akan terhubung ke MySQL dan melakukan kueri untuk konten Anda. Buat berkas PHP baru pada direktori root web khusus Anda menggunakan editor pilihan Anda. Kita akan menggunakan nano untuk itu:

      • nano /var/www/your_domain/todo_list.php

      Skrip PHP berikut terhubung ke basis data MySQL dan melakukan kueri untuk konten tabel todo_list, yang menampilkan hasilnya dalam sebuah daftar. Jika ada masalah dengan koneksi basis data, akan dilakukan pengecualian. Salin konten ini ke skrip todo_list.php:

      /var/www/your_domain/todo_list.php

      <?php
      $user = "example_user";
      $password = "password";
      $database = "example_database";
      $table = "todo_list";
      
      try {
        $db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
        echo "<h2>TODO</h2><ol>";
        foreach($db->query("SELECT content FROM $table") as $row) {
          echo "<li>" . $row['content'] . "</li>";
        }
        echo "</ol>";
      } catch (PDOException $e) {
          print "Error!: " . $e->getMessage() . "<br/>";
          die();
      }
      

      Simpan dan tutup berkas setelah Anda selesai mengedit.

      Anda dapat mengakses laman ini di peramban web Anda dengan mengunjungi nama domain atau alamat IP publik yang dikonfigurasi untuk situs web Anda, diikuti dengan /todo_list.php:

      http://your_domain_or_IP/todo_list.php
      

      Anda akan melihat laman seperti ini, yang menunjukkan konten yang telah Anda masukkan ke dalam tabel percobaan Anda:

      Contoh todo list PHP

      Ini berarti lingkungan PHP Anda telah siap terhubung dan berinteraksi dengan server MySQL.

      Kesimpulan

      Dalam panduan ini, kita telah membangun fondasi yang fleksibel untuk menyajikan aplikasi dan situs web PHP kepada pengunjung Anda, dengan menggunakan Apache sebagai server web dan MySQL sebagai sistem basis data.

      Sebagai langkah berikutnya, Anda harus memastikan bahwa koneksi ke server web Anda sudah aman, dengan melayaninya melalui HTTPS. Untuk melakukannya, Anda dapat menggunakan Let’s Encrypt untuk mengamankan situs Anda dengan sertifikat TLS/SSL gratis.



      Source link

      Trying the New WSL 2. It’s Fast! (Windows Subsystem for Linux)


      In this post, I cover some first impressions from my experience installing and running WSL2 (Windows Subsystem for Linux) in my dev workflow.

      I haven’t done any exhaustive, scientific, or precise tests by any means. What I have found though is that WSL is about 5 times faster for everyday web development tasks like npm or yarn.

      Also, hot reloading and working with create-react-app or the vue-cli is faster!

      Read on for installation, getting started, gotchas, and specific timing on npx create-react-app

      What does WSL 2 bring?

      This is the process I went through and the surprises I encountered while installing.

      Installing WSL2 on Windows 10

      Microsoft now has stable documentation on how to install WSL and update to WSL2.

      To get up and running, follow the guide above through to the point where you set up a new linux distribution.

      Checking if the Install Worked

      The following command will show us what distros we have installed and what version they are on:

      • wsl --list --verbose
      • # or shorthand
      • wsl -l -v

      Installation Failure

      If you already had Ubuntu installed on WSL 1, you may have to completely uninstall and reinstall it.

      If your computer is having trouble running the update command (like my computer), then you may want to completely uninstall and reinstall your distro.

      I went into the Windows settings under Apps > Apps and Features and uninstalled Ubuntu:

      Then I made sure that the default version I wanted for all new installs was version 2:

      • wsl --set-default-version 2

      Now we can go into the Windows Store to install it:

      Once we’re installed, then we can check to be sure that version 2 was installed. Open up Powershell and run:

      Running WSL

      You can open up Windows Terminal and use the Ubuntu dropdown:

      Alternatively you can open up either cmd or Powershell and run:

      • # open up windows subsystem for linux
      • wsl

      Gotchas with WSL 2

      Speed when transferring between file systems is a little slow right now. That’s not a worry for me since I never transferred. I worked solely inside of my Windows files which were mounted into the Linux system.

      Here’s a guide on User Experience changes from WSL 1 to WSL 2. The two big gotchas are:

      1. Move your files into the Linux file system instead of your Windows system
      2. You will need to access localhost apps like [localhost:3000](http://localhost:3000) via an IP address like 192.168.28.2:3000

      Move all files into Linux

      To take advantage of all the new speed improvements in WSL 2, our files will need to be moved into the Linux filesystem.

      The best way to figure out where to move your files is to find the home directory in Linux, then open it in Windows explorer. Run the following:

      • # find the home folder
      • cd ~
      • # open up windows explorer for this folder
      • explorer.exe .

      Notice the path as a Network path:

      We can now move our files from our Windows folders into this new networked folder. We’ll be able to access it from our WSL and interact with it as if it were still in the same Windows files.

      For instance, we can install Node using a tool like n and then run npm start to run a local server for let’s say a React app.

      Network Isn’t localhost Yet

      When we create an app using create-react-app or the vue-cli, we will usually run a command like yarn start or yarn serve to run a local server.

      Normally we would be able to check on our application right in our browser using [localhost:3000](http://localhost:3000) for React or [localhost:8080](http://localhost:8080) for Vue.

      In the early stages of WSL 2, we can’t use localhost. We need to use an IP since Linux is inside a VM.

      To access your application currently, we will use an IP.

      Notice the 192.168.28.2:3000. We’ll use that to access our application:

      A Quick Comparison and Speed Test

      This entire exercise was to get a setup that was faster than the previous one. Let’s see if this setup is any faster!

      I don’t have anything too scientific. I’ll go back and run more tests, but I was frustrated how long a new React app took WSL 1 to make.

      For now, our test will be to run npx create-react-app my-new-app.

      We’ll be comparing the following machines. I know this isn’t scientific at all. I wish I had more computers with similar setups. I wish I had done these speed tests before I upgraded to WSL 2. Oh well. We have what we have!

      • My desktop machine (super powerful, more than the laptops for sure)
      • Surface Book 2 15" i7
      • MacBook Pro 15" 2015
      • npx create-react-app my-new-app

      Here are the numbers I got from running the test a few times on each platform.

      • Surface Book 2 WSL 1: 257 seconds
      • Surface Book 2 WSL 2: 52 seconds
      • 2015 MacBook Pro: 45 seconds
      • 2018 MacBook Pro: 38 seconds

      While still not as fast as the latest MacBook Pro, WSL 2 has made significant improvements over WSL 1.

      What’s Next?

      We’ll keep getting updates and I’ll keep testing to see if performance is improving. I would love to get to a point where WSL 2 on Windows could be as fast as a 2018 MacBook Pro.

      I love both Windows and Mac platforms and with WSL 2, my tools on both platforms has gotten even closer:

      Happy coding!



      Source link

      So installieren Sie Linux, Nginx, MySQL und PHP (LEMP-Stack) unter Ubuntu 20.04 [Schnellstart]


      Einführung

      In diesem Schnellstartleitfaden installieren wir einen LEMP-Stack auf einem Ubuntu 20.04-Server.

      Eine detailliertere Version dieses Tutorials mit weiteren Erklärungen zu einzelnen Schritten finden Sie unter Installieren des Linux-, Nginx-, MySQL-, PHP- (LEMP-)Stacks unter Ubuntu 20.04.

      Voraussetzungen

      Um diesem Leitfaden zu folgen, müssen Sie auf einen Ubuntu 20.04-Server als sudo-Benutzer zugreifen.

      Schritt 1 – Installation von Nginx

      Aktualisieren Sie den Cache Ihres Paketmanagers und installieren Sie dann Nginx mit:

      • sudo apt update
      • sudo apt install nginx

      Sobald die Installation abgeschlossen ist, müssen Sie Ihre Firewalleinstellungen so anpassen, dass HTTP-Verkehr auf Ihrem Server zugelassen wird. Führen Sie den folgenden Befehl aus, um externen Zugriff an Port 80 (HTTP): zu ermöglichen

      • sudo ufw allow in "Nginx"

      Nachdem die neue Firewall-Regel hinzugefügt wurde, können Sie testen, ob der Server läuft, indem Sie auf die öffentliche IP-Adresse des Servers oder den Domänennamen von Ihrem Web-Browser aus zugreifen. Sie sehen in etwa folgende Seite:

      Nginx-Standardseite

      Schritt 2 — Installieren von MySQL

      Wir installieren jetzt MySQL, ein beliebtes Datenbankverwaltungssystem, das in PHP-Umgebungen verwendet wird.

      Verwenden Sie auch hier wieder apt zur Beschaffung und Installation der Software:

      • sudo apt install mysql-server

      Sobald die Installation abgeschlossen ist, empfehlen wir, ein Sicherheitsskript auszuführen, das in MySQL vorinstalliert ist. Starten Sie das interaktive Skript, indem Sie Folgendes ausführen:

      • sudo mysql_secure_installation

      Sie werden gefragt, ob Sie das VALIDATE PASSWORD PLUGIN konfigurieren möchten. Geben Sie Y für Ja oder etwas Anderes ein, um ohne Aktivierung weiterzumachen. Wenn Sie mit „ja“ antworten, werden Sie dazu aufgefordert, eine Stufe der Passwortvalidierung zu wählen.

      Ihr Server fordert Sie als Nächstes dazu auf, ein Passwort für den MySQL root-Benutzer auszuwählen und zu bestätigen. Zwar entbindet die Standardauthentifizierungsmethode für den MySQL root-Benutzer von der Verwendung eines Passworts, selbst wenn eines festgelegt ist, doch sollten Sie hier als zusätzliche Sicherheitsmaßnahme ein starkes Passwort definieren.

      Drücken Sie bei den restlichen Fragen auf Y und bei jeder Eingabeaufforderung ENTER.

      Anmerkung: Zum Zeitpunkt der Verfassung dieses Dokuments unterstützt die native MySQL-PHP-Bibliothek mysqlnd keine caching_sha2_authentication, die standardmäßige Authentifizierungsmethode für MySQL 8. Wenn Sie Datenbankbenutzer für PHP-Anwendungen unter MySQL 8 erstellen, müssen Sie sie daher so konfigurieren, dass sie stattdessen mysql_native_password verwenden. Konsultieren Sie den Schritt 6 unseres detaillierten Leitfadens für LEMP unter Ubuntu 20.04, um mehr zu erfahren.

      Schritt 3 — Installieren von PHP

      Um die php-fpm– und php-mysql-Pakete zu installieren, führen Sie Folgendes aus:

      • sudo apt install php-fpm php-mysql

      Schritt 4 – Konfigurieren von Nginx für PHP

      In diesem Leitfaden richten wir eine Domäne namens your_domain ein, aber Sie sollten diesen Namen durch Ihren eigenen Domänenamen ersetzen.

      Auf Ubuntu 20.04 hat Nginx einen Serverblock standardmäßig aktiviert und ist so konfiguriert, das Dokumente aus einem Verzeichnis in /var/www/html bereitgestellt werden. Das eignet sich gut für eine Website, kann aber umständlich werden, wenn Sie mehrere hosten. Statt /var/www/html zu ändern, erstellen wir eine Verzeichnisstruktur innerhalb von /var/www für die Website your_domain und belassen dabei /var/www/html als Standardverzeichnis, das genutzt wird, wenn eine Clientanfrage keine übereinstimmenden Websites ergibt.

      Erstellen Sie das Root-Webverzeichnis für your_domain wie folgt:

      • sudo mkdir /var/www/your_domain

      Als Nächstes weisen Sie die Eigentumsrechte des Verzeichnisses mit der Umgebungsvariablen $USER zu, die auf Ihren aktuellen Systembenutzer verweisen wird:

      • sudo chown -R $USER:$USER /var/www/your_domain

      Öffnen Sie dann mit Ihrem bevorzugten Befehlszeileneditor eine neue Konfigurationsdatei im Verzeichnis sites-available von Nginx. Wir verwenden hier nano:

      • sudo nano /etc/nginx/sites-available/your_domain

      Dadurch wird eine neue Leerdatei erstellt. Fügen Sie die folgende Basiskonfiguration ein:

      /etc/nginx/sites-available/your_domain

      server {
          listen 80;
          server_name your_domain www.your_domain;
          root /var/www/your_domain;
      
          index index.html index.htm index.php;
      
          location / {
              try_files $uri $uri/ =404;
          }
      
          location ~ .php$ {
              include snippets/fastcgi-php.conf;
              fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
           }
      
          location ~ /.ht {
              deny all;
          }
      
      }
      
      
      

      Wenn Sie mit der Bearbeitung fertig sind, speichern und schließen Sie die Datei. Wenn Sie nano verwenden, können Sie zur Bestätigung STRG+X und dann y und ENTER eingeben.

      Aktivieren Sie Ihre Konfiguration, indem Sie eine Verknüpfung mit der Konfigurationsdatei aus dem sites-enabled-Verzeichnis von Nginx herstellen:

      • sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

      Dadurch wird Nginx angewiesen, die Konfiguration beim nächsten Neuladen zu verwenden. Sie können Ihre Konfiguration auf Syntaxfehler testen, indem Sie Folgendes eingeben:

      Wenn Fehler gemeldet werden, gehen Sie zurück zu Ihrer Konfigurationsdatei, um den Inhalt vor dem Fortfahren zu überprüfen.

      Wenn Sie fertig sind, laden Sie Nginx neu, um die Änderungen anzuwenden:

      • sudo systemctl reload nginx

      Ihre neue Website ist nun aktiv, aber die Web-root /var/www/your_domain ist immer noch leer. Erstellen Sie an diesem Ort eine index.html-Datei, um zu testen, ob Ihr neuer Serverblock wie erwartet funktioniert:

      • nano /var/www/your_domain/index.html

      Fügen Sie in dieser Datei folgende Inhalte ein:

      /var/www/your_domain/index.html

      <html>
        <head>
          <title>your_domain website</title>
        </head>
        <body>
          <h1>Hello World!</h1>
      
          <p>This is the landing page of <strong>your_domain</strong>.</p>
        </body>
      </html>
      

      Gehen Sie nun zu Ihrem Browser und greifen Sie auf den Domänennamen oder die IP-Adresse Ihres Servers zu, wie sie in der server_name-Anweisung in Ihrer Serverblock-Konfigurationsdatei aufgeführt sind:

      http://server_domain_or_IP
      

      Sie sehen in etwa folgende Seite:

      Nginx Serverblock

      Schritt 5 – Testen von PHP mit Nginx

      Wir erstellen jetzt ein PHP-Testskript, um zu prüfen, ob Nginx Anfragen für PHP-Dateien bearbeiten kann.

      Erstellen Sie eine neue Datei namens info.php in Ihrem benutzerdefinierten Web-root-Ordner:

      • nano /var/www/your_domain/info.php

      Damit wird eine leere Datei geöffnet. Fügen Sie in der Datei folgenden Inhalt hinzu:

      /var/www/your_domain/info.php

      <?php
      phpinfo();
      

      Wenn Sie dies abgeschlossen haben, speichern und schließen Sie die Datei.

      Sie können nun in Ihrem Webbrowser auf diese Seite zugreifen, indem Sie den Domänennamen oder die öffentliche IP-Adresse besuchen, die Sie in Ihrer Nginx-Konfigurationsdatei eingerichtet haben, gefolgt von /info.php:

      http://server_domain_or_IP/info.php
      

      Sie sehen dann eine Webseite, die detaillierte Informationen über Ihren Server enthält:

      PHPInfo Ubuntu 20.04

      Nachdem Sie über diese Seite die relevanten Informationen zu Ihrem PHP-Server überprüft haben, ist es am besten, die von Ihnen erstellte Datei zu entfernen, da sie sensible Informationen über Ihre PHP-Umgebung und Ihren Ubuntu-Server enthält. Sie können rm verwenden, um diese Datei zu entfernen:

      • sudo rm /var/www/your_domain/info.php

      Relevante Tutorials

      Hier sehen Sie Links zu detaillierteren Leitfäden, die in Verbindung mit diesem Tutorial stehen:



      Source link