GNU/Linux >> Belajar Linux >  >> Ubuntu

Cara Install dan Konfigurasi Caddy Web Server dengan PHP dan MariaDB di Ubuntu 20.04

Caddy Web Server adalah server web open-source modern yang ditulis dalam bahasa GO. Itu tidak memiliki ketergantungan dan menjalankan file biner statis dan menghasilkan dan memperbarui sertifikat SSL secara otomatis. Ini dapat berfungsi sebagai server file statis, proxy terbalik yang dapat diskalakan, atau server dinamis yang kuat dan dapat diperluas melalui plugin. Ini juga mencakup dukungan untuk HTTP/2 dan protokol HTTP/3 eksperimental.

Dalam tutorial ini, Anda akan menginstal dan mengkonfigurasi Caddy untuk berjalan bersama PHP dan MariaDB di server berbasis Ubuntu 20.04.

Prasyarat

  • Server Ubuntu 20.04 dengan akun non-root yang memiliki hak sudo.
  • Nama domain yang terdaftar lengkap menunjuk ke alamat IP server Anda.

Langkah 1 - Konfigurasi Firewall

Jika Anda menggunakan UFW (Uncomplicated Firewall), Anda perlu mengonfigurasinya untuk mengizinkan akses ke port HTTP dan HTTPS agar server dapat berfungsi.

Periksa status firewall.

$ sudo ufw status

Anda akan melihat sesuatu seperti berikut.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Izinkan port HTTP dan HTTPs.

$ sudo ufw allow http
$ sudo ufw allow https

Periksa kembali statusnya untuk mengonfirmasi.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

Langkah 2 - Instal Caddy

Ada beberapa cara untuk menginstal Caddy yang meliputi instalasi buruh pelabuhan, menggunakan repositori resmi atau membangun dari sumber. Membangun dari metode sumber berguna jika Anda menginginkan fungsionalitas yang hanya dapat ditambahkan melalui modul/plugin pihak ketiga.

Untuk tujuan tutorial ini, kita akan tetap menggunakan repositori resmi Caddy untuk sistem berbasis Ubuntu/Debian.

Tambahkan Repositori ke daftar.

$ echo "deb [trusted=yes] https://apt.fury.io/caddy/ /" | sudo tee -a /etc/apt/sources.list.d/caddy-fury.list
$ sudo apt update

Ini akan membuat file repositori caddy di /etc/apt/sources.list.d direktori dengan lokasi ke repositori Caddy.

Instal Caddy.

$ sudo apt install caddy

Ini akan secara otomatis menginstal dan menjalankan server web Caddy. Buka http:// di browser Anda dan Anda akan disambut oleh halaman berikut.

Langkah 3 - Instal PHP

Instal repositori PHP Ondrej.

$ sudo add-apt-repository ppa:ondrej/php

Instal PHP 7.4 bersama dengan beberapa paket tambahan.

$ sudo apt install php-cli php-fpm php-mysql

Periksa apakah PHP berfungsi dengan benar.

$ php --version

Anda akan melihat keluaran serupa.

PHP 7.4.6 (cli) (built: May 14 2020 10:03:35) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.6, Copyright (c), by Zend Technologies

Langkah 4 - Instal MariaDB

MariaDB adalah pengganti drop-in untuk MySQL yang berarti perintah untuk menjalankan dan mengoperasikan MariaDB sama dengan perintah untuk MySQL.

Tambahkan repositori Resmi Mariadb. Anda dapat memilih mirror lain yang lebih dekat ke lokasi server Anda dari halaman repositori MariaDB.

$ sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
$ sudo add-apt-repository 'deb [arch=amd64] http://mirror.lstn.net/mariadb/repo/10.4/ubuntu f
ocal main'

Untuk menginstal MariaDB, jalankan perintah berikut.

$ sudo apt install mariadb-server

Periksa apakah MariaDB diinstal dengan benar.

$ mysql --version

Anda akan melihat output berikut.

mysql  Ver 15.1 Distrib 10.4.13-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

Aktifkan layanan MariaDB.

$ sudo systemctl enable mariadb

Langkah 5 - Konfigurasi MariaDB

Jalankan perintah berikut untuk melakukan konfigurasi default seperti memberikan kata sandi root, menghapus pengguna anonim, melarang login root dari jarak jauh, dan menghapus tabel pengujian.

