Lưu trữ dữ liệu đám mây với Nextcloud? Tại sao không?

Bạn đang tìm 1 giải pháp lưu trữ dữ liệu trên cloud sau khi đã chán chê với việc sử dụng các dịch vụ như google drive, dropbox ...? Vậy tại sao bạn không tự mình cài đặt 1 dịch vụ cho riêng mình nhỉ? Nextcloud sẽ dễ dàng giúp bạn thực hiện điều đó. Bài viết hôm nay mình sẽ giới thiệu cho các bạn cách cài đặt và cấu hình Nextcloud trên server.

1. Giới thiệu

Trước tiên, chúng ta tìm hiểu nguồn gốc và xuất xứ của Nextcloud trước nhé.

Nhắc tới Nextcloud, chúng ta phải biết về ownCloud trước. Công ty ownCloud do Frank Karlitschek thành lập được phát triển từ năm 2010 - là một mã nguồn mở miễn phí và ứng dụng web mạnh mẽ để đồng bộ hóa dữ liệu, chia sẻ tập tin, và lưu trữ từ xa của các tập tin. ownCloud được viết bằng ngôn ngữ PHP/javascript. Nó được thiết kế để làm việc với một số hệ thống quản lý cơ sở dữ liệu, bao gồm cả MySQL, MariaDB, SQLite, Oracle Database, và PostgreSQL. Hơn nữa ownCloud có thể được triển khai trên tất cả các nền tảng như : Linux, Macintosh, Windows và Android. Đây là một ứng dụng chạy trên hệ thống mạnh mẽ, nền tảng độc lập, linh hoạt về cấu hình và khả năng sử dụng, dễ dàng sử dụng ứng dụng mã nguồn mở. Dựa trên tinh thần là hoàn toàn miễn phí nên nó đã phát triển 1 cách nhanh chóng. Nhưng một vài năm trước đây, mọi thứ bắt đầu thay đổi. Thay vì hướng tới cộng đồng để phát triển thì các dự án đã được hướng theo ý tưởng khác. Các doanh nghiệp đã phải trả tiền để hỗ trợ. Các phàn nàn từ cộng đồng Open Source ngày 1 dài về việc owncloud đã bỏ qua những feedback từ phía khách hàng, giao diện người dùng bị cắt xén nhiều hay việc release sản phẩm mà chức năng update bị lỗi.

Với những vấn đề lớn này, Frank đã từ chức và thành lập NextCloud cùng rất nhiều thành viên nòng cốt của ownCloud cũ. Nextcloud là một máy chủ chia sẻ tập tin cho phép bạn lưu trữ các nội dung cá nhân của bạn, như tài liệu và hình ảnh giống như Dropbox. Sự khác biệt với Nextcloud là tất cả các tính năng của nó là open source. Nó cũng trả về sự quản lý và các dữ liệu nhạy cảm cho bạn, do đó loại trừ việc sử dụng một dịch vụ đám mây lưu trữ của bên thứ ba. Nextcloud là một ngã ba của ownCloud và nó phát triển một cách nhanh chóng để đạt được thành công và rất nhiều người dùng ownCloud đang chuyển từ ownCloud sang Nextcloud.

2. Install and Config

Chuẩn bị: 1 server (Ubuntu 16.04) cài mysql, php, nginx và cert SSL

  • Cài mysql:
# apt-get install mysql-server
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libaio1 libcgi-fast-perl libcgi-pm-perl libencode-locale-perl libevent-core-2.0-5 libfcgi-perl libhtml-parser-perl libhtml-tagset-perl libhtml-template-perl libhttp-date-perl
  libhttp-message-perl libio-html-perl liblwp-mediatypes-perl libtimedate-perl liburi-perl mysql-client-5.7 mysql-client-core-5.7 mysql-common mysql-server-5.7 mysql-server-core-5.7
Suggested packages:
  libdata-dump-perl libipc-sharedcache-perl libwww-perl mailx tinyca
