CMS 설치 · 15 min read · Oct 23, 2025

Debian 12에 Craft CMS 설치하는 방법

Craft CMS는 모든 종류의 웹사이트를 만들기 위한 오픈 소스 콘텐츠 관리 시스템입니다. 보안성과 확장성이 뛰어난 CMS로, 광범위한 플러그인 생태계와 고품질의 무료 및 유료 플러그인을 제공합니다. 콘텐츠 생성 및 관리 작업을 위한 직관적이고 사용자 친화적인 제어판을 갖추고 있습니다. Yii PHP 프레임워크를 기반으로 구축되었으며, Twig 템플릿 엔진이 템플릿 시스템을 지원합니다. MySQL 및 PostgreSQL 데이터베이스와 함께 작동할 수 있으며, Redis 데이터베이스를 캐싱 및 세션 저장소로 사용합니다.

이 튜토리얼에서는 Debian 12 서버에 Craft CMS를 설치하는 방법을 배우게 됩니다. 또한 Redis를 활성화하여 함께 작동하는 방법과 Craft CMS를 사용하여 만든 사이트를 백업하고 복원하는 방법도 배웁니다.

필수 조건

  • 최소 1GB의 RAM을 갖춘 Debian 12를 실행하는 서버.
  • sudo 권한이 있는 비루트 사용자.
  • 간단한 방화벽(UFW)이 활성화되어 실행 중입니다.
  • 서버를 가리키는 craftcms.example.com과 같은 완전한 도메인 이름(FQDN).
  • Amazon SES 또는 Mailgun과 같은 이메일 서비스의 SMTP 계정.
  • 모든 것이 업데이트되어 있습니다. $ sudo apt update && sudo apt upgrade
  • 튜토리얼과 Craft CMS가 실행되기 위해 필요한 몇 가지 필수 패키지가 필요합니다. 이 중 일부는 이미 서버에 있을 수 있습니다. $ sudo apt install curl wget nano software-properties-common dirmngr apt-transport-https ca-certificates lsb-release debian-archive-keyring gnupg2 ufw unzip -y

1단계 - 방화벽 구성

패키지를 설치하기 전에 첫 번째 단계는 HTTP 및 HTTPS 연결을 허용하도록 방화벽을 구성하는 것입니다.

방화벽 상태를 확인합니다.

$ sudo ufw status

다음과 같은 내용이 표시되어야 합니다.

상태: 활성

허용된 액션
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

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

$ sudo ufw allow http
$ sudo ufw allow https

확인을 위해 상태를 다시 확인합니다.

$ sudo ufw status
상태: 활성

허용된 액션
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

2단계 - Nginx 설치

Debian 12는 이전 버전의 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] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

시스템 저장소를 업데이트합니다.

$ sudo apt update

Nginx를 설치합니다.

$ sudo apt install nginx

설치를 확인합니다. Debian 시스템에서는 다음 명령이 sudo와 함께만 작동합니다.

$ sudo nginx -v
nginx version: nginx/1.24.0

Nginx 서버를 시작합니다.

$ sudo systemctl start nginx

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

$ sudo systemctl status nginx
? nginx.service - nginx - 고성능 웹 서버
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
     Active: active (running) since Fri 2023-12-01 09:46:46 UTC; 18s ago
       Docs: https://nginx.org/en/docs/
    Process: 39483 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 39484 (nginx)
      Tasks: 2 (limit: 2315)
     Memory: 1.7M
        CPU: 6ms
     CGroup: /system.slice/nginx.service
             ??39484 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??39485 "nginx: worker process"

3단계 - PHP 및 확장 설치

Debian 12는 기본적으로 PHP 8.2를 포함하고 있습니다. 다음 명령을 실행하여 Craft CMS에 필요한 확장과 함께 설치할 수 있습니다.

$ sudo apt install php php-cli php-common php-json php-gmp php-fpm php-xmlrpc php-bcmath php-imagick php-curl php-zip php-gd php-mysql php-xml php-mbstring php-xmlrpc php-intl php-pgsql

최신 버전의 PHP를 항상 유지하거나 여러 버전의 PHP를 설치하려면 Ondrej의 PHP 저장소를 추가합니다.

먼저, Sury의 repo PHP GPG 키를 가져옵니다.

$ sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg

Ondrej Sury의 PHP 저장소를 추가합니다.

$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'

시스템 저장소 목록을 업데이트합니다.

$ sudo apt update

아마도 보류 중인 업그레이드에 대한 정보를 받을 것입니다. 이를 실행합니다.

