# 要求

  • PHP 7.4 ( ≥ 7.3 )
  • 数据库: MySQL 8 / MariaDB 10
  • Cron
  • Web 服务器: Nginx / Apache / *any

# PHP

PHP 必须带有以下扩展: curl hash json mbstring pdo pdo-mysql zip session xml fileinfo

PHP 必须支持 PNG、GIF、JPG、BMP、WEBP (在 Imagick 或 GD 扩展下的) 图片格式。

Imagick

系统默认使用 Imagick (ImageMagick) 处理图像。其次才使 GD。

# PHP 配置

建议在 Chevereto 安装中使用以下 ini 配置:

upload_max_filesize = 20M;
post_max_size = 20M;
max_execution_time = 30;
memory_limit = 512M;

# 数据库

MySQL/MariaDB 用户必须在目标数据库上具有 ALL PRIVILEGES。 Chevereto 需要以下内容才能连接到数据库:

  • 数据库名

  • 数据库用户名及其密码

# Cron

需要使用 cron 来处理应用程序后台作业。您安装的 cron 可能如下所示:

* * * * * IS_CRON=1 /usr/bin/php /var/www/html/chevereto.loc/public_html/cron.php >/dev/null 2>&1

其中 * * * * * (opens new window) 是 cron 表达式

# 测试 cron

您可以到 explainshell (opens new window)查看该命令,您可以根据需要自由修改它。在命令中添加sudo-u www-data,以www-data用户身份运行命令:

sudo -u www-data IS_CRON=1 /usr/bin/php /var/www/html/chevereto.loc/public_html/cron.php >/dev/null 2>&1

# Web 服务器

# PHP 配置

Web 服务器必须配置为 PHP (opens new window) 环境,建议使用 PHP-FPM (opens new window)

# 文件系统权限

请赋予相应的文件夹权限和 web 用户执行权限。这是允许 Chevereto 修改文件系统的必要条件,这对于一键更新和许多其他功能是很必要的。

提示

😜 Web服务器用户通常为 www-data,宝塔面板一般为 www,请授予该用户一定的权限

Chevereto 在以下路径中需要赋予 可读写 访问权限:

  • app/content
  • app/content/languages
  • app/content/languages/cache
  • app/content/system
  • content
  • images

对临时文件夹的 访问权限( Linux 中为/tmp;Windows 中为 C:/Windows/Temp)。

# URL 伪静态

Web 服务器必须将 Get/image/ome-name.<id> 等 HTTP 请求重定向到 /index.php。以下是 nginx (opens new window)Apache HTTP Server) 的使用说明。

# Nginx URL 伪静态

example.com.conf

# Context limits
client_max_body_size 20M;

# Disable access to sensitive files
location ~* (app|content|lib)/.*\.(po|php|lock|sql)$ {
    deny all;
}

# Image not found replacement
location ~ \.(jpe?g|png|gif|webp)$ {
    log_not_found off;
    error_page 404 /content/images/system/default/404.gif;
}

# CORS header (avoids font rendering issues)
location ~ \.(ttf|ttc|otf|eot|woff|woff2|font.css|css|js)$ {
    add_header Access-Control-Allow-Origin "*";
}

# Pretty URLs
location / {
    index index.php;
    try_files $uri $uri/ /index.php$is_args$query_string;
}

# Apache URL 伪静态

确保 mod_rewrite (opens new window) 被启用,并且你的虚拟主机设置允许执行 URL 重写

    <Directory /var/www/html>
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        Require all granted
    </Directory>

Apache .htaccess 配置文件已经包含在软件中

/.htaccess

# Disable server signature
ServerSignature Off

# Enable CORS across all your subdomains (replace dev\.local with your domain\.com)
# SetEnvIf Origin ^(https?://.+\.dev\.local(?::\d{1,5})?)$   CORS_ALLOW_ORIGIN=$1
# Header append Access-Control-Allow-Origin  %{CORS_ALLOW_ORIGIN}e   env=CORS_ALLOW_ORIGIN
# Header merge  Vary "Origin"

# Disable directory listing (-indexes), Multiviews (-MultiViews)
Options -Indexes
Options -MultiViews

<IfModule mod_rewrite.c>

	RewriteEngine On

	# If you have problems with the rewrite rules remove the "#" from the following RewriteBase line
	# You will also have to change the path to reflect the path to your Chevereto installation
	# If you are using alias is most likely that you will need this.
	#RewriteBase /

	# 404 images
	# If you want to have your own fancy "image not found" image remove the "#" from RewriteCond and RewriteRule lines
	# Make sure to apply the correct paths to reflect your current installation
	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteRule images/.+\.(gif|jpe?g|png|bmp|webp) - [NC,L,R=404]
	#RewriteRule images/.+\.(gif|jpe?g|a?png|bmp|webp) content/images/system/default/404.gif [NC,L]

	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_FILENAME} !-d
	RewriteCond %{REQUEST_URI} !\.(css|js|html|htm|rtf|rtx|svg|svgz|txt|xsd|xsl|xml|asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|exe|gif|gz|gzip|ico|jpe?g|jpe|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|swf|tar|tif|tiff|wav|webp|wma|wri|xla|xls|xlsx|xlt|xlw|zip)$ [NC]
	RewriteRule . index.php [L]

</IfModule>

# 真实 IP

对于在任何一种代理(包括 CloudFlare),都要求 Web 服务器为客户端连接 IP 设置适当的值

⚠ 如果没有配置,软件将无法检测到用户真实的 IP

  • Nginx: ngx_http_realip_module
  • Apache: mod_remoteip