Lychee自建图床配置教程

基于Apache2+PHP+MariaDB

Posted by zhaiyunfan on January 21, 2020

前言

对于一个blog来说,图文并茂是最基本的要求。GitHub Page没办法把做到把repo中的图片插入并显示到正文中 也不应该,因为很不优雅 所以一个可以上传图片并提供外链的图床就成了必需品。

免费的图床稳定性堪忧,付费服务对于学生来说性价比又有一点低,于是在GitHub上找了很久之后,锁定了Lychee这套开源图床

于是也就理所应当的在阿里云用上了学生特惠的低价服务器 感谢马云爸爸 。配置的过程本来以为很简单,但在因为不熟悉Linux系统和整套PHP+Nginx+MySQL体系的缘故,前前后后踩了好几天的坑

为了方便后来人,这里提供一套已经在Ubuntu16.04环境下完整测试保证正常的配置流程,其中,弃用了原本性能更强的Nginx框架改用了PHP下配置更友好的Apache2 web服务器,你只需要跟着整个安装步骤走,就一定可以正确的配置好属于你的个人图床

注意:Lychee现在有更新的Lychee-Laravel,下文中所有提及Lychee处所指均为Lychee-Laravel,所配置的网站亦基于后者,如果你遇到意料之外的错误,既可以在评论区与我沟通,也可以在Lychee-Laravel处查阅LycheeOrg提供的wiki,如果这依然没有解决你的问题,你可以访问他们的讨论组来求教,社区中的维护者们都非常nice! 没有嫌弃我糟糕的散装英语

那么,让我们开始吧!

预备工作

这里以阿里云上标准的ECH服务器为例,预装环境为Ubuntu16.04,由于各人可能使用不同的云服务 如腾讯云 这里不再赘述服务器的申请过程。同时由于现在各家云服务的控制台操作已经基本傻瓜化,我们假定你已经使用SSH连接上了你的服务器

在利用SSH远程连接到你的服务器上之后,会自动启动一个终端

由于整个服务器刚刚初始化,在配置网站环境前需要先更新一下你的本地包索引,保证可以获取最新的软件

先后应用以下两个命令

apt-get update
apt-get upgrade

关于这两个命令的意义和区别,总的来说,apt-get update就是访问服务器,更新可获取软件及其版本信息,但仅仅给出一个可更新的list,具体更新需要使用apt-get upgrade,此命令可以执行你已安装的全部软件的更新操作

如果没有报错则是更新成功,可以进行环境的配置工作

安装工作

安装Apache2

Apache2 HTTP服务器是世界上使用最广泛的Web服务器。它提供了许多强大的功能,包括动态加载模块,强大的媒体支持,以及与其他流行软件的广泛集成。在这个项目的部署中我们使用Apache2而非性能更强的Nginx的原因是前者配置时更友好

使用apt-get命令可以很方便的安装Apache2,更新完本地包索引后直接使用命令:

apt-get install apache2

确认安装后,apt-get将安装Apache2和所有必需的依赖项。

如果没有报错则是安装成功,使用命令:

service apache2 status

确认一下Apache2的运行状态,如果返回类似于:

● apache2.service - LSB: Apache2 web server
Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
        └─apache2-systemd.conf
Active: active (running) since Tue 2020-01-21 13:38:25 CST; 44min ago
    Docs: man:systemd-sysv-generator(8)
CGroup: /system.slice/apache2.service
        ├─3298 /usr/sbin/apache2 -k start
        ├─3301 /usr/sbin/apache2 -k start
        └─3302 /usr/sbin/apache2 -k start

则证明运行正常,此时可以直接在浏览器地址栏直接输入你服务器的ip地址,如果显示了Apache2的默认欢迎界面,则证明配置成功;如果访问失败,则需要更改你云端服务器防火墙的安全策略,这块的步骤将在后文讲述MariaDB的配置方法时介绍,如果需要你可以先直接跳到后面那节来先配置好

安装PHP

运行以下命令:

