目录

「Share」用完即走,是极客最后的温柔

开局打造全能私有云,折腾一圈却发现我要的只是一个用完即走的快传。

自建网盘

Nextcloud

基于 Docker 部署

该方案因旧版 TrueNAS 不支持 Docker 而最初部署在 PVE 上独立于 TrueNAS 之外的 Debian 虚拟机,但面临容器中难以挂载 Samba 共享的问题(自 24.10 起,TrueNAS 原生支持 Docker)

  • mysql

    docker run -d --name mysql \
      -v /mnt/share/yirami/mysql:/var/lib/mysql \
      -e MYSQL_ROOT_PASSWORD=y@nxtcloud \
      -e MYSQL_DATABASE=nextcloud \
      -e MYSQL_USER=yirami \
      -e MYSQL_PASSWORD=y@nxtcloud \
      -p 3306:3306 \
      mysql
    # 临时方案
    docker run -d --name mysql \
      -v /root/mysql:/var/lib/mysql \
      -e MYSQL_ROOT_PASSWORD=y@nxtcloud \
      -e MYSQL_DATABASE=nextcloud \
      -e MYSQL_USER=yirami \
      -e MYSQL_PASSWORD=y@nxtcloud \
      -p 3306:3306 \
      mysql
  • nextcloud

    docker run -d --name nextcloud \
      -v /mnt/share/yirami/nextcloud:/var/www/html \
      --link mysql:mysql \
      -p 8080:80 \
      nextcloud
    # 临时方案
    docker run -d --name nextcloud \
      -v /root/nextcloud:/var/www/html \
      --link mysql:mysql \
      -p 8080:80 \
      nextcloud
    # web 登录页中 localhost 改为 mysql

基于 LNMP 裸机部署

受限于早期 TrueNAS 不支持容器化部署应用,而体系外的容器化部署在 Samba 目录挂载上遇到了问题,转而尝试在 Debian 虚拟机中裸机部署

  • LNMP

    wget http://soft.vpser.net/lnmp/lnmp1.7.tar.gz -cO lnmp1.7.tar.gz && tar zxf lnmp1.7.tar.gz && cd lnmp1.7 && ./install.sh lnmp
    # MySQL@8.0.20->y@nxtcloud->InnoDB@Y->PHP@7.4.12->Allocator@N
    # vhost
    lnmp vhost add
    # aio.cloud.yirami.xyz->rewrite@y->pathinfo@y->log@n->MySQL@y->`y@nxtcloud`->databasename@`aio_cloud`->databaseusername@`aio_cloud`->`/root/aio.cloud.yirami.xyz.ssl/aio.cloud.yirami.xyz.pem`->`/root/aio.cloud.yirami.xyz.ssl/aio.cloud.yirami.xyz.key`
  • Nextcloud

    wget https://download.nextcloud.com/server/installer/setup-nextcloud.php
    mv setup-nextcloud.php /home/wwwroot/aio.cloud.yirami.xyz/
    # pre-download if network is not good
    # ... 1. https://download.nextcloud.com/server/releases/nextcloud-21.0.0.zip
    # ... 2. mv nextcloud-21.0.0.zip /home/wwwroot/aio.cloud.yirami.xyz/nc.zip
    # open website then setup
    http://aio.cloud.yirami.xyz/setup-nextcloud.php
    # install_dir@`.`->user@`yirami`->pw@common
  • Samba

    apt update
    apt install -y php-dev libsmbclient libsmbclient-dev php-smbclient smbclient
    pecl install smbclient

Cloudreve

Nextcloud 基于 PHP 架构,消耗资源大,改为采用基于 Go 开发的 Cloudreve 搭建网盘服务

基于 LNMP 裸机部署

  • LNMP

    wget http://soft.vpser.net/lnmp/lnmp1.7.tar.gz -cO lnmp1.7.tar.gz && tar zxf lnmp1.7.tar.gz && cd lnmp1.7 && ./install.sh lnmp
    ## MySQL@8.0.20->y@nxtcloud->InnoDB@Y->PHP@7.4.12->Allocator@N
    lnmp vhost add
    # aio.cloud.yirami.xyz->rewrite@y->pathinfo@y->log@n->MySQL@y->`y@nxtcloud`->databasename@`aio_cloud`->databaseusername@`aio_cloud`->`/root/aio.cloud.yirami.xyz.ssl/aio.cloud.yirami.xyz.pem`->`/root/aio.cloud.yirami.xyz.ssl/aio.cloud.yirami.xyz.key`
  • Cloudreve

    # https://docs.cloudreve.org/getting-started/install
  • Samba

    apt update
    apt install -y cifs-utils
    # mount -t cifs //aio.nas.yirami.xyz/YDisk /mnt/YDisk -o username=yirami
    # mount -t cifs //aio.nas.yirami.xyz/YDisk/Private/CLOUDREVE/db /usr/local/mysql/var/ -o username=ycloud,password=ycloud,uid=mysql,gid=mysql
    # mount -t cifs //aio.nas.yirami.xyz/YDisk/Private/CLOUDREVE/files /home/wwwroot/aio.cloud.yirami.xyz/uploads -o username=ycloud,password=ycloud,uid=root,gid=root
    vim /etc/fstab
    # 可能有启动顺序问题,导致mysql启动失败
    #//aio.nas.yirami.xyz/YDisk/Private/CLOUDREVE/db /usr/local/mysql/var/ cifs defaults,rw,uid=mysql,gid=mysql,username=ycloud,password=ycloud 0 0
    //aio.nas.yirami.xyz/YDisk/Private/CLOUDREVE/files /home/wwwroot/aio.cloud.yirami.xyz/uploads cifs defaults,rw,uid=root,gid=root,username=ycloud,password=ycloud 0 0
  • Power onstart service

    vim /usr/lib/systemd/system/cloudreve.service
    # add
    [Unit]
    Description=Cloudreve
    Documentation=https://docs.cloudreve.org
    After=network.target
    After=mysqld.service
    Wants=network.target
    
    [Service]
    WorkingDirectory=/home/wwwroot/aio.cloud.yirami.xyz
    ExecStart=/home/wwwroot/aio.cloud.yirami.xyz/cloudreve
    Restart=on-abnormal
    RestartSec=5s
    KillMode=mixed
    
    StandardOutput=null
    StandardError=syslog
    
    [Install]
    WantedBy=multi-user.target
    # then
    systemctl daemon-reload
    systemctl start cloudreve
    systemctl enable cloudreve

