Hướng dẫn cài đặt Seafile lên Ubuntu Server

Giới thiệu

Seafile là một file-hosting mã nguồn mở với các chức năng nâng cao như đồng bộ hóa đa nền tảng, bảo vệ quyền riêng tư bằng 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.v. Seafile được viết bằng ngôn ngữ lập trình C và Python, Seafile cung cấp các tính năng tương tự như Dropbox, mega.co.nz ...
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 Seafile với máy chủ web Nginx và cơ sở dữ liệu MariaDB. Chúng tôi sẽ cài đặt máy chủ Seafile trong máy chủ web Nginx có bật HTTPS SSL Letsencrypt, sử dụng MariaDB mới nhất trên hệ thống Ubuntu 22.04.

Yêu cầu hệ thống

  • Ubuntu Server
  • LAMP
  • Nginx
  • Tên miền, giả sử mình có tên miền seafilevn.my.to, trong bài viết này mình mặc định để là tên miền này.
  • Đã lấy chứng chỉ SSL của Let's Encrypt cho tên miền.

Cài đặt

Cài đặt Python và các gói cần thiết

Cài đặt python

sudo apt install python3 libpython3.11 python3-setuptools python3-pil python3-ldap python3-urllib3 ffmpeg python3-pip python3-mysqldb python3-memcache python3-requests libmemcached-dev

Cài đặt các gói bổ xung cho Python, các gói này nhớ không cài bằng sudo

pip3 install --timeout=3600 Pillow pylibmc captcha jinja2 sqlalchemy psd-tools django-pylibmc django-simple-captcha python3-ldap

Tạo cơ sở dữ liệu cho Seafile server

Chúng ta sẽ tạo một tài khoản mới có tên 'seafile' và nó 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 MySQL shell

mysql -u root -p

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' identified by 'password';

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;

exit;

Trong đó "password" là mật khẩu (tùy chọn).

Tải và cài đặt Seafile Server trên Ubuntu Server

Tạo người dùng mới với tên seafile (tùy chọn)

sudo adduser seafile

Sau đó điền các thông tin về người dùng này. Tiếp theo, đăng nhập vào tài khoản seafile vừa tạo và tải về phiên bản mới nhất của Seafile Server

su - seafile
wget -q https://s3.eu-central-1.amazonaws.com/download.seadrive.org/seafile-server_9.0.9_x86-64.tar.gz

Giải nén file vừa tải về ra và đổi tên cho dễ nhớ.

tar -xf seafile-server_9.0.9_x86-64.tar.gz
mv seafile-server-9.0.9/ seafile-server/

Cài đặt Seafile Server với CSDL MariaDB

Vẫn đăng nhập ở tài khoản seafile vừa tạo, vào thư mục seafile-server vừa giải nén và đổi tên ra, chạy script "setup-seafile-mysql.sh"

./setup-seafile-mysql.sh

Script sẽ thực hiện kiểm tra module python. Đảm bảo rằng tất cả các phụ thuộc đã được cài đặt và sau đó nhấn Enter.
Bây giờ bạn sẽ nhập vào phần cấu hình Seafile.

server name: nhập tên máy chủ seafile của bạn, chẳng hạn như 'ManhHa-Cloud'.
server domain name: nhập tên miền cho máy chủ seafile của bạn 'seafilevn.my.to'. (đây là tên miền free của mình nhé)
seafile data directory: để cấu hình mặc định và nhấn enter.
seafile fileserver port: để nó trên cổng mặc định '8082'.

Bây giờ cho 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ó (chúng ta đã tạo ở bước trên). Và sau đó điền vào các thông tin về cơ sở dữ liệu.

database host: localhost mặc định
database port: mặc định trên cổng thông thường mysql '3306'
database user là 'seafile' và mật khẩu đã tạo ở trên
ccnet database: 'ccnet-db'
seafile database: 'seafile-db'
seahub database: 'seahub-db'

Sau khi nhập xong, bảng thông tin hiện ra để xác nhận lại lần nữa, nếu chắc chắn ấn Enter để tiến hành cài đặt.

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, kiểm tra chạy seafile server và seahub server bằng start script. Vào thư mục ~/seafile-server-latest và chạy

./seafile.sh start
./seahub.sh start

Khi chạy seahub.sh start lần đầu sẽ yêu cầu bạn nhập email và mật khẩu admin để đăng nhập. Kiểm tra lại bằng lệnh

ss -plnt4

Giờ chúng ta sẽ cấu hình để seafile và seahub chạy như dịch vụ hệ thống. Dừng seafile và seahub lại

./seafile.sh stop
./seahub.sh stop

Cấu hình để seafile và seahub chạy như dịch vụ hệ thống

Tạo file cấu hình cho seafile

sudo nano /etc/systemd/system/seafile.service

và nhập nội dung sau

[Unit]
Description=Seafile
After=network.target mysql.service nginx.service

[Service]
Type=forking
ExecStart=/home/seafile/seafile-server-latest/seafile.sh start
ExecStop=/home/seafile/seafile-server-latest/seafile.sh stop
User=seafile
Group=seafile

[Install]
WantedBy=multi-user.target

