GNU/Linux >> Znalost Linux >  >> Ubuntu

Jak nainstalovat a nakonfigurovat Caddy Web Server s PHP a MariaDB na Ubuntu 20.04

Caddy Web Server je moderní open-source webový server napsaný v jazyce GO. Nemá žádné závislosti a spouští se ze statického binárního souboru a automaticky generuje a obnovuje certifikáty SSL. Může fungovat jako statický souborový server, škálovatelný reverzní proxy nebo výkonný dynamický server a lze jej rozšířit pomocí zásuvných modulů. Zahrnuje také podporu pro HTTP/2 a experimentální protokoly HTTP/3.

V tomto tutoriálu nainstalujete a nakonfigurujete Caddy tak, aby běžel společně s PHP a MariaDB na serveru založeném na Ubuntu 20.04.

Předpoklady

  • Server Ubuntu 20.04 s účtem jiného uživatele než root s oprávněními sudo.
  • Plně registrovaný název domény odkazoval na IP adresu vašeho serveru.

Krok 1 – Konfigurace brány firewall

Pokud používáte UFW (Uncomplicated Firewall), musíte jej nakonfigurovat tak, aby umožňoval přístup k portům HTTP a HTTPS, aby server fungoval.

Zkontrolujte stav brány firewall.

$ sudo ufw status

Měli byste vidět něco jako následující.

Status: active

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

Povolit porty HTTP a HTTPs.

$ sudo ufw allow http
$ sudo ufw allow https

Pro potvrzení znovu zkontrolujte stav.

$ 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)

Krok 2 – Instalace Caddy

Existuje několik způsobů, jak nainstalovat Caddy, což zahrnuje instalaci dockeru, pomocí oficiálních úložišť nebo vytváření ze zdroje. Metoda budování ze zdroje je užitečná, pokud chcete funkcionalitu, kterou lze přidat pouze prostřednictvím modulu/pluginu třetí strany.

Pro účely tohoto tutoriálu se budeme držet používání oficiálního úložiště Caddy pro systémy založené na Ubuntu/Debianu.

Přidejte úložiště do seznamu.

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

Tím se vytvoří soubor úložiště caddy v /etc/apt/sources.list.d adresář s umístěním úložiště Caddy.

Nainstalujte Caddy.

$ sudo apt install caddy

Tím se automaticky nainstaluje a spustí webový server Caddy. Otevřete ve svém prohlížeči http:// a měla by vás přivítat následující stránka.

Krok 3 – Instalace PHP

Nainstalujte Ondřejův repozitář PHP.

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

Nainstalujte PHP 7.4 spolu s některými dalšími balíčky.

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

Zkontrolujte, zda PHP funguje správně.

$ php --version

Měli byste vidět podobný výstup.

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

Krok 4 – Instalace MariaDB

MariaDB je náhradní náhrada za MySQL, což znamená, že příkazy ke spuštění a ovládání MariaDB jsou stejné jako příkazy pro MySQL.

Přidejte oficiální úložiště Mariadb. Můžete se rozhodnout pro jiné zrcadlo, které je blíže k umístění vašeho serveru ze stránky úložiště 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'

Chcete-li nainstalovat MariaDB, zadejte následující příkaz.

$ sudo apt install mariadb-server

Zkontrolujte, zda je MariaDB správně nainstalována.

$ mysql --version

Měli byste vidět následující výstup.

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

Povolte službu MariaDB.

$ sudo systemctl enable mariadb

Krok 5 – Konfigurace MariaDB

Spuštěním následujícího příkazu provedete výchozí konfiguraci, jako je zadání hesla uživatele root, odebrání anonymních uživatelů, zakázání vzdáleného přihlášení uživatele root a zrušení testovacích tabulek.

$ sudo mysql_secure_installation

S MariaDB 10.4 budete nyní dotázáni, zda chcete použít heslo root nebo unix_socket zapojit. unix_socket plugin vám umožňuje přihlásit se do MariaDB pomocí vašich uživatelských údajů pro Linux. Je považováno za bezpečnější, ačkoli budete potřebovat tradiční uživatelské jméno/heslo, abyste mohli používat aplikace třetích stran, jako je phpMyAdmin. Budeme se držet použití unix_socket plugin pro tento tutoriál. Stále můžete používat phpMyAdmin prostřednictvím libovolného uživatele, kterého vytvoříte pro své databáze.

Stisknutím klávesy Enter vyberete výchozí možnost (ta, která je velká, v tomto případě Y).

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!

Přihlaste se do prostředí SQL Shell MariaDB.

$ sudo mysql

Po zobrazení výzvy zadejte heslo uživatele root.

Vytvořte testovací databázi a uživatele s přístupovým oprávněním. Nahraďte database a user s vaší volbou. Nahraďte password se silným heslem.

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

Ukončete prostředí MySQL.

exit

Krok 6 – Konfigurace Caddy

Caddy lze konfigurovat několika způsoby – voláním API, souborem JSON nebo Caddyfile. Caddyfile je nejjednodušší způsob, jak nakonfigurovat Caddy, který použijeme v našem tutoriálu.

Než nakonfigurujeme Caddy, měli bychom vytvořit kořenový adresář pro náš web.

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

-p flag vytvoří také všechny chybějící nadřazené adresáře.

Potřebujeme také vytvořit adresář pro uložení souborů protokolu pro Caddy.

$ sudo mkdir /var/log/caddy

Server Caddy při instalaci vytvoří uživatele caddy která za ni vyřizuje své úkoly. Potřebujeme udělit oprávnění k adresáři protokolu, aby k němu Caddy mohl přistupovat a zapisovat do něj.

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

