PicHome 个人版 docker compose 部署
访问密码设置
2026-04-16 更新
看到一些其他的图床有访问密码,想要访问密码配置。但 PicHome 本身并没有,问了 deepseek 给出一个方案,通过 nginx 反向代理设置 HTTP 基本认证(HTTP Basic Authentication)。
因为使用 https-portal,所以配置更简单:
environment:
# 这里的 'admin:secret123' 就是你要设置的用户名和密码
DOMAINS: 'admin:secret123@your-domain.com -> http://pichome:80'这个 PicHome 好像是阅读某个公众号提到的,一个免费的瀑布流图片+视频展示站,可以作为素材库之类的。之前部署过,可能是比较顺畅并没有太多印象,这次碰壁正好做一个总结归纳。
官方有专门的 PicHome下载部署 文档,根据习惯直接跳到 docker compose 部署部分。
git clone https://github.com/zyx0814/Pichome-docker.git
cd ./Pichome-docker/compose/
修改docker-compose.yaml,设置数据库root密码(MYSQL_ROOT_PASSWORD=密码)
docker-compose up -d出于信任,直接下载下来启动,结果是比较不好的。
首先是服务端口的问题,因为要配置到 https-portal 中做反向代理(其实影响也不大)。README 文档上写的是访问 8080(外部宿主机端口),但 docker-compose.yml 配置文件中是 8088:80,当然最后配置就是 pichome.seasidecrab.com -> http://pichome-app:80,影响不大。
然后是数据库连接的问题。因为服务拒绝,查询日志发现,内部显示 BT 等各种服务,其中 mysql 和 nginx 因为 restart: always 配置的原因,一直在启动中。尝试登录 mariadb 10.7 内部的 mysql 是没问题的,db 容器也是正常启动,但 app 内部就是报找不到 mysql 服务。但 app 是有链接到 db 的:
links:
- db尝试去掉所有修改,甚至密码都默认,然后还是不行,问题依然在。发现 mysql root 密码在环境变量中和在文件中是不一致的,
# docker-compose.yml 中
root@admin.0001
# mysql_password.txt 中
root@admin!0001但本地 Mac m1 下直接安装是 OK 的,数据库服务器要改成 db,然后密码用的是 docker-compose.yml 中 root@admin.0001。
让 deepseek 帮我分析了一下,启动时只有 docker-compose.yml 中的配置生效,其他的 Dockfile 和 config 目录相当于构建 oaooa/pichome 镜像的材料基础,但配置中并没有实时构建,--build 强制构建因为配置中没有 build 所以对于启动没有任何影响。
比较显著不同的点,一个是使用 secrets 配置,另一个点是 db 数据库加了一条 command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW。不去研究到底什么问题,想着干脆让 deepseek 简化掉这些特征,并加之前的共享网络,再加上健康监测,于是有了最终版的 docker-compose.yml:
services:
db:
image: mariadb:10.7
container_name: pichome-db
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
# 如需从宿主机访问数据库,取消下面注释
# ports:
# - "3307:3306"
volumes:
- "./db:/var/lib/mysql"
environment:
TZ: "Asia/Shanghai"
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
MYSQL_DATABASE: "${MYSQL_DATABASE}"
MYSQL_USER: "${MYSQL_USER}"
MYSQL_PASSWORD: "${MYSQL_PASSWORD}"
restart: always
networks:
- internal
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD}"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
pichome:
image: oaooa/pichome:3.0
container_name: pichome-app
expose:
- "80"
volumes:
- "./site:/var/www/html"
- "./ssl:/etc/nginx/ssl"
environment:
MYSQL_SERVER: "db"
MYSQL_DATABASE: "${MYSQL_DATABASE}"
MYSQL_USER: "${MYSQL_USER}"
MYSQL_PASSWORD: "${MYSQL_PASSWORD}"
restart: always
networks:
- internal
- shared
depends_on:
db:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
networks:
internal:
driver: bridge
shared:
external: true
name: shared-services
.env 中设置环境变量:
COMPOSE_PROJECT_NAME=pichome
# 数据库 root 密码
MYSQL_ROOT_PASSWORD=xxx
# # 应用使用的数据库名、用户名、密码
MYSQL_DATABASE=pichome
MYSQL_USER=xxx
MYSQL_PASSWORD=xxx启动 OK!访问进入到环境监测页面,都可以的,数据库连接配置那边,数据库服务器改成服务名 db 就可以了。
oaooa/pichome 在 docker hub 上是有 3.0 的,但部署之后显示版本依然是 2.2(4.4 号后台更新之后便成 3.0.0 了)。下载镜像依然是本地下载然后通过阿里云 ACR 镜像库做中转。
PS:记录一些比较好用但之前没用过的 docker 指令:
# 查看磁盘使用详情
docker system df -v
# 清理所有未使用的容器、网络、镜像和构建缓存(危险操作,请确保数据不再需要)
docker system prune -a
# 清理所有已停止的容器
docker container prune
# 清理所有未被任何容器引用的镜像
docker image prune -a
# 清理所有未被任何容器使用的网络
docker network prune
# 清理所有未被任何容器挂载的卷(危险操作,请确保数据不再需要)
docker volume prune页面效果:

本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
海滨擎蟹
微信
支付宝