$ sudo apt upgrade

PHP 및 그 확장을 설치합니다.

$ sudo apt install php8.2 php8.2-cli php8.2-common php8.2-gmp php8.2-fpm php8.2-xmlrpc php8.2-bcmath php8.2-imagick php8.2-curl php8.2-zip php8.2-gd php8.2-mysql php8.2-xml php8.2-mbstring php8.2-xmlrpc php8.2-intl php8.2-pgsql

설치된 PHP 버전을 확인합니다.

$ php --version
PHP 8.2.13 (cli) (built: Nov 24 2023 13:10:42) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.13, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.13, Copyright (c), by Zend Technologies

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

$ sudo systemctl status php8.2-fpm
? php8.2-fpm.service - PHP 8.2 FastCGI 프로세스 관리자
     Loaded: loaded (/lib/systemd/system/php8.2-fpm.service; enabled; preset: enabled)
     Active: active (running) since Fri 2023-12-01 10:29:53 UTC; 34min ago
       Docs: man:php-fpm8.2(8)
    Process: 65825 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/8.2/fpm/pool.d/www.conf 82 (code=exited, status=0/SUCCESS)
   Main PID: 65821 (php-fpm8.2)
     Status: "활성 프로세스: 0, 유휴: 3, 요청: 208, 느림: 0, 트래픽: 0.2req/sec"
      Tasks: 4 (limit: 2315)
     Memory: 83.4M
        CPU: 6.456s
     CGroup: /system.slice/php8.2-fpm.service
             ??65821 "php-fpm: master process (/etc/php/8.2/fpm/php-fpm.conf)"
             ??65823 "php-fpm: pool www"
             ??65824 "php-fpm: pool www"
             ??65843 "php-fpm: pool www"

4단계 - PHP-FPM 구성

php.ini를 편집하기 위해 엽니다.

$ sudo nano /etc/php/8.2/fpm/php.ini

파일 업로드 크기를 설정하려면 upload_max_filesizepost_max_size 변수의 값을 변경합니다. 이 값은 Craft CMS에 업로드할 수 있는 파일 크기를 결정합니다. 우리의 목적을 위해 128MB로 설정하고 있습니다. 원하는 대로 설정할 수 있습니다.

$ sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 128M/' /etc/php/8.2/fpm/php.ini
$ sudo sed -i 's/post_max_size = 8M/post_max_size = 128M/' /etc/php/8.2/fpm/php.ini

서버 리소스 및 요구 사항에 따라 PHP의 메모리 제한을 구성합니다.

$ sudo sed -i 's/memory_limit = 128M/memory_limit = 256M/' /etc/php/8.2/fpm/php.ini

/etc/php/8.2/fpm/pool.d/www.conf 파일을 엽니다.

$ sudo nano /etc/php/8.2/fpm/pool.d/www.conf

PHP 프로세스의 Unix 사용자/그룹을 nginx로 설정해야 합니다. 파일에서 user=www-datagroup=www-data 줄을 찾아 nginx로 변경합니다.

...
; 프로세스의 Unix 사용자/그룹
; 주의: 사용자는 필수입니다. 그룹이 설정되지 않으면 기본 사용자의 그룹이 사용됩니다.
;       사용됩니다.
user = nginx
group = nginx
...

또한 파일에서 listen.owner=www-datalisten.group=www-data 줄을 찾아 nginx로 변경합니다.

listen.owner = nginx
listen.group = nginx

Ctrl + X를 눌러 파일을 저장하고, 프롬프트가 나타나면 Y를 입력합니다.

PHP-fpm 프로세스를 재시작합니다. PHP 서비스를 재시작하기 전에 Nginx가 설치되어 있는지 확인하십시오. 그렇지 않으면 nginx 그룹을 찾을 수 없기 때문에 실패합니다.

$ sudo systemctl restart php8.2-fpm

5단계 - Composer 설치

Composer는 PHP의 종속성 관리자로 작동합니다. 또한 Craft CMS를 지원하는 Laravel PHP 프레임워크의 종속성 관리자가 됩니다.

Composer 설치 스크립트를 다운로드합니다.

$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

다운로드한 설치 프로그램을 확인합니다.

$ php -r "if (hash_file('sha384', 'composer-setup.php') === 'e21205b207c3ff031906575712edab6f13eb0b361f2085f1f1237b7126d785e826a450292b6cfd1d64d92e6563bbde02') { echo '설치 프로그램 확인됨'; } else { echo '설치 프로그램 손상됨'; unlink('composer-setup.php'); } echo PHP_EOL;"