Během instalace Caddy vygeneroval výchozí Caddyfile na /etc/caddy/Caddyfile . Otevřete jej.

$ sudo nano /etc/caddy/Caddyfile

Mělo by to vypadat nějak takto.

# 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 řekne Caddymu, aby vše obsluhoval přes port číslo 80. root nastaví cestu k domovskému adresáři vašeho webu. file_server umožňuje Caddy běžet jako statický souborový server.

Nahraďte výše uvedený kód následujícím kódem.

{
	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    	
    }
}

Pojďme si projít všechny sekce Caddyfile níže.

  • První blok v libovolném souboru Caddyfile je globální blok, pokud nezadáte název hostitele, který se pak stane blokem webu. Globální blok nese direktivy, které se aplikují na všechny weby, které hostujete na serveru. V našem příkladu jsme povolili podporu pro experimentální protokol HTTP/3. Globální blok je zcela volitelný a svůj Caddyfile můžete vždy spustit přímo s blokem webu.
  • Dalším blokem je blok webu. Pokud máte na svém serveru pouze 1 web, nemusíte svou konfiguraci uzavírat do bloku, ale pokud hodláte hostovat více webů, měli byste hostovat konfiguraci každého webu v jeho vlastním bloku. Blok webu je označen složenými závorkami. Každý blok webu začíná názvem hostitele webu.
  • log povoluje a konfiguruje protokolování požadavků HTTP. Bez log Caddy nic nezaznamená. output konfiguruje, kam se má zapisovat soubor protokolu. format popisuje, jak kódovat nebo formátovat protokoly. console formátuje záznam protokolu pro čitelnost pro člověka.
  • encode direktiva zde umožňuje kompresi Gzip a Zstandard pro web.
  • php_fastcgi proxy požadavky na PHP FastCGI server, jako je php-fpm . Zde posloucháme požadavky přes Unixový soket.
  • tls block konfiguruje nastavení související s certifikáty SSL a zabezpečením. Zde jsme povolili podporu protokolů TLSv1.2 a TLSv1.3. Ve výchozím nastavení Caddy podporuje TLS v1.2 ihned po vybalení. Caddy také automaticky generuje SSL certifikáty pro všechny stránky. Pokud nechcete, aby za vás Caddy generoval SSL, můžete tak učinit buď pomocí adresy IP namísto názvu hostitele, nebo zadáním úplné adresy URL, tj. http://example.com. V takových případech Caddy nevygeneruje certifikát SSL.

Doposud jsme se zabývali úplnými základy psaní Caddyfile, které by vám měly pomoci začít. Více si o tom můžete přečíst v oficiální dokumentaci.

Krok 7 – Konfigurace PHP

Nyní, když je náš Caddyfile připraven, je čas nakonfigurovat PHP.

Nejprve musíme změnit uživatelské jméno pro proces PHP. Otevřete soubor /etc/php-fpm.d/www.conf .

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

Najděte user=www-data a group=www-data řádků v souboru a změňte je na 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
...

Najděte také řádky listen.owner=www-data a listen.group=www-data v souboru a změňte je na caddy .

listen.owner = caddy
listen.group = caddy

Uložte soubor stisknutím Ctrl+X a zadáním Y až budete vyzváni.

Restartujte proces PHP-fpm.

$ sudo systemctl restart php7.4-fpm

Krok 8 – Spuštění ukázkového webu

Nyní, když jsme vytvořili Caddyfile a nakonfigurovali PHP pro běh se serverem, je čas vytvořit a spustit demo web.

Ujistěte se, že název vaší domény ukazuje na IP adresu serveru.

Restartujte server Caddy, abyste použili změny v souboru Caddy, který jsme vytvořili výše.

$ sudo systemctl restart caddy

Zkontrolujte stav serveru Caddy a ujistěte se, že funguje správně.

$ 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

Shora můžete vidět, že Caddy vygeneroval certifikát automaticky, když jsme poprvé restartovali server po vytvoření Caddyfile.

Pojďme vytvořit testovací stránku, abychom ověřili, že Caddy umí vykreslit PHP a připojit se k databázi MariaDB.

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

Vložte následující kód do editoru. Nahraďte "user" a "password" pole s přihlašovacími údaji MariaDB, které jste vytvořili dříve.

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

Uložte soubor stisknutím Ctrl+X a zadáním Y až budete vyzváni.

Navštivte https://example.com/test.php ve webovém prohlížeči. Měli byste získat následující stránku.

Pokud se zobrazí chybová zpráva nebo se stránka vůbec nenačte, znovu zkontrolujte konfiguraci

Jakmile budete spokojeni, odstraňte testovací soubor.

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

Závěr

Tímto končí náš tutoriál, kde jsme nainstalovali webový server Caddy spolu s PHP a MariaDB SQL. Pokud máte nějaké dotazy, zeptejte se jich v komentářích níže.


Ubuntu
  1. Jak nainstalovat webový server Cherokee s PHP5 a MySQL na Ubuntu 11.04

  2. Jak nainstalovat a nakonfigurovat Mariadb 10 v Ubuntu 20.04

  3. Jak nainstalovat a nakonfigurovat webový server Apache na Ubuntu 13.10

  1. Jak nainstalovat a nakonfigurovat server NFS na Ubuntu 20.04

  2. Jak nainstalovat a nakonfigurovat server DHCP na Ubuntu 20.04

  3. Jak nainstalovat OpenLiteSpeed ​​Web Server PHP a MariaDB na Ubuntu 20.10

  1. Jak nainstalovat a nakonfigurovat VNC na Ubuntu 20.04

  2. Jak nainstalovat a nakonfigurovat VNC na Ubuntu 18.04

  3. Jak nainstalovat a nakonfigurovat server NFS na Ubuntu 18.04