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://
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. Tanpalog
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 sepertiphp-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.