웹사이트 검색

Ubuntu 22.04에 Strapi CMS를 설치하는 방법


이 페이지에서

  1. 전제 조건
  2. 1단계 - 방화벽 구성\n
  3. 2단계 - PostgreSQL 설치 및 구성
  4. 3단계 - Node.js 설치
  5. 4단계 - Strapi 설치
  6. 5단계 - PM2 설치 및 구성
  7. 6단계 - Nginx 설치
  8. 7단계 - SSL 설치
  9. 8단계 - Nginx 구성
  10. 9단계 - Strapi 업그레이드
  11. 결론

Strapi는 JavaScript로 구축된 오픈 소스 헤드리스 콘텐츠 관리 시스템(CMS)입니다. 다른 헤드리스 CMS와 마찬가지로 Strapi는 기본적으로 프런트엔드가 제공되지 않습니다. 프론트엔드에 API를 사용하므로 React 및 Next.js와 같은 인기 있는 프레임워크를 사용하여 웹사이트를 구축할 수 있습니다. 플러그인 시스템을 기반으로 하는 Strapi는 관리자 패널과 API를 확장할 수 있고 모든 부분을 모든 사용 사례에 맞게 사용자 지정할 수 있는 유연한 CMS입니다. 또한 Strapi에는 관리자와 최종 사용자가 액세스할 수 있는 항목을 자세히 관리하는 사용자 시스템이 내장되어 있습니다.

이 튜토리얼에서는 Nginx를 리버스 프록시 서버로 사용하여 Ubuntu 22.04 서버에 커뮤니티 버전의 Strapi CMS를 설치하는 방법을 배웁니다.

전제 조건

  • A server running Ubuntu 22.04.

  • A non-root user with sudo privileges.

  • A fully qualified domain name (FQDN) like strapi.example.com.

  • Make sure everything is updated.

    $ sudo apt update
    $ sudo apt upgrade
    
  • Few packages that your system needs.

    $ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
    

    Some of these packages may already be installed on your system.

1단계 - 방화벽 구성

첫 번째 단계는 방화벽을 구성하는 것입니다. 우분투는 기본적으로 ufw(복잡하지 않은 방화벽)와 함께 제공됩니다.

방화벽이 실행 중인지 확인하십시오.

$ sudo ufw status

다음 출력을 얻어야 합니다.

Status: inactive

방화벽이 활성화 시 현재 연결을 끊지 않도록 SSH 포트를 허용합니다.

$ sudo ufw allow OpenSSH

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

$ sudo ufw allow http
$ sudo ufw allow https

방화벽 활성화

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

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

$ sudo ufw status

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

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

2단계 - PostgreSQL 설치 및 구성

Strapi는 PostgreSQL 11 이상에서 작동합니다. Ubuntu 22.04는 기본적으로 PostgreSQL 14와 함께 제공됩니다. 자습서에 PostgreSQL 15를 사용합니다.

다음 명령을 실행하여 PostgreSQL GPG 키를 추가합니다.

$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /usr/share/keyrings/postgresql-key.gpg >/dev/null

소스 목록에 APT 저장소를 추가하십시오.

$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/postgresql-key.gpg arch=amd64] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

시스템 저장소를 업데이트하십시오.

$ sudo apt update

이제 아래 명령을 사용하여 PostgreSQL을 설치할 수 있습니다.

$ sudo apt install postgresql postgresql-contrib

postgresql-contrib 패키지에는 몇 가지 추가 유틸리티가 포함되어 있습니다.

PostgreSQL 서비스의 상태를 확인하십시오.

$ sudo systemctl status postgresql
? postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
     Active: active (exited) since Wed 2022-12-28 18:03:03 UTC; 17s ago
   Main PID: 4119 (code=exited, status=0/SUCCESS)
        CPU: 2ms

Dec 28 18:03:03 strapi systemd[1]: Starting PostgreSQL RDBMS...
Dec 28 18:03:03 strapi systemd[1]: Finished PostgreSQL RDBMS.