Lưu vào đóng, tiếp tục tạo file cấu hình cho seahub

sudo nano /etc/systemd/system/seahub.service

và nhập nội dung sau

[Unit]
Description=Seafile hub
After=network.target seafile.service

[Service]
Type=forking
ExecStart=/home/seafile/seafile-server-latest/seahub.sh start
ExecStop=/home/seafile/seafile-server-latest/seahub.sh stop
User=seafile
Group=seafile

[Install]
WantedBy=multi-user.target

Lưu và đóng lại, kiểm tra xem có lỗi không.

sudo systemctl daemon-reload

Không lỗi thì bật và khởi chạy seafile, seahub

sudo systemctl start seafile
sudo systemctl enable seafile
sudo systemctl start seahub
sudo systemctl enable seahub

Kiểm tra các service đã hoạt động chưa

systemctl status seafile seahub

nếu hiển thị

là đã hoạt động rồi đó

Cấu hình tên miền cho Seafile

Chúng ta sẽ chạy Seafile với tên miền 'seafilevn.my.to'. Để làm điều đó, chúng ta cần chỉnh sửa một số cấu hình của Seafile.
Đăng nhập vào người dùng 'seafile' và chỉnh sửa file

nano /home/seafile/conf/ccnet.conf

thêm nội dung

SERVICE_URL = https://seafilevn.my.to

Tiếp theo, sửa file seafile.conf

nano /home/seafile/conf/seafile.conf

phần [fileserver] sửa như sau

[fileserver]
host = 127.0.0.1
port = 8082

Tiếp theo, sửa file seahub_settings.py

sudo nano /home/seafile/conf/seahub_settings.py

thêm nội dung này vào cuối dòng

FILE_SERVER_ROOT = 'https://seafilevn.my.to/seafhttp'

Lưu file lại, thoát khỏi tài khoản seafile, khởi động lại seafile và seahub

sudo systemctl restart seafile.service seahub.service

Cấu hình Nginx

Tạo file cấu hình Nginx làm Reverse Proxy để truy cập seafile thông qua tên miền seafilevn.my.to

sudo nano /etc/nginx/sites-available/seafilevn.my.to

và nhập nội dung sau

log_format seafileformat '$http_x_forwarded_for $remote_addr [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $upstream_response_time';

server {
    listen       80;
    server_name  seafilevn.my.to;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443;
    #ssl on;
    ssl_certificate /etc/letsencrypt/live/seafilevn.my.to/fullchain.pem;    # Path to your fullchain.pem
    ssl_certificate_key /etc/letsencrypt/live/seafilevn.my.to/privkey.pem;  # Path to your privkey.pem
    server_name seafilevn.my.to;
    server_tokens off;

    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 1200s;

        proxy_set_header   X-Forwarded-Proto https;


         # used for view/edit office file via Office Online Server
         client_max_body_size 10G;

         access_log      /var/log/nginx/seahub.access.log;
         error_log       /var/log/nginx/seahub.error.log;
    }

# If you are using [FastCGI](http://en.wikipedia.org/wiki/FastCGI),
# which is not recommended, you should use the following config for location `/`.
#
#    location / {
#         fastcgi_pass    127.0.0.1:8000;
#         fastcgi_param   SCRIPT_FILENAME     $document_root$fastcgi_script_name;
#         fastcgi_param   PATH_INFO           $fastcgi_script_name;
#
#         fastcgi_param  SERVER_PROTOCOL     $server_protocol;
#         fastcgi_param   QUERY_STRING        $query_string;
#         fastcgi_param   REQUEST_METHOD      $request_method;
#         fastcgi_param   CONTENT_TYPE        $content_type;
#         fastcgi_param   CONTENT_LENGTH      $content_length;
#         fastcgi_param  SERVER_ADDR         $server_addr;
#         fastcgi_param  SERVER_PORT         $server_port;
#         fastcgi_param  SERVER_NAME         $server_name;
#         fastcgi_param   REMOTE_ADDR         $remote_addr;
#        fastcgi_read_timeout 36000;
#
#         client_max_body_size 0;
#
#         access_log      /var/log/nginx/seahub.access.log;
#        error_log       /var/log/nginx/seahub.error.log;
#    }

    location /seafhttp {
        rewrite ^/seafhttp(.*)$ $1 break;
        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  36000s;
        proxy_read_timeout  36000s;
        proxy_send_timeout  36000s;

        send_timeout  36000s;

        access_log      /var/log/nginx/seafhttp.access.log;
        error_log       /var/log/nginx/seafhttp.error.log;
    }
    location /media {
        root /home/seafile/seafile-server-latest/seahub;
    }
}

Lưu file, tạo ánh xạ

sudo ln -s /etc/nginx/sites-available/seafilevn.my.to /etc/nginx/sites-enabled/seafilevn.my.to

Kiểm tra cấu hình có lỗi hay không, nếu không lỗi khởi động lại Nginx

sudo nginx -t
sudo systemctl restart nginx.service

Giờ bạn có thể truy cập máy chủ Seafile của mình thông qua tên miền được rồi đó. Chúc các bạn thành công

Tham khảo