웹사이트 검색

Rocky Linux 9에 Wiki.js를 설치하는 방법


이 페이지에서

  1. 전제 조건
  2. 1단계 - 방화벽 구성\n
  3. 2단계 - PostgreSQL 및 유틸리티 설치
  4. 3단계 - PostgreSQL 구성
  5. 4단계 - Node.js 설치
  6. 5단계 - Wiki.js 다운로드
  7. 6단계 - Wiki.js 구성 및 실행\n
  8. 7단계 - Systemd 서비스 설정
  9. 8단계 - Nginx 설치
  10. 9단계 - SSL 설치
  11. 10단계 - SELinux 구성
  12. 11단계 - Nginx 구성
  13. 12단계 - 설치 완료
  14. 결론

Wiki.js는 오픈 소스의 가벼운 위키 소프트웨어입니다. Node.js JavaScript 프레임워크를 기반으로 합니다. 개발자용 Markdown 편집기와 비전문가용 WYSIWYG 편집기를 사용하여 문서, 위키 및 웹 콘텐츠를 작성하는 데 사용할 수 있습니다. UML 다이어그램, Tex 또는 MathML 구문을 사용하는 수학 표현식, 코드를 포함한 여러 콘텐츠 유형을 지원합니다. 여기에는 분석, 인증, 로깅, 타사 검색 엔진 및 콘텐츠를 동기화할 여러 스토리지 서비스를 비롯한 다양한 기능을 위한 여러 모듈이 포함되어 있습니다.

이 튜토리얼에서는 프록시를 위해 PostgreSQL 데이터베이스와 Nginx 서버를 사용하여 Rocky Linux 9 서버에 Wiki.js를 설치하는 방법을 배웁니다.

전제 조건

  • A server running Rocky Linux 9.

  • A non-root user with sudo privileges.

  • A fully qualified domain name (FQDN) pointing to your server. For our purposes, we will use wiki.example.com as the domain name.

  • Make sure everything is updated.

    $ sudo dnf update
    
  • Install basic utility packages. Some of them may already be installed.

    $ sudo dnf install wget curl nano unzip yum-utils -y
    

1단계 - 방화벽 구성

첫 번째 단계는 방화벽을 구성하는 것입니다. Rocky Linux는 Firewalld Firewall을 사용합니다. 방화벽 상태를 확인하십시오.

$ sudo firewall-cmd --state
running

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

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

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

cockpit dhcpv6-client ssh

Wiki.js가 작동하려면 HTTP 및 HTTPS 포트가 필요합니다. 열어보세요.

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

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

$ sudo firewall-cmd --reload

2단계 - PostgreSQL 및 유틸리티 설치

Rocky Linux 9는 이전 버전의 PostgreSQL과 함께 제공됩니다. 튜토리얼을 위해 Postgres 14를 설치합니다.

PostgreSQL용 리포지토리 RPM을 설치합니다.

$ sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm

PostgreSQL 14 서버를 설치합니다.

$ sudo dnf install -y postgresql14-server postgresql14-contrib

데이터베이스를 초기화합니다.

$ sudo /usr/pgsql-14/bin/postgresql-14-setup initdb

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

$ sudo systemctl enable postgresql-14 --now

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

$ sudo systemctl status postgresql-14
? postgresql-14.service - PostgreSQL 14 database server
     Loaded: loaded (/usr/lib/systemd/system/postgresql-14.service; enabled; vendor preset: disabled)
     Active: active (running) since Sat 2022-10-22 09:52:41 UTC; 2s ago
       Docs: https://www.postgresql.org/docs/14/static/
    Process: 103857 ExecStartPre=/usr/pgsql-14/bin/postgresql-14-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
   Main PID: 103862 (postmaster)
      Tasks: 8 (limit: 5915)
     Memory: 16.6M
        CPU: 61ms
     CGroup: /system.slice/postgresql-14.service
             ??103862 /usr/pgsql-14/bin/postmaster -D /var/lib/pgsql/14/data/
             ??103863 "postgres: logger "
             ??103865 "postgres: checkpointer "
             ??103866 "postgres: background writer "
             ??103867 "postgres: walwriter "
             ??103868 "postgres: autovacuum launcher "
             ??103869 "postgres: stats collector "
             ??103870 "postgres: logical replication launcher "

Oct 22 09:52:41 wiki.example.com systemd[1]: Starting PostgreSQL 14 database server...

3단계 - PostgreSQL 구성

PostgreSQL 셸에 로그인합니다.

$ sudo -i -u postgres psql

Wiki.js에 대한 새 데이터베이스를 만듭니다.

postgres=# CREATE DATABASE wikidb;

강력한 암호로 새 데이터베이스 사용자를 생성합니다.

postgres=# CREATE USER wikiuser WITH ENCRYPTED PASSWORD 'wikipassword';

