Trong hướng dẫn này, ta sẽ cài đặt Etherpad trên server Ubuntu 20.04, sử dụng công cụ cơ sở dữ liệu SQLite để lưu trữ dữ liệu . Ta cũng sẽ cài đặt và cấu hình Nginx hoạt động như một reverse-proxy cho ứng dụng và ta sẽ tìm nạp và cài đặt chứng chỉ SSL từ tổ chức phát hành chứng chỉ Let's Encrypt để kích hoạt các kết nối HTTPS an toàn với phiên bản Etherpad .
Trước khi bắt đầu hướng dẫn này, bạn cần các thành phần sau:
sudo
và đã bật tường lửa UFW. Vui lòng đọc Cài đặt server ban đầu với Ubuntu 20.04 để tìm hiểu thêm về cách cài đặt các yêu cầu này.example.com
hoặc etherpad.example.com
Lưu ý: Nếu bạn đang sử dụng DigitalOcean, Tài liệu DNS có thể giúp bạn cài đặt tên miền của bạn trong control panel.
Khi bạn có các yêu cầu, hãy tiếp tục đến Bước 1, tại đây ta sẽ download và cấu hình ứng dụng Etherpad.
Để cài đặt Etherpad, bạn cần download mã nguồn, cài đặt các phần phụ thuộc và cấu hình systemd để chạy server.
Các nhà bảo trì Etherpad khuyên bạn nên chạy phần mềm với quyền 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 user etherpad mới bằng cách sử dụng lệnh adduser
Điều này tạo ra một --system
sử dụng, nghĩa là nó không thể đăng nhập trực tiếp và không có mật khẩu hoặc vỏ được giao. Ta cung cấp cho nó một thư mục chính của /opt/etherpad
, đây là nơi ta sẽ download và cấu hình phần mềm Etherpad. Ta cũng tạo một group etherpad bằng cờ --group
Đến đây bạn cần chạy một vài lệnh với quyền là user etherpad. Để thực hiện, bạn sẽ sử dụng sudo
để mở bash
shell với quyền là user etherpad . Sau đó, bạn sẽ thay đổi các thư mục ( cd
) thành /opt/etherpad
:
Dấu nhắc shell của bạn sẽ cập nhật để cho thấy rằng bạn là user etherpad. Nó sẽ trông giống với etherpad@ host :~$
.
Bây giờ sao chép kho lưu trữ Etherpad vào /opt/etherpad
bằng Git:
Điều này sẽ kéo master
chi nhánh của mã nguồn Etherpad vào thư mục hiện hành ( .
). Khi hoàn tất, hãy chạy installDeps.sh
của Etherpad để cài đặt các phần phụ thuộc:
Quá trình này có thể mất một phút. Khi hoàn tất, bạn cần cài đặt thủ công một phần phụ thuộc cuối cùng. Ta cần cd
vào src
và cài đặt sqlite3
để sử dụng SQLite làm cơ sở dữ liệu .
Đầu tiên, thay đổi vào thư mục src
Sau đó cài đặt gói sqlite3
npm
:
Nhiệm vụ cuối cùng của bạn với quyền là user etherpad là cập nhật tệp Etherpad settings.json
để 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
:
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:
Tệp được định dạng là JSON, nhưng với các comment mở rộng xuyên suốt giải thích từng cài đặt. Có rất nhiều thứ bạn có thể cấu hình, nhưng hiện tại 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
, 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ố nữa, tìm 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 lệnh CTRL+O
rồi ENTER
để lưu và CTRL+X
để thoát.
Khi hoàn tất, hãy đảm bảo thoát khỏi shell của user etherpad :
Bạn sẽ được đưa trở lại shell của user thường của bạn.
Etherpad đã được cài đặt và cấu hình. Tiếp theo, 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ý quá trình sử dụng systemctl
, 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:
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. Cách triển khai Etherpad Lite dưới dạng trang dịch vụ cung cấp một cấu hình ví dụ chỉ cần một vài thay đổi để làm cho nó hoạt động cho 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 nó cần để chạy Etherpad, bao gồm user và group để chạy nó và lệnh được sử dụng để bắt đầu quá trình ( ExecStart=...
).
Sau khi đóng tệp, reload daemon systemd để lấy cấu hình mới:
Tiếp theo, bật dịch vụ etherpad
Điều này nghĩa là dịch vụ sẽ khởi động khi nào server khởi động lại:
Và cuối cùng, ta có thể bắt đầu dịch vụ:
Kiểm tra đảm bảo dịch vụ đã khởi động đúng cách bằng systemctl status
:
● 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
Kết quả phải cho biết dịch vụ đang 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, ta sẽ công khai Etherpad bằng cách cài đặt Nginx làm reverse-proxy trước quy trình Etherpad.
Đặt một web server như Nginx trước server 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át tệp tĩnh thành một quy trình hiệu quả hơn. Ta sẽ cài đặt Nginx và cấu hình nó theo các yêu cầu proxy đến Etherpad, nghĩa là nó sẽ xử lý các yêu cầu từ user tới Etherpad và quay 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
:
Cho phép lưu lượng truy cập đến các cổng 80
và 443
(HTTP và HTTPS) bằng cấu hình ứng dụng UFW “Nginx Full”:
Rule 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
. Ta sẽ gọi là etherpad.conf
ta nhưng bạn có thể sử dụng một tên khác:
Dán phần sau vào tệp cấu hình mới, đảm bảo thay thế your_domain_here
bằng miền trỏ đến server Etherpad của bạn. Ví dụ, đây sẽ là một cái gì đó giống 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ì ta sẽ để Certbot xử lý việc cấu hình SSL trong bước tiếp theo. Phần còn lại của cấu hình cài đặt 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à ta đã khởi động ở bước trước. Ta cũng đặt các tiêu đề khác nhau được yêu cầu để proxy hoạt động tốt và các cổng kết nối web (kết nối HTTP liên tục cho phép giao tiếp hai chiều theo 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/
:
Sử dụng nginx -t
để xác minh cú pháp tệp cấu hình là chính xác:
[secondary_lable Output]
nginx: 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, reload nginx
để chọn cấu hình mới:
Trang web Etherpad của bạn bây giờ sẽ có sẵn trên HTTP đơn giản và nó sẽ trông giống như sau:
Bây giờ ta đã cài đặt trang web và chạy qua HTTP, đã đến lúc bảo mật kết nối với các chứng chỉ Certbot và Let's Encrypt.
Nhờ 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 sẽ chỉ mất hai lệnh.
Trước tiên, hãy cài đặt Certbot và plugin Nginx của nó:
Tiếp theo, chạy certbot
ở --nginx
và chỉ định cùng một miền bạn đã sử dụng trong cấu hình server_name
Bạn sẽ cần đồ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ả truy cập HTTP sang HTTPS hay không. Đó là tùy thuộc vào bạn, nhưng điều này thường được khuyến khích 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ẽ download chứng chỉ của bạn:
Congratulations! 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 reload Nginx để nhận cấu hình và chứng chỉ mới. Reload trang web 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ử editor 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, ta cài đặt 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 có nhiều cấu hình hơn mà bạn có thể cần thực hiện, bao gồm thêm user đã xác thực, thêm plugin và tùy chỉnh giao diện user thông qua giao diện .
Phiên bản Etherpad được hỗ trợ bởi SQLite của bạn có thể xử lý một số lượng vừa phải user đang hoạt động, nhưng nếu bạn dự đoán lưu lượng truy cập rất cao, bạn có thể cần xem xét 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 Etherpad chính thức .