$ sudo mysql_secure_installation

Dengan MariaDB 10.4, Anda sekarang akan ditanya antara menggunakan kata sandi root atau unix_socket pengaya. unix_socket plugin memungkinkan Anda untuk masuk ke MariaDB dengan kredensial pengguna Linux Anda. Ini dianggap lebih aman meskipun Anda memerlukan nama pengguna/kata sandi tradisional untuk menggunakan aplikasi pihak ketiga seperti phpMyAdmin. Kami akan tetap menggunakan unix_socket plugin untuk tutorial ini. Anda masih dapat menggunakan phpMyAdmin melalui pengguna mana pun yang Anda buat sebagai pengguna tertentu untuk database Anda.

Menekan Enter memilih opsi default (salah satu yang dikapitalisasi, Y dalam hal ini).

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): [PRESS ENTER]
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] [PRESS ENTER]
Enabled successfully!
Reloading privilege tables..
 ... Success!

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] [ANSWER n]
... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] [PRESS ENTER]
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] [PRESS ENTER]
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] [PRESS ENTER]
 \- Dropping test database...
 ... Success!
 \- Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] [PRESS ENTER]
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Masuk ke SQL Shell MariaDB.

$ sudo mysql

Masukkan kata sandi root Anda saat diminta.

Buat database pengujian dan pengguna dengan izin akses. Ganti database dan user dengan pilihan Anda. Ganti password dengan kata sandi yang kuat.

CREATE DATABASE testdb;
CREATE USER 'user' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON testdb.* TO 'user';

Keluar dari Shell MySQL.

exit

Langkah 6 - Konfigurasikan Caddy

Caddy dapat dikonfigurasi dalam beberapa cara - panggilan API, file JSON atau Caddyfile. Caddyfile adalah cara termudah untuk mengkonfigurasi Caddy yang akan kita gunakan dalam tutorial kita.

Sebelum kita mengkonfigurasi Caddy, kita harus membuat direktori root untuk situs kita.

$ sudo mkdir -p /var/www/example.com/html

-p flag juga membuat direktori induk yang hilang.

Kita juga perlu membuat direktori untuk menyimpan file log untuk Caddy.

$ sudo mkdir /var/log/caddy

Server caddy saat instalasi membuat pengguna caddy yang menangani tugasnya untuk itu. Kita perlu memberikan izin ke direktori log sehingga Caddy dapat mengakses dan menulis ke direktori tersebut.

$ sudo chown -R caddy:caddy /var/log/caddy

Selama instalasi, Caddy membuat Caddyfile default di /etc/caddy/Caddyfile . Buka.

$ sudo nano /etc/caddy/Caddyfile

Seharusnya terlihat seperti berikut ini.

# The Caddyfile is an easy way to configure your Caddy web server.
#
# Unless the file starts with a global options block, the first
# uncommented line is always the address of your site.
#
# To use your own domain name (with automatic HTTPS), first make
# sure your domain's A/AAAA DNS records are properly pointed to
# this machine's public IP, then replace the line below with your
# domain name.
:80

# Set this path to your site's directory.
root * /usr/share/caddy

# Enable the static file server.
file_server

# Another common task is to set up a reverse proxy:
# reverse_proxy localhost:8080

# Or serve a PHP site through php-fpm:
# php_fastcgi localhost:9000

# Refer to the Caddy docs for more information:
# https://caddyserver.com/docs/caddyfile

:80 memberitahu Caddy untuk melayani semuanya melalui nomor port 80. root menyetel jalur untuk direktori beranda situs Anda. file_server memungkinkan Caddy untuk dijalankan sebagai server file statis.

Ganti kode di atas dengan kode berikut.

{
	experimental_http3
}
example.com {
    root * /var/www/example.com/html
    log {
        output file /var/log/caddy/example.com.access.log {
        	roll_size 3MiB
	        roll_keep 5
	        roll_keep_for 48h
        }
        format console
    }
    encode gzip zstd
    php_fastcgi unix//run/php/php7.4-fpm.sock
   
    tls [email protected] {
    	protocols tls1.2 tls1.3    	
    }
}

