之前有写过:Caddy Server 笔记,今天再来折腾一下。

折腾什么呢?折腾前端Caddy Server,后端PHP,MySQL数据库,再Supervisor这个进程管理工具。

初始安装

例如Debian系统,先安装PHP、MySQL和Supervisor:

apt-get install -y php5-fpm php5-mysql mysql-server supervisor

MySQL安装过程中需要输入2遍root账户的密码。

sed -i 's/^listen\s*=.*$/listen = 127.0.0.1:9000/' /etc/php5/fpm/pool.d/www.conf

Caddy Server 安装

root用户运行:

curl https://getcaddy.com | bash

Caddy Server Caddyfile配置文件

在文件/home/Caddyfile写上配置文件,例如:

onebox.site {
    root /home/wwwroot/onebox.site
    # tls admin@onebox.site
    gzip
    fastcgi / 127.0.0.1:9000 php
    rewrite {
        if {path} not_match ^\/wp-admin
        to {path} {path}/ /index.php?{query}
    }
}

上面配置中的rewrite还适用于Typecho博客程序的链接重写(会提示检测不到还是啥的,强制即可);

下面再来个h5ai(文件索引PHP程序)的rewrite

rewrite {
    if {path} ends_with /
    to {dir}/index.html {dir}/index.php /_h5ai/public/index.php
}

Caddy Server 运行

caddy -conf /home/Caddyfile -email admin@onebox.site

上面的邮箱用于从Let's Encrypt自动设置HTTPS;也可以替换为,在Caddyfile配置文件中设置,例如:tls admin@onebox.site;更多tls设置选项见官方文档(传送门)(例如关闭,例如使用已有证书)。

自动设置HTTPS还有些要求:

  • 主机头非空,非IP地址。这个上面Caddyfile配置文件中已经指定了一个主机头。
  • 端口没有明确指定80端口。例如配置文件中第一行修改为:onebox.site:80 {就不行了。
  • 没有明确指定HTTP。Caddy可以设置只HTTP。
  • TLS没有关闭。配置文件中没有tls off这一条。
  • 也不是通过TLS设置自己的证书文件。
  • Caddy能够使用80443端口。要是装了其他的Web服务器需要注意了。

当然在运行之前,先随便往root /home/wwwroot/onebox.site这个目录中放入些东西,例如WordPress,然后:chown -R www-data:www-data /home/wwwroot/onebox.site

要不然就在配置文件中加上browse,在gzip下面,用于打开目录索引,就像是Nginx的autoindex on;

注意到这些,并且运行了上面命令之后,这时候网站就已经在运行了。组合键Ctrl + c中止。

Caddy Server Supervisor配置

目录/etc/supervisor/conf.d下新建一个caddy.conf配置文件,内容如下:

[program:caddy]
command = /usr/local/bin/caddy -conf /home/Caddyfile -email admin@onebox.site
user = root
autostart = true
autoresart = true

随后命令supervisorctl用于查看管理进程的运行状态,并进入命令行管理,quit退出。

2016-11-19_215809.png

客观们看到的应该是STOPPED状态,在supervisor ctl中执行命令start caddy,应该就可以了,如果不行,重启系统。

我就在操作Supervisor的时候碰到一个错误:

 * Starting Supervisor daemon manager...
Error: Another program is already listening on a port that one of our HTTP servers is configured to use.  Shut this program down first before starting supervisord.
For help, use /usr/bin/supervisord -h
   ...fail!

我是重启VPS解决的,好像也可以通过如下两行命令处理此问题(unlink /var/run/supervisor.sock):

find / -name supervisor.sock
unlink /***/supervisor.sock

备注:

  • supervisorctl -c /etc/supervisor/supervisord.conf
  • supervisorctl status caddy
  • supervisorctl start caddy
  • supervisorctl stop caddy
  • supervisorctl restart caddy
  • supervisorctl reread # 读取有更新(增加)的配置文件,不会启动新添加的程序
  • supervisorctl update # 重启配置文件修改过的程序

结束了

这样就已经可以用了,更多的问题善用Google和百度吧,来张我搭建WordPress的截图:

2016-11-19_220739.png

对于 Caddy Server 所属用户和用户组的疑问

我有点纠结对于Caddy所属的用户和用户组,上面Supervisor管理的是用root用户来运行的,虽然能正常运行,但是觉得不好。

我在一篇帖子中(传送门)看到以www-data的用户运行Caddy。额,就是在/etc/supervisor/conf.d/caddy.conf里面替换一行user = root。然后setcap cap_net_bind_service=+ep /usr/local/bin/caddy给权限以能使用1024以下的端口。

嗯,贴下咩咩的/etc/supervisor/conf.d/caddy.conf

[program:caddy]
command=/usr/bin/caddy -conf="/var/www/Caddyfile"
directory=/var/www
autostart=true
autorestart=unexpected
startsecs=1
startretries=3
exitcodes=0,2
stopsignal=QUIT
stopwaitsecs=10
stopasgroup=false
user=www-data
redirect_stderr=true
stdout_logfile=/var/log/caddy/caddy.log
stderr_logfile=/var/log/caddy/caddy_error.log