docker内运行nextcloud 备忘录

最近上海封控在家,正好鼓捣下nextcloud,安装视频教程网上很多,但实际使用的视频不多。记录一下备忘,也方便参考的人。

安装nextcloud的docker-compose.yml

运行在X86的CPU上,如需要ARM架构需要替换容器为arm架构的镜像。

需要的自取,可以直接安装,目前运行良好(宿主debian11,omv6),.yml里面的密码请自行调整。

如果希望反向代理(更安全些),则把app的外接端口去掉,用proxy设置代理app的内网IP加80端口即可。如果是局域网内的nextcloud的,直接运行,然后在WAN口用nginx反代即可。

其他compose可参考 https://github.com/nextcloud/docker/tree/master/.examples

version: '3'

volumes:
  nextcloud:
  db:
  redis:
services:
  db:
    image: mariadb
    restart: always
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=rootpwd
      - MYSQL_PASSWORD=userpwd
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

  redis:
    image: redis
    restart: always
    command: redis-server --requirepass someredispassword
    volumes:
      - redis:/var/lib/redis
  app:
    image: nextcloud:apache
    restart: always
    ports:
      # Public HTTP Port:
      - '8080:80'
    links:
      - db
      - redis
    volumes:
      - nextcloud:/var/www/html
    environment:
      - MYSQL_PASSWORD=userpwd
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_HOST=db
      - REDIS_HOST=redis
      - REDIS_HOST_PASSWORD=someredispassword
    depends_on:
      - proxy
      - db
      - redis

  proxy:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: always
    ports:
      # Public HTTP Port:
      # - '80:80'
      # Public HTTPS Port:
      # - '443:443'
      # Admin Web Port:
      - '81:81'
      # environment:
      # These are the settings to access your db
      #DB_MYSQL_HOST: "db1"
      #DB_MYSQL_PORT: 3306
      #DB_MYSQL_USER: "npm"
      #DB_MYSQL_PASSWORD: "npm"
      #DB_MYSQL_NAME: "npm"
      # If you would rather use Sqlite uncomment this
      # and remove all DB_MYSQL_* lines above
      # DB_SQLITE_FILE: "/data/database.sqlite"
      # Uncomment this if IPv6 is not enabled on your host
      # DISABLE_IPV6: 'true'
    volumes:                                              
      - ./npm_data:/data                                      
      - ./letsencrypt:/etc/letsencrypt

  cron:
    image: nextcloud:apache
    restart: always
    volumes:
      - nextcloud:/var/www/html
    entrypoint: /cron.sh
    depends_on:
      - db
      - redis

天气插件显示是℉不是摄氏度

用户-个人信息本地地区设置成使用摄氏度的区域即可。

安装外部存储

nextcloud是直接安装在docker的文件夹下的。如果docker本身卷在系统盘下,而系统盘往往不是很大,则需要扩容,另外也涉及持续化的问题。毕竟家用机的主板或者硬盘总是要坏的。

备份、迁徙数据

nextcloud可以看作是私人网盘,实际使用中你可以在网盘里新建文件夹,新建文件,上传照片。从隐私角度,这必然比各种网盘都要优秀。

在网上的网盘我们不需要关心磁盘的问题,可自己的磁盘那必然意味着磁盘的损坏可能带来问题,所以就需要对nextcloud的数据进行备份。

网盘上传的文件在哪里?

docker volume ls
docker volume inspect nextcloud
[
    {
        "CreatedAt": "2022-04-20T21:02:55+08:00",
        "Driver": "local",
        "Labels": {
            "com.docker.compose.project": "nextcloud",
            "com.docker.compose.version": "1.28.4",
            "com.docker.compose.volume": "nextcloud"
        },
        "Mountpoint": "/var/lib/docker/volumes/nextcloud/_data",
        "Name": "nextcloud",
        "Options": null,
        "Scope": "local"
    }
]


"/var/lib/docker/volumes/nextcloud/_data"就是数据的问题了,打开文件夹,找到里面的data文件夹,沿着用户名,你就会看到该用户的数据了。

迁徙数据

复制粘贴涉及到权限问题,故建议使用命令行。DD命令虽然好用,但无法拷贝文件夹。。

  • 同一局域网内:
  1. docker run –rm -it -v ~/srv/dev-disk-by-uuid-E503F2B75AD697E4/backup-nextcloud:/backup -v /var/lib/docker/volumes/nextcloud_nextcloud:/docker busybox tar cfz /backup/data.tgz /docker/_data/

docker run –rm -it -v ~/home:/backup -v /var/lib/docker/volumes/nextcloud_nextcloud:/docker busybox tar cfz /backup/data.tgz /docker/_data/

  1. docker run --rm -it -v ~/volume-backup:/backup -v /var/lib/docker:/docker busybox tar cfz /backup/volume.tgz /docker/volumes/