apt-get install software-properties-common
apt-get install python-software-properties
add-apt-repository ppa:ondrej/php && sudo apt-get update

上面这三步是在安装必要的依赖项。由于我使用的阿里云镜像默认最高只能安装PHP7.0,而Lychee最低需要PHP7.1才能正常运行,所以这里添加了PHP官方的ppa软件源以直接获取目标版本的PHP

apt install libapache2-mod-php7.3

这一步安装了Apache2PHP7.3模块本体,安装完成之后可以使用命令:

php -v

来确认PHP的安装情况,如果显示类似于:

PHP 7.3.13-1+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Dec 18 2019 14:48:32) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.13, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.13-1+ubuntu16.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies  

的结果则证明安装成功,上文结果显示已安装了PHP7.3,这是Lychee官方推荐的版本

然后安装之后从GitHub拉取Lychee必备的Git模块

apt install git

安装完成后开始安装Lychee必备的几个PHP模块,分别是:

apt install php7.3-mysql
apt install php7.3-imagick
apt install php7.3-mbstring
apt install php7.3-json
apt install php7.3-gd
apt install php7.3-xml
apt install php7.3-zip

这里安装完后可以使用:

php -m

命令显示全部已安装模块,来确认一下是否安装了全部必需的模块,这里包括:

session exif mbstring gd mysqli json zip imagick

全部安装完成后顺便安装一下Lychee展开安装时必备的软件,其中最重要的就是Composer

ComposerPHP的一个依赖管理工具。我们可以在项目中声明所依赖的外部工具库,Composer会帮你安装这些依赖的库文件,有了它,我们就可以很轻松的使用一个命令将其他人的优秀代码引用到我们的项目中来。

为了安装Composer,我们一般会直接使用:

apt-get install composer

但是对于阿里云这里有一些问题:阿里云默认的镜像中,即使执行了命令:

apt-get update
apt-get upgrade

apt能自动安装的Composer的最新版本仍为1.0.0(beta),而且无法更新!而当极低版本的Composer搭配高版本的PHPPHP7时,由于在版本更迭中PHP的语法已发生了一些变化,Composer完全处于无法使用的状态,不论你执行什么命令,都会跳出ERROR

[ErrorException]                                                                         
"continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"?  

所以为了从源头上规避这一问题,我们使用阿里云提供的全量镜像进行手动安装

首先使用此命令进行下载:

curl -O https://mirrors.aliyun.com/composer/composer.phar

从阿里云下载Composer本体完成后,使用此命令重命名:

mv composer.phar composer

接着添加可执行权限:

chmod +x composer

最后将该文件放到/usr/local/bin下:

mv composer /usr/local/bin

这样就安装完成了,可以直接使用composer命令,在终端输入:

composer

如果正常显示了Composer的欢迎界面,即表明功能正常

而对于国内用户来说,在Composer的使用过程中官方源的下载速度实在令人难以恭维,所以可以使用国内的镜像,这里以阿里云镜像为例,推荐进行全局配置(所有项目都会使用该镜像地址):

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

没有ERROR则为安装正常

注:此处可能提醒:

Do not run Composer as root/super user! See https://getcomposer.org/root for details

这是一个安全性提醒,你输入的命令仍会被正常执行,但使用root用户使用Composer 确实是不安全的,这里推荐读者访问该界面进行进一步的了解

接着安装一下unzip模块

apt-get install unzip

以备后用

至此PHP的基础安装就完成了,稍后还需进一步配置

安装Mariadb

MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。

在本项目中我们使用MariaDB替代标准MySQL,来提供数据库支持。若想安装MariaDB,运行命令:

apt install mariadb-server

即可直接通过apt安装MariaDB

配置工作

安装完毕后我们仍需对环境进行进一步配置才能拉取Lychee

配置PHP

Lychee-LaravelGitHub主页上,推荐修改PHP的配置文件以保证上传图片时文件大小上限得到合理配置,如下文:

To use Lychee without restrictions, we recommend to increase the values of the following properties in php.ini. If you are processing large photos or videos, you may need to increase them further.

