Caddy Web Server 自v2.6 版本发布以后,就默认支持 HTTP/3。可以说是最早支持 HTTP/3 的 Web Server,而 Nginx 直到 2023 年 5 月 23 日 1.25.0 版本才开始体验支持。
至于 Apache httpd 也不知道要到猴年马月才支持 HTTP/3 了。
在 CentOS 7 或 CentOS Stream 8 / Rocky Linux 8 / AlmaLinux 8 或 CentOS Stream 9 / Rocky Linux 9 / AlmaLinux 9 等系统下,按照本文教程,即可搭建 LCMP (Linux + Caddy + MariaDB + PHP) 环境。
1. 事前准备
禁用 SElinux
cat /etc/selinux/config
如果没有发现 SELINUX=disabled
这一行,则需要禁用。
sed -i 's@^SELINUX.*@SELINUX=disabled@g' /etc/selinux/config setenforce 0
如果系统是 Enterprise Linux 9 (CentOS 9, RHEL 9, Rocky Linux 9, AlmaLinux 9),则需要用如下方法禁用。
grubby --update-kernel ALL --args selinux=0
然后执行 reboot
重启系统。待到重启完成即禁用了 SElinux。
设置防火墙 firewall
firewall-cmd --state
如果显示是 running
状态,则需要放行 80 和 443 端口,也就是 http 和 https 服务。
default_zone=$(firewall-cmd --get-default-zone) firewall-cmd --permanent --add-service=https --zone=${default_zone} firewall-cmd --permanent --add-service=http --zone=${default_zone} firewall-cmd --permanent --add-masquerade firewall-cmd --reload firewall-cmd --list-all
2. 安装和设置 Caddy Web Server
引入 caddy repo 以及安装 caddy
如果系统是 Enterprise Linux 9 (CentOS 9, RHEL 9, Rocky Linux 9, AlmaLinux 9), Enterprise Linux 8 (CentOS 8, RHEL 8, Rocky Linux 8, AlmaLinux 8)
dnf install -y dnf-plugins-core dnf copr enable @caddy/caddy -y && dnf install -y caddy && caddy version
如果系统是 RHEL 7 或 CentOS 7
yum install -y yum-plugin-copr && yum copr enable @caddy/caddy -y && yum install -y caddy
创建必要的目录,设置目录权限
mkdir -p /data/www/default mkdir -p /var/log/caddy/ mkdir -p /etc/caddy/conf.d/ chown -R caddy.caddy /data/www/default chown -R caddy.caddy /var/log/caddy/
网站的根目录为 /data/www/default
,等全部的安装过程结束后,便可将应用程序放到该目录下运行了。
编辑 caddy 默认配置文件 /etc/caddy/Caddyfile
{ admin off } :80 { # Set this path to your site's directory. root * /data/www/default encode gzip # Enable the static file server. file_server { index index.html } # Serve a PHP site through php-fpm: php_fastcgi unix//run/php-fpm/www.sock { split .php index index.php } log { output file /var/log/caddy/access.log } } import /etc/caddy/conf.d/*.conf
caddy 默认只开启了 80 端口,如果想要搭建自己的网站,则需要手动创建配置文件并重启 caddy 服务。
创建网站,以 www.example.com
为例。
创建 /etc/caddy/conf.d/www.example.com.conf 配置文件,内容如下:
www.example.com { header { Strict-Transport-Security "max-age=31536000; preload" X-Content-Type-Options nosniff X-Frame-Options SAMEORIGIN } # Set this path to your site's directory. root * /data/www/default encode gzip # Enable the static file server. file_server { index index.html } # Serve a PHP site through php-fpm: php_fastcgi unix//run/php-fpm/www.sock { split .php index index.php } log { output file /var/log/caddy/ssl_access.log } }
3. 安装和设置 MariaDB
引入 MariaDB repo 以及安装 MariaDB
wget -qO mariadb_repo_setup.sh https://downloads.mariadb.com/MariaDB/mariadb_repo_setup chmod +x mariadb_repo_setup.sh
The current maintained versions are: 10.3, 10.4, 10.5, 10.6, 10.11 (maintained for 5 years), 10.8, 10.9, 10.10, 11.0 (maintained for one year)
当前 MariaDB 的长期支持版本为 10.3, 10.4, 10.5, 10.6, 10.11,选择 10.11 即可。
./mariadb_repo_setup.sh --mariadb-server-version=mariadb-10.11
上述脚本执行完毕后,即引入 MariaDB repo,下面开始安装 MariaDB。
dnf install -y MariaDB-common MariaDB-server MariaDB-client MariaDB-shared MariaDB-backup
安装完毕后,编辑 /etc/my.cnf.d/server.cnf,使其默认编码为 utf8mb4
lnum=$(sed -n '/\[mariadb\]/=' /etc/my.cnf.d/server.cnf) sed -i "${lnum}acharacter-set-server = utf8mb4\n\n\[client-mariadb\]\ndefault-character-set = utf8mb4" /etc/my.cnf.d/server.cnf
启动 MariaDB
systemctl start mariadb
修改用户 root
的密码,删除 test 数据库及不必要的用户名。
db_pass="Thisisdbrootpassword" mysql -e "grant all privileges on *.* to root@'127.0.0.1' identified by \"${db_pass}\" with grant option;" mysql -e "grant all privileges on *.* to root@'localhost' identified by \"${db_pass}\" with grant option;" mysql -uroot -p${db_pass} 2>/dev/null <<EOF drop database if exists test; delete from mysql.db where user=''; delete from mysql.db where user='PUBLIC'; delete from mysql.user where user=''; delete from mysql.user where user='mysql'; delete from mysql.user where user='PUBLIC'; flush privileges; exit EOF
4. 安装和设置 PHP
引入 PHP repo
如果系统是 Enterprise Linux 9 (CentOS 9, RHEL 9, Rocky Linux 9, AlmaLinux 9) x86_64 aarch64
dnf config-manager --set-enabled crb dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm dnf install -y https://rpms.remirepo.net/enterprise/remi-release-9.rpm
如果系统是 Enterprise Linux 8 (CentOS 8, RHEL 8, Rocky Linux 8, AlmaLinux 8) x86_64
dnf config-manager --set-enabled powertools dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
如果系统是 RHEL 7 or CentOS 7 x86_64
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm yum install -y yum-utils
安装 PHP
如果系统是 Enterprise Linux 9 (CentOS 9, RHEL 9, Rocky Linux 9, AlmaLinux 9), Enterprise Linux 8 (CentOS 8, RHEL 8, Rocky Linux 8, AlmaLinux 8)
dnf module reset -y php dnf module install -y php:remi-8.2
如果系统是 RHEL 7 or CentOS 7 x86_64
yum-config-manager --disable 'remi-php*' yum-config-manager --enable remi-php82
接着安装 PHP 其他必要的组件。
dnf install -y php-cli php-bcmath php-embedded php-gd php-imap php-mysqlnd php-dba php-pdo php-pdo-dblib php-pgsql php-odbc php-enchant php-gmp php-intl php-ldap php-snmp php-soap php-tidy php-opcache php-process php-pspell php-shmop php-sodium php-ffi php-brotli php-lz4 php-xz php-zstd dnf install -y php-pecl-imagick-im7 php-pecl-zip php-pecl-mongodb php-pecl-swoole5 php-pecl-grpc php-pecl-yaml php-pecl-uuid
确认安装 PHP 版本及模块。
php -v php -m
编辑 PHP 的 php-fpm 配置文件 /etc/php-fpm.d/www.conf,使其支持 caddy
sed -i "s@^user.*@user = caddy@" /etc/php-fpm.d/www.conf sed -i "s@^group.*@group = caddy@" /etc/php-fpm.d/www.conf sed -i "s@^listen.acl_users.*@listen.acl_users = apache,nginx,caddy@" /etc/php-fpm.d/www.conf sed -i "s@^;php_value\[opcache.file_cache\].*@php_value\[opcache.file_cache\] = /var/lib/php/opcache@" /etc/php-fpm.d/www.conf
更改 PHP 的目录权限,使其支持 caddy
chown root.caddy /var/lib/php/session chown root.caddy /var/lib/php/wsdlcache chown root.caddy /var/lib/php/opcache
编辑 PHP 的配置文件 /etc/php.ini,使其更加符合生产环境,以及支持 MariaDB 连接
sed -i "s@^disable_functions.*@disable_functions = passthru,exec,shell_exec,system,chroot,chgrp,chown,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore@" /etc/php.ini sed -i "s@^max_execution_time.*@max_execution_time = 300@" /etc/php.ini sed -i "s@^max_input_time.*@max_input_time = 300@" /etc/php.ini sed -i "s@^post_max_size.*@post_max_size = 50M@" /etc/php.ini sed -i "s@^upload_max_filesize.*@upload_max_filesize = 50M@" /etc/php.ini sed -i "s@^expose_php.*@expose_php = Off@" /etc/php.ini sed -i "s@^short_open_tag.*@short_open_tag = On@" /etc/php.ini sock_location="/var/lib/mysql/mysql.sock" sed -i "s#mysqli.default_socket.*#mysqli.default_socket = ${sock_location}#" /etc/php.ini sed -i "s#pdo_mysql.default_socket.*#pdo_mysql.default_socket = ${sock_location}#" /etc/php.ini
5. 启动 PHP 和 caddy 服务
启动 PHP 的 php-fpm 服务
systemctl start php-fpm
启动 caddy 服务
systemctl start caddy
允许 mariadb, php-fpm, caddy 服务开机自启动
systemctl enable mariadb systemctl enable php-fpm systemctl enable caddy
确认 mariadb, php-fpm, caddy 服务状态
systemctl status mariadb systemctl status php-fpm systemctl status caddy
确认 mariadb, php-fpm, caddy 服务的进程
ps -ef | grep -v grep | grep "/usr/bin/caddy" ps -ef | grep -v grep | grep php-fpm ps -ef | grep -v grep | grep mariadbd
6. 升级 PHP 版本的注意事项
当 PHP 有新版本需要升级时,只需执行以下命令即可。
yum update -y php-*
需要注意的是,升级 PHP 后,会覆盖掉之前更改过的 PHP 目录权限,所以还需要将下列目录权限再次修改一下。
chown root.caddy /var/lib/php/session chown root.caddy /var/lib/php/wsdlcache chown root.caddy /var/lib/php/opcache
当 MariaDB 有新版本需要升级时,只需执行以下命令即可。
yum update -y MariaDB-*
当 Caddy 有新版本需要升级时,只需执行以下命令即可。
yum update -y caddy
安装了 phpmyAdmin 后,其配置信息如下图:
评论 (0)