The following NEW packages will be installed:
  libaio1 libcgi-fast-perl libcgi-pm-perl libencode-locale-perl libevent-core-2.0-5 libfcgi-perl libhtml-parser-perl libhtml-tagset-perl libhtml-template-perl libhttp-date-perl
  libhttp-message-perl libio-html-perl liblwp-mediatypes-perl libtimedate-perl liburi-perl mysql-client-5.7 mysql-client-core-5.7 mysql-common mysql-server mysql-server-5.7
  mysql-server-core-5.7
0 upgraded, 21 newly installed, 0 to remove and 73 not upgraded.
Need to get 18.8 MB of archives.
After this operation, 162 MB of additional disk space will be used.

Khi cài các bạn nhớ pass root nhé.

Tạo DB cho nextcloud # mysql -u root -p

mysql> CREATE DATABASE nextcloud;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT ALL ON nextcloud.* to 'nextcloud'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected, 1 warning (0.03 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
  • Cài php:
# sudo apt-get install php-fpm php-cli php-json php-curl php-imap php-gd php-mysql php-xml php-zip php-intl php-mcrypt php-imagick php-mbstring php
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  fontconfig-config fonts-dejavu-core ghostscript gsfonts imagemagick-common libavahi-client3 libavahi-common-data libavahi-common3 libc-client2007e libcups2 libcupsfilters1 libcupsimage2
  libcurl3 libfftw3-double3 libfontconfig1 libgd3 libgomp1 libgs9 libgs9-common libijs-0.35 libjbig0 libjbig2dec0 libjpeg-turbo8 libjpeg8 liblcms2-2 liblqr-1-0 libltdl7
  libmagickcore-6.q16-2 libmagickwand-6.q16-2 libmcrypt4 libpaper-utils libpaper1 libtiff5 libvpx3 libxpm4 libxslt1.1 libzip4 mlock php-common php7.0 php7.0-cli php7.0-common php7.0-curl
  php7.0-fpm php7.0-gd php7.0-imap php7.0-intl php7.0-json php7.0-mbstring php7.0-mcrypt php7.0-mysql php7.0-opcache php7.0-readline php7.0-xml php7.0-zip poppler-data ttf-dejavu-core
Suggested packages:
  ghostscript-x hpijs uw-mailutils cups-common libfftw3-bin libfftw3-dev libgd-tools fonts-droid texlive-lang-cjk liblcms2-utils libmagickcore-6.q16-2-extra libmcrypt-dev mcrypt php-pear
  poppler-utils fonts-japanese-mincho | fonts-ipafont-mincho fonts-japanese-gothic | fonts-ipafont-gothic fonts-arphic-ukai fonts-arphic-uming fonts-nanum
The following NEW packages will be installed:
  fontconfig-config fonts-dejavu-core ghostscript gsfonts imagemagick-common libavahi-client3 libavahi-common-data libavahi-common3 libc-client2007e libcups2 libcupsfilters1 libcupsimage2
  libcurl3 libfftw3-double3 libfontconfig1 libgd3 libgomp1 libgs9 libgs9-common libijs-0.35 libjbig0 libjbig2dec0 libjpeg-turbo8 libjpeg8 liblcms2-2 liblqr-1-0 libltdl7
  libmagickcore-6.q16-2 libmagickwand-6.q16-2 libmcrypt4 libpaper-utils libpaper1 libtiff5 libvpx3 libxpm4 libxslt1.1 libzip4 mlock php php-cli php-common php-curl php-fpm php-gd
  php-imagick php-imap php-intl php-json php-mbstring php-mcrypt php-mysql php-xml php-zip php7.0 php7.0-cli php7.0-common php7.0-curl php7.0-fpm php7.0-gd php7.0-imap php7.0-intl
  php7.0-json php7.0-mbstring php7.0-mcrypt php7.0-mysql php7.0-opcache php7.0-readline php7.0-xml php7.0-zip poppler-data ttf-dejavu-core
0 upgraded, 71 newly installed, 0 to remove and 116 not upgraded.
Need to get 21.3 MB of archives.
After this operation, 80.9 MB of additional disk space will be used.
Do you want to continue? [Y/n] 
  • Nginx:
# sudo apt-get install nginx-extras nginx
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libluajit-5.1-2 libluajit-5.1-common nginx-common
Suggested packages:
  fcgiwrap nginx-doc ssl-cert
The following NEW packages will be installed:
  libluajit-5.1-2 libluajit-5.1-common nginx nginx-common nginx-extras
0 upgraded, 5 newly installed, 0 to remove and 116 not upgraded.
Need to get 900 kB of archives.
After this operation, 2,730 kB of additional disk space will be used.
Do you want to continue? [Y/n] y

Với nginx, các bạn nếu có cert thì ko phải làm gì, còn mình chưa có thì sẽ tự gen 1 cái cert bất kỳ nhé:

[email protected]:/opt# sudo mkdir /etc/nginx/ssl
[email protected]:/opt# sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt

Tạo file config nginx cho nextcloud

vim /etc/nginx/sites-available/nextcloud

upstream php-handler {
    #server 127.0.0.1:9000;
    server unix:/run/php/php7.0-fpm.sock;
}

server {
    listen 80;
    server_name cloud.example.com;
    # enforce https
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name cloud.example.com;

    ssl_certificate /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx.key;

    # Add headers to serve security related headers
    # Before enabling Strict-Transport-Security headers please read into this
    # topic first.
    # add_header Strict-Transport-Security "max-age=15768000;
    # includeSubDomains; preload;";
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options "SAMEORIGIN";
    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;

    # Path to the root of your installation
    root /var/www/nextcloud/;

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

    # The following 2 rules are only needed for the user_webfinger app.
    # Uncomment it if you're planning to use this app.
    #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
    #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json
    # last;

    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 512M;
    fastcgi_buffers 64 4K;

    # Disable gzip to avoid the removal of the ETag header
    gzip off;

    # Uncomment if your server is build with the ngx_pagespeed module
    # This module is currently not supported.
    #pagespeed off;

    error_page 403 /core/templates/403.php;
    error_page 404 /core/templates/404.php;

    location / {
        rewrite ^ /index.php$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/.+|core/templates/40[34])\.php(?:$|/) {
        include fastcgi_params;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        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$uri$is_args$args;
        add_header Cache-Control "public, max-age=7200";
        # Add headers to serve security related headers (It is intended to
        # have those duplicated to the ones above)
        # Before enabling Strict-Transport-Security headers please read into
        # this topic first.
        # add_header Strict-Transport-Security "max-age=15768000;
        #  includeSubDomains; preload;";
        add_header X-Content-Type-Options nosniff;
        add_header X-Frame-Options "SAMEORIGIN";
        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;
        # Optional: Don't log access to assets
        access_log off;
    }

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

Enable site và restart lại nginx. # ln -n nextcloud ../sites-enabled/ # /etc/init.d/nginx restart

# curl -LO https://download.nextcloud.com/server/releases/nextcloud-11.0.2.tar.bz2
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 36.8M  100 36.8M    0     0   992k      0  0:00:37  0:00:37 --:--:-- 1046k
  • Install Giải nén file # tar -C /var/www -xvjf nextcloud-11.0.2.tar.bz2 Phân lại quyền folder # chown -R www-data: /var/www/nextcloud/

OK. vậy là giờ ta đã có thể truy cập vào http://cloud.example.com để check nhé (nhớ change domain của các bạn)

giờ tạo tài khoản admin nào. (nhớ thông tin tạo db lúc trước điền vào đây nhé). Xong login là ok.

Bạn có thể tạo thêm user cho người khác tại đây nhé.

Giờ bạn có thể thỏa mái nghịch cloud riêng của bạn rồi.