
Caddy Web Server 自v2.6 版本发布以后,就默认支持 HTTP/3。可以说是最早支持 HTTP/3 的 Web Server,而 Nginx 直到 2023 年 5 月 23 日 1.25.0 版本才开始体验支持。
至于 Apache httpd 也不知道要到猴年马月才支持 HTTP/3 了。
按照本文教程,即可搭建 LCMP (Linux + Caddy2 + MariaDB + PHP) 环境。同时亦可使用本文提供的脚本,快速安装。
LCMP 一键安装脚本
2024 年 12 月 4 日更新
Caddy 全部由 Teddysun Repository 提供。
也就是说 Caddy 的 rpm 和 deb 全部由本人自行编译。理由如下:
1. 新增以下几个模块:
caddy.adapters.nginx
caddy.logging.encoders.formatted
caddy.logging.encoders.transform
dns.providers.alidns
dns.providers.azure
dns.providers.cloudflare
dns.providers.dnspod
dns.providers.godaddy
dns.providers.route53
http.handlers.forward_proxy
http.handlers.replace_response
http.handlers.webdav
http.reverse_proxy.transport.http_ntlm
2. 使用最新的 Go 1.23.3 来编译,以后也将跟随 Go 语言的最新版本来持续更新。
2024 年 11 月 10 日更新
就是想简单搭建一个 Web 服务器,支持 MariaDB 和 PHP 而已,又对编译安装感到不耐烦?
没关系,来吧,LCMP (Linux + Caddy2 + MariaDB + PHP ) 一把梭,一般 10 分钟内搞定环境搭建。
支持系统:
Enterprise Linux 8 (CentOS 8, RHEL 8, Rocky Linux 8, AlmaLinux 8, Oracle Linux 8)
Enterprise Linux 9 (CentOS 9, RHEL 9, Rocky Linux 9, AlmaLinux 9, Oracle Linux 9)
Debian 11
Debian 12
Ubuntu 20.04
Ubuntu 22.04
Ubuntu 24.04
详情:https://github.com/teddysun/lcmp
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
创建必要的目录,设置目录权限
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
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 # Serve a PHP site through php-fpm:
php_fastcgi unix//run/php-fpm/www.sock # Enable the static file server.
file_server {
index index.html }
log {
output file /var/log/caddy/ssl_access.log {
roll_size 100mb
roll_keep 3
roll_keep_for 7d
}
}}
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
安装 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
接着安装 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 后,其配置信息如下图:

推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://hqyman.cn/post/11024.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
打赏

微信支付宝扫一扫,打赏作者吧~
休息一下~~