在你看到这篇博客时,就代表我的Pinry图床已经UP了。本文所有图片都来自我的图床。

Pinry Github地址: https://github.com/pinry/pinry/

前情提要:

由于博客图片越来越多,博客的机器可能会没硬盘空间,所以我决定真正意义上自建一个稳定的图床。(以前的图床都只是玩玩)

想到了以前使用的 Chevereto 但是Github一看全都是Public Archive,然后一看官网发现他们已经变成了需要99USD License的模式。

于是我只能在Github我的Star里面搜,只有寥寥几个。

其中只有Pinry和另外一个35 Stars的国人作者(意外的更新很勤快?)的repo

查看玩Pinry的文档后,我发现这Installation Guide讲的可真是。。。怎么说呢?简洁吧。

 

正式安装

那我们接下来开始在Ubutnu20.04.5LTS (老规矩,垃圾centos)上进行安装。

apt update && apt upgrade && apt install curl 强迫症,先确保源line up了。

curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh 使用Docker官方脚本一键无脑安装Docker。

我们接下来使用Build Docker from Source 方式。

git clone https://github.com/pinry/pinry
cd pinry/docker
./build_docker.sh
mkdir data

先创建data文件夹,为了后期可以备份我们在docker container内部的data文件夹。

docker run -d=true -p=80:80 \
    -v pinry:/data \
    getpinry/pinry

这是官方文档操作方式,我建议左边的80(也就是外部端口)改为8080。再在8080前面增加127.0.0.1。 也就是把第一行变为 docker run -d=true -p 127.0.0.1:8080:80 \ 这是因为作者的docker本身不带自动https,我们后期需要使用Apache或者Nginx做一个Https反代,这时你的原Docker暴漏出来的端口8080公网可以http访问,我们绑定127.0.0.1,只监听localhost,这样公网就无法访问,只能使用后期Apache或者Nginx反代的公网端口访问,达到我们的安全目的。


当你做完以上步骤,你的Pinry Docker应该就已经Up了。使用Docker stats 确认(Ctrl+c 退出),再使用你的 公网端口:8080 确定你的图床8080公网无法访问,再 lsof -i:8080 查看8080端口是不是被Docker占用了。

如果被占用了,公网也无法访问,那么我们就可以进行下一步。


apt install apache2 安装Apache2 web服务器,准备反代。

cd /etc/apache2/sites-available 进入Apache2网站配置文件夹

vim pinry.conf 创建网站配置文件

<VirtualHost *:443>
  ServerName sub.domain.com
  SSLEngine On
  SSLCertificateFile /path/to/ssl/cert/crt
  SSLCertificateKeyFile /path/to/ssl/key/key
  # Protocol 'h2' is only supported on Apache 2.4.17 or newer.
  Protocols h2 http/1.1

  ProxyPass / http://localhost:3001/
  RewriteEngine on
  RewriteCond %{HTTP:Upgrade} =websocket
  RewriteRule /(.*) ws://localhost:3001/$1 [P,L]
  RewriteCond %{HTTP:Upgrade} !=websocket
  RewriteRule /(.*) http://localhost:3001/$1 [P,L]
</VirtualHost>

复制上面配置,把 sub.domain.com 改为你自己的域名。不要在意ws什么的,网上随便复制粘贴的配置。(又不是不能用.jpg) SSL文件目前先不管,后面配置。

cd /etc/apache2/sites-enabled 我们去启用网站配置文件

ln -s /etc/apache2/sites-available/pinry.conf 创建Symlink,常用Symlink是好事,不要直接创建配置文件。

由于上面的配置,我们需要启用Apache2插件

a2enmod sslengine

a2enmod ssl

a2enmod proxy_http

systemctl restart apache2 重启apache2,应用config。

你接下来应该会启动失败,因为我们之前没有配置SSL证书。所以我们接下来使用 Certbot 配置 SSL 证书。


apt install snapd

snap install core; sudo snap refresh core
snap install --classic certbot
certbot certonly

做完这些你应该按照提示填写域名相关信息。验证方式选择2,Standalone server。

结束后你将会获得SSL证书。

Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/xxx.xxx.xxx/fullchain.pem Key is saved at: /etc/letsencrypt/live/xxx.xxx.xxx/privkey.pem This certificate expires on 2023-02-14. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background.

vim /etc/apache2/sites-available/pinry.conf 把之前的SSL Path换成Certbot给你的证书Path。xxx.xxx.xxx 换成你自己的域名。

到这时你重启 Apache2 再访问你的域名应该就可以看见Pinry了。你需要现在注册账户,然后我们接下来去Docker container内关闭注册(如果你想随便什么人都能注册那么教程就到这里结束了)(如果你没法注册,那么可能是注册默认关闭了,你也需要看接下来步骤先开启注册,注册账户完成后再关闭注册)。


docker stats 我们先获取你的Docker container名称。

docker exec -it <container-name> bash container-name改为你的Docker container名称(<>去掉)

运行这行命令后你就已经在Docker container里面了。

apt install vim 由于我们接下来需要修改文件,Docker container没有带文本编辑器,所以我们安装vim。

vim /data/local_settings.py 找到ALLOW_NEW_REGISTRATIONS = True True 改为 False。Vice Versa。

接下来我们输入 exit 即可退出Docker Container。(你的Docker Container Hostname 和外面不一样,有没有退出注意那里即可)

检查你的网站是否还可以注册,不可注册就已经完美的搭建了你的私人图床。

出现这个就代表你已经关闭了注册。

YES! 教程完美结束。Oniichan/Oneechan 辛苦了~~~