访问密码设置

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

页面效果:

3957908986_resized_compressed.png

文章目录