使用Docker搭建NextCloud私人云盤+Collabora文件預覽編輯

前言

今天在看頭條的時候,看到了一篇文章,名爲《Python3+服務器搭建私人云盤》的文章,看着感覺還不錯,也不是很難,所以就想自己動手搭建一個。翻到下面評論的時候,看大家有說NextCloud,名字聽上去還不錯,然後就搜了搜相關的資料,感覺NextCloud要比使用Python搭建的這個私人云盤好多了,然後就開始了我的折騰之路。雖說在網上看到了許多文章、博客都說是一鍵部署,但有可能是因爲環境不同所導致的,所以踩了許多坑,在這裏與大家分享一下,我的踩坑之路。

開始搭建

我所部署的環境是Ubuntu 18.04,已經安裝好了docker以及docker-compose等相關組件,docker的安裝文章有很多,所以我在這裏就不再贅述了。

編寫docker-compose.yml文件

version: '3'
services:
  web:
    hostname: web
    image: nginx
    ports:
      - 9101:80
    networks:
      - cloud_net
    restart: always
    volumes:
      - ./nextcloud:/var/www/html
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
    depends_on:
      - app

  app:
    hostname: app
    image: nextcloud:17.0.3-fpm-alpine
    restart: always
    networks:
      - cloud_net
    volumes:
      - ./nextcloud:/var/www/html

  db:
    hostname: db
    image: mariadb
    restart: always
    networks:
      - cloud_net
    volumes:
      - ./db/data:/var/lib/mysql
    command: --character-set-server=utf8
    environment:
      MYSQL_ROOT_PASSWORD: root123456
      MYSQL_DATABASE: nextcloud
      MYSQL_USER: nextcloud
      MYSQL_PASSWORD: nextcloud123

networks:
  cloud_net:

我看網上大部分文章中都使用了nginx,所以我這裏的文件也是拿過來直接複製了,然後根據自己所需進行了一下修改。
如果要直接使用此配置文件,還需要創建docker的網絡,命令爲:

docker network create cloud_net

文件中的端口號,數據庫用戶名密碼等相關參數可以根據自己所需進行修改,如不需要使用容器中的數據庫,就可以把文件中db相關的內容進行刪除,後續可以使用自己已經啓動好的數據庫進行配置。

ngxin.conf

user  www-data;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    set_real_ip_from  10.0.0.0/8;
    set_real_ip_from  172.16.0.0/12;
    set_real_ip_from  192.168.0.0/16;
    real_ip_header    X-Real-IP;

    #gzip  on;

    upstream php-handler {
        server app:9000;
    }

    server {
        listen 80;
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
        add_header X-Download-Options noopen;
        add_header X-Permitted-Cross-Domain-Policies none;
        add_header Referrer-Policy no-referrer;

        root /var/www/html;

        location = /robots.txt {
            allow all;
            log_not_found off;
            access_log off;
        }

        location = /.well-known/carddav {
            return 301 $scheme://$host/remote.php/dav;
        }
        location = /.well-known/caldav {
            return 301 $scheme://$host/remote.php/dav;
        }

        # set max upload size
        client_max_body_size 10G;
        fastcgi_buffers 64 4K;

        # Enable gzip but do not remove ETag headers
        gzip on;
        gzip_vary on;
        gzip_comp_level 4;
        gzip_min_length 256;
        gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
        gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

        location / {
            rewrite ^ /index.php$request_uri;
        }

        location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
            deny all;
        }
        location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
            deny all;
        }

        location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+)\.php(?:$|/) {
            fastcgi_split_path_info ^(.+\.php)(/.*)$;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            # fastcgi_param HTTPS on;
            #Avoid sending the security headers twice
            fastcgi_param modHeadersAvailable true;
            fastcgi_param front_controller_active true;
            fastcgi_pass php-handler;
            fastcgi_intercept_errors on;
            fastcgi_request_buffering off;
        }

        location ~ ^/(?:updater|ocs-provider)(?:$|/) {
            try_files $uri/ =404;
            index index.php;
        }

        # Adding the cache control header for js and css files
        # Make sure it is BELOW the PHP block
        location ~ \.(?:css|js|woff|svg|gif)$ {
            try_files $uri /index.php$request_uri;
            add_header Cache-Control "public, max-age=15778463";
           
            add_header X-Content-Type-Options nosniff;
            add_header X-XSS-Protection "1; mode=block";
            add_header X-Robots-Tag none;
            add_header X-Download-Options noopen;
            add_header X-Permitted-Cross-Domain-Policies none;
            add_header Referrer-Policy no-referrer;

            # Optional: Don't log access to assets
            access_log off;
        }

        location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ {
            try_files $uri /index.php$request_uri;
            # Optional: Don't log access to other assets
            access_log off;
        }
    }

}

