Cách cài đặt Seafile với Nginx trên Ubuntu 18.04 LTS

theanh

Administrator
Nhân viên
Seafile là một hệ thống lưu trữ đám mây và lưu trữ tệp nguồn mở với các chức năng nâng cao như đồng bộ hóa từ nhiều nền tảng (hệ thống đa nền tảng), bảo vệ quyền riêng tư với mã hóa tệp tích hợp và hỗ trợ Xác thực hai yếu tố (TFA), kiểm soát phiên bản, khóa tệp, chỉnh sửa trực tuyến và nhiều tính năng khác. Seafile được viết bằng ngôn ngữ lập trình C và Python và cung cấp các tính năng tương tự như Dropbox, mega.co.nz và các tính năng khác.

Trong hướng dẫn này, tôi sẽ chỉ cho bạn từng bước cách cài đặt và cấu hình máy chủ Seafile với máy chủ web Nginx và cơ sở dữ liệu MySQL. Chúng tôi sẽ cài đặt máy chủ seafile dưới máy chủ web Nginx với HTTPS SSL Letsencrypt được bật, sử dụng MySQL 5.8 mới nhất trên hệ thống Ubuntu 18.04.

Điều kiện tiên quyết​

  • Ubuntu 18.04
  • Quyền root

Chúng ta sẽ làm gì?​

  1. Cài đặt Seafile Python Dependencies
  2. Cài đặt và cấu hình MySQL
  3. Tải xuống Seafile Server cho hệ thống Linux
  4. Cài đặt Seafile Server
  5. Cài đặt Nginx và Letsencrypt
  6. Cấu hình Nginx làm Proxy ngược cho Seafile Server
  7. Cấu hình Seafile Server
  8. Chạy Seafile Server dưới dạng Dịch vụ
  9. Cấu hình Tường lửa UFW
  10. Kiểm tra

Bước 1 - Cài đặt các phụ thuộc Python của Seafile​

Bước đầu tiên chúng ta phải thực hiện trước khi cài đặt máy chủ seafile trên hệ thống là cài đặt các phụ thuộc của nó. Seafile là một ứng dụng dựa trên python và yêu cầu python 2.7 để chạy trên máy chủ.

Trước khi cài đặt bất kỳ gói nào, chúng ta cần cập nhật kho lưu trữ Ubuntu.
Mã:
sudo apt update
Bây giờ hãy cài đặt python 2.7 với tất cả các phụ thuộc cần thiết để cài đặt máy chủ seafile bằng các lệnh apt bên dưới.
Mã:
sudo apt install python -y
sudo apt install python2.7 libpython2.7 python-setuptools python-pil python-ldap python-urllib3 ffmpeg python-pip python-mysqldb python-memcache python-requests -y
Chờ tất cả các phụ thuộc được cài đặt.

Bước 2 - Cài đặt và cấu hình MySQL​

Seafile hỗ trợ SQLite và máy chủ cơ sở dữ liệu MySQL. Đối với hướng dẫn này, chúng tôi sẽ sử dụng máy chủ cơ sở dữ liệu MySQL để cài đặt. Chúng tôi sẽ triển khai máy chủ seafile bằng phiên bản MySQL mới nhất 5.8.

Cài đặt máy chủ MySQL bằng lệnh apt bên dưới.
Mã:
sudo apt install mysql-server mysql-client -y
Sau khi cài đặt hoàn tất, hãy khởi động dịch vụ MySQL và cho phép nó khởi chạy mọi lúc khi khởi động hệ thống.
Mã:
systemctl start mysql
systemctl enable mysql
Máy chủ MySQL đã được cài đặt trên hệ thống Ubuntu.

Bây giờ chúng ta cần cấu hình mật khẩu gốc MySQL bằng lệnh 'mysql_secure_installation'.
Mã:
mysql_secure_installation
Bây giờ bạn sẽ được hỏi về chính sách mật khẩu MySQL, 0 là THẤP, 1 là TRUNG BÌNH và 2 là MẠNH. Nhập số '1' cho chính sách mật khẩu MEDIUM, nhấn enter rồi nhập mật khẩu an toàn của bạn.



