逛Telegram的时候无意间遇到了TOTORO625的这篇博文,翻到最底下看到他提到了Chevereto图床。本着好奇心理,再加上翻墙主力V2ray服务器所需要的前端伪装站一直是nginx默认欢迎页让我很不爽,遂一时兴起,决定在这个V2Ray的VPS上建一个图床前端。总体过程还算流畅,中间遇到的几个小问题因为有搭建wordpress的经验基本很快都解决了。服务器环境还是一如既往的LEMP(Linux+Nginx+MariaDB+PHP)。当然L和E这两部分因为已经搭了V2Ray的原因之前就准备好了,数据库和PHP是这次新装入的。

废话不说先看效果图

总的来说还是很漂亮很现代的。移动端的适配也做得非常好。(官方样站:https://demo.chevereto.com/

下面是搭建过程的干货:

首先是Chevereto的官网。然而官网上并没有直接标注免费版的获取方式,免费版实际上有自己的GitHub Repo。似乎在安装付费版的过程中首先安装的也是免费版(没有买过付费版,但是官方提供的安装教程免费版和付费版通用,似乎是先安装免费版再激活付费这么个模式)。总的来说免费版比起每月10刀的入门级订阅,缺少的是及时的功能更新(免费版推迟6个月),以及客服。但是目前来看免费版的功能已经可以满足基本的使用需要了。

官方Wiki提到Chevereto有如下依赖:

  • Nginx / Apache 服务器
  • MySQL 5.0
  • PHP 5.5.0

实际上PHP根据版本不同还有一堆额外插件要装。我们姑且就先按照这个列表一个一个来。使用的Linux发行版依旧是Debian 9。别问我为什么选Debian不用Ubuntu。其他发行版默认的配置文件路径及站点资源根目录可能不同,请参考对应发行版的说明文档。

I. Nginx

这部分如果已经安装了Nginx可以直接跳过。后续部分需要对配置文件进行的调整基本上以插入新内容为主,不太需要修改现有项目。

首先照例

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install nginx

初次安装会自动要求安装一堆的依赖,接受并安装即可。Debian上Nginx默认的站点内容安装在/var/www/html/下。Nginx 会自动安装为服务,开机自启。从浏览器输入VPS的公网IP(或者是指向该IP的域名,域名可以从namecheap便宜地购得,价格基本1刀/年)即可验证是否安装成功。正常情况会看到如下Nginx欢迎页

至此Nginx服务器安装完成(就是这么简单,跑起来个样例站简单,但配置实际上很有学问可讲,玩法很多)

II. MySQL (MariaDB)

第二步是安装数据库。Deb系的软件仓库基本上都以MariaDB作为MySQL的开源实现。不过不用管这些,直接

sudo apt-get install mysql-server

初次安装依旧一大篇的依赖,没关系,全给装上。安装完后运行

sudo mysql_secure_installation

进行安全配置。问到密码时,默认的root密码为空,直接回车即可。之后会被要求修改root密码,并按照提示移除一系列的安全隐患(按默认值选即可)。完成后无法用密码的方式远程访问数据库,没有关系,ssh远程登录后 sudo mysql 依旧可以进行数据库修改。

这里我们先把Chevereto所需要的数据库创建好,顺带可以测试MySQL是不是安装成功了。依次执行以下命令

sudo mysql

以root特权访问数据库,不需要密码认证。进入数据库模式的特征是:命令行会改为以”MariaDB [(none)]>”开头

create database chevereto;
create user 'chevereto'@'localhost' identified by 'password';
grant all on chevereto.* to 'chevereto' identified by 'password';

这里要注意以下几点,不要直接复制粘贴:

  • SQL语句以分号结尾,一定不要落下句末的分号(;)
  • 上述第一条命令创建了一个名为chevereto的数据库
  • 上述第二条命令在本地域(localhost)创建了一个名为chevereto的用户,其密码为password。建议按自己的习惯设置密码
  • 上述第三条命令将chevereto数据库下所有数据表的权限授予了上述名为chevereto的用户,而该用户的密码是password。密码应和上一条创建用户时设定的一致。
  • 注意:这里为了方便,我们建立了一个名为chevereto的数据库,和一个同名用户。实际上是两个不一样的东西,不要搞混
  • 上述每一条命令执行后,应该看到“Query OK, x rows affected (0.0x sec)” 的字样。如果报错要先排查,再进行下一步
  • 完成后可以按此教程的说明建几个表玩一玩。理论上上面看到的都是OK就没问题,不用管了
  • 最后输入exit,退出数据库模式

III. PHP

PHP 这段实际上比较麻烦。因为不同版本的PHP包含的Chevereto依赖也不一样。PHP 的软件包可能也会换包名。如果以后apt-get的时候提示以下包名检索不到,建议搜索一下新的名称。而且PHP本身和apache配合的比较好,要和nginx搭配使用实际上需要做不少额外设置。因此,这一步会逐步安装所有需要的PHP依赖,并适当修改现有的nginx设置,完成Chevereto安装环境的初步准备。

首先安装PHP基本组件,和common库

sudo apt-get install php7.0-common php7.0-cli php7.0-fpm php7.0-mbstring

其中common和cli是必要依赖,fpm为nginx配合API使用,mbstring是官方安装要求中点名需要的扩展。包名中php7.0是Debian软件仓库中目前的最新版本,以后更新版本建议使用对应的版本号进行安装

接下来要进行一系列的配置文件修改。首先修改PHP的fpm配置。该配置文件位置为 /etc/php/7.0/fpm/pool.d/www.conf

sudo nano /etc/php/7.0/fpm/pool.d/www.conf

使用nano编辑的话,ctrl+w搜索“listen = ”,并将
listen = /run/php/php7.0-fpm.sock
改为
listen = 127.0.0.1:9000
之后ctrl+o保存,ctrl+w退出

完成后

sudo service php7.0-fpm restart

重启PHP的fpm服务

接下来对应修改nginx的站点配置,启用php。Nginx 站点的配置文件位于/etc/nginx/sites-available/。如果你自己已经建站那么修改现有站的conf,如果初次使用可以直接在默认的default配置上修改。依旧是使用nano,在对应配置文件的最后一个没有被注释掉(所在行的起始不带#)的反大括号(})的前一行开始插入以下内容

location ~ \.php$ {
    include fastcgi.conf;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}

之后运行nginx -t测试配置文件没有语法错误。看到“test is successful”字样即可。测试成功后

sudo service nginx reload

刷新Nginx配置。

为了验证PHP配置成功,建议进行如下测试。在站点根目录(/var/www/html/)建立一个info.php文件,并打开编辑

cd /var/www/html/
sudo touch info.php
sudo nano info.php

在info.php中直接插入如下内容,并ctrl+o保存,ctrl+w退出。(就这一行即可,注意空格。)

<?php 
phpinfo(); 
?>

之后在浏览器中键入 <网址或ip地址>/info.php,应当可以看到如下页面(<网址或ip地址>替换为自己服务器的域名或IP。如果IP是1.2.3.4,那么应该输入1.2.3.4/info.php)

如果看到了类似以上的PHP信息,代表nginx和php的配置没有问题,可以进行下一步。一些常见问题的解决思路:

  • 看到的是nginx的502 bad gateway:说明nginx没能和php-fpm成功通信。可以参考此详细步骤
  • 看到的是空白页:说明nginx的php配置有问题。解决这个问题有很多种nginx配置方法,可以参考此stackoverflow讨论

IV.安装Chevereto图床

折腾了这么半天,总算是要步入正题了。Chevereto官方提供了多种安装方案,这里推荐使用php通过浏览器访问安装。将官方提供的PHP installer直接下载到/var/www/html/

cd /var/www/html/
sudo wget https://chevereto.com/download/file/installer
sudo mv installer installer.php

然后在浏览器中访问 <网址或ip地址>/installer.php。正常情况下会看到如下页面

可见虽然官方说的环境要求很简单,实际上还是有一堆插件没提到。我们依次来解决:

  • cURL: 安装 php7.0-curl
  • PDO_MYSQL: 安装 php7.0-mysql
  • zip: 安装 php7.0-zip
  • GD_Library: 安装 php7.0-gd
  • utf8_encode和utf8_decode: 安装 php7.0-xml
  • 没有写权限:sudo chown -R www-data:www-data /var/www/html/

关于上面这一堆,稍微啰嗦两句:

  • 安装软件用的命令是sudo apt-get install + 包名 感觉没必要赘述了
  • 建议一个一个装,装完了刷新下页面看看对应的那条错误是不是消失了
  • 上述几个包提到缺失/需要启用的再装。没提到不用装。举个例子,utf8的encode和decode方法在PHP7.2中被整合进了common里,那么以后就不需要装xml这个扩展了。
  • 没有写权限是因为/var/www/html/默认是以root建立的,而PHP-fpm的默认用户是www-data,因此没有整个文件夹下的写权限。这里简单粗暴的一口气全chown给www-data了,在只有这一个站点的情况下不影响nginx运行。但是如果你有别的子站点有其独立的权限设置,并放在了/var/www/html/下的某个子文件夹,请一定要小心配置!

所有依赖都装好以后刷新下页面,就能看到真正的安装欢迎界面啦

显然,我们选左侧的Free版本。一点进去就提示我们要按他的要求修改nginx配置文件

其实很简单,还是打开/etc/nginx/sites-available/ 下对应站点的配置文件,在最后一个没被注释掉的反大括号前,插入文本框里提供给你的内容。目前版本要求插入的是以下内容

#Chevereto: Disable access to sensitive files
location ~* /(app|content|lib)/.*\.(po|php|lock|sql)$ {
	deny all;
}
#Chevereto: CORS headers
location ~* /.*\.(ttf|ttc|otf|eot|woff|woff2|font.css|css|js) {
	add_header Access-Control-Allow-Origin "*";
}
#Chevereto: Upload path for image content only and set 404 replacement
location ^~ /images/ {
	location ~* (jpe?g|png|gif) {
		log_not_found off;
		error_page 404 /content/images/system/default/404.gif;
	}
	return 403;
}
#Chevereto: Pretty URLs
location / {
	index index.php;
	try_files $uri $uri/ /index.php?$query_string;
}

这里多嘴一下,最后一组位置信息,即“location /”,一般与当前站点的配置是冲突的。因为现有站点一般已经指定了一个“/”对应的目录,直接粘贴会导致重复,从而报错。建议将上述“location /”大括号内的内容与现有配置合并。如果你是基于默认的default配置修改的话,那么当前“location /”中只有一条“try_files”与上述要求冲突,直接用上面的内容覆盖原有内容即可。

完成配置文件合并后保存退出,nginx -t检查确认无错误后,sudo service nginx reload重载nginx,然后点击安装界面上的“Install Chevereto Free”。正常情况会自动安装最新版,然后重新载入到初次安装配置界面。

V. 首次配置Chevereto

初次配置,会看到如下欢迎界面,需要我们提供数据库信息。这里填入步骤II中为chevereto配置的用户、密码和数据库。Database Host不用改,最后一项前缀保持默认即可

这里再强调一次,user password一项必须和步骤II中指定的一致,不要看我写password你也写

验证数据库连接正常后就会显示如下管理员用户配置的界面了

按照要求录入信息即可。最后一项站点模式可以在个人和社区间选择。建议按自己的需要配置。全都配置完成后返回主页就是这个样子(下图为建设成社区模式,最开始的图是个人模式。初始配置后依旧可以在两个模式中间转换,不用紧张):

后记

如你所见,上传最大大小被设置为了2M。别说是单反照出来的相片了,就连手机相片都不一定够用。这个上传大小限制是受PHP和Nginx两方的配置导致的结果。如何增大配置简单的Google一下就能找到结果了,建议增加到20M,找到安全和易用的平衡。

稍微玩了玩才发现Chevereto实际上本身也提供了大量配置可供站长定制,是一个非常好用的图片共享站点软件。算是个小惊喜吧。

哦对了,这个软件的配置和V2Ray websocket+tls+nginx反向代理+header分流的配置方法完美兼容。已经按照ws+tls+nginx分流方案建设的站点,可以按照上面的做法编辑现有的配置文件,而不影响分流的配置,将前端替换成上述图床站。用浏览器直接访问网址可以走443正常tls流量,访问到前端正规站点;v2ray客户端匹配header走同样的443端口会被分流到后台的代理服务器,实现tls翻墙。目前来看非常的稳,强烈推荐。


4 条评论

Sunny

Sunny · 03/18/2018 上午5:29

这是什么 图片的CDN?

    Canmipai

    Canmipai · 03/21/2018 上午7:51

    大概可以当成CDN,但是和传统意义上讲的CDN不太一样。主要的用途其实是把图片传上来生成静态链接,可以插入到不方便上传图片的其他的地方去,比如不允许上传图片的博客,或者什么论坛的签名栏。功能和imgur基本一致。

      Sunny

      Sunny · 04/09/2018 下午1:46

      懂了 那比imgur好在哪?中国的服务器?

        Canmipai

        Canmipai · 06/29/2018 上午6:12

        自己的服务器,隐私上更好一些

发表评论