Caddy Server 笔记 v4 - Caddy PHP MySQL(MariaDB)
Date: 2018-06-12
对于Caddy Web服务器的折腾,一直没有断过(传送门),之前搭建Caddy Web服务,用的是Supervisor让进程常驻(现在用系统自带的启动管理,和Caddy官方的脚本),而且现在看来,好多个文字逻辑有些不明确,再次整理记录一下。
前言
系统:
- 系统计划用Ubuntu 14.04,或Ubuntu 18.04,两个都折腾一下;
- Ubuntu 14.04方便安装不是太费资源的MySQL/MariaDB 5.5,毕竟目标主机内存只有512MB或1GB;
- 深受LNMP.ORG作者的影响:安装MySQL 5.6或5.7及MariaDB 10必须1G以上内存!
- 但是考虑到14.04官方支持到明年(2019)的4月份就结束了,所以本文也会写上18.04搭建的思路。
数据库:
- 数据库上面写了,为了能在512MB或1GB内存的主机上,MySQL/MariaDB 5.5;
- Ubuntu 14.04,官方源MySQL的版本是5.6,MariaDB的版本是5.5,我这里计划用MariaDB。
- Ubuntu 18.04,这个系统上的数据库,额,PPA上的MySQL 5.5已经终止维护了;
- 有个可以实现的想法,数据库用Docker容器(似乎不支持OpenVZ架构的主机);
- 网络
host
,然后我在折腾的过程中也发现一个问题,phpMyAdmin连接的时候,需要修改配置文件,其中localhost
修改为127.0.0.1
,因为localhost
连接的是mysql.sock
,而咱们需要用tcp
的方式连接到容器里的mysql
。
PHP:
- 用PPA,Ubuntu 14.04/18.04都有PHP7.2的版本。
目录和文件规划
文件夹和文件
计划的是单独放在一个文件夹/data
里,方便打包备份。
root@hello:/data# tree -L 3
.
|-- Caddyfile
|-- certs
|-- config
| `-- default.conf
|-- db
|-- logs
`-- wwwroot
`-- default
`-- info.php
# Caddyfile - 文件
# certs - 目录,Caddy证书
# db - 目录,数据库文件,Docker创建容器的时候可以挂载这个目录
# logs - 目录,日志
# wwwroot - 目录,网站文件
然后丢行命令,方便快速创建:
mkdir /data && \
touch /data/Caddyfile && \
mkdir /data/config && \
touch /data/config/default.conf && \
mkdir /data/wwwroot && \
mkdir /data/wwwroot/default && \
touch /data/wwwroot/default/info.php && \
mkdir /data/logs && \
mkdir /data/db && \
mkdir /data/certs
往/data/Caddyfile
文件里填内容:
echo import config/*.conf >> /data/Caddyfile
# 导入 config 文件夹下所有 *.conf 配置文件
往默认主机配置/data/config/default.conf
里填内容:
cat > /data/config/default.conf <<EOL
:1093 {
root /data/wwwroot/default
tls off
gzip
browse
fastcgi / 127.0.0.1:9000 php
log /data/logs/1-default.log
errors /data/logs/0-default.log
}
EOL
# 端口号也可以更改,也可以直接用来建网站,本文接下来应该会有个 WordPress 站点的创建
# 更多配置参照 Caddy 官方文档:caddyserver.com/docs
# 同级目录下可以创建其他配置文件
往/data/wwwroot/default/info.php
里填内容:
echo "<?php phpinfo(); ?>" >> /data/wwwroot/default/info.php
# PHP INFO
文件权限
root@hello:/data# tree -gp -L 2
.
|-- [-r--r--r-- www-data] Caddyfile
|-- [drwxrwx--- root ] certs
|-- [drwxr-xr-x www-data] config
| `-- [-r--r--r-- www-data] default.conf
|-- [drwxr-xr-x root ] db
|-- [drwxrwx--- root ] logs
| |-- [-rw-r--r-- root ] 0-default.log
| `-- [-rw-r--r-- root ] 1-default.log
`-- [dr-xr-xr-x www-data] wwwroot
`-- [drwxr-xr-x www-data] default
同样丢一行命令方便快速:
chown www-data:www-data /data/Caddyfile && \
chown -R www-data:www-data /data/config && \
chmod 444 /data/Caddyfile && \
chmod 444 /data/config/*.conf && \
chown www-data:www-data /data/wwwroot && \
chmod 555 /data/wwwroot && \
chown -R www-data:www-data /data/wwwroot/default && \
chown -R www-data:root /data/certs /data/logs && \
chmod 0770 /data/certs /data/logs
# 添加一个 Caddy 配置文件之后,需要修改用户、用户组、权限
# chown -R www-data:www-data /data/config && chmod 444 /data/config/*.conf
# 添加一个虚拟主机站点,文件夹需要修改用户、用户组(不然会碰到PHP程序无法上传等问题)
# chown -R www-data:www-data /data/wwwroot/domain-name.com
用户和用户组
为Caddy创建用户和用户组:
groupadd -g 33 www-data && \
useradd \
-g www-data --no-user-group \
--home-dir /data/wwwroot --no-create-home \
--shell /usr/sbin/nologin \
--system --uid 33 www-data
MySQL/MariaDB 5.5
Ubuntu 14.04
Ubuntu 14.04系统上安装5.5版本的数据库非常简单,官方源里就有了,所以:
apt-get update
apt-get install -y mariadb-server-5.5
安装过程中需要输入两遍root
账户的密码;apt-get
命令之后,再运行命令mysql_secure_installation
进行安全配置。
Ubuntu 18.04
Ubuntu 18.04系统上使用5.5版本的数据库,这里曲线一下,用的是Docker。
首先一键安装Docker的命令:
curl -sSL https://get.docker.com/ | sh
然后例如运行MySQL 5.5的容器:
docker run -d \
--name=mysql \
--net=host \
--restart=always \
-v /data/db:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
mysql:5.5
# MYSQL_ROOT_PASSWORD 数据库 root 账户的密码,务必自定义
- 管理容器里数据库,需要小小注意下,
- 可以使用phpMyAdmin,可以下载解压放入
/data/wwwroot/default
目录; - 修改
libraries/config.default.php
,查找localhost
(查找结果只有1个)为127.0.0.1
。 chown -R www-data:www-data /data/wwwroot/default
- 就可以用
root
账户登陆了。
PHP
Ubuntu 14.04
添加PPA源:
apt-get update && \
apt-get install -y software-properties-common python-software-properties language-pack-en-base && \
echo -e "\n" | LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php && \
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4F4EA0AAE5267A6C && \
apt-get update
安装PHP及其扩展:
apt-get install -y php7.2-fpm php7.2-mysql \
php7.2-bcmath php7.2-bz2 php7.2-curl php7.2-gd php7.2-intl \
php7.2-fileinfo php7.2-iconv \
php7.2-mbstring php7.2-xml php7.2-xmlrpc php7.2-zip
PHP配置:
sed -i "s/^listen\s*=.*$/listen = 127.0.0.1:9000/" /etc/php/7.2/fpm/pool.d/www.conf && \
sed -i "s/^;cgi.fix_pathinfo=.*/cgi.fix_pathinfo=0/" /etc/php/7.2/fpm/php.ini && \
sed -i "s/^memory_limit =.*/memory_limit = 256M/" /etc/php/7.2/fpm/php.ini && \
sed -i "s/^upload_max_filesize =.*/upload_max_filesize = 128M/" /etc/php/7.2/fpm/php.ini && \
sed -i "s/^post_max_size =.*/post_max_size = 128M/" /etc/php/7.2/fpm/php.ini && \
service php7.2-fpm restart
# 可根据实际自行修改参数
Ubuntu 18.04
添加PPA源:
apt-get update && \
apt-get install -y software-properties-common && \
echo -e "\n" | LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php && \
apt-get update
安装PHP及其扩展:
apt-get install -y php7.2-fpm php7.2-mysql \
php7.2-bcmath php7.2-bz2 php7.2-curl php7.2-gd php7.2-intl \
php7.2-fileinfo php7.2-iconv \
php7.2-mbstring php7.2-xml php7.2-xmlrpc php7.2-zip
PHP配置:
sed -i "s/^listen\s*=.*$/listen = 127.0.0.1:9000/" /etc/php/7.2/fpm/pool.d/www.conf && \
sed -i "s/^;cgi.fix_pathinfo=.*/cgi.fix_pathinfo=0/" /etc/php/7.2/fpm/php.ini && \
sed -i "s/^memory_limit =.*/memory_limit = 256M/" /etc/php/7.2/fpm/php.ini && \
sed -i "s/^upload_max_filesize =.*/upload_max_filesize = 128M/" /etc/php/7.2/fpm/php.ini && \
sed -i "s/^post_max_size =.*/post_max_size = 128M/" /etc/php/7.2/fpm/php.ini && \
service php7.2-fpm restart
# 可根据实际自行修改参数
Caddy
Ubuntu 14.04
安装Caddy和必需:
apt-get install -y libcap2-bin sysv-rc-conf curl && \
curl https://getcaddy.com | bash -s personal
设置开机自启动:
curl -o /etc/init.d/caddy https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-sysvinit/caddy && \
sed -i "s|CONFIGFILE=.*|CONFIGFILE=/data/Caddyfile|i" /etc/init.d/caddy && \
sed -i "s|CADDYPATH=.*|CADDYPATH=/data/certs|i" /etc/init.d/caddy && \
chmod +x /etc/init.d/caddy && \
service caddy start && \
sysv-rc-conf caddy on
# 用命令 service caddy status 查看 Caddy 是否正常运行
# 如果没有,那就要检查了,看看 /etc/init.d/caddy,看看 Caddyfile 等配置文件
此时,Caddy启动,打开http://domain.com:1093
,会看到Caddy自带的目录索引,有个info.php
的文件,打开这个文件能看到PHP的信息。
Ubuntu 18.04
安装Caddy和必需:
apt-get install -y curl && \
curl https://getcaddy.com | bash -s personal && \
setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy
设置开机自启动:
curl -o /etc/systemd/system/caddy.service \
https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service && \
sed -i "s|Environment=CADDYPATH=.*|Environment=CADDYPATH=/data/certs|i" \
/etc/systemd/system/caddy.service && \
sed -i "s|-conf=/etc/caddy/Caddyfile|-conf=/data/Caddyfile|i" \
/etc/systemd/system/caddy.service && \
sed -i "s|ReadWriteDirectories=.*|ReadWriteDirectories=/data/certs|i" \
/etc/systemd/system/caddy.service && \
chown root:root /etc/systemd/system/caddy.service && \
chmod 644 /etc/systemd/system/caddy.service && \
systemctl daemon-reload && \
systemctl start caddy.service && \
systemctl enable caddy.service
# 调试命令:journalctl -f -u caddy.service
此时,Caddy启动,打开http://domain.com:1093
,会看到Caddy自带的目录索引,有个info.php
的文件,打开这个文件能看到PHP的信息。
OK,搞定!洗洗睡! - - 还有一部分。
搭建 WordPress
先用phpMyAdmin等各种,新建一个数据库。
之后,例如有个域名(e.g. www.hello.com)搭建WordPress,如果要使用HTTPS,域名先指向这个主机并生效。
新建一个目录用于存放网站文件:
mkdir /data/wwwroot/hello.com
各种方法把WordPress放到该目录下,例如:
cd /data/wwwroot/hello.com && \
apt-get install -y unzip && \
wget http://cn.wordpress.org/latest-zh_CN.zip && \
unzip latest-zh_CN.zip && \
mv wordpress/* ./ && \
rm -rf latest-zh_CN.zip wordpress
新建一个配置文件,并写入配置:
touch /data/config/hello.com.conf && \
cat > /data/config/hello.com.conf <<EOL
http://www.hello.com {
root /data/wwwroot/hello.com
tls off
gzip
fastcgi / 127.0.0.1:9000 php
rewrite {
if {path} not_match ^\/wp-admin
to {path} {path}/ /index.php?{query}
}
log /data/logs/1-hello.com.log {
rotate_age 90
}
errors /data/logs/0-hello.com.log {
rotate_age 90
}
}
EOL
# 演示,没有开启HTTPS
# 如需,则替换上面内容 http://www.hello.com 为 www.hello.com,还有下一行;
# 替换上面内容 tls off 为 tls yourname@mail.com 你的邮箱地址
然后修正一下权限、用户组啥的:
chown -R www-data:www-data /data/wwwroot/hello.com && \
chown -R www-data:www-data /data/config && \
chmod 444 /data/config/*.conf
重启Caddy
# Ubuntu 14.04 # service caddy status
service caddy reload
# Ubuntu 18.04 # systemctl stats caddy.service
systemctl reload caddy.service
浏览器打开域名http://www.hello.com
,就进入WordPress安装页面:
WordPress的固定链接,Caddyfile配置文件中已经有WordPress伪静态链接的重写,在WordPress后台设置即可。
结束
本文基本结束。
PS. 小内存,512MB的主机安装MySQL 5.6、MariaDB 10及其以上的版本,似乎可以。查了不少资料,最简单的解决方法好像是,把performance_schema = off
写入到my.cnf
里的[mysqld]
下,随后重启后,占用的内存也许没有想象中的那么大。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。