Cài đặt nextcloud trên ubuntu 18.04 LTS

Cài đặt nextcloud trên ubuntu 18.04 LTS

Trong bài viết trước mình đã hướng dẫn các bạn cách cài đặt nextcloud trên centos 7, tiếp theo mình sẽ hướng dẫn các bạn cài đặt nextcloud 13 trên ubuntu 18.04 LTS

Yêu cầu: 

  • Ubuntu 18.04
  • Root privileges
  • Lưu ý những đoạn mình tô vàng và sửa thông tin theo cài đặt của bạn

Ok chúng ta bắt đầu thực hiện setup nextcloud on ubuntu

1- Cài đặt Nginx Web server

Bước đầu tiên chúng ta sẽ cài đặt máy chủ web Nginx. mình sẽ sử dụng máy chủ web Nginx thay vì máy chủ web Apache. Theo tài liệu khuyến nghị của nextcloud thì sử dụng Apache

sudo apt update
sudo apt install nginx -y

Khởi động và enable Nginx services

systemctl start nginx
systemctl enable nginx

Kiểm tra việc cài đặt nginx

netstat -plntu
curl -I localhost

Cài đặt Nginx Web server

2- Cài đặt và cấu hình PHP7.1-FPM

Ở đây chúng ta sẽ sử dụng PHP7.1-FPM cho nextcloud, chúng ta sẽ dùng PHP7.1-FPM from the PPA repository.

Cài đặt gói ‘software-properties-common’ và thêm ‘ondrej PHP’ PPA repository

sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y

Cài đặt PHP7.1 and PHP7.1-FPM và các phần mở rộng.

sudo apt install php7.1-fpm php7.1-mcrypt php7.1-curl php7.1-cli php7.1-mysql php7.1-gd php7.1-iconv php7.1-xsl php7.1-json php7.1-intl php-pear php-imagick php7.1-dev php7.1-common php7.1-mbstring php7.1-zip php7.1-soap -y

Di chuyển tới thư mục:  ‘/etc/php/7.1’

cd /etc/php/7.1/

Sửa nội dung trong file: php.ini

vim fpm/php.ini
vim cli/php.ini

Bỏ comment dòng ‘date.timezone’ và thay giá trị bằng timezone của bạn

date.timezone = Asia/Ho_Chi_Minh

Bỏ comment dòng  ‘cgi.fix_pathinfo’ và thay giá trị thành ‘0’.

cgi.fix_pathinfo=0

Lưu lại và thoát

Tiếp theo chúng ta sửa file www.conf

vim fpm/pool.d/www.conf

Bỏ comment các dòng dưới đây:

env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

Xong lưu lại và thoát

khởi động lại và enable PHP7.1-FPM service

systemctl restart php7.1-fpm
systemctl enable php7.1-fpm

kiểm tra việc cài đặt

netstat -pl | grep php

Cài đặt và cấu hình PHP7.1-FPM

3- Cài đặt và cấu hình MySQL Server

Cài đặt MySQL mới nhất

sudo apt install mysql-server mysql-client -y

Sau khi cài đặt thành công, chúng ta khởi động và enable MySQL service

systemctl start mysql
systemctl enable mysql

Tiếp theo cấu hình MySQL root password  sử dụng ‘mysql_secure_installation’

sudo mysql_secure_installation

Ở đây việc đặt mật khẩu có 3 chế độ LOW, MEDIUM, STRONG, bài hướng dẫn này mình sẽ chọn MEDIUM, theo khuyến cáo các bạn nên chọn STRONG

Cài đặt và cấu hình MySQL Server

Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y

Tiếp theo chúng ta tạo database cho nextcloud với thông tin như dưới, thay đổi theo thông tin của bạn khi tạo

  • database name: nextcloud_db
  • user: nextclouduser
  • password: Nextclouduser421@

mysql -u root -p

create database nextcloud_db;
create user nextclouduser@localhost identified by 'Nextclouduser421@';
grant all privileges on nextcloud_db.* to nextclouduser@localhost identified by 'Nextclouduser421@';
flush privileges;

Tạo database

4- Tạo chứng chỉ SSL

Trong hướng dẫn này, Mình sẽ bảo mật nextcloud bằng SSL miễn phí từ Letsencrypt, sử dụng công cụ letsencrypt để tạo.

Nếu bạn không có tên miền hoặc cài đặt nextcloud trong mạng nội bộ, thì có thể tạo chứng chỉ Tự ký bằng cách sử dụng OpenSSL. tham khảo bài viết: cài đặt nextcloud trên centos 7

Cài đặt công cụ ‘letsencrypt’

sudo apt install letsencrypt -y