這個配置文件可以拿來直接使用,放在docker-compose.yml同目錄下即可,文件名爲nginx.conf。

啓動容器

docker-compose up -d

啓動完成之後,可以查看一下是否全都啓動成功

docker-compose ps

如果其中的State全部都爲UP,則爲啓動成功。如果啓動失敗,需檢查相關配置文件是否有誤。
啓動成功之後,需要等待一會,它會去創建數據庫等相關操作。可以去通過ip+端口去查看是否成功,如果出現了nextCloud的頁面,即表示成功,可以進行下一步配置了。如果出現了nginx的502頁面,就需要多等待一會,不要認爲是失敗了,而重新做不必要的操作。

NextCloud配置

輸入ip+端口訪問nextCloud頁面,創建管理員賬號與數據庫配置:
在這裏插入圖片描述
用戶名和密碼自定義即可。數據庫相關信息爲docker-compose.yml文件中配置的。全部填寫完成之後,點擊下方按鈕創建。
在這裏插入圖片描述
如果創建完成之後出現0770權限問題,需要修改docker-compose.yml同目錄下的nextcloud/config/config.php文件,在文件中添加如下配置:

'check_data_directory_permissions' => false,

在這裏插入圖片描述
然後返回到docker-compose.yml文件目錄下,重啓容器:

docker-compose restart app

等待重啓成功之後,就不會報這個錯誤了。
登錄成功之後,就會出現nextCloud的主頁。
在這裏插入圖片描述

接下來配置文件預覽服務

因爲網絡的原因,可能無法在nextCloud應用中安裝collabora插件,所以我採用的是離線下載安裝的方法。

https://github-production-release-asset-2e65be.s3.amazonaws.com/75662432/d2568100-46b9-11ea-8a73-e32fa22e115f?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20200307%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20200307T020722Z&X-Amz-Expires=300&X-Amz-Signature=b3ab2c86e7b1eac20d4d5a78482e90231c93ed196e438cda3641de1ff70d0cf7&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3Drichdocuments.tar.gz&response-content-type=application%2Foctet-stream

這裏爲應用的下載地址。將下載後的文件解壓到與docker-compose.yml同目錄下的netxtcloud/apps/目錄下。
然後在nextCloud頁面中在右上角選擇齒輪形狀的按鈕=》應用,然後找到剛添加的插件,選擇啓用即可。
在這裏插入圖片描述

啓動collabora預覽服務

docker run -t -d -p 0.0.0.0:9980:9980 -e 'domain=192\\.168\\.0\\.6|192\\.168\\.0\\.12' -e "username=admin" -e "password=admin" --restart always --cap-add MKNOD collabora/code

這裏的端口可以根據自己環境進行設置,以及用戶名密碼,domain等。
domain:允許訪問的地址或域名,多個域名或地址用 “|”隔開,“.”需要用 “\”進行轉義。配置完成回車即可啓動。
啓動成功之後還需要一步配置:

docker ps | grep collabora  ## 查看剛啓動的collabora的容器id,輸出的第一列爲容器id
docker exec -it 容器id /bin/bash ## 即可進入啓動的docker容器

然我我們需要修改一個配置文件,文件位置爲:/etc/loolwsd/loolwsd.xml。
如果linux命令好的朋友可以使用sed對文件進行編輯修改。這裏由於我的sed命令不是很熟悉,就不用這種方法了。
我採用的是將文件複製到宿主機內進行修改後,在複製回容器中。

docker cp 容器id:/etc/loolwsd/loolwsd.xml ./

接着我們使用vi或者vim對文件進行編輯:

vim +/SSL loolwsd.xml 

使用此命令即可打開文件並定位到需要修改的位置。
在這裏插入圖片描述
將紅框位置修改爲false,我這裏的是修改過後的文件,如果文件沒有被修改這裏的值會是true。然後保存退出。
接着將文件在複製回容器中:

docker cp loolwsd.xml 容器id:/etc/loolwsd/

然後我們需要重啓容器:

docker restart 容器id

此時collabora文件預覽編輯服務就算配置完成了,接下來我們需要在nextCloud頁面中進行配置測試。

在nextCloud中配置collabora

然後點擊右上角齒輪形狀的按鈕或者此時爲用戶頭像,選擇設置,在線協作選項進行設置。
在這裏插入圖片描述
在此處填寫上剛剛collabora服務的地址即可。然後點擊Apply應用。
此時就全部配置完成了,然我我們在nextCloud中新建一個文件測試一下。
在這裏插入圖片描述
在這裏插入圖片描述

結尾

至此我們的私人網盤+文件預覽編輯服務就部署成功了,nextCloud還有桌面客戶端和手機APP,大家可以進行下載進行測試也是可以的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章