Etherpad là một ứng dụng web cho phép chỉnh sửa văn bản cộng tác trong thời gian thực trong trình duyệt. Nó được viết bằng Node.js và có thể tự lưu trữ trên nhiều nền tảng và hệ điều hành.
Trong hướng dẫn này, chúng ta sẽ cài đặt Etherpad trên máy chủ Ubuntu 20.04, sử dụng công cụ cơ sở dữ liệu SQLite để lưu trữ dữ liệu của chúng ta. Chúng ta cũng sẽ cài đặt và thiết lập cấu hình Nginx để hoạt động như một proxy ngược cho ứng dụng, đồng thời chúng ta sẽ tìm nạp và cài đặt chứng chỉ SSL từ cơ quan cấp chứng chỉ Let's Encrypt để kích hoạt kết nối HTTPS an toàn với phiên bản Etherpad của chúng ta.
Trước khi bắt đầu hướng dẫn này, bạn sẽ cần những thứ sau:
sudo
-enabled user và bật tường lửa UFW. Vui lòng đọc Thiết lập máy chủ ban đầu với Ubuntu 20.04 của chúng tôi để tìm hiểu thêm về cách thiết lập các yêu cầu này.example.com
hoặc etherpad.example.com
.Khi bạn có các điều kiện tiên quyết, hãy tiếp tục đến Bước 1, nơi chúng ta sẽ tải xuống và thiết lập cấu hình ứng dụng Etherpad.
Để cài đặt Etherpad, bạn cần tải xuống mã nguồn, cài đặt các phần phụ thuộc và thiết lập cấu hình systemd để chạy máy chủ.
Những người bảo trì Etherpad khuyên bạn nên chạy phần mềm với tư cách là user của chính nó, vì vậy bước đầu tiên của bạn sẽ là tạo một etherpad user mới bằng cách sử dụng lệnh adduser
:
- sudo adduser --system --group --home /opt/etherpad etherpad
Điều này tạo ra một --system
user, nghĩa là nó không thể đăng nhập trực tiếp và không được gán mật khẩu hoặc shell. Chúng ta cung cấp cho nó một thư mục chính /opt/etherpad
, đây là nơi chúng ta sẽ tải xuống và thiết lập cấu hình phần mềm Etherpad. Chúng ta cũng tạo một nhóm etherpad bằng cờ --group
.
Bây giờ bạn cần chạy một vài lệnh với tư cách là etherpad user. Để làm như vậy, bạn sẽ sử dụng lệnh sudo
để mở bash
shell với tư cách là etherpad user. Sau đó, bạn sẽ thay đổi thư mục (cd
) thành /opt/etherpad
:
- etherpad user
Shell prompt của bạn sẽ cập nhật để cho biết bạn là etherpad user. Nó sẽ trông giống như etherpad@host:~$
.
Bây giờ hãy sao chép kho lưu trữ Etherpad vào /opt/etherpad
bằng Git:
- git clone --branch master https://github.com/ether/etherpad-lite.git .
Thao tác này sẽ kéo master
branch của mã nguồn Etherpad vào thư mục hiện tại (.
). Khi đã xong, hãy chạy tập lệnh installDeps.sh
của Etherpad để cài đặt các phụ thuộc:
- ./bin/installDeps.sh
Quá trình này có thể mất một phút. Khi hoàn tất, bạn sẽ cần cài đặt thủ công một phụ thuộc cuối cùng. Chúng ta cần cd
vào thư mục Etherpad src
và cài đặt gói sqlite3
để sử dụng SQLite làm cơ sở dữ liệu của chúng tôi.
Đầu tiên, thay đổi vào thư mục src
:
- cd src
Sau đó cài đặt gói sqlite3
bằng npm
:
- npm install sqlite3
Nhiệm vụ cuối cùng của bạn với tư cách là etherpad user là cập nhật tệp settings.json
của Etherpad để sử dụng SQLite cho cơ sở dữ liệu của nó và để hoạt động tốt với Nginx. Di chuyển trở lại thư mục /opt/etherpad
:
- cd /opt/etherpad
Sau đó mở tệp cài đặt bằng trình soạn thảo văn bản yêu thích của bạn:
- nano settings.json
Tệp được định dạng là JSON, nhưng có các nhận xét mở rộng trong suốt quá trình giải thích từng cài đặt. Có rất nhiều thứ bạn có thể thiết lập cấu hình, nhưng hiện tại chúng ta quan tâm đến hai giá trị cập nhật cấu hình cơ sở dữ liệu:
"dbType": "dirty",
"dbSettings": {
"filename": "var/dirty.db"
},
Cuộn xuống và tìm phần dbType
và dbSettings
, được hiển thị ở đây. Cập nhật cài đặt thành sqlite
và tên tệp bạn chọn, như sau:
"dbType": "sqlite",
"dbSettings": {
"filename": "var/sqlite.db"
},
Cuối cùng, cuộn xuống một số chi tiết, tìm cài đặt trustProxy
và cập nhật nó thành true
:
"trustProxy": true,
Lưu và đóng tệp cài đặt. Trong nano
, bạn có thể lưu và đóng bằng cách gõ CTRL+O
rồi ENTER
để lưu và CTRL+X
để thoát.
Khi đã xong, hãy đảm bảo thoát khỏi shell của etherpad user:
- exit
Bạn sẽ được đưa trở lại shell người dùng bình thường của mình.
Etherpad đã được cài đặt và cấu hình. Tiếp theo, chúng ta sẽ tạo một dịch vụ systemd để bắt đầu và quản lý quy trình Etherpad.
Để khởi động Etherpad khi khởi động và để quản lý quy trình bằng systemctl
, chúng ta cần tạo một tệp dịch vụ systemd. Mở tệp mới trong trình soạn thảo văn bản yêu thích của bạn:
- sudo nano /etc/systemd/system/etherpad.service
Chúng ta sẽ tạo một định nghĩa dịch vụ dựa trên thông tin trong wiki tài liệu của Etherpad. Trang How to deploy Etherpad Lite as a service (Cách triển khai Etherpad Lite dưới dạng dịch vụ) đưa ra một cấu hình ví dụ chỉ cần một vài thay đổi để làm cho nó hoạt động với chúng ta.
Thêm nội dung sau vào trình soạn thảo văn bản của bạn, sau đó lưu và đóng tệp:
[Unit]
Description=Etherpad, a collaborative web editor.
After=syslog.target network.target
[Service]
Type=simple
User=etherpad
Group=etherpad
WorkingDirectory=/opt/etherpad
Environment=NODE_ENV=production
ExecStart=/usr/bin/node --experimental-worker /opt/etherpad/node_modules/ep_etherpad-lite/node/server.js
Restart=always
[Install]
WantedBy=multi-user.target
Tệp này cung cấp cho systemd thông tin cần thiết để chạy Etherpad, bao gồm người dùng và nhóm để chạy nó và lệnh được sử dụng để bắt đầu quá trình (ExecStart=...
).
Sau khi đóng tệp, tải lại daemon systemd để lấy cấu hình mới:
- sudo systemctl daemon-reload
Tiếp theo, kích hoạt dịch vụ etherpad
. Điều này có nghĩa là dịch vụ sẽ khởi động bất cứ khi nào máy chủ của bạn khởi động lại:
- sudo systemctl enable etherpad
Và cuối cùng, chúng ta có thể bắt đầu dịch vụ:
- sudo systemctl start etherpad
Kiểm tra xem dịch vụ đã bắt đầu đúng cách bằng trạng thái systemctl
chưa:
- sudo systemctl status etherpad
Output● etherpad.service - Etherpad, a collaborative web editor.
Loaded: loaded (/etc/systemd/system/etherpad.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2021-09-09 14:12:43 UTC; 18min ago
Main PID: 698 (node)
Tasks: 13 (limit: 1136)
Memory: 152.0M
CGroup: /system.slice/etherpad.service
└─698 /usr/bin/node --experimental-worker /opt/etherpad/node_modules/ep_etherpad-lite/node/server.js
Đầu ra sẽ chỉ ra rằng dịch vụ active (running)
.
Etherpad hiện đang chạy, nhưng nó không khả dụng cho công chúng vì cổng 9001
bị chặn bởi tường lửa của bạn. Trong bước tiếp theo, chúng ta sẽ công khai Etherpad bằng cách thiết lập Nginx làm proxy ngược trước quy trình Etherpad.
Đặt một máy chủ web chẳng hạn như Nginx trước máy chủ Node.js của bạn có thể cải thiện hiệu suất bằng cách giảm tải bộ nhớ đệm, nén và phân phối tệp tĩnh cho một quy trình hiệu quả hơn. Chúng ta sẽ cài đặt Nginx và thiết lập cấu hình nó thành các yêu cầu proxy tới Etherpad, nghĩa là nó sẽ xử lý các yêu cầu từ người dùng của bạn tới Etherpad và ngược lại.
Trước tiên, hãy làm mới danh sách gói của bạn, sau đó cài đặt Nginx bằng apt
:
- sudo apt update
- sudo apt install nginx
Cho phép lưu lượng truy cập đến các cổng 80
và 443
(HTTP và HTTPS) bằng cách sử dụng cấu hình ứng dụng UFW “Nginx Full”:
- sudo ufw allow "Nginx Full"
OutputRule added
Rule added (v6)
Tiếp theo, mở tệp cấu hình Nginx mới trong thư mục /etc/nginx/sites-available
. Chúng tôi sẽ gọi tên của chúng tôi là etherpad.conf
nhưng bạn có thể sử dụng một tên khác:
- sudo nano /etc/nginx/sites-available/etherpad.conf
Dán đoạn mã sau vào tệp cấu hình mới, đảm bảo thay thế your_domain_here
bằng miền đang trỏ đến máy chủ Etherpad của bạn. Ví dụ như etherpad.example.com
.
server {
listen 80;
listen [::]:80;
server_name your_domain_here;
access_log /var/log/nginx/etherpad.access.log;
error_log /var/log/nginx/etherpad.error.log;
location / {
proxy_pass http://127.0.0.1:9001;
proxy_buffering off;
proxy_set_header Host $host;
proxy_pass_header Server;
# proxy headers
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
# websocket proxying
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Cấu hình này dựa trên cấu hình được cung cấp trên Etherpad wiki. Hiện tại, nó chỉ dành cho HTTP vì chúng tôi sẽ để Certbot đảm nhiệm việc thiết lập cấu hình SSL trong bước tiếp theo. Phần còn lại của cấu hình thiết lập các vị trí ghi nhật ký và sau đó chuyển tất cả lưu lượng truy cập đến http://127.0.0.1:9001
, phiên bản Etherpad mà chúng tôi đã bắt đầu ở bước trước. Chúng tôi cũng đặt nhiều tiêu đề khác nhau cần thiết để ủy quyền hoạt động tốt và để ổ cắm web (kết nối HTTP liên tục cho phép giao tiếp hai chiều trong thời gian thực) hoạt động thông qua proxy.
Lưu và đóng tệp, sau đó kích hoạt cấu hình bằng cách liên kết nó vào /etc/nginx/sites-enabled/
:
- sudo ln -s /etc/nginx/sites-available/etherpad.conf /etc/nginx/sites-enabled/
Sử dụng nginx -t
để xác minh rằng cú pháp tệp cấu hình là chính xác:
- sudo nginx -t
Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Và cuối cùng, tải lại dịch vụ nginx
để nhận cấu hình mới:
- sudo systemctl reload nginx
Trang web Etherpad của bạn bây giờ sẽ khả dụng trên HTTP đơn giản và nó sẽ trông giống như sau:
Bây giờ chúng ta đã thiết lập và chạy trang web của mình qua HTTP, đã đến lúc bảo mật kết nối với chứng chỉ Certbot và Let's Encrypt.
Nhờ có Certbot và cơ quan cấp chứng chỉ miễn phí Let's Encrypt, việc thêm mã hóa SSL vào ứng dụng Etherpad của chúng ta sẽ chỉ mất hai lệnh.
Đầu tiên, cài đặt Certbot và plugin Nginx của nó:
- sudo apt install certbot python3-certbot-nginx
Tiếp theo, hãy chạy certbot
ở chế độ --nginx
và chỉ định cùng một miền mà bạn đã sử dụng trong cấu hình Nginx server_name
:
- sudo certbot --nginx -d your_domain_here
Bạn sẽ được nhắc đồng ý với các điều khoản dịch vụ của Let's Encrypt và nhập địa chỉ email.
Sau đó, bạn sẽ được hỏi có muốn chuyển hướng tất cả lưu lượng HTTP sang HTTPS hay không. Điều đó tùy thuộc vào bạn, nhưng điều này thường được khuyến nghị và an toàn để thực hiện.
Sau đó, Let's Encrypt sẽ xác nhận yêu cầu của bạn và Certbot sẽ tải xuống chứng chỉ của bạn:
OutputCongratulations! You have successfully enabled https://etherpad.example.com
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=etherpad.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/etherpad.example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/etherpad.example.com/privkey.pem
Your cert will expire on 2021-12-06. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Certbot sẽ tự động tải lại Nginx để nhận cấu hình và chứng chỉ mới. Tải lại trang web của bạn và nó sẽ tự động chuyển bạn sang HTTPS nếu bạn chọn tùy chọn chuyển hướng.
Bạn đã hoàn tất! Hãy dùng thử trình chỉnh sửa Etherpad mới của bạn và mời một số cộng tác viên.
Trong hướng dẫn này, chúng ta thiết lập Etherpad, với chứng chỉ SSL Nginx và Let's Encrypt. Etherpad của bạn hiện đã sẵn sàng để sử dụng, nhưng bạn có thể muốn thực hiện nhiều cấu hình hơn, bao gồm thêm người dùng được xác thực, thêm plugin và tùy chỉnh giao diện người dùng thông qua giao diện.
Phiên bản Etherpad được hỗ trợ bởi SQLite của bạn sẽ có thể xử lý một số lượng người dùng đang hoạt động vừa phải, nhưng nếu bạn dự đoán lưu lượng truy cập rất cao, thì bạn có thể xem xét việc định cấu hình cơ sở dữ liệu MySQL hoặc PostgreSQL để thay thế.
Tất cả các tùy chọn cấu hình này đều được ghi lại trên wiki chính thức của Etherpad.