웹사이트 검색

Rocky Linux 8에 Etherpad Collaborative Web Editor를 설치하는 방법


이 페이지에서

  1. 전제 조건
  2. 1단계 - 방화벽 구성\n
  3. 2단계 - Git 설치
  4. 3단계 - MariaDB 설치
  5. 4단계 - MariaDB 구성
  6. 5단계 - Etherpad 다운로드 및 설치
  7. 6단계 - Etherpad 구성
  8. 7단계 - Etherpad 서비스 생성
  9. 8단계 - Lets Encrypt를 사용하여 SSL 설치\n
  10. 9단계 - Nginx 설치 및 구성
  11. Etherpad 업데이트
  12. 결론

Etherpad는 브라우저에서 실시간으로 공동 편집을 제공하는 오픈 소스 온라인 편집기입니다. Node.js로 작성되었으며 WordPress, Drupal, Odoo, Discourse, Joomla 등과 같은 다양한 플랫폼에서 작동하도록 자체 호스팅할 수 있습니다.

이 튜토리얼에서는 데이터를 저장하기 위해 MariaDB 데이터베이스를 사용하여 Rocky Linux 8 서버에 Etherpad를 설치합니다. 또한 애플리케이션의 리버스 프록시로 Nginx를 사용하고 Lets Encrypt를 사용하여 SSL 인증서를 설치하여 Etherpad 인스턴스에 대한 HTTPS 연결을 활성화합니다.

전제 조건

  1. A system running Rocky Linux 8.

  2. A non-root user with sudo privileges.

  3. A domain name pointed to the server.

  4. Nodejs installed. Follow our guide on installing Nodejs on Rocky Linux 8 server. Use any of the two methods specified.

  5. Make sure everything is updated.

    $ sudo dnf update
    

1단계 - 방화벽 구성

Rocky Linux는 Firewalld Firewall을 사용합니다. 방화벽 상태를 확인하십시오.

$ sudo firewall-cmd --state
running

이것은 성공적으로 실행되고 있음을 나타냅니다.

방화벽은 다른 영역에서 작동하며 공개 영역은 우리가 사용할 기본 영역입니다. 방화벽에서 활성화된 모든 서비스와 포트를 나열합니다.

$ sudo firewall-cmd --permanent --list-services

다음 출력이 표시되어야 합니다.

cockpit dhcpv6-client ssh

HTTP 및 HTTPS 포트를 허용합니다.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Etherpad 응용 프로그램에서 사용하는 9001 포트를 엽니다.

$ sudo firewall-cmd --permanent --add-port=9001/tcp

방화벽의 상태를 다시 확인하십시오.

$ sudo firewall-cmd --permanent --list-services

비슷한 출력이 표시되어야 합니다.

cockpit dhcpv6-client http https ssh

변경 사항을 적용하려면 방화벽을 다시 로드하십시오.

$ sudo firewall-cmd --reload

2단계 - Git 설치

Etherpad를 설치하기 전에 Git을 설치해야 합니다. 다음 명령을 실행하여 Git을 설치합니다.

$ sudo dnf install git

설치를 확인하십시오.

$ git --version
git version 2.27.0

초기 구성을 추가합니다.

$ git config --global user.name "YourName"
$ git config --global user.email ""

방금 설정한 구성을 나열합니다.

$ git config --list
user.name=YourName

3단계 - MariaDB 설치

MariaDB 데이터베이스를 사용하여 Etherpads 데이터를 저장하므로 먼저 설치하고 구성해야 합니다.

Rocky Linux AppStream 리포지토리는 MariaDB와 함께 제공됩니다. 설치된 MariaDB의 사용 가능한 모든 버전을 나열하려면 다음 명령을 실행합니다.

$ sudo dnf module list mariadb
Last metadata expiration check: 1:15:26 ago on Thu 21 Oct 2021 10:20:01 AM UTC.
Rocky Linux 8 - AppStream
Name                          Stream                         Profiles                                         Summary
mariadb                       10.3 [d]                       client, galera, server [d]                       MariaDB Module
mariadb                       10.5                           client, galera, server [d]                       MariaDB Module

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

기본 버전은 10.3으로 설정되어 있습니다. 그러나 다음 명령을 사용하여 최신 버전을 설치할 수 있습니다.

