Cách cài đặt Etherpad với Nginx và SSL trên Debian 11

theanh

Administrator
Nhân viên
Etherpad là một giải pháp thay thế miễn phí và mã nguồn mở cho các dịch vụ như Google Docs và Zoho Writer. Etherpad là trình soạn thảo văn bản cộng tác và thời gian thực cho nhóm của bạn, có thể truy cập từ bất kỳ đâu vào bất kỳ lúc nào vì Etherpad là trình soạn thảo văn bản dựa trên web.

Mọi thay đổi trên Etherpad đều diễn ra theo thời gian thực và Etherpad cũng hỗ trợ phiên bản và định dạng tích hợp cho nhóm. Etherpad là trình soạn thảo có khả năng tùy chỉnh cao với sự hỗ trợ của nhiều plugin khác nhau. Và cũng hỗ trợ các định dạng tài liệu hiện đại như doc, pdf, odt, markdown, v.v.

Trong hướng dẫn này, bạn sẽ cài đặt và cấu hình Trình soạn thảo cộng tác thời gian thực Etherpad trên Debian 11 Bullseye. Hướng dẫn này sử dụng MariaDB làm cơ sở dữ liệu phụ trợ và máy chủ web Nginx làm proxy ngược với HTTPS an toàn được bật. Cuối cùng, bạn sẽ cài đặt và bảo mật Etherpad thông qua mã hóa HTTPS an toàn.

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

Để hoàn thành hướng dẫn này, trước tiên bạn cần đáp ứng các yêu cầu sau:
  • Máy chủ Debian 11, để thử nghiệm, bạn có thể sử dụng 1 GB RAM. Đối với sản xuất, bạn có thể sử dụng nhiều tài nguyên hơn, tùy thuộc vào môi trường và cách sử dụng của bạn.
  • Người dùng không phải root có quyền root. Tùy chọn, bạn có thể sử dụng người dùng root.
  • Tên miền để cài đặt và đảm bảo rằng nó được trỏ đến địa chỉ IP của máy chủ. Trong ví dụ này, chúng ta sẽ sử dụng miền 'etherpad.example.io'.
Khi bạn đã có tất cả các điều kiện tiên quyết này, hãy tiến hành phần đầu tiên để bắt đầu cài đặt.

Cài đặt các gói phụ thuộc​

Etherpad là một ứng dụng web được xây dựng trên Node.js. Tại thời điểm viết bài này, phiên bản mới nhất của Etherpad là xxx và yêu cầu ít nhất Node.js phiên bản 14.x. Trong phần này, bạn sẽ cài đặt một số gói phụ thuộc, bao gồm Node.js vào máy chủ Debian 11.

1. Trước tiên, hãy làm mới danh sách chỉ mục gói của bạn, sau đó cài đặt các gói phụ thuộc bằng cách chạy lệnh sau.
Mã:
sudo apt update
sudo apt install gzip git curl python libssl-dev pkg-config gcc g++ make build-essential -y
2. Trong hướng dẫn này, bạn sẽ cài đặt Node.js từ kho lưu trữ Nodesource, nơi cung cấp nhiều phiên bản Node.js. Hướng dẫn này sử dụng phiên bản Node.js 16.x để cài đặt Etherpad.

Bây giờ, hãy thực thi lệnh sau để thêm kho lưu trữ Node.js vào hệ thống của bạn. Lệnh này sẽ tự động thêm kho lưu trữ Nodesource để làm mới chỉ mục gói của bạn.
Mã:
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
3. Tiếp theo, cài đặt Node.js 16.x từ kho lưu trữ Nodesource bằng cách chạy lệnh bên dưới.
Mã:
sudo apt install nodejs -y
4. Sau khi cài đặt hoàn tất, hãy xác minh phiên bản Node.js của bạn bằng lệnh sau.
Mã:
node --version
Bạn sẽ nhận được đầu ra như 'blah blah'.

Trong phần này, bạn đã cài đặt các gói phụ thuộc cho Etherpad và Node.js phiên bản 16.x từ kho lưu trữ Nodesource. Tiếp theo, bạn sẽ cài đặt và cấu hình cơ sở dữ liệu MariaDB.

Cài đặt và cấu hình cơ sở dữ liệu MariaDB​

Trong phần này, bạn sẽ cài đặt cơ sở dữ liệu MariaDB trên máy chủ Debian 11. Sau đó, bạn sẽ thiết lập mật khẩu gốc cho MariaDB và cuối cùng, bạn sẽ tạo cơ sở dữ liệu và người dùng mới cho Etherpad.

