웹사이트 검색

Ubuntu 22.04에서 프로덕션용으로 Strapi를 설정하고 설치하는 방법


소개

Strapi는 JavaScript 프로그래밍 언어로 구축된 헤드리스 콘텐츠 관리 시스템(CMS) 오픈 소스입니다. 다른 헤드리스 CMS와 마찬가지로 Strapi는 기본적으로 프런트엔드가 제공되지 않습니다. 대신 콘텐츠 구조를 설계할 수 있는 API에 의존합니다. 또한 Strapi는 React 및 Next.js와 같은 널리 사용되는 프레임워크와 통합하여 웹 사이트를 구축하는 다양한 방법을 제공합니다. 또한 REST API 또는 GraphQL을 사용하여 API를 사용하는 방법을 선택할 수 있습니다.

이 자습서에서는 Strapi를 설치하고 프로덕션 환경을 설정하여 콘텐츠 생성을 시작합니다. Strapi가 개발 모드에서 SQLite를 실행하는 동안 PostgreSQL을 사용하도록 구성합니다. 또한 Nginx 리버스 프록시 뒤에서 Strapi 애플리케이션을 제공하고 PM2 프로세스 관리자를 사용하여 안정적인 가동 시간을 보장합니다. 마지막으로 Let's Encrypt를 사용하여 Nginx 연결을 보호합니다.

전제 조건