Đối với những người dùng khác, chỉ cần nhập 'Y' như hiển thị bên dưới.
Mã:
Xóa người dùng ẩn danh? (Nhấn y|Y để Có, bất kỳ phím nào khác để Không): YKhông cho phép đăng nhập root từ xa? (Nhấn y|Y để Có, bất kỳ phím nào khác để Không): YXóa cơ sở dữ liệu thử nghiệm và quyền truy cập vào cơ sở dữ liệu đó? (Nhấn y|Y để Có, bất kỳ phím nào khác để Không): YTải lại bảng đặc quyền ngay bây giờ? (Nhấn y|Y để Có, bất kỳ phím nào khác để Không): Y
Quá trình thiết lập mật khẩu root MySQL đã hoàn tất.

Tiếp theo, chúng ta sẽ tạo một cơ sở dữ liệu mới cho máy chủ Seafile. Chúng ta sẽ tạo 3 cơ sở dữ liệu cho mỗi thành phần seafile và tạo một người dùng cơ sở dữ liệu mới. Chúng ta sẽ tạo một người dùng mới có tên là 'seafile' và người dùng này sẽ có tất cả các đặc quyền đối với cả 3 cơ sở dữ liệu 'ccnet-db', 'seafile-db' và 'seahub-db'.

Đăng nhập vào shell MySQL bằng lệnh MySQL client.
Mã:
mysql -u root -p
Bây giờ hãy tạo các cơ sở dữ liệu mới 'ccnet-db', 'seafile-db', 'seahub-db' và tạo người dùng mới 'seafile'. Sau đó cấp tất cả 3 quyền cơ sở dữ liệu cho người dùng 'seafile'.

Chạy các truy vấn MySQL bên dưới.
Mã:
create database `ccnet-db` character set = 'utf8';
create database `seafile-db` character set = 'utf8';
create database `seahub-db` character set = 'utf8';
 
create user 'seafile'@'localhost' defined by 'Hakase-Seafile01@';
 
GRANT ALL PRIVILEGES ON `ccnet-db`.* to `seafile`@localhost;
GRANT ALL PRIVILEGES ON `seafile-db`.* to `seafile`@localhost;
GRANT ALL PRIVILEGES ON `seahub-db`.* to `seafile`@localhost;


Máy chủ MySQL đã được cài đặt, mật khẩu gốc đã được thiết lập và cơ sở dữ liệu để cài đặt seafile đã được tạo.

Bước 3 - Tải xuống Seafile Server cho Hệ thống Linux​

Trong hướng dẫn này, máy chủ seafile sẽ chạy như một dịch vụ trên hệ thống systemd và sẽ chạy dưới một người dùng không phải root.

Tạo một người dùng mới có tên là 'mohammad'.
Mã:
useradd -m -s /bin/bash mohammad
Bây giờ hãy đăng nhập vào người dùng 'mohammad' và tải xuống phiên bản mới nhất của máy chủ seafile bằng wget.
Mã:
su - mohammad
wget https://download.seadrive.org/seafile-server_6.2.5_x86-64.tar.gz
Giải nén tệp 'seafile-server.tar.gz' và đổi tên thư mục chính thành 'seafile-server'.
Mã:
tar -xf seafile-server_6.2.5_x86-64.tar.gz
mv seafile-server-6.2.5/ seafile-server/
Mã nguồn máy chủ seafile đã được tải xuống thư mục '/home/mohammad/seafile-server'.


Bước 4 - Cài đặt máy chủ Seafile với MySQL​

Trong bước này, chúng tôi sẽ cài đặt máy chủ seafile bằng tập lệnh thiết lập MySQL do Seafile cung cấp.

Đăng nhập với tư cách là người dùng 'mohammad' và đi đến thư mục 'seafile-server'.
Mã:
su - mohammad
cd seafile-server/
Bây giờ hãy chạy tập lệnh 'setup-seafile-mysql.sh'.
Mã:
./setup-seafile-mysql.sh
tập lệnh cài đặt sẽ thực hiện kiểm tra mô-đun python. Đảm bảo tất cả các phụ thuộc đã được cài đặt và sau đó nhấn Enter.

Bây giờ bạn sẽ vào cấu hình Seafile.
  • tên máy chủ: nhập tên máy chủ seafile của bạn như 'hakase-cloud'.
  • tên miền máy chủ: nhập tên miền cho máy chủ seafile của bạn 'cloud.hakase-labs.io'.
  • thư mục dữ liệu seafile: giữ nguyên cấu hình mặc định và nhấn enter.
  • cổng máy chủ filefile: giữ nguyên cổng mặc định '8082'.