$ sudo dnf module enable mariadb:10.5

MariaDB를 설치합니다.

$ sudo dnf install mariadb-server

MariaDB 서비스를 활성화하고 시작합니다.

$ sudo systemctl enable mariadb --now

서비스 상태를 확인합니다.

$ sudo systemctl status mariadb

MariaDB 서버를 보호합니다.

$ sudo mysql_secure_installation

당신은 다양한 프롬프트에 직면하게 될 것입니다. 다음과 같이 답하십시오.

Enter current password for root (enter for none): Press Enter
Switch to unix_socket authentication [Y/n] Type y
Change the root password? [Y/n] Type n
Remove anonymous users? [Y/n] Type y
Disallow root login remotely? [Y/n] Type y
Remove test database and access to it? [Y/n] Type y
Reload privilege tables now? [Y/n] Type y

이제 다음 명령을 사용하여 MariaDB 서버에 연결할 수 있습니다.

$ sudo mysql 

4단계 - MariaDB 구성

MariaDB 셸에 로그인합니다.

$ sudo mysql

Etherpad용 새 데이터베이스를 생성합니다.

$ create database `etherpad_lite_db`;

새 데이터베이스 사용자를 생성합니다.

$ CREATE USER 'etherpaduser'@'localhost' identified by 'password';

강력한 암호를 사용하십시오.

데이터베이스에 대한 권한을 사용자에게 부여합니다.

$ grant CREATE,ALTER,SELECT,INSERT,UPDATE,DELETE on `etherpad_lite_db`.* to '<etherpaduser>'@'localhost';

MySQL 셸을 종료합니다.

$ exit

5단계 - Etherpad 다운로드 및 설치

Etherpad를 설치하기 위해 소스 코드를 다운로드하고 빌드합니다.

첫 번째 단계는 다음 명령을 사용하여 새 etherpad 사용자를 생성하는 것입니다.

$ sudo adduser --system --home /opt/etherpad --create-home --user-group etherpad

이 명령은 --system 사용자를 생성합니다. 즉, 로그인할 수 없고 암호가 없습니다. 우리는 또한 Etherpad를 잘 다운로드할 수 있는 홈 디렉토리 /opt/etherpad를 제공합니다. --create-home 플래그는 올바른 권한으로 홈 디렉토리를 생성합니다. --user-group 플래그는 사용자 이름과 동일한 이름으로 그룹을 생성합니다.

etherpad 사용자로 전환하여 애플리케이션을 다운로드하고 설치합니다.

$ sudo -u etherpad bash

/opt/etherpad 디렉토리로 전환합니다.

[ user] cd /opt/etherpad

Etherpad 저장소를 /opt/etherpad 디렉토리에 복제합니다.

[ ~]$ git clone --branch master git://github.com/ether/etherpad-lite.git

새로 다운로드한 디렉터리로 전환합니다.

[ ~]$ cd etherpad-lite

Etherpads run.sh 스크립트를 실행하여 종속성을 설정하고 설치합니다.

[ etherpad-lite]$ src/bin/run.sh

브라우저에서 URL http://YOURSERVERIP:9001을 실행하여 Etherpad를 실행할 수 있습니다. 다음 화면이 나타납니다.

위의 설치에 문제가 있습니다. 노드가 포그라운드에서 실행 중인 상태에서 현재 셸을 열어 두어야 합니다. 영구 설치하려면 Etherpad를 서비스로 실행해야 합니다. Etherpad 실행을 중지하려면 터미널에서 Ctrl + C를 누르십시오.

6단계 - Etherpad 구성

계속 진행하기 전에 몇 가지 설정을 지정하고 필요에 따라 설치를 구성해야 합니다. Etherpad는 설치 디렉토리의 settings.json 파일에 설정을 저장합니다.

편집할 파일을 엽니다.

[ etherpad-lite]$ nano settings.json

설정 파일은 JSON 형식입니다. 가장 먼저 구성해야 하는 것은 데이터베이스 설정입니다.

다음 코드를 찾아 앞에 //를 넣어 주석 처리합니다.

//  "dbType": "dirty",
//  "dbSettings": {
//    "filename": "var/dirty.db"
//  },

