portainer

如果要用docker版的portainer管理所有的docker应用,必须最先安装portainer容器。

# https://hub.docker.com/r/6053537/portainer-ce
docker run -d --restart=always --name="portainer" -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock 6053537/portainer-ce
version: "2"
services:
  portainer:
      container_name: portainer
      network_mode: bridge
      image: 6053537/portainer-ce:latest
      # image: 6053537/portainer-ce   #汉化版。官方版为portainer/portainer-ce
      # image: hub-mirror.c.163.com/6053537/portainer-ce #推荐国内服务器或nas用,需要请用#注释上一行
      ports:
        - 9000:9000
      volumes:
        - ./data:/data
        - /var/run/docker.sock:/var/run/docker.sock
      restart: unless-stopped
volumes:
  data:
 

squid 代理服务器

参考

nginx proxy manager

version: '3'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'    # HTTP端口
      - '81:81'    # Nginx Proxy Manager Dashboard端口
      - '443:443'  # HTTPS端口
    volumes:
      - ./data:/data # 配置
      - ./letsencrypt:/etc/letsencrypt  # 证书路径

linux 服务端浏览器

开启ddns和nginx proxy之后,用于快速在外网接入内网浏览器

version: '3.3'
services:
  firefox:
    container_name: firefox
    restart: unless-stopped
    ports:
      - '5800:5800'
      - '5900:5900'
    volumes:
      - '/root/firefox:/config:rw'
    environment:
      - LANG=zh_CN.UTF-8
      - TZ=Asia/Hong_Kong
      - DISPLAY_WIDTH=1920
      - KEEP_APP_RUNNING=1
      - VNC_PASSWORD=1234
    image: jlesage/firefox

adguard dns过滤

参见adguard 部署及DOH配置

homeassistant 智能家居

参见homeassistant实现小爱同学控制美的中央空调

lucky

参见使用lucky进行ddns、端口转发、https证书acme续签

jellyfin

端口是8096

version: '3.5'
services:
  jellyfin:
    image: nyanmisaka/jellyfin
    container_name: jellyfin
    network_mode: 'host'
    volumes:
      - /root/jellyfin/config:/config
      - /root/jellyfin/cache:/cache
      - /mnt/media:/media
    restart: 'unless-stopped'
    devices:
      - /dev/dri:/dev/dri
    environment:
      - TZ=Asia/Shanghai
      - PUID=0
      - PGID=0
      - LC_ALL=en_US.UTF-8
      - LANG=en_US.UTF-8
      - LANGUAGE=en_US:en
      - HEALTHCHECK_URL=http://localhost:8096/

qbittorrentee

端口是8080

version: "3"
services:
  qbittorrentee:
    image: superng6/qbittorrentee
    container_name: qbittorrentee
    network_mode: "host"
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - /mnt/media/qbittorrentee/config:/config
      - /mnt/media/qbittorrentee/downloads:/downloads
    #ports:
    #  - 6881:6881
    #  - 6881:6881/udp
    #  - 8080:8080
    restart: unless-stopped

youtube dl

version: "3"
services:
  youtube-dl:
    image: "kmb32123/youtube-dl-server"
    #network_mode: "host"
    ports:
      - 8081:8080
    volumes:
      - /mnt/media/youtubeDownload:/youtube-dl
    restart: unless-stopped

xiaoya-alist

docker run -d -p 4567:4567 -p 5344:80 -e ALIST_PORT=5344 -v /etc/xiaoya:/data --restart=always --name=xiaoya-tvbox haroldli/xiaoya-tvbox:latest

参见tvbox-小雅实现外网访问

aliyundrive-webdav

docker run -d --name=aliyundrive-webdav --restart=unless-stopped -p 8080:8080 \
  -v /etc/aliyundrive-webdav/:/etc/aliyundrive-webdav/ \
  -e REFRESH_TOKEN='your refresh token' \
  -e WEBDAV_AUTH_USER=admin \
  -e WEBDAV_AUTH_PASSWORD=admin \
  messense/aliyundrive-webdav

其中,REFRESH_TOKEN 环境变量为你的阿里云盘 refresh_tokenWEBDAV_AUTH_USER 和 WEBDAV_AUTH_PASSWORD 为连接 WebDAV 服务的用户名和密码。 参考

immich 相册管理

前置

最简单的配置(无中文geo和备份),需要2个配置文件

.env:

TZ=Asia/Shanghai
 