사용자에게 데이터베이스를 사용할 수 있는 권한을 부여합니다.

postgres=# GRANT ALL PRIVILEGES ON DATABASE wikidb TO wikiuser;

Postgres 셸을 종료합니다.

postgres=# \q

4단계 - Node.js 설치

Wiki.js는 이 튜토리얼을 작성하는 시점에서 Node v16을 지원합니다.

다음 명령을 사용하여 노드 리포지토리를 설치합니다.

$ curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash -

노드를 설치합니다.

$ sudo dnf install nodejs -y

노드 설치를 확인합니다.

$ node --version
v16.18.0

5단계 - Wiki.js 다운로드

Wiki.js를 설치할 폴더를 만듭니다.

$ sudo mkdir -p /var/www/wikijs

현재 로그인한 사용자를 폴더 소유자로 설정합니다.

$ sudo chown $USER:$USER /var/www/wikijs

디렉터리로 전환하고 Wiki.js 코드 아카이브를 다운로드합니다.

$ cd /var/www/wikijs && wget https://github.com/Requarks/wiki/releases/latest/download/wiki-js.tar.gz

다운로드한 아카이브를 추출합니다.

$ tar xzf wiki-js.tar.gz

6단계 - Wiki.js 구성 및 실행

샘플에서 구성 파일을 만듭니다.

$ cp config.sample.yml config.yml

편집을 위해 구성 파일을 엽니다.

$ nano config.yml

다음 데이터베이스 설정을 찾아 해당 값을 3단계에서 구성한 값으로 업데이트합니다.

# PostgreSQL / MySQL / MariaDB / MS SQL Server only:
host: localhost
port: 5432
user: wikiuser
pass: wikipassword
db: wikidb
ssl: false

bindIP: 0.0.0.0 줄을 찾아 다음과 같이 업데이트합니다.

bindIP: 127.0.0.1

이렇게 하면 Nginx 프록시를 사용하여 외부에서 액세스할 것이기 때문에 WIki.js가 루프백 주소를 수신하게 됩니다.

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

다음 명령을 사용하여 Wiki.js를 실행합니다.

$ node server

성공적인 설치를 확인하는 유사한 출력을 받게 됩니다.

2022-10-22T10:25:48.187Z [MASTER] info: =======================================
2022-10-22T10:25:48.190Z [MASTER] info: = Wiki.js 2.5.289 =====================
2022-10-22T10:25:48.191Z [MASTER] info: =======================================
2022-10-22T10:25:48.191Z [MASTER] info: Initializing...
2022-10-22T10:25:49.079Z [MASTER] info: Using database driver pg for postgres [ OK ]
2022-10-22T10:25:49.086Z [MASTER] info: Connecting to database...
2022-10-22T10:25:49.117Z [MASTER] info: Database Connection Successful [ OK ]
2022-10-22T10:25:49.467Z [MASTER] warn: DB Configuration is empty or incomplete. Switching to Setup mode...
2022-10-22T10:25:49.468Z [MASTER] info: Starting setup wizard...
2022-10-22T10:25:49.740Z [MASTER] info: Starting HTTP server on port 3000...
2022-10-22T10:25:49.741Z [MASTER] info: HTTP Server on port: [ 3000 ]
2022-10-22T10:25:49.745Z [MASTER] info: HTTP Server: [ RUNNING ]
2022-10-22T10:25:49.745Z [MASTER] info: .......................................
2022-10-22T10:25:49.745Z [MASTER] info:
2022-10-22T10:25:49.746Z [MASTER] info: Browse to http://YOUR-SERVER-IP:3000/ to complete setup!

프로세스를 중지하려면 Ctrl + C를 누르십시오.

7단계 - Systemd 서비스 설정

Wiki.js를 계속 실행하는 위의 프로세스는 일시적입니다. 프로세스를 영구적으로 만들려면 Wiki.js가 백그라운드 서비스로 실행되도록 시스템 서비스를 만들어야 합니다. 이렇게 하면 시스템 재부팅 시 Wiki.js를 실행할 수 있습니다.

Wiki.js에 대한 systemd 서비스 파일을 생성하고 편집을 위해 엽니다.

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

다음 코드를 붙여넣습니다. 변수 User의 값을 시스템 사용자의 이름으로 바꿉니다.

[Unit]
Description=Wiki.js
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/node server
Restart=always

User=navjot
Environment=NODE_ENV=production
WorkingDirectory=/var/www/wikijs

[Install]
WantedBy=multi-user.target

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

시스템 데몬을 다시 로드합니다.

$ sudo systemctl daemon-reload

Wiki.js 서비스를 활성화합니다.

$ sudo systemctl enable wikijs

8단계 - Nginx 설치

Rocky Linux는 이전 버전의 Nginx와 함께 제공됩니다. 최신 버전을 설치하려면 공식 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 -y

