0 前言
感谢 piclist 作者的 不吝解答
最近从 typora 迁移到了 obsidian, typora 可以很方便的自动调用 picgo 实现图片上传, obsidian 得益于丰富的插件市场, 可以通过 Image Auto Upload Plugin 插件调用 picgo, 但是必须手动启动 picgo 后才能正常使用
在插件配置的注释中发现了 piclist, 经了解发现这个二开版本支持 docker 部署, 综合考虑了一下还是值得折腾一下的, 既能避免手动打开 picgo 的繁琐, 也可以在我所有的 pc 上卸载掉一个软件, 同时还能水一文
注意本文以已有服务器/ip/域名且 web 服务使用 nginx 为前提, 如果不满足上述前提, 需要将 piclist 的 36677 端口映射到主机, 部署完 piclist 后直接通过 ip 加端口的形式调用即可
1 部署
1.1 piclist 配置
docker-compose.yml
中添加如下配置
version: '3.1'
services:
piclist:
image: 'kuingsmile/piclist:v1.7.0'
container_name: piclist
restart: always
networks:
blog_net:
ipv4_address: 172.19.0.5
volumes:
- '$PWD/data/piclist:/root/.piclist'
# 需要设置 piclist_key 环境变量
command: node /usr/local/bin/picgo-server -k ${piclist_key}
networks:
blog_net:
driver: bridge
ipam:
config:
- subnet: 172.19.0.0/16
添加环境变量并启动 piclist 容器, 此环境变量用于 client(obsidian) 和 piclist server 之间的鉴权
# 将 123456 设置为自定义的密码
cat >> ${HOME}/.bash_profile <<-'EOF'
export piclist_key='123456'
EOF
source ${HOME}/.bash_profile
docker-compose up -d
修改 data/piclist/config.json
的配置, 以阿里云 OSS 为例添加图床配置, 内容自行修改, 官方没有配置文件的详细文档, 可以折中一下, 先 windows 安装 piclist, 测试无误后导出配置
{
"picBed": {
"current": "aliyun",
"uploader": "aliyun",
"aliyun": {
"accessKeyId": "******",
"accessKeySecret": "******",
"bucket": "lvbibir-image",
"area": "oss-cn-beijing",
"path": "blog/",
"customUrl": "https://image.lvbibir.cn",
"options": ""
}
},
"picgoPlugins": {}
}
最后再重启一下 piclist
docker restart piclist
1.2 nginx 配置
nginx 中添加如下 location 配置
location /piclist/ {
proxy_pass http://172.19.0.5:36677/;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-Port $remote_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Accept-Encoding "br";
}
执行 docker restart nginx-proxy
重启 nginx
最后修改 obsidian 的 Image auto upload Plugin
插件的配置
- 打开远程服务器模式
- 将接口 url 设置为
https://<你的域名>/piclist/upload?key=<你的key>
, 这里的 key 就是启动容器时配置的环境变量的值, 需注意如果 key 中有特殊字符需要 url 转义一下
最后测试一下图片上传即可, 如果有报错可以通过 docker logs -f piclist
查看日志
2 常见问题
2.1 上传失败
- obsdian 直接提示上传失败, 可能是 key 中有特殊字符没有转义或者没有打开远程服务器模式
- 日志中有如下
Unauthorized access
报错, 一般是 key 不匹配
2.2 忘记 piclist_key
如果已经启动了的容器可以通过如下命令查看
docker exec -it piclist ps -ef | grep -v grep | grep node
以上