다음과 같은 출력을 받게 됩니다.

설치 프로그램 확인됨

최신 버전의 Composer를 다운로드하기 위해 설치 스크립트를 실행합니다.

$ php composer-setup.php

설치 스크립트를 제거합니다.

$ php -r "unlink('composer-setup.php');"

다운로드한 바이너리 파일을 /usr/local/bin 디렉토리로 이동합니다.

$ sudo mv composer.phar /usr/local/bin/composer

설치를 확인합니다.

$ composer --version
Composer version 2.6.5 2023-10-06 10:11:52

6단계 - PostgreSQL 설치 및 구성

Debian 12는 기본적으로 PostgreSQL 15를 포함하고 있습니다. 대신 PostgreSQL 16을 사용할 것입니다.

다음 명령을 실행하여 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 패키지에는 몇 가지 추가 유틸리티가 포함되어 있습니다.

버전을 확인합니다.

$ psql --version
psql (PostgreSQL) 16.1 (Debian 16.1-1.pgdg120+1)

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

$ sudo systemctl status postgresql
? postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; preset: enabled)
     Active: active (exited) since Wed 2023-11-29 05:54:03 UTC; 11s ago
   Main PID: 20170 (code=exited, status=0/SUCCESS)
        CPU: 1ms

Nov 29 05:54:03 craftcms systemd[1]: Starting postgresql.service - PostgreSQL RDBMS...
Nov 29 05:54:03 craftcms systemd[1]: Finished postgresql.service - PostgreSQL RDBMS.

서비스가 기본적으로 활성화되어 실행 중임을 확인할 수 있습니다.

PostgreSQL 셸을 시작합니다.

$ sudo -i -u postgres psql

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

postgres=# CREATE DATABASE craftcms;

Craft CMS 사용자를 생성하고 강력한 비밀번호를 선택합니다.

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

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

postgres-# ALTER DATABASE craftcms OWNER TO craftuser;

Craft CMS 사용자에게 데이터베이스에 대한 모든 권한을 부여합니다.

postgres-# GRANT ALL PRIVILEGES ON DATABASE craftcms TO craftuser;

셸을 종료합니다.

postgres-# \q

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