그런 다음 다음 코드를 찾아 값을 다음과 같이 변경합니다. 처음과 끝에서 /**/를 제거해야 합니다.

  "dbType" : "mysql",
  "dbSettings" : {
    "user":     "etherpaduser",
    "host":     "localhost",
    "port":     3306,
    "password": "password",
    "database": "etherpad_lite_db",
    "charset":  "utf8mb4"
  },

마지막으로 조금 아래로 스크롤하여 trustProxy 설정을 찾고 해당 값을 false에서 true로 변경합니다.

  "trustProxy": true,

이 설정은 Etherpad가 Nginx와 함께 작동하도록 하는 데 필요합니다.

완료되면 Ctrl + X를 누르고 프롬프트가 표시되면 Y를 입력하여 파일을 저장합니다.

Etherpad 사용자 셸을 종료합니다.

[ etherpad-lite]$ exit

7단계 - Etherpad 서비스 생성

부팅 시 Etherpad를 시작하고 systemctl을 사용하여 프로세스를 관리하려면 서비스 파일을 만들어야 합니다.

서비스 파일을 만들고 엽니다.

$ sudo nano /etc/systemd/system/etherpad.service

다음 코드를 붙여넣습니다.

[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/etherpad-lite/node_modules/ep_etherpad-lite/node/server.js
Restart=always

[Install]
WantedBy=multi-user.target

완료되면 Ctrl + X를 누르고 프롬프트가 표시되면 Y를 입력하여 파일을 저장합니다.

서비스 데몬을 다시 로드하여 새 구성을 가져옵니다.

$ sudo systemctl daemon-reload

Etherpad 서비스 시작을 활성화합니다.

$ sudo systemctl enable etherpad --now

서비스 상태를 확인합니다.

$ sudo systemctl status etherpad
? etherpad.service - Etherpad, a collaborative web editor.
   Loaded: loaded (/etc/systemd/system/etherpad.service; disabled; vendor preset: disabled)
   Active: active (running) since Thu 2021-10-21 15:06:53 UTC; 6s ago
 Main PID: 47228 (node)
    Tasks: 13 (limit: 11411)
   Memory: 102.8M
   CGroup: /system.slice/etherpad.service
           ??47228 /usr/bin/node --experimental-worker /opt/etherpad/etherpad-lite/node_modules/ep_etherpad-lite/node/server.js
.......

8단계 - Lets Encrypt를 사용하여 SSL 설치

Lets Encrypt를 사용하여 SSL 인증서를 설치하려면 Certbot 도구를 설치해야 합니다.

먼저 EPEL 저장소를 다운로드하여 설치해야 합니다.

$ sudo dnf install epel-release

다음 명령을 실행하여 Certbot을 설치합니다.

$ sudo dnf install certbot

SSL 인증서를 생성합니다.

$ sudo certbot certonly --standalone --agree-tos --preferred-challenges http -m  -d example.com

위의 명령은 서버의 /etc/letsencrypt/live/etherpad.example.com 디렉토리에 인증서를 다운로드합니다.

Diffie-Hellman 그룹 인증서를 생성합니다.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Lets Encrypt 자동 갱신을 위한 챌린지 웹루트 디렉터리를 만듭니다.

$ sudo mkdir -p /var/lib/letsencrypt

SSL을 갱신하기 위해 Cron 작업을 생성합니다. 인증서를 확인하고 필요한 경우 갱신하기 위해 매일 실행됩니다. 이를 위해 먼저 /etc/cron.daily/certbot-renew 파일을 생성하고 편집을 위해 엽니다.

$ sudo nano /etc/cron.daily/certbot-renew

다음 코드를 붙여넣습니다.

#!/bin/sh
certbot renew --cert-name etherpad.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

실행 가능하도록 태스크 파일에 대한 권한을 변경하십시오.

$ sudo chmod +x /etc/cron.daily/certbot-renew

9단계 - Nginx 설치 및 구성

Rocky Linux는 이전 버전의 Nginx와 함께 제공됩니다. 최신 버전을 설치하려면 Nginx 저장소를 추가해야 합니다.

편집을 위해 /etc/yum.repos.d/nginx.repo 파일을 만들고 엽니다.

$ sudo nano /etc/yum.repos.d/nginx.repo

다음 코드를 붙여넣습니다.

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

완료되면 Ctrl + X를 누르고 프롬프트가 표시되면 Y를 입력하여 파일을 저장합니다.

Nginx를 설치합니다.

$ sudo dnf install nginx

Nginx 서비스를 활성화합니다.

$ sudo systemctl enable nginx

다음으로 편집을 위해 /etc/nginx/conf.d/etherpad.conf를 생성하고 엽니다.

$ sudo nano /etc/nginx/conf.d/etherpad.conf

다음 코드를 붙여넣습니다.

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  etherpad.example.com;

    access_log  /var/log/nginx/etherpad.access.log;
    error_log   /var/log/nginx/etherpad.error.log;
    
    ssl_certificate      /etc/letsencrypt/live/etherpad.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/etherpad.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/etherpad.example.com/chain.pem;

    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
    ssl_session_tickets off;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    location / {
        rewrite  ^/$ / break;
        rewrite  ^/locales/(.*) /locales/$1 break;
        rewrite  ^/locales.json /locales.json break;
        rewrite  ^/admin(.*) /admin/$1 break;
        rewrite  ^/p/(.*) /p/$1 break;
        rewrite  ^/static/(.*) /static/$1 break;
        rewrite  ^/pluginfw/(.*) /pluginfw/$1 break;
        rewrite  ^/javascripts/(.*) /javascripts/$1 break;
        rewrite  ^/socket.io/(.*) /socket.io/$1 break;
        rewrite  ^/ep/(.*) /ep/$1 break;
        rewrite  ^/minified/(.*) /minified/$1 break;
        rewrite  ^/api/(.*) /api/$1 break;
        rewrite  ^/ro/(.*) /ro/$1 break;
        rewrite  ^/error/(.*) /error/$1 break;
        rewrite  ^/jserror(.*) /jserror$1 break;
        rewrite  ^/redirect(.*) /redirect$1 break;
        rewrite  /favicon.ico /favicon.ico break;
        rewrite  /robots.txt /robots.txt break;
        rewrite  /(.*) /p/$1;
        
        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 $connection_upgrade;
    }
}

