Chevereto 图床搭建全记录:CentOS 7 上 Nginx + PHP + MySQL 部署

Chevereto 是老牌的自建房图床程序,免费版(Chevereto-Free)功能就够个人和小团队用。这套记录在 CentOS 7 上从零搭了一个 LNMP 环境的图床:MySQL 8.0 + Nginx 1.16.1 + PHP 7.2,程序用 1.1.4 版本。

系统环境准备

先补上基础工具:

[root@localhost ~]# yum install vim lrzsz net-tools ntp wget

关闭 SELinux,临时生效用 setenforce 0,永久生效改配置文件里的 SELINUX 项:

#查看selinux状态
[root@localhost ~]# sestatus
#关闭selinux
[root@localhost ~]# setenforce 0
#修改配置文件
[root@localhost ~]# sed -ri 's/SELINUX=enforcing/SELINUX=disable/' /etc/selinux/config
[root@localhost ~]# reboot

防火墙直接停了(生产环境更稳妥的做法是只放行 80/443,不是整个关掉):

# 检查默认防火墙状态, 如果返回not running,可以跳过后面的命令
[root@localhost ~]# firewall-cmd --state

#停止并禁用firewalld:
[root@localhost ~]# systemctl stop firewalld     # 停止firewalld
[root@localhost ~]# systemctl disable firewalld  # 禁用firewall开机启动

校时,和标准时间差超过 3s 就同步一次:

# 检查机器当前时间和时区是否一致,若相互之间差别大于3s(考虑批量执行时的时差),建议校时。
[root@localhost ~]# yum -y install ntp
[root@localhost ~]# date -R

# 查看和ntp server的时间差异(需要外网访问,如果内网有ntpd服务器,自行替换域名为该服务的地址)
[root@localhost ~]# ntpdate -d cn.pool.ntp.org

#如果输出的最后一行offset大于1s建议校时
#和ntp服务器同步时间
[root@localhost ~]# ntpdate cn.pool.ntp.org

YUM 源换成腾讯云镜像,BASE 源和 EPEL 源各来一遍,换完清缓存重建:

