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