# we're in the http context here
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

# enforce HTTPS
server {
    listen       80;
    listen       [::]:80;
    server_name  etherpad.example.com;
    return 301   https://$host$request_uri;
}

완료되면 Ctrl + X를 누르고 프롬프트가 표시되면 Y를 입력하여 파일을 저장합니다.

Nginx 구성 파일 구문을 확인합니다.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

다음 오류가 발생하면 /etc/nginx/nginx.conf 파일을 편집하여 server_names_hash_bucket_size.

nginx: [emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size

편집을 위해 /etc/nginx/nginx.conf 파일을 엽니다.

$ sudo nano /etc/nginx/nginx.conf

include /etc/nginx/conf.d/*.conf; 줄 앞에 다음 줄을 추가합니다.

server_names_hash_bucket_size  64;

Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다. Nginx를 다시 확인합니다.

마지막으로 Nginx 서비스를 시작하여 새 구성을 활성화합니다.

$ sudo systemctl start nginx

브라우저에서 URL https://etherpad.example.com을 실행하면 Etherpad 홈이 열립니다. 이제 이를 사용하여 문서를 편집하고 공동 작업자를 초대할 수 있습니다.

Etherpad 업데이트

Etherpad 업데이트는 쉽습니다. 첫 번째 단계는 Etherpad 사용자 셸로 전환하는 것입니다.

$ sudo -u etherpad bash

/opt/etherpad/etherpad-lite 디렉터리로 전환합니다.

[ user] cd /opt/etherpad/etherpad-lite

최신 Etherpad 저장소를 /opt/etherpad/etherpad-lite 디렉토리로 가져옵니다.

[ ~]$ git pull origin

Etherpads run.sh 스크립트를 실행하여 최신 버전의 Etherpad를 설정하십시오.

[ etherpad-lite]$ src/bin/run.sh

결론

이 튜토리얼에서는 Nginx 서버로 Etherpad Collaborative Editor를 설정하고 Lets Encrypt SSL 인증서를 사용하여 보호합니다. 인증된 사용자, 플러그인 및 사용자 인터페이스 사용자 정의를 포함하여 더 많은 기능으로 확장할 수 있는 Etherpad 설치를 사용할 준비가 되었습니다.

질문이 있으시면 아래 의견에 게시하십시오.