Bây giờ đến cấu hình cơ sở dữ liệu. Bạn sẽ được yêu cầu 2 tùy chọn: để tập lệnh tạo cơ sở dữ liệu cho bạn hoặc sử dụng cơ sở dữ liệu hiện có.

Chọn tùy chọn '2' để sử dụng cài đặt cơ sở dữ liệu hiện có.
  • Máy chủ cơ sở dữ liệu: localhost mặc định
  • Cổng cơ sở dữ liệu: mặc định trên cổng thông thường mysql '3306'
  • Người dùng cơ sở dữ liệu là 'seafile' với mật khẩu 'Hakase-Seafile01@'
  • Cơ sở dữ liệu ccnet: 'ccnet-db'
  • Cơ sở dữ liệu seafile: 'seafile-db'
  • Cơ sở dữ liệu seahub: 'seahub-db'


Bây giờ hãy nhấn enter một lần nữa để xác nhận cấu hình máy chủ seafile của chúng ta.



Khi quá trình cài đặt hoàn tất, bạn sẽ nhận được kết quả như hiển thị bên dưới.



Quá trình cài đặt và cấu hình máy chủ seafile đã hoàn tất thành công. Và máy chủ tệp seafile sẽ chạy dưới cổng '8082', dịch vụ seahub sẽ chạy dưới cổng '8000'.

Tiếp theo, chúng ta sẽ thử chạy máy chủ seafile và máy chủ seahub bằng tập lệnh bắt đầu.

Là người dùng 'mohammad', hãy chuyển đến thư mục '~/seafile-server-latest'.
Mã:
su - mohammad
cd ~/seafile-server-latest/
Bây giờ hãy khởi động máy chủ seafile bằng cách chạy lệnh bên dưới.
Mã:
./seafile.sh start
Sau đó chạy máy chủ seahub.
Mã:
./seahub.sh start
Lần đầu tiên bạn chạy tập lệnh bắt đầu 'seahub.sh', bạn sẽ được yêu cầu tạo người dùng quản trị và mật khẩu cho máy chủ seafile.

Nhập email và mật khẩu quản trị của bạn, sau đó nhấn Enter.



Và người dùng và mật khẩu quản trị viên đã được tạo - bây giờ hãy kiểm tra các cổng dịch vụ seafile và seahub '8082' và '8080' bằng lệnh netstat.
Mã:
netstat -plntu
Và bạn sẽ thấy máy chủ seafile và máy chủ seahub đang hoạt động trên hệ thống Ubuntu 18.04.



Bây giờ hãy dừng máy chủ seafile và seahub.
Mã:
./seafile.sh stop
./seahub.sh stop

Bước 5 - Cài đặt và cấu hình Nginx với Letsencrypt​

Trong hướng dẫn này, máy chủ seafile sẽ chạy dưới máy chủ web Nginx với HTTPS được bật. Và trong bước này, chúng ta sẽ cài đặt máy chủ web Nginx và công cụ Letsencrypt, sau đó tạo khóa SSL letsencrypt và DHPARAM cho tên miền máy chủ seafile.

Cài đặt máy chủ web Nginx bằng lệnh apt bên dưới.
Mã:
sudo apt install nginx -y
Sau khi cài đặt hoàn tất, hãy khởi động dịch vụ Nginx và cho phép nó khởi chạy mọi lúc khi khởi động hệ thống.
Mã:
systemctl start nginx
systemctl enable nginx
Bây giờ hãy cài đặt công cụ letsencrypt để tạo chứng chỉ letsencrypt SSL.
Mã:
sudo apt install letsencrypt -y
Máy chủ web Nginx và công cụ letsencrypt đã được cài đặt.

Tiếp theo, hãy vào thư mục '/etc/nginx' và tạo tệp cấu hình mới 'certbot.conf' cho letsencrypt.
Mã:
cd /etc/nginx/
vim snippets/certbot.conf
Dán cấu hình sau vào đó.
Mã:
location /.well-known { alias /var/www/html/.well-known;}
Lưu và thoát.

Chỉnh sửa tệp máy chủ ảo mặc định.
Mã:
vim sites-available/default
Thêm dòng include sau vào dấu ngoặc 'server {...}'.
Mã:
include snippets/certbot.conf;
Lưu và thoát.