서비스가 기본적으로 활성화되어 실행되고 있음을 알 수 있습니다.

PostgreSQL 셸을 시작합니다.

$ sudo -i -u postgres psql

Strapi 데이터베이스를 생성합니다.

postgres=# CREATE DATABASE strapidb;

Strapi 사용자를 만들고 강력한 암호를 선택하십시오.

postgres-# CREATE USER strapiuser WITH PASSWORD 'Your_Password';

데이터베이스 소유자를 Strapi 사용자로 변경합니다.

postgres-# ALTER DATABASE strapidb OWNER TO strapiuser;

쉘을 종료합니다.

postgres-# \q

자격 증명이 작동하는지 확인합니다.

$ psql --username strapiuser --password --host localhost strapidb
Password:
psql (15.1 (Ubuntu 15.1-1.pgdg22.04+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.

strapidb=>

\\q를 입력하여 셸을 종료합니다.

3단계 - Node.js 설치

Ubuntu 22.04는 오래된 Node v12와 함께 제공됩니다. 이 튜토리얼을 작성할 당시 v18인 Node의 최신 LTS 버전을 설치합니다.

Nodesource에서 Node v18 설치 프로그램을 가져옵니다.

$ curl -sL https://deb.nodesource.com/setup_18.x -o nodesource_setup.sh

설치 프로그램 스크립트를 실행합니다.

$ sudo bash nodesource_setup.sh

Node.js를 설치합니다.

$ sudo apt install nodejs

Node.js 버전을 확인합니다.

$ node -v
v18.12.1

설치 프로그램 파일을 삭제합니다.

$ rm nodesource_setup.sh

4단계 - Strapi 설치

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

$ npx  howtoforge-project
Need to install the following packages:
  
Ok to proceed? (y) y

설치를 계속하려면 y를 입력하십시오. 다음으로 설치 유형을 선택하라는 메시지가 표시됩니다. 계속 진행하려면 사용자 정의를 선택하고 다음과 같이 질문에 답하십시오.

? Choose your installation type Custom (manual settings)
? Choose your preferred language JavaScript
? Choose your default database client postgres
? Database name: strapidb
? Host: 127.0.0.1
? Port: 5432
? Username: strapiuser
? Password: Your_Password
? Enable SSL connection: No

요구 사항에 따라 Typescript 또는 JavaScript를 Strapi용 언어로 선택할 수 있습니다.

설치가 완료되면 Strapi 프로젝트를 빌드할 준비가 된 것입니다.

프로젝트 디렉터리로 전환합니다.

$ cd howtoforge-project

다음 명령을 실행하여 Strapi Admin UI를 포함한 프로젝트를 빌드합니다.

$ NODE_ENV=production npm run build

다음 명령을 사용하여 Strapi 서버를 시작하십시오.

$ node ~/howtoforge-project/node_modules/.bin/strapi start

애플리케이션이 URL http://:1337에 표시되어야 합니다. 그러나 먼저 방화벽에서 포트를 엽니다.

$ sudo ufw allow 1337

URL을 열면 다음 화면이 나타납니다.

터미널에서 Ctrl + C를 눌러 서버를 중지합니다. 방화벽 규칙은 필요하지 않으므로 삭제해야 합니다.

$ sudo ufw delete allow 1337

5단계 - PM2 설치 및 구성

서버를 수동으로 시작하는 대신 PM2(Process Manager 2)를 사용하여 프로세스를 관리하고 동일한 시스템 서비스를 만들 수 있습니다.

홈 디렉터리로 전환합니다.

$ cd ~

PM2를 설치합니다.

$ sudo npm install  -g

편집을 위해 PM2 구성 파일을 만들고 엽니다.

$ sudo nano ecosystem.config.js

파일에 다음 내용을 붙여넣습니다. Postgres 자격 증명과 함께 올바른 디렉터리 이름을 입력해야 합니다.

module.exports = {
  apps: [
    {
      name: 'strapi',
      cwd: '/home/navjot/my-project',
      script: 'npm',
      args: 'start',
      env: {
        NODE_ENV: 'production',
        DATABASE_HOST: 'localhost',
        DATABASE_PORT: '5432',
        DATABASE_NAME: 'strapidb',
        DATABASE_USERNAME: 'strapiuser',
        DATABASE_PASSWORD: 'Your_Password',
      },
    },
  ],
};

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

PM2를 사용하여 백그라운드에서 Strapi 인스턴스를 실행합니다.

$ pm2 start ecosystem.config.js

다음과 같은 결과가 표시됩니다.

                        -------------

__/""""\____/"\____________/"\____/"""_____
 _\/"/////////"_\/""________/""__/"///////"___
  _\/"_______\/"_\/"//"____/"//"_\///______\//"__
   _\/""""\/__\/"\///"/"/_\/"___________/"/___
    _\/"/////////____\/"__\///"/___\/"________/"//_____
     _\/"_____________\/"____\///_____\/"_____/"//________
      _\/"_____________\/"_____________\/"___/"/___________
       _\/"_____________\/"_____________\/"__/"""""_
        _\///______________\///______________\///__\///////////////__


                          Runtime Edition

        PM2 is a Production Process Manager for Node.js applications
                     with a built-in Load Balancer.

                Start and Daemonize any application:
                $ pm2 start app.js

                Load Balance 4 instances of api.js:
                $ pm2 start api.js -i 4

                Monitor in production:
                $ pm2 monitor

                Make pm2 auto-boot at server restart:
                $ pm2 startup

                To go further checkout:
                http://pm2.io/


                        -------------

[PM2] Spawning PM2 daemon with pm2_home=/home/navjot/.pm2
[PM2] PM2 Successfully daemonized
[PM2][WARN] Applications strapi not running, starting...
[PM2] App [strapi] launched (1 instances)
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? id  ? name      ? namespace   ? version ? mode    ? pid      ? uptime ? ?    ? status    ? cpu      ? mem      ? user
    ? watching ?
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 0   ? strapi    ? default     ? N/A     ? fork    ? 4824     ? 0s     ? 0    ? online    ? 0%       ? 31.9mb   ? navjot   ? disabled ?
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

PM2에서 실행되는 응용 프로그램이 충돌하거나 종료되면 자동으로 다시 시작됩니다.

다음 명령을 사용하여 시작 시스템 스크립트를 만듭니다.

$ pm2 startup

다음과 같은 결과가 표시됩니다.

[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u navjot --hp /home/navjot

위 출력에서 명령을 복사하여 실행합니다.

$ sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u navjot --hp /home/navjot

PM2 프로세스 목록을 저장합니다.

$ pm2 save

이제 Strapi 서비스가 프로덕션 모드의 백그라운드에서 실행 중입니다.

6단계 - Nginx 설치

Ubuntu 22.04는 이전 버전의 Nginx와 함께 제공됩니다. 최신 버전을 설치하려면 공식 Nginx 저장소를 다운로드해야 합니다.

Nginxs 서명 키를 가져옵니다.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
	| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Nginxs 안정 버전용 리포지토리를 추가합니다.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

시스템 리포지토리를 업데이트합니다.

$ sudo apt update

Nginx를 설치합니다.

$ sudo apt install nginx

설치를 확인하십시오.

$ nginx -v
nginx version: nginx/1.22.1

Nginx 서버를 시작합니다.

$ sudo systemctl start nginx

7단계 - SSL 설치

SSL 인증서를 생성하려면 Certbot을 설치해야 합니다. Ubuntus 저장소를 사용하여 Certbot을 설치하거나 Snapd 도구를 사용하여 최신 버전을 가져올 수 있습니다. 우리는 Snapd 버전을 사용할 것입니다.

Ubuntu 22.04는 기본적으로 Snapd가 설치된 상태로 제공됩니다. 다음 명령을 실행하여 Snapd 버전이 최신인지 확인하십시오. Snapd 버전이 최신인지 확인하세요.

$ sudo snap install core
$ sudo snap refresh core

Certbot을 설치합니다.

$ sudo snap install --classic certbot

다음 명령을 사용하여 /usr/bin 디렉터리에 대한 심볼릭 링크를 생성하여 Certbot 명령이 실행되도록 합니다.

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

다음 명령을 실행하여 SSL 인증서를 생성합니다.

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

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

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

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

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

$ sudo certbot renew --dry-run

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

8단계 - Nginx 구성

편집을 위해 /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를 입력하여 파일을 저장합니다.

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

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

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

server {
  # Redirect any http requests to https
  listen         80;
  listen         [::]:80;
  server_name    strapi.example.com;
  return 301     https://$host$request_uri;
}

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

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

  # TLS configuration
  ssl_certificate           /etc/letsencrypt/live/strapi.example.com/fullchain.pem;
  ssl_certificate_key       /etc/letsencrypt/live/strapi.example.com/privkey.pem;
  ssl_trusted_certificate   /etc/letsencrypt/live/strapi.example.com/chain.pem;
  ssl_protocols             TLSv1.2 TLSv1.3;

  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;
  ssl_session_timeout       1d;

  # 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;

  location / {
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-Proto $scheme;
    proxy_set_header	    X-Forwarded-Host $http_host;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass              http://127.0.0.1:1337;
  }
}

완료되면 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

Nginx 서비스를 다시 시작합니다.

$ sudo systemctl restart nginx

이제 URL https://strapi.example.com을 통해 Strapi CMS에 액세스할 수 있습니다. Strapi가 프로덕션 모드에서 실행되고 있음을 보여주는 다음 페이지가 표시됩니다.

관리자 사용자를 생성하려면 https://strapi.example.com/admin URL을 방문하십시오.

관리자 세부 정보를 입력하고 시작하겠습니다 버튼을 클릭하여 관리자 대시보드 화면으로 이동합니다.

이제부터 Strapi에서 콘텐츠 제작을 시작할 수 있습니다.

9단계 - Strapi 업그레이드

Strapi를 업그레이드하는 첫 번째 단계는 서버를 중지하는 것입니다.

$ cd ~
$ pm2 stop ecosystem.config.js

프로젝트 디렉터리로 전환하고 편집을 위해 package.json 파일을 엽니다.

$ cd howtoforge-project
$ nano package.json

모든 Strapi 패키지 버전 번호를 안정적인 최신 Strapi 버전으로 업그레이드하십시오. Strapis GitHub 릴리스 페이지에서 사용 가능한 최신 버전을 얻을 수 있습니다.

"devDependencies": {},
  "dependencies": {
    "@strapi/strapi": "4.5.5",
    "@strapi/plugin-users-permissions": "4.5.5",
    "@strapi/plugin-i18n": "4.5.5",
    "pg": "8.6.0"
  },

여기에서 4.5.5를 최신 안정 버전으로 변경해야 합니다. 완료되면 Ctrl + X를 누르고 프롬프트가 표시되면 Y를 입력하여 파일을 저장합니다.

업그레이드 버전을 설치합니다.

$ npm install

관리 패널을 다시 빌드하십시오.

$ NODE_ENV=production npm run build

서버를 다시 시작하십시오.

$ cd ~
$ pm2 start ecosystem.config.js

이제 Strapi 설치가 업그레이드되어 실행 중입니다.

결론

이것으로 Ubuntu 22.04 서버에 Strapi CMS를 설치하고 리버스 프록시 서버로 Nginx를 설치하는 방법에 대한 자습서를 마칩니다. 질문이 있으시면 아래 의견에 게시하십시오.