menu E4b9a6's blog
rss_feed
E4b9a6's blog
有善始者实繁,能克终者盖寡。

搭建开源图床lsky的简单指南

作者:E4b9a6, 创建:2020-11-28, 字数:3531, 已阅:29, 最后更新:2020-11-28

这篇文章更新于 1456 天前,文中部分信息可能失效,请自行甄别无效内容。

博客上的使用到图片的地方不多,为了简单我做了一个简单的后台上传文件的API,但时间长发现这东西其实是需要管理的,然而完成一个文件管理太麻烦了

检查了下服务器的文件,大部分都是图片,其他需求不高,刚好手上有一个3年的vps无处可用,纯当一个下载器,再加个小小的图床应该也是不错的?

1. 需求

1.1. 原始需求

图床的需求其实很少,就是简单的上传文件并给我一个链接即可,其他杂七杂八的功能不太需要,网站并发访问量不大的情况下也不需要oss对象存储或cdn加速

我只想找一个图床满足以下四个点

  • 功能简洁
  • 本地图床
  • 操作快捷
  • 备份方便

1.2. 切实需求

作为图床使用,除掉上面的程序需求外,首先考虑两个最重要的点

  • 持久
  • 迁移

笔记/博客等用途肯定很长时间要保证内容有效,那么里面的图片链接肯定不能换..否则折腾程度恐怕非常吓人,所以排除了使用第三方不稳定的个人图床/新浪微博图床等

剩下可以考虑的也就是个人搭建的图床以及对象存储,两者均需要钱,后者对象存储需要在博客程序中自定义添加,而且适应性不如个人自建图床强(毕竟要是有需要自建图床完全可以添加OSS)

持久性考虑的话,我们需要一个长期不变的域名,所幸域名非常便宜,购买了10年域名也就几十块钱

迁移性考虑则要考虑程序的结构来备份,不过大部分自检图床要备份起来都是不难的

1.3. 图床选择

然而转了一圈下来,基本都是我最不喜欢PHP程序(对PHP的部署感到厌恶),无奈那就在PHP里挑一个吧,看了下ImageURL跟Chevereto好像还可以

使用了一圈发现基本满足后面2个点,但功能实在是太多了,感觉杀鸡焉用牛刀,最后找来找去,找到了lsky,下面是项目传送门

https://github.com/wisp-x/lsky-pro

运行之后的效果图,非常简洁(功能少)

2. 搭建

2.1. HTTPS域名与Nginx

没有域名可以忽略此步

申请一张免费的DV SSL证书,现在大部分域名服务商都会直接提供一张,申请一年有效期的很简单,申请通过后会得到一个压缩包

解压压缩包,会得到Tomcat/Apache/IIS/Nginx等文件夹,将Nginx文件夹里的东西上传到服务器上,解压到某个目录,例如/etc/nginx/certificates

注意,压缩包根目录的crt文件也需要上传

安装Nginx

TEXT
sudo apt install nginx

修改Nginx配置文件

TEXT
sudo vim /etc/nginx/nginx.conf

# nginx.conf
user chancel; # 修改运行用户为当前用户或自定义用户,注意php-fpm跟nginx的运行用户必须一致并且不能为root
...

http {
    ...

    include /etc/nginx/conf.d/*.conf;   # 默认导入自己写的网站
#	include /etc/nginx/sites-enabled/*; # 屏蔽自带的网站配置(根据需要)
}
...

添加图床的Nginx配置文件

TEXT
sudo vim /etc/nginx/conf.d/[你的域名].conf

server{
    listen 443;
    server_name [你的域名];
    ssl on;
    ssl_certificate /etc/nginx/certificates/1_www.chancel.cn.crt;       # 压缩包中的crt证书
    ssl_certificate_key /etc/nginx/certificates/2_www.chancel.cnkey;    # 压缩包中的key文件
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 根据需要支持相关的TLS版本
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    # 下面的PHP的配置,这里顺便配置了,假设lsky的解压目录是/opt/lsky/lsky-pro-1.5.5
    root    /opt/lsky/lsky-pro-1.5.5/public;
    index index.php index.html;
    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;
        }
    location / {
        if (!-e $request_filename) {
    	    rewrite ^(.*)$ /index.php?s=$1 last; break;
        }
    }

}

server{
    listen 80;
    server_name [你的域名];
    location / {
        rewrite ^(.*)$  https://[你的域名] permanent;
    }
}

2.2. PHP配置

安装PHP7.2以及项目依赖

TEXT
sudo apt install php7.0-curl php7.0-mysql php7.0-zip php7.0-gd  php7.0-xml php7.0-fpm

修改php运行配置文件

TEXT
sudo vim /etc/php/7.0/fpm/pool.d/www.conf 

# www.conf
...
user = chancel  # 与Nginx一致的运行用户
group = chancel # 与Nginx一致的运行用户组
...
listen = 127.0.0.1:9000 # 我采用端口监听的方式,推荐使用文件sock的方式不占用端口
...

运行Nginx与PHP

TEXT
sudo systemctl start php7.0-fpm
sudo systemctl enable php7.0-fpm
sudo systemctl start nginx
sudo systemctl enable nginx

2.3. MySQL配置

安装Mariadb

TEXT
sudo apt install mariadb-server

初始化Mariadb

TEXT
sudo mysql_secure_installation

数据库初始化 & 用户初始化

TEXT
CREATE DATABASE lsky DEFAULT CHARACTER SET utf8;
CREATE USER 'chancel'@'localhost' IDENTIFIED BY '12345678';
GRANT ALL PRIVILEGES ON *.* TO 'chancel'@'localhost';
FLUSH PRIVILEGES;

2.4. lsky配置

下载解压lsky

TEXT
sudo mkdir /opt/lsky
sudo chown chancel:chancel /opt/lsky
cd /opt/lsky
wget https://github.com/wisp-x/lsky-pro/archive/v1.5.5.tar.gz
tar -zxvf v1.5.5.tar.gz

这里注意路径要与Nginx中配置的一致,配置成功后访问你的域名即可进入自动化安装,根据界面输入相关参数即可运行

3. 备份

只需要定期执行备份数据库跟程序Public目录即可


[[replyMessage== null?"发表评论":"发表评论 @ " + replyMessage.m_author]]

account_circle
email
web_asset
textsms

评论列表([[messageResponse.total]])

还没有可以显示的留言...
gravatar
[[messageItem.m_author]] [[messageItem.m_author]]
[[messageItem.create_time]]
[[getEnviron(messageItem.m_environ)]]
[[subMessage.m_author]] [[subMessage.m_author]] @ [[subMessage.parent_message.m_author]] [[subMessage.parent_message.m_author]]
[[subMessage.create_time]]
[[getEnviron(messageItem.m_environ)]]