Sau khi cài đặt hoàn tất, dừng nginx service

systemctl stop nginx

Tiếp theo, chúng ta tạo chứng chỉ SSL cho tên miền bằng cách sử dụng lệnh cerbot.

sudo certbot certonly --standalone -d nextcloud.yourdomain.com

Bạn sẽ được yêu cầu cung cấp địa chỉ email và được sử dụng cho thông báo gia hạn. Đối với thỏa thuận TOS Letsencrypt, nhập ‘A’ để đồng ý và cho địa chỉ email

Lưu ý: phải dùng email có dạng “administrator@your-domain”

Tạo chứng chỉ SSL

Khi nó hoàn thành, bạn sẽ nhận được kết quả như hình dưới đây

Tạo chứng chỉ SSL

Chứng chỉ SSL Letsencrypt cho tên miền netxcloud đã được tạo, tất cả đều nằm trong thư mục ‘/etc/letsencrypt/live/your-domain-name‘.

5- Download Nextcloud 13

Trước tiên chúng ta cần cài gói unzip

sudo apt install wget unzip zip -y

Đi tới thư mục ‘/var/www’ và tải nextcloud-13.0.2.zip về (để tải bản cài đặt mới nhất các bạn truy cập trang chủ)

cd /var/www/
wget https://download.nextcloud.com/server/releases/latest.zip

Giải nén file tải về và tạo thư mục ‘data’

unzip latest.zip
mkdir -p nextcloud/data/

Thay đổi quyền thư mục

chown -R www-data:www-data /var/www/nextcloud/

Nextcloud đã được tải xuống trong thư mục ‘/var /www/nextcloud‘, và nó sẽ là thư mục gốc của web

6- Cấu hình Nginx Virtual Host for Nextcloud

Trong bước này, chúng ta sẽ cấu hình máy chủ ảo nginx cho nextcloud. Chúng ta sẽ cấu hình nextcloud sử dụng HTTPS .

Vào thư mục: ‘/etc/nginx/sites-available’ và tạo một virtual host file ‘nextcloud’ mới

cd /etc/nginx/sites-available/
vim nextcloud

Copy và dán nội dung dưới đây vào

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

server {
    listen 80;
    listen [::]:80;
    server_name nextcloud.yourdomain.com;
    # enforce https
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name nextcloud.yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/nextcloud.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/nextcloud.yourdomain.com/privkey.pem;

    # 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=15552000;
    # includeSubDomains; preload;";
    #
    # WARNING: Only add the preload option once you read about
    # the consequences in https://hstspreload.org/. This option
    # will add the domain to a hardcoded list that is shipped
    # in all major browsers and getting removed from this list
    # could take several months.
    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;

    # 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;

    # 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;

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

    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/.+)\.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$uri$is_args$args;
        add_header Cache-Control "public, max-age=15778463";
        # 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;";
        #
        # WARNING: Only add the preload option once you read about
        # the consequences in https://hstspreload.org/. This option
        # will add the domain to a hardcoded list that is shipped
        # in all major browsers and getting removed from this list
        # could take several months.
        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;
        # 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;
    }
}

Lưu lại file và thoát

Bật máy chủ ảo và kiểm tra cấu hình, đảm bảo không có lỗi như hình dưới đây

ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/

nginx -t

systemctl restart nginx
systemctl restart php7.1-fpm

Cấu hình Nginx Virtual Host for Nextcloud

7- Cấu hình UFW Firewall 

Chúng ta sử dụng UFW firewall cho ubuntu

ufw enable

Nhập ‘y’ và nhấn Enter để bắt đầu và bật UFW firewall

Thêm SSH, HTTP và HTTPS mới vào UFW firewall.

ufw allow ssh
ufw allow http
ufw allow https

Kiểm tra

ufw status

Cấu hình UFW Firewall 

8- Nextcloud Post-Installation

Mở trình duyệt web và nhập địa chỉ: http://nextcloud.yourdomain.com/

Đầu tiên chúng ta cần tạo người dùng quản trị cho nextcloud, và đường dẫn của “Data folder” như sau: /var/www/nextcloud/data

Phần thông tin database như đã tạo ở trên.

Cài đặt nextcloud trên ubuntu 18.04 LTS

Cài đặt nextcloud trên ubuntu 18.04 LTS

Xong các bạn chọn Finish Setup

Chờ đợi quá trình thiết lập hoàn tất, các bạn sẽ đăng nập vào trang quản trị nextcloud

Ok vậy là xong, chúc các bạn cài đặt thành công

Tham khảo thêm tại:
howtoforge.com
docs.nextcloud.com

Nếu bạn thấy hữu ích hãy chia sẻ cho mọi người.