Concrete5的Caddy配置

这是让Caddy支持Concrete5的配置示例。

这个示例基于如下配置:

  • Ubuntu 16.04 Server
  • PHP version 7.0
  • MariaDB

安装配置

安装caddy,切换用户。

创建Caddy的目录

mkdir ~/caddy

下载Caddyfile,将域名改成你自己的。

下载caddy@.service, 改成php文件使用的用户名,将email改成你的,添加到/etc/systemd/system/caddy@.service

安装Caddy。将用户名和~/caddy的用户名保持一致。

curl https://getcaddy.com | bash -s ipfilter,ratelimit
sudo setcap cap_net_bind_service=+ep /usr/local/bin/caddy
sudo systemctl daemon-reload
sudo systemctl stop caddy@username
sudo systemctl start caddy@username
sudo systemctl enable caddy@username

为了方便重启,你可以把下面的内容保存为reload-caddy.sh脚本,将域名改成你自己的,将caddy@username的用户改成你的PHP文件对应的用户:

#!/bin/bash
sudo systemctl daemon-reload
sudo systemctl stop caddy@username
sudo systemctl stop php7.0-fpm
sudo systemctl start php7.0-fpm
sudo systemctl start caddy@username

添加可执行权限:

chmod +x ./reload-caddy.sh

然后你可以它来重启:

./reload-caddy.sh

安装PHP和MariaDB

在Ubuntu操作系统,你可以使用下面的命令安装它们:

sudo apt update

sudo apt install php7.0-common php7.0-cli php7.0-curl php7.0-fpm php7.0-gd \
php7.0-gd php7.0-json php7.0-mbstring php7.0-mysql php7.0-mysql \
php7.0-opcache php7.0-readline php7.0-xml mariadb-server curl zip unzip

安全安装MariaDB并创建数据库

# 1) 用sudo切换到root账号
sudo su

# 2) 按步骤安全安装数据库,给数据库设置root账号的密码。
mysql_secure_installation

# 3) 使用上一步设置的root账号密码启动MariaDB数据库
mysql -hlocalhost -uroot -p

# 4) 将数据库编码设置为UTF-8.
SET character_set_server = 'utf8';

# 5) 设置数据库结果集,你也可以设置成其他的。
SET collation_server = 'utf8_swedish_ci';

# 6) 创建Concrete5的数据库,你可以改成其他的。
CREATE DATABASE concrete5;

# 7) 给数据库创建用户和密码。改成你自己的。
CREATE USER 'concrete5'@'localhost' IDENTIFIED BY 'password';

# 8) 授权给上一步创建的用户
GRANT ALL PRIVILEGES ON concrete5.* to 'concrete5'@'localhost';

# 9) 使设置马上生效。
FLUSH PRIVILEGES;
exit

可以参考下面的设置修改/etc/php/7.0/fpm/php.ini

; Maximum upload filesize
upload_max_filesize = 2G
; Maximum post size, may contain multiple files
post_max_size = 4G
max_file_uploads = 20
max_execution_time = 120
max_input_time = 60
memory_limit = 128M
; Disable showing errors
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED

修改/etc/php/7.0/fpm/pool.d/www.conf的用户和Concrete5文件保持一致:

user = username
group = username
listen.owner = username
listen.group = username

下载Concrete5的发行版本,我使用的是8.x。

对于开发版,你可以按下面的指导克隆代码库。

下载管理界面的语言包。我下载了8.x的开发版的。

安装Concrete5

# 1) 给你的域名创建一个目录
mkdir -p ~/caddy/example.com

# 2) 进入该目录
cd ~/caddy/example.com

# 3a) 解压Concrete5的压缩包
unzip ~/concrete[VERSION].zip

# 重命名目录为public
mv concrete[VERSION] public

# 3b) 对于开发板,直接clone代码库即可
git clone https://github.com/concrete5/concrete5.git public

# 4) 进入public下的concrete子目录
cd public/concrete

# 5) 解压你的语言包
unzip ~/core-dev-[VERSION-LANGUAGE].zip
  1. 访问https://example.com按照向导完成安装。

  2. 在安装前,你可以选择好管理界面的语言。如果你想先选择英语,然后对漂亮的网址做一些必要的修改,它也之后在System & Settings/Basics/Languages中进行修改。

  3. 安装以后,在https://example.com/index.php/login登录(或者随后在https://example.com/login登录)。默认的管理员账号是admin。

  4. 进入System & Settings/SEO & Statistics/URLs设置重定向。

  5. 如果想要漂亮网址,勾选"[X] Remove index.php from URLS"并点击保存。

  6. 进入System & Settings/Optimization/Clear Cache,点击“清除缓存”。

  7. 退出。现在网站的网址应该都没有index.php了。但是在管理界面还有,但是正常网站访问者是看不到的。

Caddyfile

example.com {

	root /home/username/caddy/example.com/public

	fastcgi / /var/run/php/php7.0-fpm.sock php

	rewrite {
		to {path} {path}/index.html {path}/index.php /index.php/{uri_escaped}
	}

}

caddy@.service

; see `man systemd.unit` for configuration details
; the man section also explains *specifiers* `%x`

[Unit]
Description=Caddy HTTP/2 web server %I
Documentation=https://caddyserver.com/docs
After=network-online.target
Wants=network-online.target
Wants=systemd-networkd-wait-online.service

[Service]
; run user and group for caddy
User=username
Group=username
ExecStart=/usr/local/bin/caddy -conf=/home/username/caddy/Caddyfile -agree -email="firstname.lastname@example.com"
Restart=on-failure
StartLimitInterval=86400
StartLimitBurst=5
RestartSec=10
ExecReload=/bin/kill -USR1 $MAINPID
; limit the number of file descriptors, see `man systemd.exec` for more limit settings
LimitNOFILE=1048576
LimitNPROC=64
; create a private temp folder that is not shared with other processes
PrivateTmp=true
PrivateDevices=true
ProtectSystem=full
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target