$ psql --username craftuser --password --host localhost craftcms
Password:
psql (16.1 (Debian 16.1-1.pgdg120+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.

craftcms=>

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

7단계 - Redis 설치 및 구성

Debian 12는 기본적으로 Redis 7.0을 포함하고 있으며, 이것을 사용할 것입니다. Redis를 설치합니다.

$ sudo apt install redis

버전을 확인합니다.

$ redis-server --version
Redis server v=7.0.11 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=c4e7f6bf175a885b

최신 버전을 설치하려면 Redis의 공식 저장소를 사용하여 다음 명령을 실행할 수 있습니다.

$ curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
$ echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
$ sudo apt update
$ sudo apt install redis

다음 단계는 Redis 서버에 인증을 추가하는 것입니다. Redis v6.0부터 인증을 추가하는 가장 좋은 방법은 ACL(Access Control Lists)을 사용하는 것입니다. /etc/redis/redis.conf 파일을 편집하기 위해 엽니다.

$ sudo nano /etc/redis/redis.conf

# aclfile /etc/redis/users.acl 항목을 찾아 해시(#)를 제거하여 주석을 해제합니다.

aclfile /etc/redis/users.acl

Ctrl + X를 눌러 파일을 저장하고, 프롬프트가 나타나면 Y를 입력합니다.

다음으로 /etc/redis/users.acl 파일을 생성하고 편집하기 위해 엽니다.

$ sudo nano /etc/redis/users.acl

다음 줄을 추가합니다.

user navjot on +@all ~* >yourpassword

Ctrl + X를 눌러 파일을 저장하고, 프롬프트가 나타나면 Y를 입력합니다.

Redis 서버를 재시작하여 변경 사항을 적용합니다.

$ sudo systemctl restart redis

Redis 셸을 엽니다.

$ redis-cli

PING 명령을 사용합니다. 인증 오류가 발생합니다.

127.0.0.1:6379> PING
(error) NOAUTH Authentication required.

AUTH 명령을 사용하여 로그인합니다.

127.0.0.1:6379> AUTH navjot yourpassword
OK

다시 PING 명령을 사용합니다.

127.0.0.1:6379> PING
OK

셸을 종료합니다.

127.0.0.1:6379> exit

PHP Redis 확장도 설치해야 합니다.

$ sudo apt install php-redis

8단계 - Craft CMS 설치

Craft CMS를 설치하기 전에 다음 명령을 사용하여 실행할 수 있는 모든 서버 요구 사항을 확인할 수 있습니다.

$ curl -Lsf https://raw.githubusercontent.com/craftcms/server-check/HEAD/check.sh | bash

다음과 같은 출력을 받게 됩니다.

Craft 서버 검사 실행 중...

Craft CMS 요구 사항 검사기

이 스크립트는 웹 서버 구성이 Craft CMS 설치를 실행하기 위한 요구 사항을 충족하는지 확인합니다.
서버가 올바른 버전의 PHP를 실행하고 있는지, 적절한 PHP 확장이 로드되었는지, php.ini 파일 설정이 올바른지 확인합니다.

결과:
--------

PHP 8.2+: OK

BCMath 확장: OK

ctype 확장: OK

cURL 확장: OK

DOM 확장: OK

Fileinfo 확장: OK

GD 확장 또는 ImageMagick 확장: OK

iconv 확장: OK

Intl 확장: OK

JSON 확장: OK

다중 바이트 문자열 확장(함수 오버로딩 비활성화): OK

OPcache 확장(주석 저장): OK

OpenSSL 확장: OK

PCRE 확장(UTF-8 지원): OK

PDO 확장: OK

Reflection 확장: OK

SPL 확장: OK

Zip 확장: OK

ignore_user_abort(): OK

password_hash(): OK

proc_close(): OK

proc_get_status(): OK

proc_open(): OK

proc_terminate(): OK

allow_url_fopen: OK

ini_set 호출: OK

메모리 제한: OK

------------------------------------------
오류: 0   경고: 0   총 검사: 27

모든 것이 괜찮다면 진행할 수 있습니다. 웹 루트 디렉토리를 생성합니다.

$ sudo mkdir /var/www/html/craftcms -p

현재 로그인한 사용자를 이 디렉토리의 소유자로 설정합니다.

$ sudo chown -R $USER:$USER /var/www/html/craftcms

디렉토리로 이동합니다.

$ cd /var/www/html/craftcms

Composer를 사용하여 Craft CMS를 다운로드하고 설치합니다. 명령 끝의 점(.)은 현재 디렉토리에서 설치가 수행되어야 함을 의미합니다.

$ composer create-project craftcms/craft .

설치 중에 데이터베이스, 관리자 계정, 사이트 URL 및 언어와 관련된 여러 세부정보를 요청받게 됩니다. 아래와 같이 표시됩니다.

> @php craft setup/welcome

   ______ .______          ___       _______ .___________.
  /      ||   _  \        /   \     |   ____||           |
 |  ,----'|  |_)  |      /  ^  \    |  |__   `---|  |----`
 |  |     |      /      /  /_\  \   |   __|      |  |
 |  `----.|  |\  \----./  _____  \  |  |         |  |
  \______|| _| `._____/__/     \__\ |__|         |__|

     A       N   E   W       I   N   S   T   A   L   L
               ______ .___  ___.      _______.
              /      ||   \/   |     /       |
             |  ,----'|  \  /  |    |   (----`
             |  |     |  |\/|  |     \   \
             |  `----.|  |  |  | .----)   |
              \______||__|  |__| |_______|


애플리케이션 ID 생성 중 ... 완료 (CraftCMS--923f03f1-9bea-4c3d-a7ca-1466645ce75d)
보안 키 생성 중 ... 완료 (iMdcUi6wQyf9MshEda__vZcCwILbclxz)

Craft CMS에 오신 것을 환영합니다!
설정을 시작할 준비가 되셨습니까? (yes|no) [no]:yes
어떤 데이터베이스 드라이버를 사용하고 있습니까? (mysql 또는 pgsql) [mysql] pgsql
데이터베이스 서버 이름 또는 IP 주소: [127.0.0.1]
데이터베이스 포트: [5432]
데이터베이스 사용자 이름: [root] craftuser
데이터베이스 비밀번호:
데이터베이스 이름: craftcms
데이터베이스 테이블 접두사:
데이터베이스 자격 증명 테스트 중 ... 성공!
기본 스키마 "public" 사용 중.
데이터베이스 자격 증명을 .env 파일에 저장 중 ... 완료

지금 Craft를 설치하시겠습니까? (yes|no) [yes]:yes

사용자 이름: [admin] navjot
이메일: [email protected]
비밀번호:
확인:
사이트 이름: Howtoforge Tutorials
사이트 URL: https://craftcms.example.com
사이트 언어: [en-US]
*** Craft 설치 중

Redis를 Craft CMS와 함께 작동하게 만들기

yiisoft/yii2-redis 패키지를 설치합니다.

$ composer require --prefer-dist yiisoft/yii2-redis:"~2.0.0"

/var/www/html/craftcms/config/app.php 파일을 편집하기 위해 엽니다.

$ nano config/app.php

다음과 같은 내용을 보게 됩니다.

use craft\helpers\App;

return [
    'id' => App::env('CRAFT_APP_ID') ?: 'CraftCMS',
];

다음과 같이 변경합니다.

use craft\helpers\App;

return [
    'id' => App::env('CRAFT_APP_ID') ?: 'CraftCMS',
    'components' => [
        'cache' => function() {
            $config = [
                'class' => yii\redis\Cache::class,
                'keyPrefix' => Craft::$app->id,
                'defaultDuration' => Craft::$app->config->general->cacheDuration,

                // 전체 Redis 연결 세부정보:
                'redis' => [
                    'hostname' => App::env('REDIS_HOSTNAME') ?: 'localhost',
                    'port' => 6379,
                    'username' => App::env('REDIS_USERNAME') ?: null,
                    'password' => App::env('REDIS_PASSWORD') ?: null,
                ],
            ];

            return Craft::createObject($config);
        },
    ],
];

Ctrl + X를 눌러 파일을 저장하고, 프롬프트가 나타나면 Y를 입력합니다. 이렇게 하면 Craft CMS의 캐시 저장소로 Redis가 활성화됩니다. Redis를 PHP 세션 데이터, 작업 큐 및 뮤텍스 드라이버를 저장하는 데 사용할 수도 있습니다. 이에 대한 구성은 Craft CMS 문서에서 확인할 수 있습니다.

또한 .env 파일에 Redis 구성을 추가해야 합니다.

$ nano .env

파일 끝에 다음 코드를 추가합니다.

REDIS_HOSTNAME=localhost
REDIS_USERNAME=navjot
REDIS_PASSWORD=yourpassword

위와 같이 옵션을 선택합니다. 완료되면 디렉토리의 그룹을 nginx로 변경합니다. 이렇게 하면 현재 로그인한 사용자와 Nginx가 Craft CMS에 접근할 수 있습니다.

$ sudo chgrp -R nginx /var/www/html/craftcms

nginx 그룹에 디렉토리에 대한 쓰기 권한을 부여합니다.

$ sudo chmod -R g+w /var/www/html/craftcms

이후로는 다시 권한을 변경할 필요가 없으며 루트 권한 없이 모든 작업을 수행할 수 있습니다.

9단계 - SSL 설치

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

Debian 12는 Snapd가 설치되어 있지 않습니다. Snapd 패키지를 설치합니다.

$ sudo apt install 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

Certbot이 제대로 작동하는지 확인합니다.

$ certbot --version
certbot 2.7.4

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

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

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

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

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

Certbot 갱신 스케줄러 서비스를 확인합니다.

$ sudo systemctl list-timers

snap.certbot.renew.service가 실행될 서비스 중 하나로 표시됩니다.

NEXT                        LEFT         LAST                        PASSED     UNIT                      ACTIVATES     
---------------------------------------------------------------------------------------------------------------------------               
Fri 2023-12-01 10:39:00 UTC 12min left   Fri 2023-12-01 10:09:01 UTC 17min ago  phpsessionclean.timer    phpsessionclean.service
Fri 2023-12-01 17:01:47 UTC 6h left      Thu 2023-11-30 17:01:47 UTC 17h ago    systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Fri 2023-12-01 18:34:00 UTC 8h left      -                           -          snap.certbot.renew.timer snap.certbot.renew.service

SSL 갱신이 잘 작동하는지 확인하기 위해 프로세스를 드라이 런으로 실행합니다.

$ sudo certbot renew --dry-run

오류가 없으면 모든 준비가 완료된 것입니다. 인증서는 자동으로 갱신됩니다.

10단계 - 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/craftcms.conf 파일을 생성하고 편집하기 위해 엽니다.

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

다음 코드를 붙여넣습니다. craftcms.example.com을 도메인 이름으로 바꾸십시오. client_max_body_size 값이 PHP를 구성할 때 설정한 128MB로 설정되어 있는지 확인합니다.

server {

    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name craftcms.example.com;
    root /var/www/html/craftcms/web;

    index index.php;
    client_max_body_size 128M;

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

    ssl_certificate      /etc/letsencrypt/live/craftcms.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/craftcms.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/craftcms.example.com/chain.pem;

    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    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 / {
        try_files $uri/index.html $uri $uri/ /index.php?$query_string;
    }

    location ~ [^/]\.php(/|$) {
        try_files $uri $uri/ /index.php?$query_string;
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_keep_conn on;
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param HTTP_PROXY "";
    }
}
# HTTPS 강제 적용
server {
    listen 80;
    listen [::]:80;
    server_name  craftcms.example.com;
    return 301   https://$host$request_uri;
}

Ctrl + X를 눌러 파일을 저장하고, 프롬프트가 나타나면 Y를 입력합니다.

Nginx 구성을 확인합니다.

$ sudo nginx -t

Nginx 서버를 재시작합니다.

$ sudo systemctl restart nginx

11단계 - Craft CMS 접근

브라우저에서 https://craftcms.example.com URL을 열면 다음 페이지로 이동합니다.

Craft CMS 홈페이지

관리 페이지에 접근하려면 https://craftcms.example.com/admin URL을 방문하면 로그인 페이지로 이동합니다.

Craft CMS 로그인 페이지

관리 자격 증명을 입력하고 로그인 버튼을 클릭하여 로그인합니다. 다음 대시보드로 이동합니다.

Craft CMS 관리자 대시보드

이제 Craft CMS를 사용하여 웹사이트를 구축할 수 있습니다.

12단계 - Craft CMS 백업 및 복원

관리 패널 내에서 관리 대시보드 >> 유틸리티 >> 데이터베이스 백업을 방문하여 Craft CMS의 데이터베이스를 백업할 수 있습니다.

Craft CMS 데이터베이스 백업

백업 버튼을 클릭하여 데이터베이스 백업을 다운로드합니다. 터미널을 사용하여 백업을 생성할 수도 있습니다. 다음 명령을 실행하여 백업을 생성합니다. 프롬프트가 나타나면 비밀번호를 입력합니다.

$ mysqldump -u craftcmsuser -p craftcms > ~/craftcms.database.sql

Craft CMS 명령줄 유틸리티를 사용하여 데이터베이스 백업을 생성할 수도 있습니다. 이 유틸리티의 장점은 데이터베이스 자격 증명을 전달할 필요가 없다는 것입니다. Craft CMS 명령 콘솔 유틸리티에 대해 자세히 알아보세요.

$ cd /var/www/html/craftcms
$ php craft db/backup ~/
백업 중 ... 완료
백업 파일: /home/navjot/howtoforge-tutorials--2023-12-03-065138--v4.5.11.1.sql (200.019 KB)

위 명령에서 위치를 지정하지 않으면 백업 파일은 /var/www/html/craftcms/storage/backups 디렉토리에 작성됩니다.

파일을 백업하려면 /var/www/html/craftcms 폴더 전체를 복사하고 저장합니다.

$ cd /var/www/html
$ tar -zcf ~/craftcms.tar.gz craftcms

새 서버에 복원하려면 파일을 /var/www/html 폴더로 추출합니다.

$ tar -xzf craftcms.tar.gz -C /var/www/html/

새 서버에서 동일한 자격 증명으로 데이터베이스를 생성하고 다음 명령을 사용하여 데이터베이스를 복원합니다. 프롬프트가 나타나면 비밀번호를 입력합니다.

$ mysqlimport -u craftcmsuser -p craftcms craftcms.database.sql

13단계 - Craft CMS 업데이트

Craft CMS를 업데이트하는 방법은 두 가지가 있습니다. 하나는 관리 패널 내에서입니다. 업데이트가 가능할 때 알림을 받게 됩니다. 알림을 클릭하여 업그레이드합니다. Craft CMS는 업데이트를 수행하기 전에 자동으로 데이터베이스를 백업합니다.

터미널을 통해 업데이트할 수도 있습니다.

사용 가능한 모든 업데이트를 확인하려면 다음 명령을 실행합니다.

$ cd /var/www/html/craftcms/
$ php craft update

업데이트가 가능하면 다음 명령을 실행하여 적용합니다.

$ php craft update all

결론

이로써 Debian 12 서버에 Craft CMS 소프트웨어를 설치하는 방법을 배운 튜토리얼이 마무리되었습니다. 질문이 있으시면 아래 댓글로 남겨주세요.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.