基于 Docker 部署

services:
  cloudreve:
    container_name: cloudreve
    image: cloudreve/cloudreve:latest
    profiles: ["disable"]  # 默认不启动
    restart: unless-stopped
    networks:
      - traefik_proxy # 挂载全局公共网络
    # ports:
    #   - "19086:5212"
    volumes:
      - /path/to/your/cloudreve/conf.ini:/cloudreve/conf.ini
      - /path/to/your/cloudreve/cloudreve.db:/cloudreve/cloudreve.db
      - /path/to/your/cloudreve/uploads:/cloudreve/uploads
      - /path/to/your/cloudreve/avatar:/cloudreve/avatar
      - /path/to/your/aria2/downloads:/data
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=traefik_proxy"
      - "traefik.http.routers.cloudreve.rule=Host(`cloud.aio.yirami.xyz`)"
      - "traefik.http.routers.cloudreve.entrypoints=websecure"
      - "traefik.http.routers.cloudreve.tls=true"
      - "traefik.http.routers.cloudreve.tls.certresolver=le"
      - "traefik.http.services.cloudreve.loadbalancer.server.port=5212"
    depends_on:
      - aria2
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 2G
    healthcheck:
      test: ["CMD-SHELL", "wget --no-verbose --spider -q -t 1 http://localhost:5212/api/v3/site/config || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 30s

自建快传

本以为我需要的是自建网盘,实际上:

  • 获取资源更适合使用商业网盘,如 Quark 等
  • 在线文件访问更适合拆分为具体的服务,如
    • 影音使用 Jellyfin
    • 相册使用 Immich
    • 听歌使用 Navidrome
    • 书漫使用 Kavita
    • 有声使用 Audiobookshelf

抛开没有需求的在线办公不谈,自建网盘对于我的意义只剩下临时的文件共享,它最好

  • 不会要求接管存储端的数据
  • 分享的内容可以自动销毁
  • 占用更少的硬件资源

这不巧了吗,快传刚好就是!

Pingvin-share

得益于新版 TrueNAS 原生支持 Docker 部署应用,故采用 docker compose 部署方案。

基于 Docker 部署

services:
  pingvin-share:
    container_name: pingvin-share
    image: smp46/pingvin-share-x:v1.21
    # profiles: ["disable"]
    restart: unless-stopped
    networks:
      - traefik_proxy
    # ports:  # only for debug
    #   - 3000:3000
    environment:
      - TRUST_PROXY=true # Set to true if a reverse proxy is in front of the container
    volumes:
      - "/path/to/your/pingvin-share/data:/opt/app/backend/data"
      - "/path/to/your/pingvin-share/data/images:/opt/app/frontend/public/img"
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=traefik_proxy"
      - "traefik.http.routers.pingvin-share.rule=Host(`share.aio.yirami.xyz`)"
      - "traefik.http.routers.pingvin-share.entrypoints=websecure"
      - "traefik.http.routers.pingvin-share.tls=true"
      - "traefik.http.routers.pingvin-share.tls.certresolver=le"
      - "traefik.http.services.pingvin-share.loadbalancer.server.port=3000"
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 1G
    healthcheck:
      test: ["CMD-SHELL", "wget --no-verbose --spider -q -t 1 http://localhost:3000 || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 30s

networks:  # 声明外部网络
  traefik_proxy:
    external: true

Gokapi

注意:该应用没有原生支持中文

基于 Docker 部署

services:
  gokapi:
    container_name: gokapi
    image: f0rc3/gokapi:v2.2.4
    # profiles: ["disable"]
    restart: unless-stopped
    networks:
      - traefik_proxy # 挂载全局公共网络
    # ports:
    #   - 53842:53842  # only for debug, must access by traefik
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - /path/to/your/gokapi/config:/app/config
      - /path/to/your/gokapi/data:/app/data
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=traefik_proxy"
      - "traefik.http.routers.gokapi.rule=Host(`share.aio.yirami.xyz`)"
      - "traefik.http.routers.gokapi.entrypoints=websecure"
      - "traefik.http.routers.gokapi.tls=true"
      - "traefik.http.routers.gokapi.tls.certresolver=le"
      - "traefik.http.services.gokapi.loadbalancer.server.port=53842"
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 256M
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:53842/"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 10s

networks:  # 声明外部网络
  traefik_proxy:
    external: true

MicroBin

该工具中文支持不佳,且官网无法打开