回到顶部

Contents

树莓派4B 安装 nextcloud 做私人云盘网盘(nginx + docker + nextCloud + redis)

环境准备

  • 电信公网 IP(打客服电话说家里装监控要公网 IP,电信不用到家就可以开通,不是 固定 IP 哦)
  • noip 动态 ddns 账号(申请到免费的账号,登录到路由器的 动态 ddns 里)
  • 树莓派4B 8G(系统:Linux raspberrypi 5.10.17-v7l+ #1403 SMP Mon Feb 22 11:33:35 GMT 2021 armv7l GNU/Linux
  • 2T 机械硬盘(挂载到树莓派上作数据盘 教程,单独供电的硬盘,重启树莓派好像找不到,设置了自动开机挂载无效还进不了系统,然后插显示器插键盘输入 root 账号的密码进入急救系统,注释掉 /etc/fstab 里开机挂载那句 才能进系统)

官方安装文档

https://docs.nextcloud.com/server/21/admin_manual/installation/index.html

安装 docker 和 docker-compose

树莓派安装 docker 和 docker-compose(镜像快速安装)

拉取和运行 nextcloud 和 mysql 镜像

参考文档:http://www.jianshu.com/p/f57390c9b68b

在用户目录下新建文件夹 nextcloud

mkdir ~/nextcloud

在新建的 nextcloud 下新建 docker-compose.yml 文件

vim ~/nextcloud/docker-compose.yml

docker-compose.yml 配置如下

version: '2'

services:
  db:
    image: ibex/debian-mysql-server-5.7  # mysql 镜像文件
    restart: always
    volumes:
      - ./cloud/db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=123456  # root 账号密码,根据需要更改 
      - MYSQL_PASSWORD=123456 # 普通账号密码,根据需要更改 
      - MYSQL_DATABASE=nextcloud  # 数据库名
      - MYSQL_USER=nextcloud  # 普通用户名
  app:
    image: arm32v7/nextcloud  # nextcloud 镜像文件
    privileged: true  # 拥 有root 权限
    ports:
      - 8888:80  # 端口映射,将 Docker 的80端口,映射成主机的 8888 端口,根据需要更改
    links:
      - db  # db 是别名,使用该别名访问 前面定义的 db。nextcloud 启动时数据库的链接填 db。
    volumes:
      - ./cloud/config:/var/www/html/config
      - /root/disk/nextCloud:/var/www/html/data  # 因为树莓派本身存储太小,这里是映射到一个外置硬盘
      - ./cloud/apps:/var/www/html/apps
    restart: always

  redis:
    image: arm32v7/redis  # arm32 架构的 redis
    container_name: redis-d  # 别名
    privileged: true  # 拥有 root 权限
    restart: always
    command: --appendonly yes  --requirepass password  # appendonly 持久化的模式, requirepass 设置密码 password
    # command: redis-server /usr/local/etc/redis/redis.conf  # 如果使用配置文件,requirepass password 需要写在配置文件中
    ports:
            - 16379:6379  # redis 6379 映射到主机的 16379 端口
    volumes:
            - ./cloud/redis/data:/data  # 数据目录映射点
            - ./cloud/redis/config/redis.conf:/usr/local/etc/redis/redis.conf  # 配置文件映射点

liunx 查看端口的使用情况

# 如果显示 LISTEN , 说明已经被占用
netstat -anp | grep 端口号

# 查看所有已经被使用的端口
netstat -nultp  

docker 源官方地址

https://hub.docker.com/

运行 docker 程序:

在当前目录下(nextcloud 文件夹)执行 docker-compose up -d 命令,Docker 会根据我们的配置,自动下载镜像并启动程序,可能要稍微等会。如果启动容器配置数据有误,在当前文件夹运行 docker-compose down 移除容器,再次编辑 yml 文件后重新执行 docker-compose up -d。

docker-compose up -d  # 以后台的方式运行容器,没有容器就会新建,不会在终端上打印运行日志
docker-compose up # 以前台的方式运行容器,本质是 docker-compose logs -f,它会收集所有容器的日志输出直到退出命令,或者容器都停止运行
docker-compose down  # 移除生成的容器,不会移除镜像文件,yml 数据配置有误时,可能需要
docker-compose restart  # 重启容器,不会加载新的 docker-compose 相关文件的新的改动。解决问题:在 ‘请确定在根目录下有一个名为".ocdata"的文件’ 需要,根目录指的挂在目录

docker-compose 相关命令,查看更多命令 

docker container ls  # 查看容器信息,主要看它的名称 NAMES,方便进入容器内部
docker exec -it nextcloud_app_1 bash  # 进入容易内部,nextcloud_app_1 是容器的名称,上面那个命令查出来的
exit # 进入容器内部后,要退出的话 输入 exit 即可
docker ps -a  # 查看所有 docker 容器
docker ps  # 查看正在运行 docker 容器
root@raspberrypi:~/nextcloud# docker container ls
CONTAINER ID   IMAGE                          COMMAND                  CREATED       STATUS                 PORTS                  NAMES
136b42366301   arm32v7/nextcloud              "/entrypoint.sh apac…"   4 hours ago   Up 2 hours             0.0.0.0:8888->80/tcp   nextcloud_app_1
f8a05c22c936   ibex/debian-mysql-server-5.7   "/entrypoint.sh mysq…"   4 hours ago   Up 2 hours (healthy)   3306/tcp, 33060/tcp    nextcloud_db_1
root@raspberrypi:~/nextcloud# docker exec -it nextcloud_app_1 bash
root@136b42366301:/var/www/html# exit
exit
root@raspberrypi:~/nextcloud# docker ps -a
CONTAINER ID   IMAGE                          COMMAND                  CREATED       STATUS                 PORTS                  NAMES
136b42366301   arm32v7/nextcloud              "/entrypoint.sh apac…"   4 hours ago   Up 2 hours             0.0.0.0:8888->80/tcp   nextcloud_app_1
f8a05c22c936   ibex/debian-mysql-server-5.7   "/entrypoint.sh mysq…"   4 hours ago   Up 2 hours (healthy)   3306/tcp, 33060/tcp    nextcloud_db_1

配置 nginx

server{
    listen 10000;  # 访问站点监听的端口
    client_max_body_size 10G;
    
    access_log  /root/yzq/logs/nextcloud.access.log;
    error_log   /root/yzq/logs/nextcloud.error.log;

    location / {
        proxy_pass http://127.0.0.1:8888;  # docker-compose.yml 映射的本地端口
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
   }
}

树莓派安装 nginx 教程

配置 nextcloud 的数据库

假如 树莓派的 局域网 IP 是:10.0.0.2 浏览器打开: 10.0.0.2:10000 就能打开首次进入 nextcloud 的配置页面,注意: hostname 填 yml 文件的 db 就行了。

配置完成后,稍等片刻正常的话,就能进入到仪表盘页面

nextcloud 客户端下载

安卓客户端

关于树莓派的 Docker 镜像

因为树莓派是 基于 ARM 架构,所以很多镜像无法正常使用。

php 添加 Redis 缓存 和 不受信任的域名 

如果按照上面的配置就是执行此命令:

vim /root/nextcloud/cloud/config/config.php
  'htaccess.RewriteBase' => '/',
  # 'memcache.local' => '\\OC\\Memcache\\APCu',  # APCu 缓存模式
  'memcache.local' => '\\OC\\Memcache\\Redis',  # 缓存模式:添加 redis 缓存
  # 'memcache.locking' => '\OC\Memcache\Redis',
  # 'memcache.distributed' => '\OC\Memcache\Redis',
  'filelocking.enabled' => 'true',
  'redis' =>  # redis 缓存连接信息
  array (
      'host' => '127.0.0.1',
      'port' => 16379,  # docker 中 redis 映射主机的端口
  ),



'trusted_domains' => 
array (
  0 => '127.0.0.1',
  1 => 'xxx.yyyyy.com',  # 将这个自定义域名添加到配置中,才可以通过域名访问哦
  2 => '10.0.0.11',
),

nextcloud 数据库使用 sqlite 数据库

不想使用 MySQL,或者个人使用时,可以使用 sqlite 数据库,配置更简单。docker-compose.yml 文件内容修改如下:

version: '2'

  app:
    image: arm32v7/nextcloud
    ports:
      - 8888:80
    volumes:
      - ./cloud/config:/var/www/html/config
      - /home/pi/disk/nextCloud:/var/www/html/data
      - ./cloud/apps:/var/www/html/apps
    restart: always

挂载硬盘相关命令

sudo fdisk -l  # 列出硬盘硬件的相关信息
sudo blkid  # 查看硬盘 uuid
sudo dumpe2fs -h /dev/sda1  # 查看硬盘 label 和 uuid
sudo mount /dev/sda ~/disk  # 挂载 sda 硬盘到 ~/disk 目录下
sudo umount -v /dev/sda # 通过设备卸载
sudo umount -v ~/disk  # 通过挂载点卸载

开机自动挂载硬盘

因为 mount 命令在系统重启以后会失效。

所以要通过配置文件,来让硬盘开机自动挂载。

首先,打开文件 /etc/fstab:

sudo vi /etc/fstab

将下面配置,添加在文件的最后(两句话是一个意思,随意使用一句就行):

# /dev/sda /root/disk ext4 defaults 0 0  # 使用设备名挂载

UUID=fsdfs-fsdf-werwerw-343-wer-aada  /root/disk ext4 defaults 0 0  # 使用UUID挂载,推荐

其中 /dev/sda 为设备的名字。

其中 /root/disk 为挂载点。

Mac 上新硬盘格式化成 ext4 格式

参考文档:https://ggg.re/macos-mkfs-ext4

如果没有 Homebrew 的话,需要先安装 Homebrew:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装 e2fsprogs:

brew install e2fsprogs

把 U 盘插到 Mac 上,执行:

diskutil list

找到自己 U 盘的盘符,比如我这里是:/dev/disk2s1,

/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *31.0 GB    disk2
   1:                 DOS_FAT_32 KINGSTON                31.0 GB    disk2s1

然后执行格式化:

diskutil unmountdisk /dev/disk2s1
sudo $(brew --prefix e2fsprogs)/sbin/mkfs.ext4 /dev/disk2s1

执行命令后会要求输入用户密码,然后输入 y 确认,等待一会儿就可以了。

关于 docker 无法卸载问题

docker 卸载不干净
例如:
官网介绍docker卸载的方法一般为
1> yum remove docker-ce -y
2> rm -fr /var/lib/docker*
但试过后你依然无法安装新版本,尤其是高版本降到低版本 docker,问题在于 docker 你并没有卸载干净
正确的卸载方法如下:
1> yum list installed | grep docker 查看
2> yum remove [docker 名称]
注:上述命令可以查询到未删除干净的 docker 残留,一般这种情况出现于 docker 18.09.3 版本上

[root@izj6c5nf8w ~]# yum list installed|grep docker
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
containerd.io.x86_64                  1.2.13-3.2.el7                  @docker-ce-stable
docker-ce.x86_64                      3:19.03.12-3.el7                @docker-ce-stable
docker-ce-cli.x86_64                  1:19.03.12-3.el7                @docker-ce-stable
[root@izj6c5nf8w ~]#
[root@izj6c5nf8w ~]# yum remove docker-ce.x86_64

 

^_^
请喝咖啡 ×

文章部分资料可能来源于网络,如有侵权请告知删除。谢谢!
前一篇: nextcloud 您的数据目录可被其他用户读取 请更改权限为 0770 以避免其他用户查看目录.
下一篇: 树莓派 安装 Nextcloud 出现“内部服务器错误”
captcha