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 库和账号):



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


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



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


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














暂无评论内容