图床 Picsur 的搭建

1. 前言

今天,我们就来介绍一个纯老外做的开源图床 Picsur—— 一个易于使用、可自托管的图片分享服务,类似于 Imgur,并内置转换功能。

2. 项目展示

界面非常简洁:

65386bfe85dc3.webp

65386c004bba2.webp

可以看到你上传的所有图片:

65386c02b88af.webp

可以设置图片的有效期:

65386c04c4426.webp

可以自由设置图片的格式:

65386c07301e0.webp

2.1 特点

  • 支持 docker 一键部署
  • 匿名上传
  • 支持多账户
  • 适当的 CORS 限制
  • Exif 信息剥离
  • 支持保留原始图像的能力
  • 支持多种格式:
    • QOI
    • JPG
    • PNG
    • WEBP(支持动画)
    • TIFF
    • BMP
    • GIF(支持动画)
  • 支持转换图像
  • 支持编辑图像
    • 调整大小
    • 旋转
    • 翻转
    • 去除透明度
    • 负片效果
    • 灰度化处理
  • 可删除图片
  • 正确的数据库迁移
  • 支持在列表中显示自己的图片
  • 支持聊天窗口上正确显示预览图
  • 支持设置图片有效期
  • 支持 ShareX API
  • 支持 ARM64 和 AMD64 Docker 镜像
  • 白色模式(WIP)
  • 公共画廊(WIP)
  • 相册(WIP)

EXIF 是什么?

EXIF 数据,全称”Exchangeable Image File Format”,是一种包含各种关于照片的信息的数据格式。它可以包含很多有关照片的信息,比如相机制造商、相机型号、照片拍摄日期、ISO 设置、快门速度、焦距,是否使用了闪光灯等等。一些相机还会添加地理位置的 gps 信息。
正因为 EXIF 数据可能包含这种敏感信息,例如地理位置,所以在分享照片的时候需要小心。如果你不希望建议自己的这些信息被公开,你应该在发布照片之前去除这些 EXIF 数据。

3. 相关地址

GitHub 官方仓库:https://github.com/caramelfur/picsur

4. 搭建环境

  • 服务器优惠:如果你还没有服务器,这里推荐

    1.SpartanHost,英国口碑商家,三网联通4837优质线路直连美国西雅图,无需备案,丢包极少,助力网站快速访问。

    2.VollCloud,香港老牌商家,上游为Cera Network,号称到大陆最快的线路,三网CMI优质线路,延迟极低。

  • 系统:Debian 11

  • 安装好 Docker、Docker-compose

  • 【非必需但建议】域名一枚,并做好解析到服务器上

  • 【非必需】提前安装好宝塔面板海外版本 aapanel,并安装好 Nginx

  • 【非必需本教程选用】安装好 Nginx Proxy Manager

服务器要求:硬盘越大越好

5. 搭建方式

5.1 创建安装目录

创建一下安装的目录:

1
2
3
4
sudo -i
mkdir -p /root/data/docker_data/picsur
cd /root/data/docker_data/picsur
vim docker-compose.yml

5.2 编写 docker-compose.yml 文件

英文输入法下,按 i

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
version: '3'
services:
picsur:
image: ghcr.io/caramelfur/picsur:latest
container_name: picsur
ports:
- '8003:8080' #8003可以改成服务器上没有用过的端口
environment:
PICSUR_HOST: '0.0.0.0'
PICSUR_PORT: 8080
PICSUR_DB_HOST: picsur_postgres
PICSUR_DB_PORT: 5432
PICSUR_DB_USERNAME: picsur
PICSUR_DB_PASSWORD: nice-long-strong-passw0rd-here # 确保和picsur_postgres:部分的 POSTGRES_PASSWORD 匹配
PICSUR_DB_DATABASE: picsur
## 默认管理员账户是 admin, 这个没法改,密码就是下面这个你设置的
PICSUR_ADMIN_PASSWORD: different-nice-long-str0n6-passw0rd-here
## 可选的,如果没有设置会默认生产随机字符
# PICSUR_JWT_SECRET: CHANGE_ME
# PICSUR_JWT_EXPIRY: 7d

