CMS 설치 · 9 min read · Oct 19, 2025
우분투 22.04에 Strapi CMS 설치하는 방법

Strapi는 JavaScript로 구축된 오픈 소스 헤드리스 콘텐츠 관리 시스템(CMS)입니다. 다른 헤드리스 CMS와 마찬가지로 Strapi는 기본적으로 프론트엔드가 제공되지 않습니다. API를 사용하여 프론트엔드를 제공하며, React 및 Next.js와 같은 인기 있는 프레임워크를 사용하여 웹사이트를 구축할 수 있습니다. 플러그인 시스템을 기반으로 하는 Strapi는 관리 패널과 API가 확장 가능한 유연한 CMS이며, 모든 부분이 사용자 정의 가능하여 다양한 사용 사례에 맞출 수 있습니다. Strapi는 또한 관리자가 세부적으로 접근할 수 있는 내용을 관리할 수 있는 내장 사용자 시스템을 제공합니다.
이 튜토리얼에서는 Nginx를 리버스 프록시 서버로 사용하여 우분투 22.04 서버에 Strapi CMS의 커뮤니티 버전을 설치하는 방법을 배웁니다.
전제 조건
- 우분투 22.04를 실행하는 서버.
- sudo 권한이 있는 비루트 사용자.
strapi.example.com과 같은 완전한 도메인 이름(FQDN).- 모든 것이 업데이트되었는지 확인합니다.
$ sudo apt update $ sudo apt upgrade - 시스템에 필요한 몇 가지 패키지.
$ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y이러한 패키지 중 일부는 이미 시스템에 설치되어 있을 수 있습니다.
1단계 - 방화벽 구성
첫 번째 단계는 방화벽을 구성하는 것입니다. 우분투는 기본적으로 ufw(간단한 방화벽)를 제공합니다.
방화벽이 실행 중인지 확인합니다.
$ sudo ufw status
다음과 같은 출력이 표시되어야 합니다.
상태: 비활성
SSH 포트를 허용하여 방화벽이 활성화될 때 현재 연결이 끊어지지 않도록 합니다.
$ sudo ufw allow OpenSSH
HTTP 및 HTTPS 포트도 허용합니다.
$ sudo ufw allow http
$ sudo ufw allow https
방화벽을 활성화합니다.
$ sudo ufw enable
명령이 기존 ssh 연결을 방해할 수 있습니다. 작업을 진행하시겠습니까? (y|n)? y
방화벽이 활성화되었으며 시스템 시작 시 활성화됩니다.
방화벽의 상태를 다시 확인합니다.
$ sudo ufw status
유사한 출력을 볼 수 있어야 합니다.
상태: 활성
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 이상에서 작동합니다. 우분투 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 설치
우분투 22.04는 구식인 Node v12를 제공합니다. 이 튜토리얼을 작성하는 시점에서 최신 LTS 버전인 v18을 설치할 것입니다.
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 create-strapi-app@latest howtoforge-project
설치할 패키지가 필요합니다:
[email protected]
계속 진행해도 괜찮습니까? (y) y
설치 진행을 위해 y를 입력합니다. 다음으로 설치 유형을 선택하라는 메시지가 표시됩니다. 진행을 위해 사용자 정의를 선택하고 다음과 같이 질문에 답합니다.
? 설치 유형 선택 사용자 정의 (수동 설정)
? 선호하는 언어 선택 JavaScript
? 기본 데이터베이스 클라이언트 선택 postgres
? 데이터베이스 이름: strapidb
? 호스트: 127.0.0.1
? 포트: 5432
? 사용자 이름: strapiuser
? 비밀번호: Your_Password
? SSL 연결 활성화: 아니요
요구 사항에 따라 Strapi의 언어로 TypeScript 또는 JavaScript 중 하나를 선택할 수 있습니다.
설치가 완료되면 Strapi 프로젝트를 구축할 준비가 완료됩니다.
프로젝트 디렉토리로 전환합니다.
$ cd howtoforge-project
Strapi 관리 UI를 포함하여 프로젝트를 빌드하려면 다음 명령을 실행합니다.
$ NODE_ENV=production npm run build
다음 명령을 사용하여 Strapi 서버를 시작합니다.
$ node ~/howtoforge-project/node_modules/.bin/strapi start
응용 프로그램은 URL http://에서 볼 수 있어야 합니다. 그러나 먼저 방화벽에서 포트를 열어야 합니다.
$ sudo ufw allow 1337
URL을 열면 다음 화면이 표시됩니다.