이 자습서를 따르려면 다음이 필요합니다.

  • 초기 서버 설정 가이드에 따라 Ubuntu 22.04 서버 설정
    • Strapi는 최소 2개의 CPU 코어와 4GB의 RAM이 있는 서버를 권장합니다. 이 자습서에서는 서버가 권장 하드웨어 사양을 충족한다고 가정합니다.

    • PPA 옵션을 통해 버전 18.xx를 16.xx로 교체해야 합니다. 이 글을 쓰는 시점에서 16 이상의 노드 버전에서는 Strapi가 제대로 작동하지 않을 수 있습니다. 특히 이 튜토리얼에서는 Node v16.18.1이 사용됩니다.

    • 애플리케이션 서버의 주소를 프록시로 구성할 때 http://localhost:1337app_server_address.

    서버에 Node.js 버전 16, Nginx 및 Postgres가 설치되어 있으면 자습서를 진행할 준비가 된 것입니다.

    1단계 - Postgres 데이터베이스 설정

    모든 Strapi 프로젝트에는 데이터베이스가 필요합니다. 현재 MySQL, MariaDB, SQlite 및 PostgreSQL을 지원합니다. 공식 문서에서 최소 버전 요구 사항을 확인할 수 있습니다. 또한 Strapi는 새로운 데이터베이스를 기대합니다. 즉, 기존 데이터베이스를 사용하여 Strapi 인스턴스에 연결할 수 없습니다.

    먼저 데이터베이스를 만듭니다.

    1. sudo -i -u postgres createdb strapi-db

    그런 다음 데이터베이스에 대한 사용자를 만듭니다.

    1. sudo -i -u postgres createuser --interactive
    Output
    Enter name of role to add: sammy Shall the new role be a superuser? (y/n) y

    기본적으로 PostgreSQL에서는 식별 프로토콜 또는 식별 인증 방법을 사용하여 데이터베이스 사용자로 인증합니다. 여기에는 PostgreSQL이 클라이언트의 Ubuntu 사용자 이름을 가져와 데이터베이스 사용자 이름으로 사용하는 것이 포함됩니다. 이렇게 하면 많은 경우 보안이 강화되지만 Strapi와 같은 외부 프로그램이 데이터베이스 중 하나에 연결하려는 경우 문제가 발생할 수도 있습니다. 이 문제를 해결하려면 Strapi가 데이터베이스에 연결할 수 있도록 이 PostgreSQL 역할에 대한 암호를 설정하십시오.

    터미널에서 PostgreSQL 프롬프트를 엽니다.

    1. sudo -u postgres psql

    PostgreSQL 프롬프트에서 선택한 강력한 암호를 갖도록 사용자 프로필을 업데이트합니다.

    1. ALTER USER sammy PASSWORD 'postgres_password';

    터미널에 \\q를 입력하여 PostgreSQL 사용자를 종료합니다.

    1. \q

    데이터베이스 및 사용자 자격 증명이 생성되면 Strapi를 설치할 준비가 된 것입니다.

    2단계 - 서버에 Strapi 설치

    서버에 Strapi를 설치하려면 다음 명령을 입력하십시오.

    1. npx create-strapi-app@latest my-project

    설치를 계속하려면 y를 확인하십시오.

    예를 확인한 후 대화식 설치에 액세스합니다. 데이터베이스 이름, 사용자 이름비밀번호가 적절하게 변경되었는지 확인하면서 다음 옵션을 선택하십시오.

    Output
    ? Choose your installation type Custom (manual settings) ? Choose your preferred language JavaScript ? Choose your default database client postgres ? Database name: strapi-db ? Host: 127.0.0.1 ? Port: 5432 ? Username: sammy ? Password: postgres_password ? Enable SSL connection: No

    SSL 연결은 이 튜토리얼의 뒷부분에서 Let's Encrypt 인증서로 구성되고 획득되기 때문에 활성화되지 않습니다. 선택한 후 Strapi가 설치를 시작합니다.

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

    먼저 my-project 디렉토리에 있는지 확인합니다.

    1. cd my-project

    다음으로 다음 명령을 실행합니다.

    1. NODE_ENV=production npm run build
    Output
    > my-project@0.1.0 build > strapi build Building your admin UI with production configuration... ✔ Webpack Compiled successfully in 35.44s Admin UI built successfully

    이 명령은 Strapi 관리 UI를 포함하여 Strapi 프로젝트를 빌드합니다.

    이제 Strapi 서버를 테스트할 수 있습니다. 다음 명령을 실행하여 Strapi 서버를 직접 시작하십시오.

    1. node /home/sammy/my-project/node_modules/.bin/strapi start
    Output
    [2022-11-21 13:54:24.671] info: The Users & Permissions plugin automatically generated a jwt secret and stored it in .env under the name JWT_SECRET. Project information ┌────────────────────┬──────────────────────────────────────────────────┐ │ Time │ Mon Nov 21 2022 13:54:24 GMT+0000 (Coordinated … │ │ Launched in │ 1603 ms │ │ Environment │ development │ │ Process PID │ 4743 │ │ Version │ 4.5.4 (node v16.18.1) │ │ Edition │ Community │ └────────────────────┴──────────────────────────────────────────────────┘ Actions available One more thing... Create your first administrator 💻 by going to the administration panel at: ┌─────────────────────────────┐ │ http://localhost:1337/admin │ └─────────────────────────────┘

    전제 조건을 따랐다면 Nginx를 Strapi의 기본 주소인 http://localhost:1337에 대한 역방향 프록시로 설정했습니다. 기본 Strapi 랜딩 페이지를 보려면 브라우저에서 http://your_domain으로 이동합니다.

    기본 구성의 이 명령은 현재 Strapi의 개발 모드를 사용하고 있습니다. 또한 터미널의 명령에 연결된 프로세스에 의존하며 생산에 적합하지 않습니다. 다음 단계에서는 PM2라는 프로세스 관리자에 생산 설정을 추가합니다.

    CTRL+c를 눌러 서버를 종료하십시오.

    Strapi가 설치되면 백그라운드에서 서버를 서비스로 실행하도록 PM2를 설정할 준비가 된 것입니다.

    3단계 - PM2 설치 및 구성

    서버를 수동으로 시작하는 대신 가이드를 참조할 수 있습니다. PM2는 서버를 수동으로 시작할 필요 없이 가동 상태를 유지하여 가동 시간을 보장합니다.

    먼저 최상위 디렉토리에 있는지 확인하십시오.

    1. cd ~

    다음으로 다음 명령을 사용하여 PM2를 설치합니다.

    1. sudo npm install pm2@latest -g

    그런 다음 원하는 텍스트 편집기를 사용하여 PM2용 구성 파일을 만듭니다. 이 예에서는 nano가 사용됩니다.

    1. sudo nano ecosystem.config.js

    이 파일에 다음 콘텐츠를 추가하고 데이터베이스 이름, 사용자 및 암호와 함께 프로젝트 디렉터리 이름 및 경로를 변경해야 합니다.

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

    PM2 구성을 편집한 후 파일을 종료합니다. nano를 사용하는 경우 CTRL+x를 누른 다음 y를 누르고 ENTER를 누릅니다.

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

    1. pm2 start ecosystem.config.js
    Output
    [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 │ 22608 │ 0s │ 0 │ online │ 0% │ 30.3mb │ sammy │ disabled │ └─────┴───────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘

    애플리케이션이 충돌하거나 종료되면 PM2에서 실행 중인 애플리케이션이 자동으로 다시 시작됩니다. 다음 하위 명령을 실행하여 시작 시 Strapi 인스턴스를 시작할 수 있습니다.

    1. pm2 startup
    Output
    [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 sammy --hp /home/sammy

    이는 서버가 부팅될 때 PM2 및 해당 관리 프로세스를 실행하는 시작 스크립트를 생성 및 구성합니다.

    다음으로 sammy 대신 사용자 이름을 사용하여 출력에 제공된 명령을 복사하고 실행합니다.

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

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

    1. pm2 save

    이제 PM2 서비스가 서버에서 실행됩니다. http://your_domain으로 다시 이동하면 이제 Strapi가 프로덕션 모드에서 실행되고 있음을 알 수 있습니다.

    PM2가 백그라운드에서 서버를 실행하면 Strapi 인스턴스 보안을 완료할 수 있습니다.

    4단계 - Let's Encrypt로 Strapi 보안

    Strapi 랜딩 페이지를 보기 위해 도메인으로 이동했을 때 알 수 있듯이 https:// 대신 http://로 표시된 URL은 보안되지 않은 연결입니다.

    다음 명령을 입력하여 Let’s Encrypt로 Strapi 인스턴스를 보호하십시오.

    1. sudo snap install --classic certbot

    certbot을 작성하여 실행할 수 있도록 snap 설치 디렉터리에서 certbot 명령을 경로에 연결합니다.

    1. sudo ln -s /snap/bin/certbot /usr/bin/certbot

    다음으로 HTTPS 트래픽과 Nginx Full 프로필을 허용합니다.

    1. sudo ufw allow 'Nginx Full'

    중복 Nginx HTTP 프로필 허용량을 삭제합니다.

    1. sudo ufw delete allow 'Nginx HTTP'

    그런 다음 Nginx 플러그인을 사용하여 도메인 주소를 삽입하여 인증서를 얻습니다.

    1. sudo certbot --nginx -d your_domain -d www.your_domain

    명령을 실행할 때 이메일 주소를 입력하고 서비스 약관에 동의하라는 메시지가 표시됩니다. 이메일 목록을 선택하거나 선택 해제할 수도 있습니다. 이렇게 하면 프로세스가 성공했으며 인증서가 저장된 위치를 알려주는 메시지가 나타납니다.

    Output
    . . . Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem This certificate expires on 2023-02-05. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. Deploying certificate Successfully deployed certificate for your_domain to /etc/nginx/sites-enabled/your_domain Successfully deployed certificate for www.your_domain /etc/nginx/sites-enabled/your_domain Congratulations! You have successfully enabled HTTPS on https://your_domain and https://www.your_domain . . .

    http://your_domain으로 이동합니다. 사이트의 HTTPS 버전으로 자동 리디렉션됩니다. Strapi가 프로덕션 모드에서 실행되고 있음에도 유의하십시오.

    이제 https://your_domain/admin으로 이동하여 Strapi 관리자 계정을 만들 수 있습니다.

    새 자격 증명을 입력한 후 관리 대시보드에 들어갈 수 있습니다.

    대시보드에서 Strapi에서 콘텐츠 생성을 시작할 수 있습니다.

    결론

    이 자습서에서는 PostgreSQL 데이터베이스를 사용하여 Strapi용 프로덕션 환경을 설정합니다. 또한 Nginx 리버스 프록시 뒤에서 Strapi 애플리케이션을 제공하고 PM2 프로세스 관리자를 사용하여 서버를 가동 및 실행했습니다.

    Strapi 서버를 설정한 후 Strapi 관리 대시보드를 사용하여 콘텐츠 생성을 시작할 수 있습니다. Strapi의 공식 문서에서 Strapi 애플리케이션 설정 및 구성에 대해 자세히 알아볼 수 있습니다.