基于Nginx PhP MySQL搭建Chevereto图床

Chevereto是目前最好的图床之一,支持图片的批量上传。
本文教大家如何搭建一个免费的Chevereto图床,演示环境为CentOS系统。

安装Nginx/Apache

Nginx与Apache都是web服务器,我们需要通过它搭建web服务。Nginx是轻量级高并发服务器,处理静态页面更加方便;而Apache则更加稳定安全,安装其中一个即可。

安装Nginx

使用yum install nginx命令下载安装Nginx


对于ubuntu系统的用户,使用apt install nginx即可

编译安装nginx

有些系统,yum或apt可能会提示找不到nginx这个包,这时我们就需要编译安装nginx
我们可以从 官网 下载源码,也可使用下方命令下载最新版nginx源码。
wget -c https://nginx.org/download/nginx-1.20.0.tar.gz
解压并转到相应目录 tar -zxvf nginx-1.20.0.tar.gz & cd nginx-1.20.0/
使用默认配置 ./configure
编译安装

make
make install

设置开机自启动,使用vim /etc/rc.local 打开文件,按下a进入编辑模式,加入 /usr/local/nginx/sbin/nginx 这一行,按下esc退出编辑模式,按两下Z保存退出。
编译好的nginx位于/usr/local/nginx/sbin文件夹下,进入该目录,启动nginx服务。

./nginx  启动
./nginx -s stop 停止
./nginx -s quit 退出
./nginx -s reload 重启

配置Nginx

不同版本的nginx其配置文件的位置可能不同,可以通过whereis nginx查找nginx位置,使用locate nginx.conf查找配置文件的位置



通过下面的命令编辑配置文件
sudo vim /usr/local/nginx/conf/nginx.conf
修改user为nginx,这是nginx运行的用户名



找到http那一栏,在其中加入下面的内容,这是图床的一些配置,注意修改server_name为自己的服务器的IP或域名。

server {
    # 监听80端口
    listen 80;
    # 服务器的IP或域名
    server_name 127.0.0.1;
    # 默认网站根目录
    root /var/www/picbed;

    # 不添加这行可能部分页面会出现403错误
    # 除了以上情况,还有403错误。需要排查的思路
    # 1. selinux
    # 2. 目录下有没有index.html 文件(如果有就需要配套有 index  index.html  )
    # 3. 权限问题
    # 4. nginx用户和
    autoindex on;
    index index.php;

    # fastcgi configurationg
    location ~ \.php$ {
            # php服务监听端口
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
    }

    # Image not found replacement
    location ~* (jpe?g|png|gif) {
            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 / {
            try_files $uri $uri/ /index.php?$query_string;
    }

保存退出,检查配置文件是否正确,然后重启nginx

安装Apache

Apache在CentOS系统上被称为httpd,使用yum install httpd进行安装。
安装完成后,使用systemctl enable httpd设置开机自启
使用service httpd statussystemctl status httpd查看运行情况,出现active则说明服务启动成功


httpd服务的默认监听端口为80,网站默认目录为/var/www/html/,可以不另作配置。

安装MySQL

在CentOS中默认安装有MariaDB数据库,它是MySQL的分支。为了搭建图床,我们需要安装MySQL。
可以进入 mysql官网,选择合适的版本并复制链接下载

wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm 
yum -y install mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql-community-server

配置MySQL

找到生成的临时密码 grep "password" /var/log/mysqld.log
输入 mysql -u root -p临时密码 以root身份登陆mysql
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; 修改密码
CREATE DATABASE picbed; 为图床创建数据库picbed
CREATE USER 'picbeduser'@'localhost' IDENTIFIED BY '图床用户的密码'; 为图床创建用户picbeduser
GRANT ALL PRIVILEGES ON picbed.* TO 'picbeduser'@'localhost'; 添加权限
FLUSH PRIVILEGES; 刷新权限
exit 退出mysql

安装php

自带的yum源搜索不到php,手动添加rpm源
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
使用yum list php*查看可以安装的版本
yum -y install php72安装php72版本
yum -y install php72-cli php72-common php72-devel php72-mysql 安装依赖

出现上述内容时表明php安装成功
图床默认上传大小为2M,我们可以对其进行扩容

找到/etc/php.ini,在文件最后加入以下配置,不然会被原有配置覆盖;也可以手动搜索原有配置项并修改值。

;文件上传允许的最大值
upload_max_filesize = 20M

;PHP可接受的最大POST数据
post_max_size = 20M

;每个脚本的最大执行时间,由于上传文件过大,执行时间也应变长
max_execution_time = 300
max_input_time = 300

;内存限制
memory_limit = 512M

;配置mbstring
mbstring.language = all 
mbstring.internal_encoding = UTF-8
mbstring.http_input =auto
mbstring.http_output =UFT-8
mbstring.encoding_translation = On
mbstring.detect_order = UTF-8
mbstring.substitute_character = none
mbstring.func_overload = 0

systemctl start php-fpm 使用该命令启动php-fpm

PHP-FPM(PHP FastCGI Process Manager)用于管理PHP 进程池的软件,用于接受web服务器的请求。
nginx分发过来的请求的时候,通过匹配后缀发现该请求是个动态的php请求,会把这个请求转给php

因为服务器使用的是nginx,所以需要使用php-fpm 因此之前我们配置nginx时指定php服务的端口为9000,这也是php的默认服务端口
启动php服务 systemctl start php-fpm
查看9000端口是否被占用 netstat -lnt |grep 9000


可能会遇到PHP服务已启动但9000端口未被占用的情况,这时找到/etc/php-fpm.conf,在[global]段前手动加上 [www]listen=127.0.0.1:9000 两行
最后使用 systemctl restart php-fpm 命令重启php-fpm即可。

查看php-fpm进程的情况

配置图床

我们将图床设置在80(http)端口
firewall-cmd --zone=public --add-port=80/tcp --permanent 防火墙开放80端口
systemctl restart firewalld 重启防火墙
还要进入服务器控制台,开放80端口

上述的步骤完成后,可以在浏览器地址栏输入自己的服务器地址访问(如果之前设置的不是80端口,则地址后还要加上端口)。
如果出现File not found.则说明nginx服务开启成功;如果连接不到主机,多半是防火墙的问题,关闭所有防火墙再重试。

下载图床

mkdir -p /var/www/picbed & cd /var/www/picbed 创建图床所在目录并转到该目录
wget https://github.com/rodber/chevereto-free/releases/download/1.4.2/1.4.2.zip 从github上下载图床源码
unzip 1.4.2.zip 解压,如果报错就把文件名中的点去掉再解压,新版(1.5以上)Chevereto不支持中文,推荐下载旧版。

安装图床

将下载好的源码解压,接着我们转到install路由进行安装,若php报错,使用以下命令给nginx权限。
chown -R nginx:nginx /var/lib/php/session/


再次刷新,此时可能会提示缺少文件

vim app/settings.php 创建对应文件,将下面的内容复制进去,注意修改掉密码。这个文件是图床连接mysql数据库的配置文件

<?php
$settings = array (
  'db_host' => 'localhost',
  'db_name' => 'picbed',
  'db_user' => 'picbeduser',
  'db_pass' => '数据库密码',
  'db_table_prefix' => 'chv_',
  'db_driver' => 'mysql',
  'db_pdo_attrs' => 
  array ( 
  ),
  'debug_level' => 1,
);

再次报错,这是由于php没有权限所致,使用下方命令给整个文件夹的内容赋予读写和执行权限 chmod -R 777 /var/www/picbed/

最后终于大功告成,可以尽情上传和欣赏图片了。