Kiểm tra cấu hình nginx và khởi động lại máy chủ web.
Mã:
nginx -t
systemctl restart nginx


Và chúng ta đã sẵn sàng tạo chứng chỉ SSL letsencrypt mới cho tên miền máy chủ seafile.

Tạo các tệp chứng chỉ SSL bằng lệnh 'certbot' như hiển thị bên dưới.
Mã:
certbot certonly --rsa-key-size 4096 --webroot --agree-tos --no-eff-email --email [emailprotected] -w /var/www/html -d cloud.hakase-labs.io
Lưu ý:
  • chúng ta sẽ tạo chứng chỉ SSL mới và chỉ định kích thước khóa là '4096'.
Bây giờ bạn sẽ nhận được tất cả các tệp chứng chỉ SSL nằm trong thư mục '/etc/letsencrypt/live'.



Và để tăng cường bảo mật, chúng ta sẽ tạo khóa Diffie-Hellman có kích thước 4096 bằng lệnh OpenSSL.
Mã:
openssl dhparam -out /etc/nginx/dhparam.pem 4096
Tất cả các chứng chỉ cần thiết đã được tạo.

Bước 6 - Cấu hình Nginx làm Proxy ngược cho Máy chủ Seafile​

Đi đến Thư mục cấu hình '/etc/nginx' và tạo tệp máy chủ ảo mới 'seafile' bằng vim.
Mã:
cd /etc/nginx/
vim sites-available/seafile
Dán cấu hình sau vào đó.
Mã:
server { listen 80; server_name cloud.hakase-labs.io; rewrite ^ https://$http_host$request_uri? permanent; server_tokens off; } server { listen 443 ssl http2; server_name cloud.hakase-labs.io; ssl on; ssl_certificate /etc/letsencrypt/live/cloud.hakase-labs.io/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/cloud.hakase-labs.io/privkey.pem; ssl_session_timeout 5 phút; ssl_session_cache shared:SSL:5m; ssl_dhparam /etc/nginx/dhparam.pem; #Bảo mật SSL ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256'; ssl_ecdh_curve secp384r1; ssl_prefer_server_ciphers bật; server_tokens tắt; ssl_session_tickets tắt; proxy_set_header X-Forwarded-For $remote_addr; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $server_name; proxy_read_timeout 1200 giây; # được sử dụng để xem/sửa tệp office thông qua Office Online Server client_max_body_size 0; access_log /var/log/nginx/seahub.access.log; error_log /var/log/nginx/seahub.error.log; } vị trí /seafhttp { viết lại ^/seafhttp(.*)$ $1 ngắt; proxy_pass http://127.0.0.1:8082; client_max_body_size 0; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 36000 giây; proxy_read_timeout 36000 giây; proxy_send_timeout 36000 giây; send_timeout 36000 giây; } vị trí /media { root /home/mohammad/seafile-server-latest/seahub; } }
Lưu và thoát.

Kích hoạt máy chủ ảo seafile và kiểm tra cấu hình.
Mã:
ln -s /etc/nginx/sites-available/seafile /etc/nginx/sites-enabled/
nginx -t
đảm bảo không có lỗi và khởi động lại dịch vụ nginx.
Mã:
systemctl restart nginx
Cấu hình Nginx làm proxy ngược cho máy chủ seafile đã hoàn tất.


Bước 7 - Cấu hình máy chủ Seafile​

Để chạy máy chủ seafile dưới tên miền máy chủ web Nginx, chúng ta cần chỉnh sửa cấu hình 'seafile' mặc định cho 'ccnet service', 'seafile server' và 'seahub server'.

Đăng nhập với tư cách là người dùng 'mohammad' và đi tới thư mục 'conf/'.
Mã:
su - mohammad
cd conf/
Chỉnh sửa tệp cấu hình dịch vụ ccnet 'ccnet.conf'.
Mã:
vim ccnet.conf
Trên dòng 'SERVICE_URL', hãy thay đổi giá trị thành tên miền có HTTPS như bên dưới.
Mã:
SERVICE_URL = https://cloud.hakase-labs.io
Lưu và thoát.

Bây giờ hãy chỉnh sửa tệp 'seafile.conf' để cấu hình máy chủ seafile.
Mã:
vim seafile.conf
Thêm dòng 'host' có giá trị vào '127.0.0.1' localhost như bên dưới.
Mã:
[fileserver]host = 127.0.0.1port = 8082
Lưu và thoát.

Và cuối cùng, chúng ta sẽ chỉnh sửa Tệp 'seahub_settings.py'.
Mã:
vim seahub_settings.py
Trên dòng 'FILE_SERVER_ROOT', hãy thay đổi giá trị thành tên miền có HTTPS.
Mã:
FILE_SERVER_ROOT = 'https://cloud.hakase-labs.io/seafhttp'
Lưu và thoát.


Bước 8 - Chạy Seafile Server dưới dạng Dịch vụ​

Trong hướng dẫn này, chúng ta sẽ chạy seafile server dưới dạng dịch vụ trên hệ thống Ubuntu 18.04. Chúng tôi sẽ tạo tập lệnh dịch vụ mới cho seafile và seahub.

Vào thư mục '/etc/systemd/system' và tạo tệp dịch vụ mới 'seafile.service'.
Mã:
cd /etc/systemd/system/
vim seafile.service
Dán tập lệnh dịch vụ seafile sau vào đó.
Mã:
[Unit]Description=SeafileAfter=network.target mysql.service[Service]Type=forkingExecStart=/home/mohammad/seafile-server-latest/seafile.sh startExecStop=/home/mohammad/seafile-server-latest/seafile.sh stopUser=mohammadGroup=mohammad[Install]WantedBy=multi-user.target
Lưu và thoát.

Bây giờ hãy tạo tệp dịch vụ seahub 'seahub.service'.
Mã:
vim seahub.service
Dán tập lệnh dịch vụ seahub sau đây vào đó.
Mã:
[Unit]Description=Seafile hubAfter=network.target seafile.service[Service]Type=forkingExecStart=/home/mohammad/seafile-server-latest/seahub.sh startExecStop=/home/mohammad/seafile-server-latest/seahub.sh stopUser=mohammadGroup=mohammad[Install]WantedBy=multi-user.target
Lưu và thoát.

Lưu ý:
  • Thay đổi đường dẫn của tập lệnh seafile.sh và seahub.sh.
Bây giờ hãy tải lại hệ thống systemd.
Mã:
systemctl daemon-reload
Và khởi động dịch vụ seafile và seahub.
Mã:
systemctl start seafile
systemctl start seahub
Cho phép các dịch vụ này khởi chạy mỗi lần khởi động hệ thống.
Mã:
systemctl enable seafile
systemctl enable seahub


Các dịch vụ seafile và seahub đang hoạt động - hãy kiểm tra bằng các lệnh bên dưới.
Mã:
systemctl status seafile
systemctl status seahub
 
netstat -plntu

Bước 8 - Cấu hình Tường lửa UFW​

Bạn nên luôn bật tường lửa trên bất kỳ hệ thống nào. Đối với hệ thống Ubuntu, chúng ta sẽ bật tường lửa UFW và thêm các cổng SSH, HTTP và HTTPS vào đó.

Thêm cổng 'ssh' và bật tường lửa UFW.
Mã:
ufw allow ssh
ufw enable
gõ 'y' để bật tường lửa.

Bây giờ hãy thêm các dịch vụ HTTP và HTTPS.
Mã:
ufw allow http
ufw allow https
Kiểm tra danh sách các quy tắc trên tường lửa.
Mã:
ufw status numbered
Và bạn sẽ nhận được ba dịch vụ SSH, HTTP và HTTPS trong danh sách.


Bước 9 - Kiểm tra​

Mở trình duyệt web của bạn và nhập URL cài đặt máy chủ seafile. Của tôi là:


Và bạn sẽ được chuyển hướng đến trang đăng nhập kết nối HTTPS an toàn.



Nhập email quản trị '[emailprotected]' và mật khẩu 'mypassword', sau đó nhấp vào nút 'Đăng nhập'.

Bây giờ bạn sẽ nhận được bảng điều khiển seafile như bên dưới.



Bổ sung - tải lên hình ảnh và xem trên bảng điều khiển seafile.



Quá trình cài đặt và cấu hình máy chủ seafile với máy chủ web Nginx và Letsencrypt trên Ubuntu 18.04 đã hoàn tất thành công.

Tham khảo​

 
Back
Bên trên