1. Theo mặc định, các gói MariaDB có sẵn trên kho lưu trữ Debian 11. Chạy lệnh sau để cài đặt.
Mã:
sudo apt install mariadb-server -y
2. Khi quá trình cài đặt MariaDB hoàn tất, nó sẽ tự động chạy và được kích hoạt.

MariaDB cung cấp một công cụ dòng lệnh giúp bạn triển khai MariaDB một cách an toàn, bao gồm cả việc thiết lập mật khẩu gốc cho MariaDB. Thực hiện lệnh 'mysql_secure_installation' như bên dưới.
Mã:
mysql_secure_installation
Bây giờ bạn sẽ được hỏi một số câu hỏi liên quan đến việc triển khai MariaDB và được nhắc thiết lập mật khẩu gốc.

3. Người dùng gốc mặc định cho mariaDB không có mật khẩu, hãy nhấn ENTER.
Mã:
Nhập mật khẩu hiện tại cho root (enter nếu không có):
OK, đã sử dụng mật khẩu thành công, tiếp tục...
4. Bây giờ bạn sẽ được yêu cầu chuyển đổi phương thức xác thực bằng cách sử dụng 'unix_socket', hãy nhập 'Y' để đồng ý.
Mã:
Chuyển sang xác thực unix_socket [Y/n] Y
Đã bật thành công!
Đang tải lại bảng đặc quyền..
... Thành công!
5. Nhập 'Y' để thiết lập mật khẩu gốc mới cho MariaDB. Sau đó nhập mật khẩu mạnh của bạn và lặp lại.
Mã:
Đổi mật khẩu root? [Y/n] Y
Mật khẩu mới:
Nhập lại mật khẩu mới:
Mật khẩu đã cập nhật thành công!
Đang tải lại bảng đặc quyền..
... Thành công!
6. Cài đặt MariaDB mặc định đi kèm với một người dùng ẩn danh. Nhập 'Y' để xóa nó.
Mã:
Xóa người dùng ẩn danh? [Y/n] Y
... Thành công!
7. Bây giờ, hãy tắt đăng nhập từ xa cho người dùng root MariaDB. Nhập 'Y' để đồng ý.
Mã:
Không cho phép đăng nhập root từ xa? [Y/n] Y
... Thành công!
8. Tiếp theo, nhập 'Y' để đồng ý và xóa cơ sở dữ liệu mặc định 'test' cùng mọi đặc quyền trên đó.
Mã:
Xóa cơ sở dữ liệu test và quyền truy cập vào cơ sở dữ liệu đó? [Y/n] Y
- Đang xóa cơ sở dữ liệu thử nghiệm...
... Thành công!
- Đang xóa các đặc quyền trên cơ sở dữ liệu thử nghiệm...
... Thành công!
9. Cuối cùng, tải lại các đặc quyền của bảng để áp dụng cấu hình mới. Nhập 'Y' để đồng ý và nhấn ENTER.
Mã:
Tải lại các bảng đặc quyền ngay bây giờ? [Y/n] Y
... Thành công!
Khi tất cả các cấu hình hoàn tất, bạn sẽ nhận được thông báo đầu ra như 'Xong!' như bên dưới.
Mã:
Xong! Nếu bạn đã hoàn tất tất cả các bước trên, thì cài đặt MariaDB
của bạn bây giờ sẽ an toàn.

Cảm ơn bạn đã sử dụng MariaDB!
10. Tiếp theo, hãy chạy lệnh sau để đăng nhập vào shell MariaDB. Bạn sẽ được nhắc nhập mật khẩu gốc MariaDB. Nhập mật khẩu của bạn.
Mã:
mysql -u root -p
11. Bây giờ, hãy tạo một cơ sở dữ liệu và người dùng mới cho Etherpad bằng cách chạy các truy vấn sau. Ví dụ này sẽ tạo một cơ sở dữ liệu mới 'etherpad_lite_db' với người dùng 'etherpaduser' và mật khẩu 'StrongPasswordEtherpadDB'. Hãy nhớ thay đổi mật khẩu.
Mã:
CREATE DATABASE etherpad_lite_db;
CREATE USER etherpaduser@localhost IDENTIFIED BY 'StrongPasswordEtherpadDB';
GRANT CREATE,ALTER,SELECT,INSERT,UPDATE,DELETE on etherpad_lite_db.* to etherpaduser@localhost;
12. Sau đó, tải lại tất cả các đặc quyền của bảng để áp dụng cấu hình mới, sau đó chạy truy vấn 'exit' để đăng xuất khỏi shell mariaDB.
Mã:
FLUSH PRIVILEGES;
EXIT