IMMICH_VERSION=release
 
HF_ENDPOINT=https://hf-mirror.com
 
# 自定义的上传照片存放路径,群晖需要先创建好
 
UPLOAD_LOCATION=/mnt/media/immich-app/library
 
# 自定义的数据库存放路径,群晖需要先创建好
 
DB_DATA_LOCATION=/mnt/media/immich-app/postgres
 
# 自定义的外部库存放路径
 
PHOTOS_LOCATION=/mnt/lq-photos
 
# 大模型存放地址
IMMICH_MODAL_CACHE=/mnt/media/immich-app/modal
 
# 下面修改数据库账号密码等信息
 
DB_USERNAME=postgres
 
DB_PASSWORD=postgres
 
DB_DATABASE_NAME=immich

docker-compose.yml:

services:
  immich-server:
    container_name: immich_server
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    # extends:
    #   file: hwaccel.transcoding.yml
    #   service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
    volumes:
      # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
      # 如果怕修改原有照片,最后加上ro,否则删除ro
      - ${PHOTOS_LOCATION}:/usr/src/app/external:ro
      - /etc/localtime:/etc/localtime:ro
    env_file:
      - .env
    environment:
      PUID: 0
      PGID: 0
    ports:
      - '2283:2283'
    depends_on:
      - redis
      - database
    restart: always
    healthcheck:
      disable: false
 
  immich-machine-learning:
    container_name: immich_machine_learning
    # For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag.
    # Example tag: ${IMMICH_VERSION:-release}-cuda
    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
    # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
    #   file: hwaccel.ml.yml
    #   service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable
    devices: 
      - /dev/dri:/dev/dri
    volumes:
      # 这个目录存放AI模型
      - ${IMMICH_MODAL_CACHE}:/cache
    environment:
      PUID: 0
      PGID: 0
    env_file:
      - .env
    restart: always
    healthcheck:
      disable: false
 
  redis:
    container_name: immich_redis
    image: docker.io/redis:6.2-alpine@sha256:905c4ee67b8e0aa955331960d2aa745781e6bd89afc44a8584bfd13bc890f0ae
    healthcheck:
      test: redis-cli ping || exit 1
    restart: always
    environment:
      PUID: 0
      PGID: 0
 
  database:
    container_name: immich_postgres
    image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
    environment:
      PUID: 0
      PGID: 0
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      POSTGRES_INITDB_ARGS: '--data-checksums'
    volumes:
      # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
    healthcheck:
      test: >-
        pg_isready --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" || exit 1;
        Chksum="$$(psql --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" --tuples-only --no-align
        --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')";
        echo "checksum failure count is $$Chksum";
        [ "$$Chksum" = '0' ] || exit 1
      interval: 5m
      start_interval: 30s
      start_period: 5m
    command: >-
      postgres
      -c shared_preload_libraries=vectors.so
      -c 'search_path="$$user", public, vectors'
      -c logging_collector=on
      -c max_wal_size=2GB
      -c shared_buffers=512MB
      -c wal_compression=on
    restart: always
 
volumes:
  model-cache:
  • 如果遇到外网同步、上传大文件失败,可以参考:openresty大文件上传失败解决方案
  • 如果有命令行上传需求,使用cli登陆 后使用:immich upload  --skip-hash --ignore **/@eaDir/** --album-name "xx旅游" --recursive "/volume1/somedir"

talebook 、zlibrary远程下载

services:
  talebook:
    restart: always
    image: talebook/talebook:latest
    volumes:
      - /mnt/media/talebookData:/data
    ports:
      - "6080:80"
      - "6443:443"
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Shanghai
      - SSR=OFF
    depends_on:
      - douban-rs-api
 
  # optional, for meta plugins
  # please set "http://douban-rs-api" in settings
  douban-rs-api:
    restart: always
    image: ghcr.nju.edu.cn/cxfksword/douban-api-rs
 
  # 远程下载zlibrary书籍能力
  download-server:  # 服务名称
    image: xlqdys/download-proxy  # 使用的镜像名称
    container_name: download-server  # 容器名称
    ports:
      - "6081:8080"  # 将容器的 8080 端口映射到主机的 8080 端口
    volumes:
      - /mnt/media/talebookData/books/imports:/app/downloads  # 挂载宿主机的目录到容器内
    environment:
      - API_KEY=106
    restart: always  # 容器意外停止时自动重启