터미널에서 Ctrl + C를 눌러 서버를 중지합니다. 방화벽 규칙을 삭제해야 합니다. 필요하지 않기 때문입니다.
$ sudo ufw delete allow 1337
5단계 - PM2 설치 및 구성
서버를 수동으로 시작하는 대신 PM2(프로세스 관리자 2)를 사용하여 프로세스를 관리하고 시스템d 서비스를 생성할 수 있습니다.
홈 디렉토리로 전환합니다.
$ cd ~
PM2를 설치합니다.
$ sudo npm install pm2@latest -g
PM2 구성 파일을 생성하고 편집을 위해 엽니다.
$ sudo nano ecosystem.config.js
다음 내용을 파일에 붙여넣습니다. PostgreSQL 자격 증명과 함께 올바른 디렉토리 이름을 입력해야 합니다.
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는 Node.js 애플리케이션을 위한 프로덕션 프로세스 관리자입니다
내장된 로드 밸런서와 함께.
모든 애플리케이션 시작 및 데몬화:
$ pm2 start app.js
api.js의 4개 인스턴스 로드 밸런싱:
$ pm2 start api.js -i 4
프로덕션에서 모니터링:
$ pm2 monitor
서버 재시작 시 pm2 자동 부팅:
$ pm2 startup
더 알아보려면:
http://pm2.io/
-------------
[PM2] PM2 데몬을 pm2_home=/home/navjot/.pm2로 생성 중
[PM2] PM2가 성공적으로 데몬화되었습니다
[PM2][WARN] 애플리케이션 strapi가 실행되고 있지 않음, 시작 중...
[PM2] 앱 [strapi]가 시작되었습니다 (1 인스턴스)
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? 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에서 실행되는 애플리케이션은 충돌하거나 종료되면 자동으로 다시 시작됩니다.
다음 명령을 사용하여 시작 시스템d 스크립트를 생성합니다.
$ pm2 startup
다음과 같은 출력을 받게 됩니다.
[PM2] Init System 발견: systemd
[PM2] 시작 스크립트를 설정하려면 다음 명령을 복사/붙여넣기 하십시오:
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 설치
우분투 22.04는 구버전의 Nginx를 제공합니다. 최신 버전을 설치하려면 공식 Nginx 리포지토리를 다운로드해야 합니다.
Nginx의 서명 키를 가져옵니다.
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Nginx의 안정적인 버전에 대한 리포지토리를 추가합니다.
$ 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을 설치해야 합니다. Ubuntu의 리포지토리를 사용하여 Certbot을 설치하거나 Snapd 도구를 사용하여 최신 버전을 가져올 수 있습니다. 우리는 Snapd 버전을 사용할 것입니다.
우분투 22.04는 기본적으로 Snapd가 설치되어 있습니다. 다음 명령을 실행하여 Snapd 버전이 최신인지 확인합니다. Snapd 버전이 최신인지 확인합니다.
$ sudo snap install core
$ sudo snap refresh core
Certbot을 설치합니다.
$ sudo snap install --classic certbot
다음 명령을 사용하여 Certbot 명령이 /usr/bin 디렉토리에서 실행되도록 심볼릭 링크를 생성합니다.
$ 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 [email protected] -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 {
# 모든 http 요청을 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 구성
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 스테이플링 ---
# ssl_certificate의 URL에서 OCSP 레코드를 가져와 캐시합니다.
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: /etc/nginx/nginx.conf 구문이 올바릅니다.
ginx: /etc/nginx/nginx.conf 테스트가 성공했습니다.
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 버전으로 업그레이드합니다. Strapi의 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 설치가 업그레이드되어 실행되고 있습니다.
결론
이로써 우분투 22.04 서버에 Strapi CMS와 Nginx를 리버스 프록시 서버로 설치하는 튜토리얼이 마무리되었습니다. 질문이 있으시면 아래 댓글로 남겨주세요.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.