max_execution_time = 200
post_max_size = 100M
upload_max_filesize = 20M
memory_limit = 256M

使用以下命令,按上文修改你的PHP配置:

vim /etc/php/7.3/cli/php.ini

准确来说这里应当修改你自己服务器上的、正在使用中的版本的PHPphp.ini文件,所以你需要修改的文件所在路径可能会与我给出的不同。这里假定你完全按照我描述的步骤操作,那么你的安装路径理应和我相同,则按我的命令修改指定文件理应也不会出错

配置MariaDB

在这一步中,我们预先在MariaDB中为Lychee创建一个数据库,并为之创建权限足够的用户

使用命令访问MariaDB

mysql

如果显示类似以下字样:

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 42
Server version: 10.0.38-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

则你已经正常安装MariaDB并且已进入了其控制台,接下来创建Lychee的Databaseuser,先后使用以下命令:

create database lychee;
CREATE USER lychee@localhost IDENTIFIED BY 'password';
GRANT ALL ON *.* TO lychee@localhost WITH GRANT OPTION;
FLUSH PRIVILEGES;

其中password填你自己准备设置的密码

以上四条语句的含义分别是:1.创建一个名为lycheedatabase 2.创建一个名为lycheeuser,并将其密码设置为你自定义的password 3.给userlychee全部权限 4.刷新缓存,确认修改

操作完成后可以使用命令:

show databases;

来显示所有Database,以确认是否创建成功,如果一切成功,使用命令:

exit;

可以退出MariaDB系统,返回终端

配置防火墙规则

安全起见你的云服务供应商一般默认会关闭很多高危端口,而这里我们需要用其中的3306端口来远程访问MySQL,这里以阿里云为例

为了保证服务器的安全,阿里云的默认安全组会关闭MySQLMariaDB远程连接时必需端口的入向访问(默认一般使用3306端口),为了允许客户机远程访问服务器数据库,需要修改安全组规则,按以下步骤操作

  1. 进入阿里云服务器的控制台

  2. 进入本实例安全组标签

  3. 在安全组列表中找到本实例,点击配置规则

  4. 选择快速创建规则

  5. 在自定义端口处选择TCP,端口填3306

  6. 授权对象填 0.0.0.0/0

  7. 描述可以填MySQL以备忘

  8. 确认修改

同理可以开放80、443以及一切你工程中需要开放的端口,不再赘述。使用Navicat等软件可以确认你的MariaDB数据库的访问情况,如果一切正常,至此,前期的所有预备环境的安装都已完成了

安装配置Lychee

准备好了一切必须的环境条件,现在安装并配置Lychee

首先从GitHubclone整个repo,切换到目标路径后使用Git即可达成这一目标:

cd /var/www/html
git clone --recurse-submodules https://github.com/LycheeOrg/Lychee-Laravel.git

等待clone完成后,按照以下步骤:

首先切换到刚刚拉取下来的目录里,重命名env文件:

cd Lychee-Laravel
cp .env.example .env
# edit .env to match the parameters

然后使用vim编辑刚刚重命名的文件

vim .env

找到类似于下文的行:

DB_CONNECTION=mysql
DB_HOST=[你的数据库地址]
DB_PORT=[端口(3306)]
DB_DATABASE=[数据库]
DB_USERNAME=[用户名]
DB_PASSWORD=[密码]

然后按照配置MariaDB时创建的的数据库名、用户名、密码填写,之后保存退出即可

Vim是从Vi发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。即使它于图形界面截然不同的操作习惯并不好上手,但它仍在Linux下被广为使用,尤其当你使用SSH远程连接服务器时,它几乎是你唯一的选择,欲学习如何使用Vim,可以花几分钟阅读一下这个网站,并在修改这段文本时随用随读,以熟悉它的命令模式和快捷键,之后会多次用到 要不然连保存退出都做不到

接着使用刚才安装的Composer安装PHP的依赖项:

# install php libraries.
composer install --no-dev