Trong phần này, bạn đã hoàn tất cài đặt và cấu hình cơ sở dữ liệu MariaDB trên Debian 11. Ngoài ra, bạn đã tạo cơ sở dữ liệu và người dùng cho Etherpad. Tiếp theo, bạn sẽ tải xuống mã nguồn Etherpad và cài đặt nó.

Cài đặt và cấu hình Etherpad​

Trong phần này, bạn sẽ cài đặt Etherpad từ mã nguồn, sau đó cấu hình nó với MariaDB làm cơ sở dữ liệu và tạo một tệp systemd mới cho Etherpad. Cuối cùng, Etherpad sẽ chạy như một dịch vụ systemd.

1. Trước khi tải xuống mã nguồn Etherpad, bạn sẽ tạo một người dùng mới 'etherpad' trên hệ thống của mình. Người dùng này sẽ được sử dụng để chạy tập lệnh cài đặt Etherpad và chạy dịch vụ Etherpad.

Thực hiện lệnh 'adduser' bên dưới để tạo người dùng mới 'etherpad'. Ngoài ra, hãy định nghĩa thư mục gốc thành '/opt/etherpad-lite'. Thư mục này sẽ được sử dụng để lưu trữ tất cả các nguồn Etherpad.
Mã:
sudo adduser --system --no-create-home --home=/opt/etherpad-lite --group etherpad
2. Bây giờ, hãy điều hướng đến thư mục '/opt' và sao chép nguồn Etherpad bằng lệnh git.
Mã:
cd /opt/
git clone --branch master [URL=https://github.com/ether/etherpad-lite.git?utm_source=diendancongnghe.com]https://github.com/ether/etherpad-lite.git[/URL]
3. Sau đó, hãy thay đổi quyền sở hữu thư mục 'etherpad-lite' thành người dùng 'etherpad' và nhóm 'etherpad'.
Mã:
sudo chown -R etherpad:etherpad etherpad-lite
4. Bây giờ hãy điều hướng đến thư mục 'etherpad-lite/' và cài đặt tất cả các phụ thuộc Node.js bằng cách sử dụng tập lệnh cài đặt 'installDeps.sh' như bên dưới. Tập lệnh cài đặt 'installDeps.sh' sẽ chạy dưới dạng người dùng không phải root 'etherpad'.
Mã:
cd /opt/etherpad-lite
sudo su -s /bin/bash -c "./bin/installDeps.sh" etherpad
Đợi cho đến khi cài đặt tất cả các gói phụ thuộc hoàn tất.

Tiếp theo, hãy sửa đổi tệp 'settings.json' để thiết lập cài đặt Etherpad của bạn. Bạn có thể sử dụng trình chỉnh sửa nano để chỉnh sửa tệp đó hoặc sử dụng trình chỉnh sửa ưa thích của bạn.
Mã:
nano settings.json
Ở đầu dòng, hãy thay đổi tiêu đề bằng tiêu đề của riêng bạn. Ví dụ này sử dụng tiêu đề 'Entherpad Johndoe'.
Mã:
"title": "Etherpad Johndoe",
Trong hướng dẫn này, Etherpad sẽ chạy dưới proxy ngược Nginx. Và tốt cho bảo mật khi chạy Etherpad trên máy chủ cục bộ. Bây giờ, hãy thay đổi cấu hình 'ip:' thành '127.0.0.1'. Với cấu hình này, Etherpad sẽ chỉ chạy trên máy chủ cục bộ.
Mã:
"ip": "127.0.0.1",
 "port": 9001,
Theo mặc định, Etherpad sử dụng SQLite làm cơ sở dữ liệu. Bình luận tất cả các dòng này để vô hiệu hóa.
Mã:
/*
 *"dbType": "dirty",
 *"dbSettings": {
 * "filename": "var/dirty.db"
 *},
 */
Bây giờ, hãy nhập cấu hình cơ sở dữ liệu MariaDB bên dưới. Và hãy đảm bảo thay đổi tên cơ sở dữ liệu, người dùng và mật khẩu.
Mã:
"dbType" : "mysql",
 "dbSettings" : {
 "user": "etherpaduser",
 "host": "localhost",
 "port": 3306,
 "password": "StrongPasswordEtherpadDB",
 "database": "etherpad_lite_db",
 "charset": "utf8mb4"
 },
Lưu và thoát tệp.

Tiếp theo, tạo tệp dịch vụ systemd mới 'etherpad.service' trong thư mục '/etc/systemd/system'. Tệp này sẽ chứa tất cả các chi tiết cấu hình mà Etherpad cần để chạy đúng trên máy chủ. Tạo nó bằng trình soạn thảo nano.
Mã:
sudo nano /etc/systemd/system/etherpad.service
Thêm cấu hình sau vào tệp.
Mã:
[Unit]
Description=Etherpad-lite, trình soạn thảo cộng tác.
After=syslog.target network.target

[Service]
Type=simple
User=etherpad
Group=etherpad
WorkingDirectory=/opt/etherpad-lite
Environment=NODE_ENV=production
ExecStart=/usr/bin/node --experimental-worker /opt/etherpad-lite/node_modules/ep_etherpad-lite/node/server.js
# sử dụng mysql cùng với settings.json đầy đủ để tránh thời gian chờ dịch vụ, lập lịch restart.
Restart=always

[Install]
WantedBy=multi-user.target
Tệp dịch vụ này sẽ chạy dưới dạng người dùng và nhóm 'etherpad'. Và bạn sẽ thấy tùy chọn 'Environment=NODE_ENV=production', nghĩa là ứng dụng Etherpad sẽ chạy trên môi trường sản xuất. Tùy chọn 'ExecStart=..' là lệnh mặc định để chạy ứng dụng Etherpad.

Lưu và đóng tệp.

Bây giờ, hãy tải lại trình quản lý systemd để áp dụng tệp dịch vụ mới.
Mã:
sudo systemctl daemon-reload
Sau đó, hãy khởi động và bật dịch vụ etherpad, sau đó xác minh trạng thái của dịch vụ bằng cách chạy lệnh sau.
Mã:
sudo systemctl enable --now etherpad
sudo systemctl status etherpad
Bạn sẽ nhận được đầu ra tương tự như ảnh chụp màn hình bên dưới. Dịch vụ etherpad hiện là 'hoạt động (đang chạy)', dịch vụ này sẽ tự động khởi động khi hệ thống khởi động và đang chạy trên máy chủ cục bộ với cổng mặc định là '9001'.



Lúc này, bạn đã hoàn tất quá trình cài đặt Etherpad. Tiếp theo, bạn sẽ cài đặt Nginx thiết lập nó như một proxy ngược cho ứng dụng Etherpad.

Cài đặt và cấu hình Nginx​

Đối với môi trường sản xuất, bạn luôn nên đặt một proxy ngược trước ứng dụng của mình. Nó sẽ tăng hiệu suất và bảo mật cho ứng dụng của bạn. Trong phần này, bạn sẽ cài đặt và cấu hình máy chủ web Nginx như một proxy ngược. Cuối cùng, bạn sẽ chạy Etherpad với tên miền của mình và được bảo mật bằng giao thức HTTPS.

1. Trước tiên, hãy cài đặt các gói Nginx bằng cách chạy lệnh bên dưới.
Mã:
sudo apt install nginx -y
2. Bây giờ, nếu bạn đã có tường lửa UFW trên hệ thống Debian của mình. Cho phép truy cập công khai vào các cổng HTTP và HTTPS (80 và 443) bằng cách chạy lệnh 'ufw' bên dưới.
Mã:
sudo ufw allow "Nginx Full"
Bạn sẽ nhận được kết quả sau.
Mã:
Đã thêm quy tắc
Đã thêm quy tắc (phiên bản 6)
3. Tiếp theo, tạo tệp máy chủ ảo Nginx mới 'etherpad' trong thư mục '/etc/nginx/sites-available/'. Tạo tệp này bằng trình chỉnh sửa nano hoặc trình chỉnh sửa bạn thích.
Mã:
sudo nano /etc/nginx/sites-available/etherpad
Sao chép và dán cấu hình sau vào tệp. Ngoài ra, hãy thay thế tên miền và đường dẫn chứng chỉ SSL bằng thông tin của riêng bạn. Đối với chứng chỉ SSL, bạn có thể tự do tạo chứng chỉ SSL bằng Letsencrypt.
Mã:
# thực thi HTTPS
máy chủ {
 lắng nghe 80;
 lắng nghe [::]:80;
 tên máy chủ etherpad.example.io;
 trả về 301 https://$host$request_uri;
}

# chúng ta đang ở trong ngữ cảnh http ở đây
bản đồ $http_upgrade $connection_upgrade {
 nâng cấp mặc định;
 '' đóng;
}

máy chủ {
 lắng nghe 443 ssl http2;
 lắng nghe [::]:443 ssl http2;
 tên máy chủ etherpad.example.io;

 nhật ký truy cập /var/log/nginx/eplite.access.log;
 nhật ký lỗi /var/log/nginx/eplite.error.log;

 chứng chỉ ssl /etc/letsencrypt/live/etherpad.example.io/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/etherpad.example.io/privkey.pem;

 ssl_session_timeout 5 phút;

 ssl_protocols TLSv1.2;
 ssl_prefer_server_ciphers bật;
 ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
 EECDH EDH+aRSA RC4 !aNULL !eNULL !THẤP !3DES !MD5 !EXP !PSK !SRP !DSS";

 location / {
 proxy_pass http://127.0.0.1:9001;
 proxy_buffering off; # hãy cẩn thận, dòng này không ghi đè bất kỳ proxy_buffering nào được đặt trong conf.d/file.conf
 proxy_set_header Host $host;
 proxy_pass_header Server;

 # Lưu ý rằng bạn cũng có thể muốn truyền các tiêu đề này, v.v.
 proxy_set_header X-Real-IP $remote_addr; # https://nginx.org/en/docs/http/ngx_http_proxy_module.html
 proxy_set_header X-Forwarded-For $remote_addr; # Nhật ký EP để hiển thị IP từ xa thực tế
 proxy_set_header X-Forwarded-Proto $scheme; # để EP đặt cờ cookie bảo mật khi sử dụng https
 proxy_http_version 1.1; # được khuyến nghị với các kết nối keepalive

 # Proxy WebSocket - từ https://nginx.org/en/docs/http/websocket.html
 proxy_set_header Nâng cấp $http_upgrade;
 proxy_set_header Kết nối $connection_upgrade;
 }
}
Tệp máy chủ ảo Nginx này sẽ tự động chuyển hướng bất kỳ lưu lượng truy cập nào từ HTTP sang giao thức HTTPS bảo mật. Để gỡ lỗi trong trường hợp bạn gặp lỗi, hãy kiểm tra tệp nhật ký '/var/log/nginx/eplite.error.log'. Tất cả các yêu cầu của khách hàng sẽ được gửi đến ứng dụng Etherpad phụ trợ 'proxy_pass' đang chạy trên cổng localhost 9001.

4. Lưu và đóng tệp, sau đó kích hoạt cấu hình máy chủ ảo bằng cách tạo liên kết tượng trưng của tệp 'etherpad' đến thư mục '/etc/nginx/sites-enabled'.
Mã:
sudo ln -s /etc/nginx/sites-available/etherpad /etc/nginx/sites-enabled/
5. Tiếp theo, chạy lệnh 'nginx -t' để xác minh cấu hình nginx. Lệnh này sẽ kiểm tra bất kỳ lỗi cú pháp nào trên cấu hình.
Mã:
sudo nginx -t
Bạn sẽ nhận được đầu ra như bên dưới. Thông báo đầu ra 'cú pháp ổn' có nghĩa là bạn không gặp bất kỳ lỗi nào.
Mã:
nginx: tệp cấu hình /etc/nginx/nginx.conf cú pháp ổn
nginx: tệp cấu hình /etc/nginx/nginx.conf thử nghiệm thành công.
6. Cuối cùng, khởi động lại dịch vụ Nginx để áp dụng tệp máy chủ ảo Nginx mới.
Mã:
sudo systemctl restart nginx
Trong phần này, bạn đã hoàn tất cài đặt và cấu hình Nginx làm proxy ngược cho ứng dụng Etherpad. Etherpad của bạn hiện có trên http://etherpad.example.io.


Xác minh cài đặt Etherpad​

1. Mở trình duyệt web của bạn và nhập tên miền 'http://etherpad.example.io/' vào địa chỉ. Và bạn sẽ tự động được chuyển hướng đến kết nối HTTPS an toàn như bên dưới.



2. Để tạo một pad mới, hãy nhập tên pad vào cột và nhấp vào nút 'OK'.

Bây giờ bạn sẽ thấy Etherpad Real-time Collaboration Editor như bên dưới.


Kết luận​

Trong hướng dẫn này, bạn đã cài đặt và định cấu hình Etherpad Real-time Collaborative Editor trên máy chủ Debian 11. Ngoài ra, bạn đã cài đặt và định cấu hình Nginx làm proxy ngược cho ứng dụng Etherpad.

Bây giờ bạn đã sẵn sàng sử dụng etherpad làm trình chỉnh sửa cộng tác trong nhóm của mình. Để biết thêm thông tin về Etherpad, hãy kiểm tra tài liệu chính thức của Etherpad.
 
Back
Bên trên