## 最大可以上传的字节数
PICSUR_MAX_FILE_SIZE: 128000000 # 128 MB
## No need to touch this, unless you use a custom frontend
# PICSUR_STATIC_FRONTEND_ROOT: "/picsur/frontend/dist"
## Warning: Verbose mode might log sensitive data
# PICSUR_VERBOSE: "true"
restart: unless-stopped

picsur_postgres:
image: postgres:14-alpine
container_name: picsur_postgres
environment:
POSTGRES_DB: picsur
POSTGRES_PASSWORD: nice-long-strong-passw0rd-here
POSTGRES_USER: picsur
restart: unless-stopped
volumes:
- ./picsur-data:/var/lib/postgresql/data # 默认数据存放在当前文件夹下的picsur-data目录中,可以自行修改

修改好之后,注意切换成英文输入法,然后按一下 esc,然后 :wq 保存退出。

6. 反向代理

6.1 利用 Nginx Proxy Manager

在添加反向代理之前,确保你已经完成了域名解析,不会的可以看这个:域名一枚,并做好解析到服务器上

65386c09a43a1.webp

注意:
Nginx Proxy Manager(以下简称 NPM)会用到 80443 端口,所以本机不能占用(比如原来就有 Nginx)

直接丢几张图:

65386c0c042a9.webp

65386c0df31b7.webp

65386c0fcfe34.webp

注意填写对应的 域名、IP 和 端口,按文章来的话,应该是 8003

IP 填写:

如果 Nginx Proxy Manager 和 picsur 在同一台服务器上,可以在终端输入:

1
ip addr show docker0

查看对应的 Docker 容器内部 IP。

65386c119e803.webp

否则直接填 picsur 所在的服务器 IP 就行。

6.2 利用宝塔面板

发现还是有不少小伙伴习惯用宝塔面板,这边也贴一个宝塔面板的反代配置:

直接新建一个站点,不要数据库,不要 php,纯静态即可。

然后打开下面的配置,修改 Nginx 的配置。

65386c13e5f2a.webp

65386c16cd6b4.webp

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
NGINX
location / {
proxy_pass http://127.0.0.1:8003/; # 注意修改为你实际使用的端口
rewrite ^/(.*)$ /$1 break;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade-Insecure-Requests 1;
proxy_set_header X-Forwarded-Proto https;
}

7. 相关命令

7.1 更新 picsur

1
2
3
4
5
6
cd /root/data/docker_data/picsur
docker-compose down
cp -r /root/data/docker_data/picsur /root/data/docker_data/picsur.archive # 万事先备份,以防万一
docker-compose pull
docker-compose up -d # 请不要使用 docker-compose stop 来停止容器,因为这么做需要额外的时间等待容器停止;docker-compose up -d 直接升级容器时会自动停止并立刻重建新的容器,完全没有必要浪费那些时间。
docker image prune # prune 命令用来删除不再使用的 docker 对象。删除所有未被 tag 标记和未被容器使用的镜像

提示:

1
2
WARNING!This will remove all dangling images.
Are you sure you want to continue? [y/N]

输入 y即可。

7.2 卸载 picsur

1
2
3
4
cd /root/data/docker_data/picsur
docker-compose down
cd ..
rm -rf /root/data/docker_data/picsur # 完全删除映射到本地的数据

8. 常见问题

目前项目还在初期,很多功能还没完善(比如图片墙、多语言等功能),也可能会有一些 bug,大家可以多多向作者反馈,毕竟用的人多了,作者会更有动力去维护,也会有更多的人加入到项目的开发当中去,让项目也变得更好用。

9. 结尾

祝大家用得开心,有问题可以去 GitHub 提 Issues,也可以在评论区互相交流探讨。

同时,有能力给项目做贡献的同学,也欢迎积极加入到 项目 中来,贡献自己的一份力量!

最后,感谢开发人员们的辛苦付出,让我们能用到这么优秀的项目!

原文链接: https://blog.laoda.de/archives/docker-compose-install-picsur