One place for hosting & domains

      Cara Menginstal Linux, Nginx, MySQL, PHP (tumpukan LEMP) pada Ubuntu 20.04


      Pengantar

      Tumpukan perangkat lunak LEMP adalah sekumpulan perangkat lunak yang dapat digunakan untuk menyajikan laman web dan aplikasi web dinamis yang ditulis dalam PHP. Ini adalah akronim yang mendeskripsikan suatu sistem operasi Linux, dengan server web Nginx (diucapkan seperti “Engine-X”). Data backend disimpan di dalam basis data MySQL, dan pemrosesan dinamis ditangani oleh PHP.

      Panduan ini menunjukkan cara menginstal tumpukan LEMP pada server Ubuntu 20.04. Sistem operasi Ubuntu menangani persyaratan pertama. Kami akan menjelaskan cara menjadikan komponen lainnya menjadi aktif dan berjalan.

      Prasyarat

      Untuk menyelesaikan tutorial ini, Anda akan memerlukan akses ke server Ubuntu 20.04 sebagai pengguna sudo non-root reguler, dan firewall yang aktif pada server Anda. Untuk menyiapkan ini, Anda dapat mengikuti panduan penyiapan server awal untuk Ubuntu 20.04 dari kami.

      Langkah 1 – Menginstal Server Web Nginx

      Untuk menampilkan laman web kepada pengunjung situs kita, kita akan menggunakan Nginx, yang merupakan server web berkinerja tinggi. Kita akan menggunakan manajer paket apt untuk memperoleh perangkat lunak ini.

      Karena ini adalah kali pertama kita menggunakan apt untuk sesi ini, maka mulailah dengan memperbarui indeks paket server Anda. Setelah itu, Anda dapat menggunakan apt install untuk menginstal Nginx:

      • sudo apt update
      • sudo apt install nginx

      Saat diminta, tekan Y untuk mengonfirmasi bahwa Anda ingin menginstal Nginx. Setelah instalasi selesai, server web Nginx akan menjadi aktif dan berjalan pada server Ubuntu 20.04 Anda.

      Jika Anda memiliki firewall ufw yang telah aktif, seperti yang disarankan dalam panduan penyiapan server awal kami, Anda akan perlu mengizinkan koneksi ke Nginx. Nginx mendaftarkan beberapa profil aplikasi UFW yang berbeda saat instalasi. Untuk memeriksa profil UFW mana yang tersedia, jalankan:

      Output

      Available applications: Nginx Full Nginx HTTP Nginx HTTPS OpenSSH

      Anda disarankan untuk mengaktifkan profil paling ketat yang masih akan mengizinkan lalu lintas yang Anda perlukan. Karena Anda belum mengonfigurasi SSL untuk server Anda dalam panduan ini, Anda hanya akan perlu mengizinkan lalu lintas HTTP reguler pada porta 80.

      Aktifkan ini dengan mengetik:

      • sudo ufw allow 'Nginx HTTP'

      Anda dapat memverifikasi perubahan dengan menjalankan:

      Keluaran perintah ini akan menunjukkan bahwa lalu lintas HTTP kini diizinkan:

      Output

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

      Dengan penambahan aturan firewall yang baru ini, Anda dapat menguji apakah server telah aktif dan berjalan dengan mengakses nama domain server Anda atau alamat IP publik pada peramban web Anda.

      Jika Anda tidak memiliki nama domain yang mengarah ke server Anda dan Anda tidak mengetahui alamat IP publik server Anda, Anda dapat menemukannya dengan menjalankan perintah berikut:

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

      Ini akan mencetak beberapa alamat IP. Anda dapat mencoba setiap alamat tersebut secara satu per satu di peramban web Anda.

      Sebagai alternatif, Anda dapat memeriksa alamat IP mana yang dapat diakses, sebagaimana dilihat dari lokasi lain di internet:

      Ketik alamat yang Anda terima di peramban web Anda dan ini akan membawa Anda ke laman landas asali Nginx:

      http://server_domain_or_IP
      

      Laman asali Nginx

      Jika Anda melihat laman ini, ini berarti Anda telah berhasil menginstal Nginx dan mengaktifkan lalu lintas HTTP untuk server web Anda.

      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 LEMP.

      Langkah 3 — Menginstal PHP

      Anda telah menginstal Nginx untuk menyajikan konten Anda dan MySQL telah terinstal untuk menyimpan dan mengelola data Anda. Sekarang, Anda dapat menginstal PHP untuk memproses kode dan menghasilkan konten dinamis untuk server web.

      Walaupun Apache menyematkan penafsir PHP dalam setiap permintaan, Nginx membutuhkan program eksternal untuk menangani pemrosesan PHP dan bertindak sebagai jembatan antara penafsir PHP itu sendiri dan server web. Ini memungkinkan kinerja keseluruhan yang lebih baik di sebagian besar situs web berbasis PHP, tetapi ini membutuhkan konfigurasi tambahan. Anda akan perlu menginstal php-fpm, yang merupakan singkatan dari “PHP fastCGI process manager”, dan menyuruh Nginx untuk meneruskan permintaan PHP ini ke perangkat lunak ini untuk pemrosesan.. Selain itu, Anda akan membutuhkan php-mysql, suatu modul PHP yang mengizinkan PHP untuk berkomunikasi dengan basis data berbasis MySQL. Paket PHP inti akan secara otomatis terinstal sebagai dependensi.

      Untuk menginstal paket php-fpm dan php-mysql, jalankan:

      • sudo apt install php-fpm php-mysql

      Saat diminta, ketik Y dan ENTER untuk mengonfirmasi instalasi.

      Anda sekarang telah menginstal komponen PHP Anda. Selanjutnya, Anda akan mengonfigurasi Nginx untuk menggunakannya.

      Langkah 4 — Mengonfigurasi Nginx untuk Menggunakan Prosesor PHP

      Ketika menggunakan server web Nginx, kita dapat menciptakan blok server (serupa dengan hos virtual di Apache) untuk mengenkapsulasi detail konfigurasi dan menjadi hos untuk lebih dari satu domain pada suatu server tunggal. Dalam panduan ini, kita akan menggunakan your_domain sebagai nama domain contoh. Untuk mempelajari lebih lanjut tentang menyiapkan nama domain dengan DigitalOcean, silakan lihat pengantar DNS DigitalOcean dari kami.

      Pada Ubuntu 20.04, Nginx memiliki satu blok server yang diaktifkan secara asali dan dikonfigurasi untuk menampilkan dokumen dari direktori di /var/www/html. Walaupun ini berjalan baik untuk situs tunggal, tetapi ini dapat menjadi sulit untuk dikelola jika Anda menjadi hos dari beberapa situs. Alih-alih memodifikasi /var/www/html, kita akan menciptakan struktur direktori di dalam /var/www untuk situs web your_domain, dengan membiarkan /var/www/html di tempatnya sebagai direktori asali yang akan ditampilkan jika permintaan klien tidak cocok dengan situs lain apa pun.

      Buat direktori web root untuk your_domain sebagai berikut:

      • sudo mkdir /var/www/your_domain

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

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

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

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

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

      /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;
          }
      
      }
      
      
      

      Berikut ini adalah apa yang dilakukan oleh masing-masing arahan dan blok lokasi:

      • listen — Menetapkan porta yang akan didengarkan oleh Nginx. Dalam kasus ini, Nginx akan mendengarkan porta 80, porta asali untuk HTTP.
      • root — Menentukan root dokumen di mana berkas yang ditampilkan oleh situs web ini disimpan.
      • index — Menetapkan urutan seperti apa yang akan diprioritaskan oleh Nginx untuk situs web ini. Merupakan suatu praktik umum untuk menempatkan berkas index.html dengan keutamaan lebih tinggi dari berkas index.php untuk memungkinkan penyiapan laman landas pemeliharaan dengan cepat di dalam aplikasi PHP. Anda dapat menyesuaikan pengaturan ini supaya lebih sesuai dengan kebutuhan aplikasi Anda.
      • server_name — Menetapkan nama domain mana dan/atau alamat IP mana yang blok server in akan tanggapi. Mengarahkan arahan ini ke nama domain server atau alamat IP publik server Anda.
      • location / — Blok lokasi pertama mencakup arahan try_files yang memeriksa adanya berkas atau direktori yang cocok dengan permintaan URL. Jika Nginx tidak dapat menemukan sumber daya yang sesuai, kesalahan 404 akan ditampilkan.
      • location ~ .php$ — Blok lokasi ini menangani pemrosesan PHP aktual dengan mengarahkan Nginx ke berkas konfigurasi fastcgi-php.conf dan berkas php7.4-fpm.sock, yang menyatakan soket yang mana yang terasosiasi dengan php-fpm.
      • location ~ /.ht — Blok lokasi terakhir yang menangani berkas .htaccess yang tidak diproses oleh Nginx. Dengan menambahkan arahan deny all, jika ada berkas .htaccess ternyata menemukan jalan ke root dokumen, berkas itu tidak akan disajikan kepada pengunjung.

      Setelah Anda selesai mengedit, simpan dan tutup berkas. Jika menggunakan nano, Anda dapat melakukan itu dengan menekan CTRL+X lalu y dan ENTER untuk mengonfirmasi.

      Aktifkan konfigurasi Anda dengan menautkannya ke berkas konfigurasi dari direktori sites-enabled Nginx:

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

      Ini akan memberi tahu Nginx untuk menggunakan konfigurasi itu saat dimuat ulang untuk kali berikutnya. Anda dapat menguji konfigurasi Anda untuk memeriksa kesalahan sintaks dengan mengetik:

      Jika ada kesalahan yang dilaporkan, kembalilah ke berkas konfigurasi Anda untuk meninjau kontennya sebelum melanjutkan.

      Saat Anda siap, muat ulang Nginx untuk menerapkan perubahan:

      • sudo systemctl reload nginx

      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 blok server baru Anda 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 atau alamat IP server Anda, seperti yang tercantum di arahan server_name di dalam berkas konfigurasi blok server Anda:

      http://server_domain_or_IP
      

      Anda akan melihat sebuah laman seperti ini:

      Blok server Nginx

      Jika Anda melihat laman ini, ini berarti blok server Nginx 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.

      Tumpukan LEMP Anda kini telah dikonfigurasi dengan sempurna. Pada langkah selanjutnya, kita akan menciptakan skrip PHP untuk menguji apakah Nginx dapat benar-benar menangani berkas .php di dalam situs web Anda yang baru saja dikonfigurasi.

      Langkah 5 — Menguji PHP dengan Nginx

      Tumpukan LEMP Anda sekarang harusnya telah selesai disiapkan. Anda dapat mengujinya untuk memvalidasi apakah Nginx dapat dengan benar menyerahkan berkas .php ke prosesor PHP Anda.

      Anda dapat melakukan ini dengan menciptakan berkas PHP percobaan di dalam root dokumen Anda. Buka berkas baru yang bernama info.php di dalam root dokumen Anda di dalam editor teks Anda:

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

      Ketik atau tempel baris berikut ke berkas baru. Ini adalah kode PHP yang valid yang akan memberikan informasi tentang server Anda:

      /var/www/your_domain/info.php

      <?php
      phpinfo();
      

      Setelah Anda selesai, simpan dan tutup berkas dengan menekan CTRL+X lalu y dan ENTER untuk mengonfirmasi.

      Anda sekarang dapat mengakses laman ini di peramban web Anda dengan mengunjungi nama domain atau alamat IP publik yang telah Anda atur di dalam berkas konfigurasi Nginx Anda, diikuti dengan /info.php:

      http://server_domain_or_IP/info.php
      

      Anda akan melihat laman web yang berisi informasi detail tentang server Anda:

      PHPInfo Ubuntu 20.04

      Setelah memeriksa informasi yang relevan mengenai server PHP Anda melalui laman itu, saran terbaik untuk Anda adalah hapus berkas yang Anda ciptakan karena berkas tersebut mengandung informasi sensitif tentang lingkungan PHP dan server Ubuntu Anda. Anda dapat menggunakan rm untuk menghapus berkas itu:

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

      Anda selalu dapat meregenerasi berkas ini jika Anda membutuhkannya nanti.

      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 mysqlnd tidak 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://server_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 Nginx sebagai server web dan MySQL sebagai sistem basis data.



      Source link

      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

      Easier Date/Time in Laravel and PHP with Carbon


      Introduction

      Working with date and time in PHP is not the easiest or most clear of tasks. We have to deal with strtotime, formatting issues, lots of calculations, and more.

      The nifty package called Carbon can help make dealing with date/time in PHP much easier and more semantic so that our code can become more readable and maintainable.

      Carbon is a package by Brian Nesbit that extends PHP’s own DateTime class.

      It provides some nice functionality to deal with dates in PHP. Specifically things like:

      • Dealing with timezones
      • Getting current time easily
      • Converting a datetime into something readable
      • Parse an English phrase into datetime (first day of January 2016)
      • Add and Subtract dates (+ 2 weeks, -6 months)
      • Semantic way of dealing with dates

      All of the above lead to a very useful package that makes it a breeze to deal with times in PHP.

      Setup

      In order to use Carbon, you’ll need to import Carbon from the Carbon namespace. Luckily for us, Carbon is already included in Laravel so there’s no need to go and add it with Composer.

      Whenever we need to use Carbon, we can import it like so:

      <?php
      use CarbonCarbon;
      

      After importing, let’s look at some cool things we can do with this great package.

      Getting a Specific Date/Time

      // get the current time  - 2015-12-19 10:10:54
      $current = Carbon::now();
      $current = new Carbon();
      
      // get today - 2015-12-19 00:00:00
      $today = Carbon::today();
      
      // get yesterday - 2015-12-18 00:00:00
      $yesterday = Carbon::yesterday();
      
      // get tomorrow - 2015-12-20 00:00:00
      $tomorrow = Carbon::tomorrow();
      
      // parse a specific string - 2016-01-01 00:00:00
      $newYear = new Carbon('first day of January 2016');
      
      // set a specific timezone - 2016-01-01 00:00:00
      $newYearPST = new Carbon('first day of January 2016', 'AmericaPacific');
      

      Creating Dates with More Fine Grained Control

      In addition to the quick ways to define date/times, Carbon also let’s us create date/times from a specific number of arguments.

      Carbon::createFromDate($year, $month, $day, $tz);
      Carbon::createFromTime($hour, $minute, $second, $tz);
      Carbon::create($year, $month, $day, $hour, $minute, $second, $tz);
      

      These are very helpful when you get some sort of date or time in a format that isn’t normally recognized by Carbon. If you pass in null for any of those attributes, it will default to current.

      Manipulating the Date/Time

      Grabbing the date/time isn’t the only thing you’ll need to do when working with dates. You’ll often need to manipulate the date or time.

      For instance, when creating a trial period for a user, you will want the trial period to expire after a certain amount of time. So let’s say we have a 30 day trial period. We could easily calculate that time with add and subtract.

      For this trial period, we would do:

      // get the current time
      $current = Carbon::now();
      
      // add 30 days to the current time
      $trialExpires = $current->addDays(30);
      

      From the Carbon docs, here are some of the other add() and sub() methods available to us:

      $dt = Carbon::create(2012, 1, 31, 0);
      
      echo $dt->toDateTimeString();            // 2012-01-31 00:00:00
      
      echo $dt->addYears(5);                   // 2017-01-31 00:00:00
      echo $dt->addYear();                     // 2018-01-31 00:00:00
      echo $dt->subYear();                     // 2017-01-31 00:00:00
      echo $dt->subYears(5);                   // 2012-01-31 00:00:00
      
      echo $dt->addMonths(60);                 // 2017-01-31 00:00:00
      echo $dt->addMonth();                    // 2017-03-03 00:00:00 equivalent of $dt->month($dt->month + 1); so it wraps
      echo $dt->subMonth();                    // 2017-02-03 00:00:00
      echo $dt->subMonths(60);                 // 2012-02-03 00:00:00
      
      echo $dt->addDays(29);                   // 2012-03-03 00:00:00
      echo $dt->addDay();                      // 2012-03-04 00:00:00
      echo $dt->subDay();                      // 2012-03-03 00:00:00
      echo $dt->subDays(29);                   // 2012-02-03 00:00:00
      
      echo $dt->addWeekdays(4);                // 2012-02-09 00:00:00
      echo $dt->addWeekday();                  // 2012-02-10 00:00:00
      echo $dt->subWeekday();                  // 2012-02-09 00:00:00
      echo $dt->subWeekdays(4);                // 2012-02-03 00:00:00
      
      echo $dt->addWeeks(3);                   // 2012-02-24 00:00:00
      echo $dt->addWeek();                     // 2012-03-02 00:00:00
      echo $dt->subWeek();                     // 2012-02-24 00:00:00
      echo $dt->subWeeks(3);                   // 2012-02-03 00:00:00
      
      echo $dt->addHours(24);                  // 2012-02-04 00:00:00
      echo $dt->addHour();                     // 2012-02-04 01:00:00
      echo $dt->subHour();                     // 2012-02-04 00:00:00
      echo $dt->subHours(24);                  // 2012-02-03 00:00:00
      
      echo $dt->addMinutes(61);                // 2012-02-03 01:01:00
      echo $dt->addMinute();                   // 2012-02-03 01:02:00
      echo $dt->subMinute();                   // 2012-02-03 01:01:00
      echo $dt->subMinutes(61);                // 2012-02-03 00:00:00
      
      echo $dt->addSeconds(61);                // 2012-02-03 00:01:01
      echo $dt->addSecond();                   // 2012-02-03 00:01:02
      echo $dt->subSecond();                   // 2012-02-03 00:01:01
      echo $dt->subSeconds(61);                // 2012-02-03 00:00:00
      

      Getters and Setters

      Another quick way to manipulate or read the time is to use the getters and setters available.

      $dt = Carbon::now();
      
      // set some things
      $dt->year   = 2015;
      $dt->month  = 04;
      $dt->day    = 21;
      $dt->hour   = 22;
      $dt->minute = 32;
      $dt->second = 5;
      
      // get some things
      var_dump($dt->year);
      var_dump($dt->month);
      var_dump($dt->day);
      var_dump($dt->hour);
      var_dump($dt->second);
      var_dump($dt->dayOfWeek);
      var_dump($dt->dayOfYear);
      var_dump($dt->weekOfMonth);
      var_dump($dt->daysInMonth);
      

      We can even string together some setters

      $dt = Carbon::now();
      
      $dt->year(1975)->month(5)->day(21)->hour(22)->minute(32)->second(5)->toDateTimeString();
      $dt->setDate(1975, 5, 21)->setTime(22, 32, 5)->toDateTimeString();
      $dt->setDateTime(1975, 5, 21, 22, 32, 5)->toDateTimeString();
      

      Formatting

      In that example above, you may have noticed the -&gt;toDateTimeString() method. We can easily format the date/time for our purposes. In that case, we got a datetime string.

      $dt = Carbon::now();
      
      echo $dt->toDateString();               // 2015-12-19
      echo $dt->toFormattedDateString();      // Dec 19, 2015
      echo $dt->toTimeString();               // 10:10:16
      echo $dt->toDateTimeString();           // 2015-12-19 10:10:16
      echo $dt->toDayDateTimeString();        // Sat, Dec 19, 2015 10:10 AM
      
      // ... of course format() is still available
      echo $dt->format('l jS \of F Y h:i:s A');         // Saturday 19th of December 2015 10:10:16 AM
      

      Relative Time

      Carbon lets us easily display time relatively with the diff() methods.

      For instance, let’s say we have a blog and wanted to show a published time of 3 hours ago. We would be able to do that with these methods.

      Finding the Difference

      These methods are used to just find the number of difference.

      $current = Carbon::now();
      $dt      = Carbon::now();
      
      $dt = $dt->subHours(6);
      echo $dt->diffInHours($current);         // -6
      echo $current->diffInHours($dt);         // 6
      
      $future = $current->addMonth();
      $past   = $current->subMonths(2);
      echo $current->diffInDays($future);      // 31
      echo $current->diffInDays($past);        // -62
      

      Displaying the Difference for Humans

      Displaying time relatively can sometimes be more useful to readers than a date or timestamp.

      For example, instead of displaying the time of a post like 8:12am, the time will be displayed as 3 hrs ago.

      The diffForHumans() method is used for calculating the difference and also converting it to a humanly readable format.

      Here are some examples:

          $dt     = Carbon::now();
          $past   = $dt->subMonth();
          $future = $dt->addMonth();
      
          echo $dt->subDays(10)->diffForHumans();     // 10 days ago
          echo $dt->diffForHumans($past);             // 1 month ago
          echo $dt->diffForHumans($future);           // 1 month before
      

      Conclusion

      There’s plenty more that Carbon can do. Be sure to look through the official Carbon docs. Hopefully this helps use date/times easier in PHP and speeds up development times!



      Source link