in Blog Posts, Solution, 博客

Setup NextCloud with Docker

之前配置过一次 NextCloud,本地操作搭mysql和nginx既麻烦又不好维护。后来docker用得多一些了之后,觉得这种部署应该是由docker来支持的,找了一下确实有现成的解决方案,记录一下在这里。

简单说一下,NextCloud是本地云平台,通俗的说就是可以在自家的机器上配一套某度网盘 🙂
然后家里每个人的手机、平板、笔记本都可以访问。我们家的需求主要是共享和备份照片,共享大批量的陈年老照片,备份最近手机上拍的照片。

先clone一下这个repo:

git clone https://github.com/christophetd/nextcloud-docker-compose

按照需要,编辑docker-compose.yml 把自动备份相关的注释掉,就是 backups 下面的部分都可以删掉

编辑.env

 vim .env

修改DATA_DIR指向自家云的存储位置,HOST到机器的IP (比如 192.168.0.123)

然后

docker-compose up -d

应该就可以了
如果没有 docker-compose 需要先安装:

 
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

然后打开浏览器访问 http://192.168.0.123 就设置帐号密码就可以用了。

看起来和某度网盘差不多。

可以尝试传一个文件上去,系统就会创建用户的文件夹了。具体的数据位置在 ${DATA_DIR}/data/${USERNAME}/files/ 下面。

到此基本上就可以用了,但是实际上大家都会面临的问题是怎么样把之前的数据迁移进去云里面。NextCloud的iOS/Andriod App都有很好的支持手机上传的支持,但是PC上总不能网页上一张一张照片的传。实际上是有工具可以做这个事情的。

我们可以把之前的数据,本地复制到NextCloud放数据的目录下,然后用NextCloud提供的命令行工具自动扫描更新到MySQL就好了。

 sudo rsync -zvrP /path/to/old/data ${DATA_DIR}/data/${USERNAME}/files/

之后要进到运行的docker container里面做操作:

 sudo docker ps

列出来在跑的containers,找到 nextcloud 对应的 container ID,然后

 sudo docker exec -ti ${CONTAINER_ID} bash

就到了container的环境里。

接下来要先安装sudo

 apt-get update && apt-get install -y sudo

修正文件权限

 sudo chown -R www-data:www-data data/${USERNAME}/files/

重新扫描

 sudo -u www-data php occ files:scan --all 

注意,这里如果文件太多,可能会遇到这个报错
Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allocate 442368 bytes) in /var/www/html/3rdparty/composer/autoload_real.php on line 37

可以设置MEM LIMIT解决

sudo -u www-data PHP_MEMORY_LIMIT=512M php occ files:scan --all

文件多的话会比较慢,但是等着就好了。

用起来还是挺方便的,维护和部署也没有什么特别的操作。用Docker还是方便,希望Docker公司自己可以找到盈利点别挂了。

Write a Comment

Comment