설치를 확인하십시오.

$ nginx -v
nginx version: nginx/1.22.1

Nginx 서버를 활성화하고 시작합니다.

$ sudo systemctl enable nginx --now

서버의 상태를 확인하십시오.

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
     Active: active (running) since Sat 2022-10-22 11:15:39 UTC; 49min ago
       Docs: http://nginx.org/en/docs/
    Process: 116236 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 116237 (nginx)
      Tasks: 2 (limit: 5915)
     Memory: 5.0M
        CPU: 245ms
     CGroup: /system.slice/nginx.service
             ??116237 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??116238 "nginx: worker process"

Oct 22 11:15:39 wiki.example.com systemd[1]: Starting nginx - high performance web server...

9단계 - SSL 설치

Snapd 도구를 사용하는 Certbot 도구를 사용하여 SSL 인증서를 발급합니다. 작동하려면 EPEL 저장소가 필요합니다.

$ sudo dnf install epel-release

Snapd를 사용하여 Certbot을 설치합니다. 스냅드를 설치합니다.

$ sudo dnf install snapd

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

$ sudo systemctl enable snapd.socket --now

Snapd가 작동하는 데 필요한 링크를 만듭니다.

$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh

핵심 Snapd 리포지토리를 설치합니다.

$ sudo snap install core
$ sudo snap refresh core

Certbot을 설치합니다.

$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

인증서를 생성합니다. 다음 명령은 Nginx도 자동으로 구성합니다.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m  -d wiki.example.com

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

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

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

SSL 갱신이 제대로 작동하는지 확인하려면 프로세스를 테스트 실행하십시오.

$ sudo certbot renew --dry-run

오류가 표시되지 않으면 모든 설정이 완료된 것입니다. 인증서가 자동으로 갱신됩니다.

10단계 - SELinux 구성

다음 명령을 실행하여 올바른 SELinux 컨텍스트를 Wiki.js 디렉터리에 적용합니다.

$ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/wikijs(/.*)?"
$ sudo restorecon -Rv /var/www/wikijs

HTTP용 포트를 만들고 3000에 할당하여 Wiki.js가 SELinux와 함께 작동하도록 합니다.

$ sudo semanage port -a -t http_port_t -p tcp 3000

Nginx가 네트워크에 연결하도록 허용합니다.

$ sudo setsebool -P httpd_can_network_connect 1

11단계 - Nginx 구성

편집을 위해 /etc/nginx/conf.d/wikijs.conf 파일을 만들고 엽니다.

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

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

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

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

    root /var/www/wikijs;

    access_log  /var/log/nginx/wiki.access.log;
    error_log   /var/log/nginx/wiki.error.log;

    http2_push_preload on; # Enable HTTP/2 Server Push

    ssl_certificate /etc/letsencrypt/live/wiki.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/wiki.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/wiki.example.com/chain.pem;
    ssl_session_timeout 1d;

    # Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC).
    ssl_protocols TLSv1.2 TLSv1.3;

    # Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to
    # prevent replay attacks.
    #
    # @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data
    ssl_early_data on;

    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:50m;

    # OCSP Stapling ---
    # fetch OCSP records from URL in ssl_certificate and cache them
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    add_header X-Early-Data $tls1_3_early_data;

    location / {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://127.0.0.1:3000;
    }
}

# This block is useful for debugging TLS v1.3. Please feel free to remove this
# and use the `$ssl_early_data` variable exposed by NGINX directly should you
# wish to do so.
map $ssl_early_data $tls1_3_early_data {
  "~." $ssl_early_data;
  default "";
}

위 파일의 루트 위치를 서버의 디렉토리로 바꿉니다.

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

편집을 위해 /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 구성을 확인합니다.

$ sudo nginx -t

오류가 표시되지 않으면 잘 진행된 것입니다.

Wiki.js 서비스를 시작합니다.

$ sudo systemctl start wikijs

Nginx 서버를 다시 로드합니다.

$ sudo systemctl reload nginx

12단계 - 설치 완료

URL https://wiki.example.com을 방문하여 설치를 완료하십시오.

관리자 계정 세부 정보와 URL을 입력합니다. 원격 측정 허용 옵션을 선택 취소하여 원격 측정을 비활성화합니다. 관리 패널에서도 비활성화할 수 있습니다. 계속하려면 설치 버튼을 클릭하십시오.

로그인 페이지로 이동됩니다.

계정 세부 정보를 입력하고 로그인 버튼을 클릭하여 관리 페이지로 이동합니다.

이제 Wiki.js를 사용할 수 있습니다.

결론

이것으로 Rocky Linux 9 서버에 Wiki.js를 설치하는 방법을 배운 자습서를 마칩니다. 질문이 있으시면 아래 의견에 게시하십시오.