1 PicGo-app

启用飞牛FTP步骤(略)

1.1 安装FTP插件

PicGo插件列表 https://github.com/PicGo/Awesome-PicGo

1
2
3
4
5
# cd /D C:\Users\用户名\AppData\Roaming\picgo
cd %APPDATA%\picgo
npm install 插件名

# npm list

1.2 FTP插件设置

GitHub - imba97/picgo-plugin-ftp-uploader: picgo插件 FTP上传

打开软件,配置picgo:

1
2
3
4
图床设置-FTP上传
图床配置名: Default
网站标识: img1
配置文件:C:\Users\name\.picgo\ftpconfig.json

ftpconfig.json

1
2
3
4
5
6
7
8
9
10
11
{
"img1": {
"url": "http://192.168.200.104:8002/images",
"path": "/{year}/{month}/{day}/{fullName}",
"uploadPath": "/PicGo/{year}/{month}/{day}/{fullName}",
"host": "192.168.200.104",
"port": 21,
"username": "admin",
"password": "888888"
}
}

1.3 安装HTTP server

FTP上传,以后通过http访问,使用docker 安装nginx 。把ftp上传目录/fs/1000/ftp/PicGo挂载到nginx以后,默认FTP用户是admin(uid=1000),而nginx工作进程(worker processes)运行用户为nginx(uid=1001)。由于权限会导致无法访问图片,页面会提示403错误。

解决办法:

  • 在docker 中修改nginx用户UID,保持与飞牛FTP用户UID一致。(Dockerfile1)
  • 在docker中增加用户,指定UID与FTP用户UID一致。(Dockerfile2)
  • 修改FTP用户UID,与docker中nginx UID一致。(未测试)
  • 写个脚本,定期强制修改FTP上传目录下的文件权限。(未测试)
  • docker run –user 1000 (测试失败)

1.3.1 Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Dockerfile1
FROM nginx:latest

# 更改 Nginx 相关目录的权限和所有者,确保 admin 用户有足够的权限
RUN chown -R 1000:1000 /var/cache/nginx /var/run /var/log/nginx /etc/nginx /usr/share/nginx/html && \
chmod u+s /usr/sbin/nginx

RUN sed -i 's/nginx:x:101:101/nginx:x:1000:1000/' /etc/passwd

# 切换用户
USER 1000

# 启动 Nginx
CMD ["nginx", "-g", "daemon off;"]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Dockerfile2

FROM nginx:latest

# 创建一个新的用户和组,并设置 UID 和 GID 为 1000
RUN groupadd -g 1000 admin && \
useradd -u 1000 -g admin -m -s /bin/bash admin

# 更改 Nginx 相关目录的权限和所有者,确保 admin 用户有足够的权限
RUN chown -R admin:admin /var/cache/nginx /var/run /var/log/nginx /etc/nginx /usr/share/nginx/html && \
chmod u+s /usr/sbin/nginx

# 显式地告知 Nginx 使用 admin 用户,而不是默认的 nginx 用户
RUN sed -i 's/user nginx/user admin/g' /etc/nginx/nginx.conf

# 启动 Nginx
# USER root
# CMD ["su","-","admin","-c", "/usr/sbin/nginx -g \"daemon off;\""]
USER admin
CMD ["nginx", "-g", "daemon off;"]

1.3.2 生成镜像

1
docker build -t picgo-nginx:v1 -f Dockerfile .

1.3.3 nginx配置

nginx.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
server {
listen 8002;
server_name localhost;

location / {
root /usr/share/nginx/html;
index index.html index.htm;
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

location /images {
alias /usr/share/nginx/html/images/;
autoindex on;
#关闭详细文件大小统计,让文件大小显示MB,GB单位,默认为b;
autoindex_exact_size off;
#开启以服务器本地时区显示文件修改日期!
autoindex_localtime on;
}
}

1.3.4 启动 nginx

1
2
3
4
5
6
7
docker run -d  \
--name picgo-ftp-nginx \
--restart=always \
-p 8002:8002 \
-v /root/PicGo/nginx.conf:/etc/nginx/conf.d/ftp.conf \
-v /vol1/1000/ftp/PicGo:/usr/share/nginx/html/images:ro \
picgo-nginx:v1

1000 代表用户用户UID, 根据情况修改。我创建了一个ftp用户,实际上使用的是1004。

1.4 obsidian picgo 插件Image auto upload设置

保持默认,设置略

2 PicGo-Core

使用picgo-core的好处是,不用打开app,需要的时候调用picgo命令就行了。避免app突然不能开机自启动了,还得手动打开;节省CPU、内存。

2.1 安装PicGo-Core

1
yarn global add picgo # 或者 npm install picgo -g

2.2 安装FTP插件

查看全局目录路径:

1
2
3
4
5
6
npm get 


cd %appdata%\npm

picgo install picgo-plugin-ftp-uploader

2.3 生成配置文件

默认配置文件
picgo 的默认配置文件为~/.picgo/config.json。其中~为用户目录。不同系统的用户目录不太一样。
linux 和 macOS 均为~/.picgo/config.json
windows 则为C:\Users\你的用户名\.picgo\config.json

C:\Users\你的用户名\.picgo\config.json :

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"picBed": {
"uploader": "ftp-uploader",
"current": "ftp-uploader",
"ftp-uploader": {
"site": "",
"configFile": "F:\\SYNC\\Obsidian\\README\\ftpconfig.json"
}
},
"picgoPlugins": {
"picgo-plugin-ftp-uploader": true
}
}

2.4 手动上传测试

picgo upload “C:\\Users\\X\\Pictures\\Snipaste_2024-10-21_13-10-27.png”

3 重启Obsidian

4 参考

https://github.com/Molunerfinn/PicGo
https://picgo.github.io/PicGo-Doc/zh/guide/
https://picgo.github.io/PicGo-Core-Doc/zh/guide/
https://github.com/PicGo/Awesome-PicGo
https://github.com/imba97/picgo-plugin-ftp-uploader