Mari kita lihat semua bagian dari Caddyfile di bawah ini.

  • Blok pertama di setiap Caddyfile adalah blok global kecuali jika Anda menentukan nama host yang kemudian menjadi blok situs. Blok global membawa arahan yang diterapkan ke semua situs yang Anda host di bawah server. Dalam contoh kami, kami telah mengaktifkan dukungan untuk protokol HTTP/3 eksperimental. Blok global sepenuhnya opsional dan Anda selalu dapat memulai Caddyfile Anda dengan blok situs secara langsung.
  • Blok berikutnya adalah blok situs. Jika Anda hanya memiliki 1 situs di server Anda, Anda tidak perlu menyertakan konfigurasi Anda dalam satu blok tetapi jika Anda akan meng-host beberapa situs, Anda harus meng-host konfigurasi setiap situs di bloknya sendiri. Blok situs ditandai dengan tanda kurung kurawal. Setiap blok situs dimulai dengan nama host situs.
  • log mengaktifkan dan mengonfigurasi pencatatan permintaan HTTP. Tanpa log direktif, Caddy tidak akan mencatat apa pun. output mengkonfigurasi tempat untuk menulis file log. format menjelaskan cara mengkodekan, atau memformat, log. console memformat entri log agar dapat dibaca manusia.
  • encode arahan di sini mengaktifkan kompresi Gzip dan Zstandard untuk situs.
  • php_fastcgi permintaan proxy ke server PHP FastCGI seperti php-fpm . Di sini kami mendengarkan permintaan melalui soket Unix.
  • tls blok mengonfigurasi pengaturan yang terkait dengan sertifikat dan keamanan SSL. Di sini, kami telah mengaktifkan dukungan untuk protokol TLSv1.2 dan TLSv1.3. Secara default, Caddy mendukung TLS v1.2 di luar kotak. Caddy juga menghasilkan sertifikat SSL secara otomatis untuk semua situs. Jika Anda tidak ingin Caddy membuatkan SSL untuk Anda, Anda dapat melakukannya dengan menggunakan alamat IP alih-alih nama host atau menentukan URL lengkapnya, yaitu http://example.com. Dalam kasus seperti itu, Caddy tidak akan membuat sertifikat SSL.

Sejauh ini kita telah membahas dasar-dasar mutlak penulisan Caddyfile yang akan membantu Anda memulai. Anda dapat membaca lebih lanjut tentangnya di dokumentasi resmi.

Langkah 7 - Konfigurasi PHP

Setelah Caddyfile kita siap, sekarang saatnya untuk mengkonfigurasi PHP.

Pertama, kita harus mengubah nama pengguna untuk proses PHP. Buka file /etc/php-fpm.d/www.conf .

$ sudo nano /etc/php/7.4/fpm/pool.d/www.conf

Temukan user=www-data dan group=www-data baris dalam file dan ubah menjadi caddy .

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = caddy
; RPM: Keep a group allowed to write in log dir.
group = caddy
...

Juga, temukan baris listen.owner=www-data dan listen.group=www-data dalam file dan ubah menjadi caddy .

listen.owner = caddy
listen.group = caddy

Simpan file dengan menekan Ctrl+X dan memasukkan Y saat diminta.

Mulai ulang proses PHP-fpm.

$ sudo systemctl restart php7.4-fpm

Langkah 8 - Luncurkan Situs Demo

Sekarang kita telah membuat Caddyfile dan mengonfigurasi PHP untuk dijalankan dengan server, sekarang saatnya untuk membuat dan meluncurkan situs web demo.

Pastikan nama domain Anda mengarah ke alamat IP server.

Restart server Caddy untuk menerapkan perubahan pada Caddyfile yang kita buat di atas.

$ sudo systemctl restart caddy

Periksa status server Caddy untuk memastikannya berfungsi dengan baik.