接着进行一些进一步的初始化配置:

设置上传储存权限

chmod -R 775 storage/* app/* public/uploads public/sym public/dist
sudo chown -R www-data:www-data storage/* app/* public/uploads public/sym public/dist
chmod -R 777 public

生成密钥以确保cookies无法解密:

# generate the key (to make sure that cookies cannot be decrypted etc)
./artisan key:generate

迁移数据库:

# migrate the database
./artisan migrate

接着重启Apache2服务以应用配置:

service apache2 restart

而后启用rewrite模块

a2enmod rewrite

接着再次重启Apache2服务:

service apache2 restart

再次使用Vim,编辑Apache2配置文件:

vim /etc/apache2/apache2.conf

向其中添加以下代码:

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

切换到Apache2的网站配置目录下:

cd /etc/apache2/sites-available

接着再次使用Vim,新建配置文件

vim example.com.conf

在其中写入以下代码,来配置Apache2的虚拟服务器,监听80端口。其中example.com替换为你自己的域名 如果有的话,比如我就没有,因为穷和懒

<VirtualHost *:80>
    ServerName example.com

    DocumentRoot /var/www/html/Lychee-Laravel/public

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

如果你像我一样打算暂时不为域名花钱,而打算直接用你服务器的公网IP地址来访问你的Lychee的话,可以把ServerName直接填成你的公网IP地址,这样你在这个文件中创建的虚拟主机就会监听你公网IP地址的80端口的访问,这里涉及到一点关于域名、DNS、和IP地址的知识,如果你明白当你在浏览器中输入你想访问的域名之后会发生什么,并对Apache2服务器的结构有一些了解的话,我想你会很快理解这样写的意义

启用新建的网页:

a2ensite `example.com`

重启Apache2服务:

service apache2 reload

如果你在前文认真做好了每一步,那么以上这几步应该是一切正常的,现在你的Lychee服务已经被配置好了

你可以在浏览器中通过以下任一一种方式访问你的图床,你第一次登录时设定的账号密码是你的管理员账户

http://你服务器的ip地址/Lychee-Laravel/public/
http://example.com

至此,整个网站配置完成!


尽情享受吧

Lychee的操作界面优美而友好,你可以自己尽情探索它的各项功能!Enjoy youself!


后记

这篇博文的长度可能不长,但是我从申请服务器到最终配置完成整整用了三四天时间。

项目wiki上提供的安装说明并不详尽,而网络上的中文资源也漏洞百出 似乎都是同一个大兄弟写的 即使是Google上找到的英文讨论也不一定能提供帮助。再加上由于很多知识——尤其是Linux系统相关的背景知识——的缺失,我在配置和编辑过程中遇到的种种坎坷可能是我入门以来遇到的最复杂而难解的 愿天堂没有这沙雕PHP

踩了无数次雷,这篇教程甚至可以说是遗传算法撞南墙生撞出来的 不行就卸了重来呗 为了调试到底哪个模块出了问题甚至重置了一次云盘 我好难 。放弃过,Nginx实在配不明白,考虑过干脆就用七牛算了;最终也还是坚持下来了,打开Lychee主页,上传第一张图片的那一刻,很难描述自己的心情。是如释重负,还是欣喜若狂,实在未可说也

值得一提的是,在调试的过程中,我得到了LycheeOrg开源社区里的维护者@ildyria的无私帮助,他顶着我的散装英语耐心的提供了尽可能多的建议,他的洞察力帮我少走了很多弯路 PHP和Composer必死就完事了 大概是从收到他的回复的那一刹那,只是惊鸿一瞥,便初尝到了开源精神这两个字的甘露。对于这种精神,我的理解浅薄,但不论如何不是国内常见的仅仅把代码push到GitHub上就甩手完事而已

这确实不是一个很难的任务,但我得到的感悟和收获实在太多 熬夜掉的头发也很多 作为这个博客的第一篇干货博文,这400行Markdown代表着太多了

zhaiyunfan 2020-01-21 23:45