Rocky Linux 8에 Etherpad Collaborative Web Editor를 설치하는 방법
이 페이지에서
- 전제 조건
- 1단계 - 방화벽 구성\n
- 2단계 - Git 설치
- 3단계 - MariaDB 설치
- 4단계 - MariaDB 구성
- 5단계 - Etherpad 다운로드 및 설치
- 6단계 - Etherpad 구성
- 7단계 - Etherpad 서비스 생성
- 8단계 - Lets Encrypt를 사용하여 SSL 설치\n
- 9단계 - Nginx 설치 및 구성
- Etherpad 업데이트
- 결론
Etherpad는 브라우저에서 실시간으로 공동 편집을 제공하는 오픈 소스 온라인 편집기입니다. Node.js로 작성되었으며 WordPress, Drupal, Odoo, Discourse, Joomla 등과 같은 다양한 플랫폼에서 작동하도록 자체 호스팅할 수 있습니다.
이 튜토리얼에서는 데이터를 저장하기 위해 MariaDB 데이터베이스를 사용하여 Rocky Linux 8 서버에 Etherpad를 설치합니다. 또한 애플리케이션의 리버스 프록시로 Nginx를 사용하고 Lets Encrypt를 사용하여 SSL 인증서를 설치하여 Etherpad 인스턴스에 대한 HTTPS 연결을 활성화합니다.
전제 조건
-
A system running Rocky Linux 8.
-
A non-root user with sudo privileges.
-
A domain name pointed to the server.
-
Nodejs installed. Follow our guide on installing Nodejs on Rocky Linux 8 server. Use any of the two methods specified.
-
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 설치를 사용할 준비가 되었습니다.
질문이 있으시면 아래 의견에 게시하십시오.