$ sudo systemctl status caddy
? caddy.service - Caddy
     Loaded: loaded (/lib/systemd/system/caddy.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2020-05-20 07:09:25 UTC; 2s ago
       Docs: https://caddyserver.com/docs/
   Main PID: 25410 (caddy)
      Tasks: 7 (limit: 1074)
     Memory: 17.8M
     CGroup: /system.slice/caddy.service
             ??25410 /usr/bin/caddy run --environ --config /etc/caddy/Caddyfile

May 20 07:09:25 example.com caddy[25410]: 2020/05/20 07:09:25 [INFO][example.com] Obtain: Lock acquired; proceeding...
May 20 07:09:25 example.com caddy[25410]: 2020/05/20 07:09:25 [INFO][cache:0xc0006f8cd0] Started certificate maintenance routine
May 20 07:09:25 example.com caddy[25410]: 2020/05/20 07:09:25 [INFO] acme: Registering account for [email protected]
May 20 07:09:26 example.com caddy[25410]: 2020/05/20 07:09:26 [INFO][example.com] Waiting on rate limiter...
May 20 07:09:26 example.com caddy[25410]: 2020/05/20 07:09:26 [INFO][example.com] Done waiting
May 20 07:09:26 example.com caddy[25410]: 2020/05/20 07:09:26 [INFO] [example.com] acme: Obtaining bundled SAN certificate given a CSR
May 20 07:09:27 example.com caddy[25410]: 2020/05/20 07:09:27 [INFO] [example.com] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz-v3/4696123289
May 20 07:09:27 example.com caddy[25410]: 2020/05/20 07:09:27 [INFO] [example.com] acme: use tls-alpn-01 solver
May 20 07:09:27 example.com caddy[25410]: 2020/05/20 07:09:27 [INFO] [example.com] acme: Trying to solve TLS-ALPN-01
May 20 07:09:27 example.com caddy[25410]: 2020/05/20 07:09:27 http: TLS handshake error from 127.0.0.1:39466: EOF

Anda dapat melihat dari atas bahwa Caddy Menghasilkan sertifikat secara otomatis ketika kami pertama kali me-restart server setelah membuat Caddyfile.

Mari kita buat halaman pengujian untuk memverifikasi bahwa Caddy dapat merender PHP dan terhubung ke database MariaDB.

$ sudo nano /var/www/example.com/html/test.php

Rekatkan kode berikut di editor. Ganti "user" dan "password" bidang dengan kredensial MariaDB yang Anda buat sebelumnya.

<html>
<head>
    <title>Caddy Demo Site</title>
    <style type="text/css">
        #wrap {
            width: 900px;
            margin: 0 auto;
        }
    </style>
</head>
<body id="wrap">
    <h2>Caddy Demo Site</h2>
    <?php echo '<p>Hello,</p>';

    // Define PHP variables for the MySQL connection.
    $servername = "localhost";
    $username = "user";
    $password = "password";

    // Create a MySQL connection.
    $conn = mysqli_connect($servername, $username, $password);

    // Report if the connection fails or is successful.
    if (!$conn) {
        exit('<p>Your connection has failed.<p>' .  mysqli_connect_error());
    }
    echo '<p>You have connected successfully.</p>';
    ?>
</body>
</html>

Simpan file dengan menekan Ctrl+X dan memasukkan Y saat diminta.

Kunjungi https://example.com/test.php di peramban web. Anda akan mendapatkan halaman berikut.

Jika Anda melihat pesan kesalahan atau jika halaman tidak dimuat sama sekali, periksa kembali konfigurasi Anda

Hapus file pengujian setelah Anda puas.

$ sudo rm /var/www/example.com/html/test.php

Kesimpulan

Ini menyimpulkan tutorial kami di mana kami menginstal server web Caddy bersama dengan PHP dan MariaDB SQL. Jika Anda memiliki pertanyaan, tanyakan di komentar di bawah.


Ubuntu
  1. Cara Menginstal Server Web Cherokee Dengan PHP5 Dan MySQL Di Ubuntu 11.04

  2. Cara menginstal dan Mengkonfigurasi Mariadb 10 di Ubuntu 20.04

  3. Cara Instal OpenLiteSpeed ​​Web Server PHP dan MariaDB di Ubuntu 20.10

  1. Cara Menginstal dan Mengonfigurasi Server NFS di Ubuntu 20.04

  2. Cara Menginstal dan Mengkonfigurasi Server DHCP di Ubuntu 20.04

  3. Cara Menginstal dan mengkonfigurasi server web Apache di Ubuntu 13.10

  1. Cara Menginstal dan Mengkonfigurasi VNC di Ubuntu 20.04

  2. Cara Menginstal dan Mengkonfigurasi VNC di Ubuntu 18.04

  3. Cara Menginstal dan Mengonfigurasi Server NFS di Ubuntu 18.04