侧边栏壁纸
  • 累计撰写 129 篇文章
  • 累计创建 16 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录
Web   

在 Docker 中Nextcloud 部署教程

1、利用 docker-compose 部署

  • 首先创建文件夹 nextcloud ,这里将会放 nextcloud 的配置与运行文件
mkdir ~/nextcloud
  • 在 nextcloud 文件夹下面创建 docker-compose.yml 文件,内容如下:
version: '2'

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

  redis:
    image: redis:alpine
    command: redis-server --requirepass your_redis_password
    restart: always
    volumes:
      - redis:/data
    networks:
      - nextcloud_network
      
  app:
    image: nextcloud:latest   # 树莓派换成:arm32v7/nextcloud
    ports:
      - 8888:80  # 将Docker的80端口,映射成主机的8888端口,可以自行修改
    links:
      - db
      - redis
    volumes:
      - nextcloud:/var/www/html
    restart: always
    networks:
      - nextcloud_network
    environment:
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=your_db_password
      - MYSQL_HOST=db
      - REDIS_HOST=redis
      - REDIS_HOST_PASSWORD=your_redis_password
    depends_on:
      - db
      - redis
      
networks:
  nextcloud_network:

  • 执行以下命令,Docker会自动下载镜像并启动程序
docker-compose up -d
  • 成功后,访问IP地址 xxx.xxx.xxx.xxx:8888 ,按下图来配置数据库

这时候,我们就已经可以在局域网中使用 Nextcloud 的功能,接下来我们尝试将其映射到外网中。

2、Nginx配置

通常我们会将一级域名配置给个人博客网页,这时候就需要将 Nextcloud 反向代理到二级域名。

  • 首先在 Nginx 配置文件夹中创建配置文件,填入以下内容:
# 强制重定向https
server {
    listen 80; # 监听80端口
    server_name xxxxxxx.xxx;  # 自己的域名
    #把http的域名请求转成https
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    # 改为您自己的域名
    server_name xxxxxx.xxx;
 	client_max_body_size 10G;

    # 将证书文件存放路径和证书的密钥文件名替换成自己存放路径与证书的密钥文件名。
    ssl_certificate /etc/nginx/conf.d/xxxxxxx.tech_bundle.pem;
    ssl_certificate_key  /etc/nginx/conf.d/xxxxxxxx.tech.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!DHE:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 	ssl_prefer_server_ciphers on;

    add_header Strict-Transport-Security "max-age=31536000" always;
    
    location /nextcloud/ {
    # 改为自己的公网ip
    	proxy_pass http://xxx.xxx.xxx.xxx:8888/;
    }

    location / {
        proxy_set_header HOST $host;
        proxy_set_header X-Forwarded-Proto $scheme;
  		proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://xxx.xxx.xxx.xxx:8090/; # 这里改为自己服务器ip
    }
}

3、设置反向代理与域名绑定

  • 打开配置文件 sudo vim ~/nextcloud/cloud/config/config.php 添加以下内容
  'trusted_domains' =>
  array (
    0 => 'xxxxx.xxx',  # 你的域名
    1 => 'xxx.xxx.xxx.xxx:8888',   # 你的IP
  ),
  'overwritehost' => 'xxxxx.xxx',  # 你的域名
  'overwriteprotocol' => 'https',
  'overwritewebroot' => '/nextcloud',
  'trusted_proxies' =>
  array (
    0 => 'xxx.xxx.xxx.xxx',   # 你的IP
  ),
  'filelocking.enabled' => true,
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'redis' => [
      'host' => 'redis', // 使用Docker服务名称作为主机名
      'password' => 'yourpassword', // Redis密码,与docker-compose.yml文件中相同
      'port' => 6379,
  ],

4、外置硬盘的映射

往往我们会选择机械硬盘来储存 Nextcloud 的数据,所以我们需要将硬盘挂载映射到目录下。

  • 首先创建需要映射的文件夹
mkdir ~/data
sudo chmod -R 777 ~/data   # 修改权限
sudo chown -R www-data:www-data ~/data  # 修改用户和组
  • 查看当前系统检测到的硬盘情况,找到需要的硬盘记住 UUID 编号
lsblk -lf
  • 初始化硬盘,需要的话
sudo umount /dev/sda1      # 必须先卸载该分区
sudo mkfs.ext4 /dev/sda1    # 格式化为ext4分区
  • 配置开机自动挂载文件,打开文件 sudo vim /etc/fstab 填入。
UUID=xxxxxxxxxxxx  /home/zy/data ext4 defaults 0 0  # 推荐这种

5、设置定时后台任务

最常见的方法是使用cron,这是一个基于时间的作业调度器,用于定期执行任务。

首先,打开终端并输入以下命令来编辑crontab文件:

crontab -e

在打开的crontab文件中,添加以下行:

*/5 * * * * /usr/bin/docker exec --user www-data nextcloud php -f cron.php

6、系统升级

在Dockerfile中保持之前的设置,只需要下载新的镜像并重启就好,并执行。

sudo -u www-data php /var/www/nextcloud/occ upgrade

升级结束后,禁用维护模式

docker exec --user www-data nextcloud php occ maintenance:mode --off

问题追加1:检测照片信息很慢

  • Nextcloud 可以通过后台直接执行
docker exec -u www-data nextcloud_app_1 php cron.php

问题追加2:视频没有预览图

  • 进入该容器的后台
docker exec -it container-name /bin/bash
  • Update 系统,并按照软件
apt -y update
apt install ffmpeg -y
  • 打开配置文件 sudo vim ~/nextcloud/cloud/config/config.php 添加以下内容
'preview_libreoffice_path' => '/usr/bin/libreoffice',
'enable_previews' => true,
'enabledPreviewProviders' =>
 array (
    0 => 'OC\\Preview\\Image',
    1 => 'OC\\Preview\\HEIC',
    2 => 'OC\\Preview\\TIFF',
    3 => 'OC\\Preview\\Movie',
 ),
  • 对整个空间进行扫描
docker exec --user www-data nextcloud php occ preview:generate-all
  • 重新加载 cron 服务
sudo service cron reload

问题追加3:系统文件出现错乱

如果系统文件出现错乱,可以直接使用文件扫描功能,直接对其进行修复

docker exec --user www-data nextcloud php occ files:scan --all

问题追加4:安装或者升级后出现Internal Server Error问题

如果安装后出现了以上报错,说明安装成功了,但是网络设置出现了问题。

首先检查docker中的网络设置,查看所有网络

docker network ls

查看特定网络,

docker network inspect <网络名称或ID>

再查看对应容器,docker ps,找到容器的ID或名称,手动连接

docker network connect nextcloud_network nextcloud
docker network connect nextcloud_network mariadb
docker network connect nextcloud_network redis

参考:
1、https://www.jianshu.com/p/f57390c9b68b
2、https://www.allerstorfer.at/nextcloud-install-preview-generator/

0

评论区