家庭私有服务项目搭建指南

记录了家庭私有服务中最常用的项目部署教程。 1. 1Panel & KPanel 1.1 1Panel 服务器管理面板,项目主页看这里。 一键安装脚本: sudo bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v

记录了家庭私有服务中最常用的项目部署教程。

1. 1Panel & KPanel

1.1 1Panel

服务器管理面板,项目主页看这里。

一键安装脚本:

sudo bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)"

1.2 KPanel

Kejilion 服务器管理平台,项目主页看这里。

一键安装脚本:

sudo bash <(curl -fsSL https://kejilion.sh) app kpanel

2. Sun-Panel

一个NAS、服务器导航面板、简易docker管理器、Homepage、浏览器首页。项目首页看这里。

services:
  sun-panel:
    image: 'hslr/sun-panel:latest'
    container_name: sun-panel
    volumes:
    - /opt/sunpanel/conf:/app/conf
    - /opt/sunpanel/uploads:/app/uploads
    - /opt/sunpanel/database:/app/database
    - /var/run/docker.sock:/var/run/docker.sock
    # - ./runtime:/app/runtime
    ports:
    - 3002:3002
    restart: always

3. Vaultwarden

一个密码管理器。项目首页看这里。

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    environment:
      DOMAIN: "https://pass.fmzhong.top"
    volumes:
      - /opt/vaultwarden/vw-data/:/data/
    ports:
      - 2608:80

4. Pansou

全网资源一站式搜索。项目主页看这里。

services:
  pansou:
    image: ghcr.io/fish2018/pansou-web:latest
    container_name: pansou-app
    labels:
      - "autoheal=true"  # 标记此容器允许被autoheal重启
    ports:
      - "8088:80"
    dns:
      - 223.5.5.5
      - 114.114.114.114
    environment:
      # 基础配置
      - DOMAIN=localhost
      - PANSOU_PORT=8888
      - PANSOU_HOST=127.0.0.1
      
      # 数据目录配置(统一在/app/data下)
      - CACHE_PATH=/app/data/cache
      - LOG_PATH=/app/data/logs
      
      # 插件配置(已更新为最新官方列表,包含修复和新增插件)
      - ENABLED_PLUGINS=dyyjpro,duoduo,djgou,feikuai,gaoqing888,gying,hdmoli,haitunsou,hunhepan,ikantv,jutoushe,kkv,dy4k,libvio,lingjisp,lou1,melost,meitizy,miosou,nyaa,ouge,panlian,pansearch,qqpd,quark4k,quarksoo,quarktv,qupanshe,sousou,thepiratebay,ting77,wanou,weibo,xb6v,xiaokupan,xiaozhang,xiaoyu,yingso,yulinshufa,yunso,yunsou,zlxapp,zxzj
      
      # Telegram频道配置已删除,使用镜像内置的最新频道列表
      
      # 代理配置(国内网络必须取消注释,并将IP改为宿主机局域网IP)
      - PROXY=socks5://user:password@192.168.1.3:7891
      
      # 性能配置(镜像已包含默认值,如需调整可取消注释)
      # - CACHE_ENABLED=true
      # - CACHE_TTL=60
      # - MAX_CONCURRENCY=200
      # - MAX_PAGES=30
      
      # 健康检查配置(容器内部监控)
      - HEALTH_CHECK_INTERVAL=30  # 后端服务健康检查间隔(秒)
      - HEALTH_CHECK_TIMEOUT=10   # 健康检查超时时间(秒)
      - HEALTH_CHECK_RETRIES=3    # 失败重试次数
      
      # 认证配置(可选,默认不启用)
      # - AUTH_ENABLED=true
      # - AUTH_USERS=admin:admin123,user:pass456
      # - AUTH_TOKEN_EXPIRY=24
      # - AUTH_JWT_SECRET=your-secret-key-here
    volumes:
      # 数据持久化(统一挂载/app/data,包含缓存、日志、SSL证书等所有数据)
      - pansou-data:/app/data
      # 如果需要从宿主机挂载SSL证书,可以使用:
      # - ./ssl:/app/data/ssl
    restart: unless-stopped
  # 自动健康检查和重启服务(容器级别监控)
  autoheal:
    image: willfarrell/autoheal:latest
    container_name: pansou-autoheal
    restart: always
    environment:
      - AUTOHEAL_CONTAINER_LABEL=autoheal  # 只监控带有autoheal标签的容器
      - AUTOHEAL_INTERVAL=30  # 每30秒检查一次容器健康状态
      - AUTOHEAL_START_PERIOD=60  # 启动后60秒开始检查
      - AUTOHEAL_DEFAULT_STOP_TIMEOUT=10  # 停止容器的超时时间
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
volumes:
  pansou-data:
    driver: local

5. Clouddrive2

网盘聚合。项目主页看这里。

在 Docker 服务中启用 MountFlags:

sudo mkdir -p /etc/systemd/system/docker.service.d/
sudo cat <<EOF > /etc/systemd/system/docker.service.d/clear_mount_propagation_flags.conf
[Service]
MountFlags=shared
EOF
sudo systemctl restart docker.service
services:
  cloudnas:
    image: cloudnas/clouddrive2
    container_name: clouddrive2
    environment:
      - TZ=Asia/Shanghai
      - CLOUDDRIVE_HOME=/Config
    volumes:
      - /mnt/CloudNAS:/CloudNAS:shared
      - /opt/clouddrive2/config:/Config
      - /mnt/sata/media:/media:shared #optional media path of host
    devices:
      - /dev/fuse:/dev/fuse
    restart: unless-stopped
    pid: "host"
    privileged: true
    network_mode: "host"

6. Openlist

另一个网盘聚合。项目主页看这里。

6.1 一键脚本安装

curl -fsSL https://res.oplist.org.cn/script/v4.sh > install-openlist-v4.sh && sudo bash install-openlist-v4.sh

6.2 Docker Compose 安装

services:
  openlist:
    image: 'openlistteam/openlist:latest'
    container_name: openlist
    user: '0:0' # Please replace `0:0` with the actual user ID and group ID you want to use to run OpenList.
    volumes:
      - '/opt/openlist/data:/opt/openlist/data'
    ports:
      - '5244:5244'
    environment:
      - UMASK=022
    restart: unless-stopped

7. immich

高性能的照片和视频自托管解决方案。项目主页看这里。

mkdir ./immich-app
cd ./immich-app
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env

修改 .env

# You can find documentation for all the supported env variables at https://docs.immich.app/install/environment-variables
# The location where your uploaded files are stored
UPLOAD_LOCATION=/mnt/sata/photos/library
# The location where your database files are stored. Network shares are not supported for the database
DB_DATA_LOCATION=./postgres
# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
#TZ=Etc/UTC
TZ=Asia/Shanghai
# The Immich version to use. You can pin this to a specific version like "v2.1.0"
IMMICH_VERSION=v3
# Connection secret for postgres. You should change it to a random password
# Please use only the characters `A-Za-z0-9`, without special characters or spaces
DB_PASSWORD=YourPassword
# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

8. Navidrome

开源音乐库服务后端。项目主页看这里。

services:
  navidrome:
    image: deluan/navidrome:latest
    container_name: navidrome
    user: 1000:1000 # must own the data folder and be able to read music folder(s). See Permissions below
    ports:
      - "4533:4533"
    restart: unless-stopped
    environment:
      # Optional: put your config options customization here. Examples:
      ND_LOGLEVEL: debug
    volumes:
      - "/opt/navidrome/data:/data"
      - "/mnt/sata/music:/music:ro"

9. SmartStrm

媒体库 STRM 文件生成工具。项目主页看这里。

name: smartstrm
services:
  smartstrm:
    image: cp0204/smartstrm:latest
    container_name: smartstrm
    restart: unless-stopped
    network_mode: host
    volumes:
      - /yourpath/smartstrm/config:/app/config # 挂载配置目录
      - /yourpath/smartstrm/logs:/app/logs # 挂载日志目录,可选
      - /yourpath/smartstrm/strm:/strm # 挂载 STRM 生成目录
      # 以上 /yourpath 改为你实际存放配置的路径
    environment:
      - PORT=8024 # 管理端口,可选
      - ADMIN_USERNAME=admin # 管理用户名
      - ADMIN_PASSWORD=admin123 # 管理用户密码

10. Go-Music-dl

音乐搜索与下载工具。项目主页看这里。

services:
  music-dl:
    image: guohuiyuan/go-music-dl:latest
    container_name: music-dl
    restart: unless-stopped
    user: "1000:1000"  # 用户身份运行
    ports:
      - "8780:8780"
    volumes:
      - /opt/music-dl/data:/home/appuser/data  # 配置目录
      - /mnt/sata/music:/home/appuser/data/downloads  # 下载目录
    environment:
      - TZ=Asia/Shanghai
    command: [ "./music-dl", "web", "--port", "8780", "--no-browser" ]

11. Leelaa-Reader

有声书。项目主页看这里。

services:
  leelaa-reader:
    image: leedaisen/leelaa-reader-server:latest
    container_name: leelaa-reader
    ports:
      - "8686:8686"
    volumes:
      - ./data:/data
    environment:
      TZ: Asia/Shanghai
      # 可选:首次初始化管理员密码。不填写时会自动生成,并写入 /data/password.txt。
      # DEFAULT_ADMIN_PASSWORD: 请设置强密码
    restart: unless-stopped

12. Jellyfin

影音媒体中心。项目主页看这里。

services:
  jellyfin:
    container_name: jellyfin
    image: jellyfin/jellyfin:latest
    restart: always
    user: "1000:1000"
    network_mode: host
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - "/opt/jellyfin/data/config:/config"
      - "/opt/jellyfin/cache:/cache"
      - "/mnt/sata/media:/media"
      - "/mnt/sata/strm:/strm"

13. Halo

个人博客。项目主页看这里。

services:
  halo:
    image: halohub/halo-pro:latest
    container_name: halo
    user: "1000:1000"
    restart: unless-stopped 
    mem_limit: 1g
    memswap_limit: 1g
    depends_on:
      halodb:
        condition: service_healthy
    networks:
      - halo_network
    ports:
      - "8090:8090"
    volumes:
      - /opt/halo/halo2:/halo2
    environment:
#      - JVM_OPTS=-Xmx256m -Xms256m
      - JAVA_OPTS=-Xms256m -Xmx512m -XX:MaxMetaspaceSize=192m 
    command:
      - --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo
      - --spring.r2dbc.username=root
      - --spring.r2dbc.password=dabasepassword
      - --spring.sql.init.platform=mysql
      - --halo.external-url=http://www.fmzhong.top/
      - --halo.work-dir=/halo2
    links:
      - halodb
  halodb:
    image: mysql:8.1.0
    container_name: halodb
    restart: unless-stopped
    mem_limit: 1g
    memswap_limit: 1g
    networks:
      - halo_network
    command: 
      - --default-authentication-plugin=caching_sha2_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_general_ci
      - --explicit_defaults_for_timestamp=true
      - --innodb-buffer-pool-size=256M
    volumes:
      - ./mysql:/var/lib/mysql
      - ./mysqlBackup:/data/mysqlBackup
      - ./mysqsl-conf/my.cnf:/etc/mysql/conf.d/my.cnf:ro
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
      interval: 3s
      retries: 5
      start_period: 30s
    environment:
      - MYSQL_ROOT_PASSWORD=dabasepassword
      - MYSQL_DATABASE=halo
networks:
  halo_network:
    driver: bridge

14. Aria2

下载利器。项目主页看这里。

services:
  Aria2-Pro:
    container_name: aria2-pro
    image: p3terx/aria2-pro
    environment:
      - PUID=1000
      - PGID=1000
      - UMASK_SET=022
      - RPC_SECRET=password
      - RPC_PORT=6800
      - LISTEN_PORT=6888
      - DISK_CACHE=64M
      - IPV6_MODE=false
      - UPDATE_TRACKERS=true
      - CUSTOM_TRACKER_URL=
      - TZ=Asia/Shanghai
    volumes:
      - ${PWD}/config:/config
      - /mnt/sata/downloads:/downloads
# If you use host network mode, then no port mapping is required.
# This is the easiest way to use IPv6 networks.
    network_mode: host
#    network_mode: bridge
#    ports:
#      - 6800:6800
#      - 6888:6888
#      - 6888:6888/udp
    restart: unless-stopped
# Since Aria2 will continue to generate logs, limit the log size to 1M to prevent your hard disk from running out of space.
    logging:
      driver: json-file
      options:
        max-size: 1m
# AriaNg is just a static web page, usually you only need to deploy on a single host.
  AriaNg:
    container_name: ariang
    image: p3terx/ariang
    command: --port 6880 --ipv6
    network_mode: host
#    network_mode: bridge
#    ports:
#      - 6880:6880
    restart: unless-stopped
    logging:
      driver: json-file
      options:
        max-size: 1m

15. Lucky

项目主页看这里。

docker run -d --name lucky --restart=always --net=host gdy666/lucky

16. Siyuan

本地优先的个人知识管理系统。项目主页看这里。

services:
  siyuan:
    image: b3log/siyuan:latest
    container_name: siyuan
    restart: unless-stopped
    ports:
      - "6806:6806"
    environment:
      TZ: Asia/Shanghai
      PUID: "0"
      PGID: "0"
      SIYUAN_LANG: zh-CN
      SIYUAN_ACCESS_AUTH_CODE: loginnet
    volumes:
      - /opt/siyuan/workspace:/siyuan/workspace
      - /opt/siyuan/home:/home/siyuan
    command:
      - serve
      - --workspace=/siyuan/workspace
      - --accessAuthCode=password

17. Openwrt

一个运行在 docker 中的 openwrt。项目主页看这里。

docker run -d \
  --name openwrt \
  --restart always \
  --network macnet \
  --ip 192.168.1.3 \
  --cap-add NET_ADMIN \
  --cap-add NET_RAW \
  --cap-add SYS_MODULE \
  registry.cn-hangzhou.aliyuncs.com/zzsrv/openwrt:latest \
  /sbin/init

部署后进入容器修改 IP。

docker exec -it openwrt bash
vi /etc/config/network 

18. Syncthing

文件同步工具。项目主页看这里。

services:
  syncthing:
    image: syncthing/syncthing
    container_name: syncthing
    hostname: my-syncthing
    environment:
      - PUID=1000
      - PGID=1000
      - STGUIADDRESS=
    volumes:
      - /wherever/st-sync:/var/syncthing
    network_mode: host
    restart: unless-stopped
    healthcheck:
      test: curl -fkLsS -m 2 127.0.0.1:8384/rest/noauth/health | grep -o --color=never OK || exit 1
      interval: 1m
      timeout: 10s
      retries: 3

19. 小雅

影视全家桶。项目主页看这里。

一键安装脚本:

bash -c "$(curl --insecure -fsSL https://ddsrem.com/xiaoya_install.sh)"
# 其他备选
bash <(curl --insecure -fsSL https://ddsrem.com/xiaoya/all_in_one.sh)
bash <(curl --insecure -fsSL https://fastly.jsdelivr.net/gh/xiaoyaDev/xiaoya-alist@latest/all_in_one.sh)
bash <(curl --insecure -fsSL https://raw.githubusercontent.com/xiaoyaDev/xiaoya-alist/master/all_in_one.sh)
bash -c "$(curl --insecure -fsSL https://fastly.jsdelivr.net/gh/xiaoyaDev/xiaoya-alist@latest/main.sh)"
bash -c "$(curl --insecure -fsSL https://raw.githubusercontent.com/xiaoyaDev/xiaoya-alist/master/main.sh)"

20. Hubproxy

Github 和 Docker 加速代理服务。项目主页看这里。

docker run -d \
  --name hubproxy \
  -p 5000:5000 \
  --restart always \
  ghcr.io/sky22333/hubproxy

21. IT-Tools

IT 和 服务器管理工具集合。项目主页看这里。

docker run -d --name it-tools --restart unless-stopped -p 8064:80 corentinth/it-tools:latest

22. Daed

大鹅,透明代理。项目主页看这里。

  • Docker Compose

# docker-compose.yml
services:
  daed:
    image: ghcr.io/daeuniverse/daed
    container_name: daed
    privileged: true
    network_mode: host
    pid: host
    restart: always
    volumes:
      - /sys:/sys
      - /etc/daed:/etc/daed
  • Linux Distribution Packages

# Download the latest .deb package
wget -P /tmp https://github.com/daeuniverse/daed/releases/latest/download/installer-daed-linux-$(arch).deb

# Install
sudo dpkg -i /tmp/installer-daed-linux-$(arch).deb

# Start and enable service
sudo systemctl enable --now daed

评论