Cách cài Etherpad collaborative web editor trên ubuntu 20.04
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 khác nhau.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 .
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:
- Server Ubuntu 20.04, với user không phải root ,
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. - Đã cài đặt Node.js, phiên bản 14 trở lên. Xem tùy chọn 2 của Cách cài đặt Node.js trên Ubuntu 20.04 để tìm hiểu cách cài đặt phiên bản cập nhật của Node.js bằng các gói NodeSource.
- Tên miền trỏ đến địa chỉ IP công cộng của server. Ví dụ: đây phải là một cái gì đó giống như
example.com
hoặcetherpad.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.
Bước 1 - Download và cấu hình 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
- sudo adduser --system --group --home /opt/etherpad etherpad
Đ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
:
- sudo -u etherpad bash
- cd /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:
- git clone --branch master https://github.com/ether/etherpad-lite.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:
- ./bin/installDeps.sh
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
- cd src
Sau đó cài đặt gói sqlite3
npm
:
- npm install sqlite3
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
:
- 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 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 :
- exit
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.
Bước 2 - Tạo dịch vụ Systemd cho 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:
- sudo nano /etc/systemd/system/etherpad.service
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:
- sudo systemctl daemon-reload
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:
- sudo systemctl enable etherpad
Và cuối cùng, ta có thể bắt đầu dịch vụ:
- sudo systemctl start etherpad
Kiểm tra đảm bảo dịch vụ đã khởi động đúng cách bằng systemctl status
:
- sudo systemctl status etherpad
● 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.
Bước 3 - Cài đặt và cấu hình Nginx
Đặ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
:
- 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ấu hình ứng dụng UFW “Nginx Full”:
- sudo ufw allow "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:
- sudo nano /etc/nginx/sites-available/etherpad.conf
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/
:
- sudo ln -s /etc/nginx/sites-available/etherpad.conf /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:
- sudo nginx -t
[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:
- sudo systemctl reload nginx
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.
Bước 4 - Cài đặt Certbot và Cài đặt Chứng chỉ SSL
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ó:
- sudo apt install certbot python3-certbot-nginx
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
- sudo certbot --nginx -d your_domain_here
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.
Kết luậ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 .
Các tin liên quan
Cách tạo server Ebook calibre trên Ubuntu 20.042020-10-27
Cách sử dụng server SMTP của Google
2020-10-05
Những điều cần biết về SSH: Làm việc với server, client và Khóa SSH
2020-09-17
Cách thiết lập server VPN IKEv2 với StrongSwan trên Ubuntu 20.04
2020-09-16
Cách tạo server Ebook tầm cỡ trên Ubuntu 14.04
2020-09-11
Cách cài đặt và cấu hình Postfix làm server SMTP chỉ gửi trên Ubuntu 20.04
2020-07-23
Cách bật tính năng hiển thị phía server cho ứng dụng React
2020-07-14
Cách cài đặt và cấu hình Postfix làm server SMTP chỉ gửi trên Ubuntu 18.04
2020-07-06
Cách thiết lập Nền tảng Cloud IDE server mã trên CentOS 7
2020-06-12
Cách thiết lập Nền tảng Cloud IDE server mã trên Debian 10
2020-06-11