#备份默认源
[root@localhost ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

#获取网络源
[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo

#更新缓存
[root@localhost ~]# yum clean all
[root@localhost ~]# yum makecache
[root@localhost ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo

#更新缓存
[root@localhost ~]# yum clean all
[root@localhost ~]# yum makecache

部署 MySQL 8.0

官方要求 MySQL 8.0 或 MariaDB 10 以上,这里用官方 YUM 源装 8.0:

[root@wordpress ~]# wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
[root@wordpress ~]# rpm -ivh mysql80-community-release-el7-3.noarch.rpm
[root@wordpress ~]# yum repolist enabled | grep "mysql.*-community.*"
[root@wordpress ~]# yum repolist all | grep mysql
[root@wordpress ~]# yum install mysql-community-server

启动并设置开机自启,从错误日志里捞出临时密码登录:

[root@wordpress ~]# systemctl start mysqld.service
[root@wordpress ~]# systemctl enable mysqld.service
[root@wordpress ~]# systemctl status mysqld.service
[root@wordpress ~]#  cat /var/log/mysqld.log | grep 'password'
[root@wordpress ~]# mysql -uroot -p

8.0 的密码组件叫 validate_password.(8 之前是 validate_password_,点号区别),把策略调低后重设密码:

密码验证策略低要求
mysql> set global validate_password.policy=0; (0或LOW代表低级)

密码至少要包含的小写字母个数和大写字母个数
mysql> set global validate_password.mixed_case_count=0;

密码至少要包含的数字个数。
mysql> set global validate_password.number_count=0; 

密码至少要包含的特殊字符数
mysql> set global validate_password.special_char_count=0; 

密码长度
mysql> set global validate_password.length=4;  #8.0最小长度为4

再次设置密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'dqz123';
mysql> flush privileges;

建库建用户,字符集用 utf8mb4,权限只给到 chevereto 库:

mysql> CREATE DATABASE `chevereto` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
[root@wordpress ~]# vim /etc/my.cnf
character-set-server=utf8mb4
mysql> create user chevereto@localhost identified with mysql_native_password by 'dqz123';
mysql> grant all privileges on chevereto.* to chevereto@localhost;
mysql> flush privileges;
[root@wordpress ~]# mysql -uchevereto -p
Enter password:

部署 Nginx 与 PHP

RPM 装稳定版:

[root@wordpress ~]# wget http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.16.1-1.el7.ngx.x86_64.rpm

[root@wordpress ~]# rpm -ivh nginx-1.16.1-1.el7.ngx.x86_64.rpm

[root@wordpress ~]# nginx -v
nginx version: nginx/1.16.1

主配置里按 CPU 核数调整 worker(不超过主机核数):

[root@wordpress ~]# vim /etc/nginx/nginx.conf
worker_processes  2;			//根据主机CPU核心进行配置,不得高于主机核数
worker_cpu_affinity auto;
worker_rlimit_nofile 65535;

站点配置单独写一个 chevereto.conf。root 指向代码目录,try_files 是官方给的规则,PHP 那个 location 必须有,否则访问域名会直接下载文件而不是执行:

[root@wordpress ~]# vim /etc/nginx/conf.d/chevereto.conf
server {
    listen       80;			#监听端口和wordpress一样
server_name  cdn.xxxx.com;	#这里写DNS解析好的域名
    root    /var/www/chevereto;	#代码文件存储根目录,需创建
    location / {
         index  index.php;
         try_files $uri $uri/ /index.php?$query_string;
}
#以上的参数是官方给出的

    location ~ .php$ {	#这个必须有,不然访问域名则直接下载文件
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

语法检查通过再启动:

[root@wordpress ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@wordpress ~]# systemctl start nginx
[root@wordpress ~]# systemctl enable nginx
[root@wordpress ~]# systemctl status nginx

PHP 7.2

官网要求 PHP 7 以上,注意当时的免费版不支持 PHP 7.3,所以装的 7.2(webtatic 源):

[root@wordpress ~]# yum -y install epel-release

[root@wordpress ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

[root@wordpress ~]# yum search php

[root@wordpress ~]# yum install php72w-fpm php72w-opcache php72w-mysql

如果报 Requires: libargon2.so.0 依赖问题,先补这个包:

[root@wordpress ~]# rpm -Uvh http://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libargon2-20161029-3.el7.x86_64.rpm

[root@wordpress ~]# yum install libargon2

配 Nginx 的话要把 php-fpm 的运行用户从 apache 改成 nginx:

[root@wordpress ~]# vim /etc/php-fpm.d/www.conf 
user = apache
group = apache

#更改为nginx用户和组
user = nginx
group = nginx

不改属主会报 G: Sessions are not working on this server (session_start):

[root@wordpress ~]# chown -R nginx. /var/lib/php/
[root@wordpress ~]# systemctl start php-fpm
[root@wordpress ~]# systemctl enable php-fpm

安装 Chevereto 本体

程序从 GitHub 的 Chevereto-Free releases 下载(官网 chevereto.com),解压到网站根目录,记得把所有权给 Nginx 的运行用户:

[root@wordpress ~]# cd /var/www/chevereto/
[root@wordpress ~]# wget https://github.com/Chevereto/Chevereto-Free/archive/1.1.4.tar.gz

[root@wordpress chevereto]# tar -xf 1.1.4.tar.gz

[root@wordpress chevereto]# mv Chevereto-Free-1.1.4/* ./
[root@wordpress chevereto]# rm -rf Chevereto-Free-1.1.0 1.1.4.tar.gz

[root@wordpress chevereto]# chown -R nginx. *

浏览器访问配置好的域名,进入安装向导,依次填站点信息和数据库连接(就用前面建的 chevereto 库和账号):

image-234
image-235
image-236

创建管理员账号后即可完成:

image-238
image-239

后台配置与踩坑小结

封面图:后台可以更改显示封面图片的设置,影响列表页的展示形态:

image-240
image-241
image-242

上传大小:图片单文件上限在设置里调整,注意 PHP 侧的 upload_max_filesize / post_max_size 也要一并放开,不然会被 PHP 先拦掉:

image-243
image-244

踩过的坑:

这套环境里最容易卡住的三处:PHP 版本选了 7.3 导致免费版不认;php-fpm 用户组没改造成 nginx 引起 session 报错;以及伪静态 try_files 抄漏,页面直接变成下载 tgz。都处理过之后,剩下的就只是把域名解析到服务器了。

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容