部署基于 GitHub 的图床 PicX
编写博客的时候,常常需要在文章中插入富媒体
,比如 图片、视频等。有很多免费的图床 (sm.ms),也有基于云存储的的图床,它们的优缺点如下:
图床方案 | 优点 | 缺点 |
---|---|---|
sm.ms | 免费 | 图片不好管理、有的不支持 https |
云存储 | 不占用自己的存储 | 付费、受制于平台、有的不支持 https |
基于 GitHub 的图床 | 支持 https,图片存放在代码仓库不占用自己存储 | 不方便操作,开源软件参差不齐 |
笔者最初是通过 七牛云 存储图片,当时 (2015 年)还有免费存储空间以及 https,后来都要收费了。转投 GitHub repo,基于 git 命令上传图片。
现在,发现了开源的基于 GitHub 图床 web 管理方案: picx 和 picgo ,经过对比最终选择了 picx。
使用镜像
本地使用
-
启动容器,推荐使用最新版镜像
# 1. 启动容器 docker run -d --name picx -p 5000:80 adolphlwq/picx:latest
-
访问
127.0.0.1:5000
-
参考官方文档 快速开始 进行设置
笔者基于官方代码构建了主要镜像版本,可以访问 adolphlwq/picx 查看具体版本,并选择合适的 tag
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
adolphlwq/picx latest 4f318f53caa6 33 minutes ago 67MB
adolphlwq/picx v2 f5c009421f11 41 hours ago 67MB
adolphlwq/picx v2.5.0 f5c009421f11 41 hours ago 67MB
adolphlwq/picx dev 08a617a54dba 42 hours ago 68.4MB
构建镜像
picx 可以使用官网的版本:https://picx.xpoet.cn/#/ 但是限制较多,我自己基于 v2 分支代码的 web 版本, 封装成 docker 镜像 ,容器化部署。
FROM node:lts-alpine as builder
WORKDIR /app
COPY . .
RUN npm install && npm run build
FROM nginx:stable-alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
如果构建速度较慢,大概率是 npm install 访问国外网络慢导致的,大陆开发者构建时可以使用国内的 mirror,以腾讯镜像为例
npm install --legacy-peer-deps --registry https://mirrors.cloud.tencent.com/npm/exit
奇技淫巧
实际上编写好 Dockerfile 后,无论是在 VPS 上,还是个人的笔记本(大陆网络),都因网络访问速度慢构建超时失败了。前后研究了 4-5 个小时也没构建陈宫个,笔者没有办法,最后想到了一个奇技淫巧,快速把 v2.4.0
,v2.5.0
,v3.0.0
, v3.0.1
等 picx tag 都构建出来了。
办法就是在宿主机上运行 npm install --legacy-peer-deps --registry https://mirrors.cloud.tencent.com/npm/
命令把 node_modules
下载好,构建的时候把 node_modules 一起传到 docker 的构建容器里,这样容器里 npm install
的包都在 node_modules 中了,不需要额外下载,省去了网络耗时。
多平台构建镜像
docker 文档 Multi-platform images 中专门介绍了如果构建多平台的镜像。
注意,单独在 mac 或者 linux 上构建镜像并 push 到 docker hub,在 docker hub 上只有一个架构的镜像,而不会有两个。如果想同时构建多平台并且 push 时不相互覆盖,使用 buildx
docker buildx build --platform linux/amd64,linux/arm64 -t adolphlwq/picx:dev --builder multi-platfrom-builder --push .
龙芯支持
龙芯是大陆自主研发的 CPU 指令集架构,由于 2020 年发布,开源社区支持不完善,截至当前 (2024.4),docker 上的很多镜像都还不支持构建 linux/loong64
的镜像。不过搜索到相关文章作为参考: