Cách đồng bộ hóa và chia sẻ file với Seafile trên Ubuntu 18.04
Seafile là một nền tảng chia sẻ và đồng bộ hóa file open-souce , tự lưu trữ. User có thể lưu trữ và tùy chọn mã hóa dữ liệu trên server của riêng họ với không gian lưu trữ là giới hạn duy nhất. Với Seafile, bạn có thể chia sẻ các file và folder bằng cách sử dụng đồng bộ hóa đa nền tảng và các liên kết được bảo vệ bằng password tới các file có ngày hết hạn. Tính năng tạo version file nghĩa là user có thể khôi phục các file hoặc folder đã xóa và sửa đổi.Trong hướng dẫn này, bạn sẽ cài đặt và cấu hình Seafile trên server Ubuntu 18.04. Bạn sẽ sử dụng MySQL để lưu trữ dữ liệu cho các thành phần khác nhau của Seafile và Apache làm server proxy để xử lý truy cập web . Sau khi hoàn thành hướng dẫn này, bạn có thể sử dụng giao diện web để truy cập Seafile từ máy tính để bàn hoặc ứng dụng di động, cho phép bạn đồng bộ hóa và chia sẻ file của bạn với user hoặc group khác trên server hoặc với công chúng.
Yêu cầu
Trước khi bắt đầu hướng dẫn này, bạn cần các thành phần sau :
- Một server Ubuntu 18.04 với tối thiểu 2GB RAM được cài đặt theo hướng dẫn Cài đặt Server Ban đầu cho Ubuntu 18.04 này , bao gồm một user không phải root có quyền sudo và một firewall .
- Web server Apache có server ảo được cấu hình cho domain đã đăng ký theo Cách cài đặt web server Apache trên Ubuntu 18.04 .
- Chứng chỉ SSL được cài đặt trên server của bạn theo hướng dẫn Cách bảo mật Apache bằng Let's Encrypt trên Ubuntu 18.04 .
- Tên domain đã đăng ký đầy đủ. Hướng dẫn này sẽ sử dụng
example.com
xuyên suốt. -
Cả hai bản ghi DNS sau được cài đặt cho server của bạn
- Bản ghi A với
example.com
trỏ đến địa chỉ IP công cộng của server của bạn. - Bản ghi A với
www.example.com
trỏ đến địa chỉ IP công cộng của server của bạn.
- Bản ghi A với
-
Server database MySQL được cài đặt và cấu hình. Làm theo các bước trong hướng dẫn Cách cài đặt MySQL trên Ubuntu 18.04 . Bỏ qua Bước 3 của hướng dẫn này - “Điều chỉnh Xác thực User và Đặc quyền”. Bạn sẽ chỉ thực hiện kết nối local với server database , vì vậy việc thay đổi phương thức xác thực cho user root là không cần thiết.
Bước 1 - Tạo database cho các thành phần Seafile
Seafile yêu cầu ba thành phần để hoạt động bình thường. Ba thành phần này là:
- Seahub : Giao diện user web của Seafile, được viết bằng Python sử dụng khuôn khổ web Django . Từ Seahub, bạn có thể truy cập, quản lý và chia sẻ file của bạn bằng trình duyệt web.
- Server Seafile : Daemon dịch vụ dữ liệu quản lý quá trình tải lên, download và đồng bộ hóa file thô. Bạn không tương tác trực tiếp với server nhưng sử dụng một trong các client hoặc giao diện web Seahub.
- Server Ccnet : Daemon dịch vụ RPC để kích hoạt giao tiếp nội bộ giữa các thành phần khác nhau của Seafile. Ví dụ: khi bạn sử dụng Seahub, nó có thể truy cập dữ liệu từ server Seafile bằng dịch vụ Ccnet RPC.
Mỗi thành phần này lưu trữ dữ liệu riêng biệt trong database riêng của nó.Trong bước này, bạn sẽ tạo ba database MySQL và một user trước khi tiến hành cài đặt server .
Đầu tiên, đăng nhập vào server bằng SSH với tên user và địa chỉ IP của bạn:
ssh sammy@your_server_ip
Kết nối với server database MySQL với quyền administrator (root):
- sudo mysql
Tại dấu nhắc MySQL, sử dụng lệnh SQL sau để tạo user database :
- CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
Tiếp theo, bạn sẽ tạo database sau để lưu trữ dữ liệu của ba thành phần Seafile:
ccnet-db
cho server Ccnet.seahub-db
cho giao diện user web Seahub.seafile-db
cho server file Seafile.
Tại dấu nhắc MySQL, hãy tạo database của bạn:
- CREATE DATABASE `ccnet-db` CHARACTER SET = 'utf8';
- CREATE DATABASE `seafile-db` CHARACTER SET = 'utf8';
- CREATE DATABASE `seahub-db` CHARACTER SET = 'utf8';
Sau đó, cấp tất cả các quyền cho user database Seafile để truy cập và áp dụng các thay đổi trong các database này:
- GRANT ALL PRIVILEGES ON `ccnet-db`.* to `sammy`@localhost;
- GRANT ALL PRIVILEGES ON `seafile-db`.* to `sammy`@localhost;
- GRANT ALL PRIVILEGES ON `seahub-db`.* to `sammy`@localhost;
Thoát khỏi dấu nhắc MySQL bằng lệnh exit
:
- exit
Đến đây bạn đã tạo user và database cần thiết để lưu trữ dữ liệu cho từng thành phần Seafile, bạn sẽ cài đặt các phần phụ thuộc để download gói server Seafile.
Bước 2 - Cài đặt phụ thuộc và download Seafile
Một số phần của Seafile được viết bằng Python và do đó yêu cầu các module và chương trình Python bổ sung để hoạt động. Trong bước này, bạn sẽ cài đặt các phụ thuộc này trước khi download và extract gói server Seafile.
Để cài đặt các phần phụ thuộc bằng apt
chạy lệnh sau:
- sudo apt install python-setuptools python-pip python-urllib3 python-requests python-mysqldb ffmpeg
Các phần phụ thuộc python-setuptools
và python-pip
giám sát việc cài đặt và quản lý các gói Python. Các python-urllib3
và python-requests
gói đưa ra yêu cầu đến các trang web. Cuối cùng, python-mysqldb
là một thư viện để sử dụng MySQL từ Python và ffmpeg
xử lý các file đa phương tiện.
Các module Python pillow
và làm moviepy
theo yêu cầu của Seafile không có sẵn trong repository Ubuntu. Bạn sẽ cài đặt chúng theo cách thủ công bằng pip
:
- sudo pip install pillow moviepy
Seafile yêu cầu pillow
, thư viện python để xử lý hình ảnh và moviepy
để xử lý hình thu nhỏ của file phim.
LƯU Ý: Bạn cũng cần phải nâng cấp các gói này theo cách thủ công khi version mới được phát hành. Lệnh để nâng cấp là:
- sudo pip install --upgrade pillow moviepy
Đến đây bạn đã cài đặt các phụ thuộc cần thiết, bạn có thể download gói server Seafile.
Seafile tạo các folder bổ sung trong quá trình cài đặt . Để giữ cho tất cả chúng được ngăn nắp, hãy tạo một folder mới và thay đổi nó:
- mkdir seafile
- cd seafile
Đến đây bạn có thể download version mới nhất ( 6.3.4
tính đến thời điểm viết bài này) của server Seafile từ trang web bằng cách chạy lệnh sau:
- wget https://download.seadrive.org/seafile-server_6.3.4_x86-64.tar.gz
Seafile phân phối bản download dưới dạng file nén tar, nghĩa là bạn cần extract nó trước khi tiếp tục. Extract repository bằng tar
:
- tar -zxvf seafile-server_6.3.4_x86-64.tar.gz
Bây giờ hãy thay đổi vào folder đã extract :
- cd seafile-server-6.3.4
Ở giai đoạn này, bạn đã download và extract gói server Seafile và cũng đã cài đặt các phụ thuộc cần thiết. Đến đây bạn đã sẵn sàng để cấu hình server Seafile.
Bước 3 - Cấu hình Server Seafile
Seafile cần một số thông tin về cài đặt của bạn trước khi bạn khởi động các dịch vụ lần đầu tiên. Điều này bao gồm các chi tiết như domain , cấu hình database và đường dẫn nơi nó sẽ lưu trữ dữ liệu. Để bắt đầu chuỗi câu hỏi nhắc cung cấp thông tin này, bạn có thể chạy tập lệnh setup_seafile_mysql.sh
, có trong repository lưu trữ bạn đã extract ở bước trước.
Chạy script bằng bash
:
- bash setup-seafile-mysql.sh
Nhấn ENTER
để tiếp tục.
Kịch bản bây giờ sẽ nhắc bạn với một loạt câu hỏi. Bất kỳ nơi nào đề cập đến giá trị mặc định, nhấn phím ENTER
sẽ sử dụng giá trị đó.
Hướng dẫn này sử dụng Seafile
làm tên server , nhưng bạn có thể thay đổi nó nếu cần.
**Question 1** What is the name of the server? It will be displayed on the client. 3 - 15 letters or digits [ server name ] Seafile
Nhập domain cho version Seafile này.
**Question 2** What is the ip or domain of the server?. For example: www.mycompany.com, 192.168.1.101 [ This server's ip or domain ] example.com
Đối với Question 3
nhấn ENTER
để chấp nhận giá trị mặc định. Nếu bạn đã cài đặt bộ nhớ ngoài, chẳng hạn như sử dụng NFS hoặc bộ nhớ khối, bạn cần chỉ định đường dẫn đến vị trí đó tại đây.
**Question 3** Where do you want to put your seafile data? Please use a volume with enough free space [ default "/home/sammy/seafile/seafile-data" ]
Đối với Question 4
nhấn ENTER
để chấp nhận giá trị mặc định.
**Question 4** Which port do you want to use for the seafile fileserver? [ default "8082" ]
Dấu nhắc tiếp theo cho phép bạn xác nhận cấu hình database . Bạn có thể tạo database mới hoặc sử dụng database hiện có để cài đặt . Đối với hướng dẫn này, bạn đã tạo database cần thiết ở Bước 1, vì vậy hãy chọn tùy chọn 2
ở đây.
------------------------------------------------------- Please choose a way to initialize seafile databases: ------------------------------------------------------- [1] Create new ccnet/seafile/seahub databases [2] Use existing ccnet/seafile/seahub databases [ 1 or 2 ] 2
Câu hỏi 6-9 liên quan đến server database MySQL. Bạn sẽ chỉ cần cung cấp tên user và password của user mysql mà bạn đã tạo ở Bước 1. Nhấn ENTER
để chấp nhận các giá trị mặc định cho host
và port
.
What is the host of mysql server? [ default "localhost" ] What is the port of mysql server? [ default "3306" ] Which mysql user to use for seafile? [ mysql user for seafile ] sammy What is the password for mysql user "seafile"? [ password for seafile ] password
Sau khi cung cấp password , tập lệnh sẽ yêu cầu tên của database Seafile. Sử dụng ccnet-db
, seafile-db
và seahub-db
cho hướng dẫn này. Sau đó, tập lệnh sẽ xác minh xem có kết nối thành công với database hay không trước khi tiến hành hiển thị tóm tắt cấu hình ban đầu.
Enter the existing database name for ccnet: [ ccnet database ] ccnet-db verifying user "sammy" access to database ccnet-db ... done Enter the existing database name for seafile: [ seafile database ] seafile-db verifying user "sammy" access to database seafile-db ... done Enter the existing database name for seahub: [ seahub database ] seahub-db verifying user "sammy" access to database seahub-db ... done --------------------------------- This is your configuration --------------------------------- server name: Seafile server ip/domain: example.com seafile data dir: /home/sammy/seafile/seafile-data fileserver port: 8082 database: use existing ccnet database: ccnet-db seafile database: seafile-db seahub database: seahub-db database user: sammy -------------------------------- Press ENTER to continue, or Ctrl-C to abort ---------------------------------
Nhấn ENTER
để xác nhận.
Generating ccnet configuration ... done Successly create configuration dir /home/sammy/seafile/ccnet. Generating seafile configuration ... done Generating seahub configuration ... ---------------------------------------- Now creating seahub database tables ... ---------------------------------------- creating seafile-server-latest symbolic link ... done ----------------------------------------------------------------- Your seafile server configuration has been finished successfully. ----------------------------------------------------------------- run seafile server: ./seafile.sh { start | stop | restart } run seahub server: ./seahub.sh { start <port> | stop | restart <port> } ----------------------------------------------------------------- If you are behind a firewall, remember to allow input/output of these tcp ports: ----------------------------------------------------------------- port of seafile fileserver: 8082 port of seahub: 8000 When problems occur, Refer to https://github.com/haiwen/seafile/wiki for information.
Vì bạn sẽ chạy Seafile sau Apache, việc mở cổng 8082
và 8000
trong firewall là không cần thiết, vì vậy bạn có thể bỏ qua phần này của kết quả .
Bạn đã hoàn thành cấu hình ban đầu của server . Trong bước tiếp theo, bạn sẽ cấu hình web server Apache trước khi khởi động các dịch vụ Seafile.
Bước 4 - Cấu hình Server Web Apache
Trong bước này, bạn sẽ cấu hình web server Apache để chuyển tiếp tất cả các yêu cầu tới Seafile. Sử dụng Apache theo cách này cho phép bạn sử dụng URL không có số cổng, kích hoạt kết nối HTTPS với Seafile và sử dụng chức năng bộ nhớ đệm mà Apache cung cấp để có hiệu suất tốt hơn.
Để bắt đầu chuyển tiếp các yêu cầu, bạn cần kích hoạt module proxy_http
trong cấu hình Apache. Mô-đun này cung cấp các tính năng cho các yêu cầu HTTP và HTTPS ủy quyền. Lệnh sau sẽ kích hoạt module :
- sudo a2enmod proxy_http
Lưu ý: Các module ssl và ghi lại Apache cũng được yêu cầu cho cài đặt này. Bạn đã kích hoạt các module này như một phần của việc cấu hình Let's Encrypt trong hướng dẫn Apache thứ hai được liệt kê trong phần yêu cầu .
Tiếp theo, cập nhật cấu hình server ảo của example.com
để chuyển tiếp các yêu cầu đến server file Seafile và đến giao diện web Seahub.
Mở file cấu hình trong editor :
- sudo nano /etc/apache2/sites-enabled/example.com-le-ssl.conf
Các dòng từ ServerAdmin
đến SSLCertificateKeyFile
là một phần của cấu hình Apache và Let's Encrypt ban đầu mà bạn đã cài đặt như một phần của yêu cầu . Thêm nội dung được đánh dấu, bắt đầu từ Alias
và kết thúc bằng lệnh ProxyPassReverse
:
<IfModule mod_ssl.c> <VirtualHost *:443> ServerAdmin admin@example.com ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/example.com/html ErrorLog ${APACHE_LOG_DIR}/example.com-error.log CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem Alias /media /home/sammy/seafile/seafile-server-latest/seahub/media <Location /media> Require all granted </Location> # seafile fileserver ProxyPass /seafhttp http://127.0.0.1:8082 ProxyPassReverse /seafhttp http://127.0.0.1:8082 RewriteEngine On RewriteRule ^/seafhttp - [QSA,L] # seahub web interface SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 ProxyPass / http://127.0.0.1:8000/ ProxyPassReverse / http://127.0.0.1:8000/ </VirtualHost> </IfModule>
Chỉ thị Bí danh ánh xạ đường dẫn URL example.com/media tới một đường dẫn local trong hệ thống file mà Seafile sử dụng. Chỉ thị Location
sau đây cho phép truy cập vào nội dung trong folder này. Các lệnh ProxyPass
và ProxyPassReverse
làm cho Apache hoạt động như một Reverse Proxy cho server này, chuyển tiếp các yêu cầu đến /
và /seafhttp
tới giao diện web Seafile và server file chạy trên các cổng server local 8000
và 8082
tương ứng. Chỉ thị RewriteRule
chuyển tất cả các yêu cầu đến /seafhttp
không thay đổi và ngừng xử lý các luật khác ( [QSA,L]
).
Lưu và thoát khỏi file .
Kiểm tra xem có bất kỳ lỗi cú pháp nào trong cấu hình server ảo hay không:
- sudo apache2ctl configtest
Nếu nó báo cáo Syntax OK
, thì không có vấn đề gì với cấu hình của bạn. Khởi động lại Apache để các thay đổi có hiệu lực:
- sudo systemctl restart apache2
Đến đây bạn đã cấu hình Apache để hoạt động như một Reverse Proxy cho server file Seafile và Seahub. Tiếp theo, bạn sẽ cập nhật các URL trong cấu hình của Seafile trước khi bắt đầu các dịch vụ.
Bước 5 - Cập nhật cấu hình và dịch vụ khởi động của Seafile
Vì bây giờ bạn đang sử dụng Apache để ủy quyền tất cả các yêu cầu tới Seafile, bạn cần cập nhật các URL trong file cấu hình của Seafile trong folder conf
bằng editor trước khi khởi động dịch vụ Seafile.
Mở ccnet.conf
trong editor :
- nano /home/sammy/seafile/conf/ccnet.conf
Sửa đổi cài đặt SERVICE_URL
trong file để trỏ đến URL HTTPS mới không có số cổng, ví dụ:
SERVICE_URL = https://example.com
Lưu và thoát khỏi file khi bạn đã thêm nội dung.
Bây giờ hãy mở seahub_settings.py
trong editor :
- nano /home/sammy/seafile/conf/seahub_settings.py
Như vậy, bạn có thể thêm cài đặt FILE_SERVER_ROOT
trong file để chỉ định đường dẫn nơi server file đang lắng nghe tải lên và download file :
# -*- coding: utf-8 -*- SECRET_KEY = "..." FILE_SERVER_ROOT = 'https://example.com/seafhttp' # ...
Lưu và thoát seahub_settings.py
.
Đến đây bạn có thể khởi động dịch vụ Seafile và giao diện Seahub:
- cd /home/sammy/seafile/seafile-server-6.3.4
- ./seafile.sh start
- ./seahub.sh start
Vì đây là lần đầu tiên bạn khởi động dịch vụ Seahub nên nó sẽ nhắc bạn tạo account quản trị. Nhập địa chỉ email hợp lệ và password cho admin-user này:
What is the email for the admin account? [ admin email ] admin@example.com What is the password for the admin account? [ admin password ] password-here Enter the password again: [ admin password again ] password-here ---------------------------------------- Successfully created seafile admin ---------------------------------------- Seahub is started Done.
Mở https:// example.com
trong trình duyệt web và đăng nhập bằng địa chỉ email và password quản trị Sea file .
Sau khi đăng nhập thành công, bạn có thể truy cập giao diện quản trị hoặc tạo user mới.
Đến đây bạn đã xác minh giao diện web hoạt động bình thường, bạn có thể bật các dịch vụ này tự động khởi động khi server khởi động hệ thống trong bước tiếp theo.
Bước 6 - Kích hoạt server Seafile khởi động khi server khởi động hệ thống
Để kích hoạt server file và giao diện web tự động khởi động khi server khởi động , bạn có thể tạo các file dịch vụ systemd
tương ứng và kích hoạt chúng.
Tạo file dịch vụ systemd
cho server file Seafile:
- sudo nano /etc/systemd/system/seafile.service
Thêm nội dung sau vào file :
[Unit] Description=Seafile After=network.target mysql.service [Service] Type=forking ExecStart=/home/sammy/seafile/seafile-server-latest/seafile.sh start ExecStop=/home/sammy/seafile/seafile-server-latest/seafile.sh stop User=sammy Group=sammy [Install] WantedBy=multi-user.target
Ở đây, các dòng ExectStart
và ExecStop
cho biết các lệnh chạy để bắt đầu và dừng dịch vụ Seafile. Dịch vụ sẽ chạy với sammy
là User
và Group
. Dòng After
chỉ định rằng dịch vụ Seafile sẽ bắt đầu sau khi dịch vụ mạng và MySQL đã bắt đầu.
Lưu seafile.service
và thoát.
Tạo file dịch vụ systemd
cho giao diện web Seahub:
- sudo nano /etc/systemd/system/seahub.service
Điều này tương tự với dịch vụ Seafile. Sự khác biệt duy nhất là giao diện web được khởi động sau dịch vụ Seafile. Thêm nội dung sau vào file này:
[Unit] Description=Seafile hub After=network.target seafile.service [Service] Type=forking ExecStart=/home/sammy/seafile/seafile-server-latest/seahub.sh start ExecStop=/home/sammy/seafile/seafile-server-latest/seahub.sh stop User=sammy Group=sammy [Install] WantedBy=multi-user.target
Lưu seahub.service
và thoát.
Bạn có thể tìm hiểu thêm về các file đơn vị systemd trong hướng dẫn Hiểu Đơn vị Systemd và Tệp Đơn vị .
Cuối cùng, để kích hoạt cả dịch vụ Seafile và Seahub tự động khởi động khi server khởi động , hãy chạy các lệnh sau:
- sudo systemctl enable seafile.service
- sudo systemctl enable seahub.service
Khi server được khởi động lại, Seafile sẽ tự động khởi động.
Đến đây, bạn đã hoàn tất việc cài đặt server và bây giờ có thể kiểm tra từng dịch vụ.
Bước 7 - Kiểm tra chức năng đồng bộ hóa và chia sẻ file
Trong bước này, bạn sẽ kiểm tra chức năng đồng bộ hóa và chia sẻ file của server mà bạn đã cài đặt và đảm bảo chúng đang hoạt động chính xác. Để thực hiện việc này, bạn cần cài đặt client Seafile trên một máy tính và / hoặc thiết bị di động riêng biệt.
Truy cập trang download trên trang web Seafile và làm theo hướng dẫn để cài đặt version mới nhất của chương trình trên máy tính của bạn. Ứng dụng khách Seafile có sẵn cho các bản phân phối khác nhau của Linux (Ubuntu, Debian, Fedora, Centos / RHEL, Arch Linux), MacOS và Windows. Ứng dụng khách di động có sẵn cho các thiết bị Android và iPhone / iPad từ các cửa hàng ứng dụng tương ứng.
Khi bạn đã cài đặt ứng dụng Seafile, bạn có thể kiểm tra chức năng đồng bộ hóa và chia sẻ file .
Mở client Seafile trên máy tính hoặc thiết bị của bạn. Chấp nhận vị trí mặc định cho folder Seafile và nhấp vào Tiếp theo .
Trong cửa sổ tiếp theo, nhập địa chỉ server , tên user và password , sau đó nhấp vào Đăng nhập .
Tại trang chủ, nhấp chuột phải vào Thư viện của tôi và nhấp vào Đồng bộ hóa thư viện này . Chấp nhận giá trị mặc định cho vị trí trên máy tính hoặc thiết bị của bạn.
Thêm file , ví dụ như tài liệu hoặc ảnh, vào folder Thư viện của tôi . Sau một thời gian, file sẽ tải lên server . Ảnh chụp màn hình sau đây cho thấy file photo.jpg được sao chép vào folder Thư viện của tôi.
Bây giờ, đăng nhập vào giao diện web tại https:// example.com
và xác minh file của bạn có trên server .
Nhấp vào Chia sẻ bên cạnh file để tạo liên kết download cho file này mà bạn có thể chia sẻ.
Bạn đã xác minh đồng bộ hóa file đang hoạt động chính xác và bạn có thể sử dụng Seafile để đồng bộ hóa và chia sẻ các file và folder từ nhiều thiết bị.
Kết luận
Trong hướng dẫn này, bạn cài đặt một version riêng của server Seafile. Như vậy, bạn có thể bắt đầu sử dụng server để đồng bộ hóa file , thêm user và group cũng như chia sẻ file giữa họ hoặc với công chúng mà không cần dựa vào dịch vụ bên ngoài.
Khi có bản phát hành mới của server , vui lòng tham khảo phần nâng cấp của sổ tay hướng dẫn để biết các bước thực hiện nâng cấp.
Các tin liên quan
Cách cài đặt MongoDB từ Kho lưu trữ APT mặc định trên Ubuntu 20.042020-10-10
Cách cài đặt mongodb trên ubuntu 18.04 từ trang chủ Mongodb
2020-10-08
Cách bảo mật MongoDB trên Ubuntu 18.04
2020-10-08
Cách cấu hình quyền truy cập từ xa cho MongoDB trên Ubuntu 18.04
2020-10-08
Cách cài đặt MongoDB trên Ubuntu 18.04 từ kho APT mặc định
2020-10-08
Làm thế nào để quản lý client OpenSSH trên Ubuntu 18.04
2020-09-30
Cách cài đặt và sử dụng ClickHouse trên Ubuntu 20.04
2020-09-22
Cách cài đặt và cấu hình Mahara trên Ubuntu 18.04
2020-09-21
Cách cài đặt Jitsi Meet trên Ubuntu 20.04
2020-09-18
Cách xử lý sandbox với Systemd trên Ubuntu 20.04
2020-09-16