웹사이트 검색

Rocky Linux 8에서 Nginx와 함께 Drupal CMS를 설치하는 방법


이 페이지에서

  1. 전제 조건
  2. 저장소 설정
  3. 패키지 종속성 설치
  4. 방화벽 설정\n
  5. MariaDB 서버 설정
  6. PECL 확장 설치: uploadprogress\n
  7. PHP-FPM 구성
  8. Drupal 소스 코드 다운로드
  9. SELinux 설정
  10. Nginx 웹 서버 설정
  11. Drupal 설치 시작
  12. Drupal 설치 완료
  13. 결론

Drupal은 PHP로 작성되고 GNU General Public License에 따라 배포되는 무료 오픈 소스 웹 콘텐츠 관리 시스템입니다. Drupal은 다중 채널 게시를 위한 정교한 API가 포함된 강력한 콘텐츠 관리 도구를 제공합니다.

Drupal은 인터넷에서 가장 많이 사용되는 CMS 중 하나로 인터넷 상위 10,000개 웹사이트 중 최소 14%가 사용하고 있으며 글로벌 엔터프라이즈 산업, 정부, 교육 및 기관 사이트에 사용됩니다. Drupal은 디지털 응용 프로그램과 통합된 확장성이 뛰어난 시스템을 제공하며 다국어 지원을 통해 여러 조직을 위한 다중 사이트를 만드는 데 사용할 수 있습니다.

이 자습서에서는 Rocky Linux 서버에서 LEMP 스택을 사용하여 Drupal CMS(콘텐츠 관리 시스템)를 구성하는 방법을 배웁니다. 또한 SELinux 적용 모드와 방화벽이 활성화된 Rocky Linux에서 Drupal을 시작하고 실행하는 방법을 배웁니다.

전제 조건

이 가이드를 시작하려면 다음 요구 사항이 필요합니다.

  • A Rocky Linux 서버 - 이 예에서는 호스트 이름이 drupal-server인 Rocky Linux 8.x를 사용합니다.\n
  • sudo/root 관리자 권한이 있는 루트가 아닌 사용자.\n
  • Rocky Linux 서버 IP 주소를 가리키는 도메인 이름 - 특히 프로덕션 환경에 있을 때.\n

리포지토리 설정

LEMP 스택(Nginx, MariaDB/MySQL 및 PHP-FPM)은 웹 애플리케이션 호스팅을 위한 오픈 소스 소프트웨어 그룹입니다. 록키 리눅스에서. 대부분의 LEMP 스택 패키지는 타사 리포지토리에서 사용할 수 있습니다.

첫 번째 단계에서는 시스템에 두 개의 리포지토리를 추가하고 활성화합니다. RHEL 기반 운영 체제용 추가 패키지를 제공하는 EPEL 리포지토리와 여러 버전의 PHP 패키지를 제공하는 REMI 리포지토리를 추가합니다.

Rocky Linux 시스템에 EPEL 리포지토리를 추가하려면 다음 명령을 실행하십시오. 확인 메시지가 표시되면 y를 입력하고 ENTER를 누릅니다.

sudo dnf install epel-release

이제 아래 dnf 명령을 실행하여 Rocky Linux 8.4용 REMI 리포지토리를 추가합니다.

sudo dnf install dnf-utils http://rpms.remirepo.net/enterprise/remi-release-8.rpm

y를 입력하고 ENTER를 눌러 진행하고 Remi 저장소를 추가합니다.

마지막으로 아래 dnf 명령을 실행하여 시스템에서 사용 가능한 리포지토리 목록을 확인합니다. 두 개의 추가 리포지토리 EPEL 및 REMI가 Rocky Linux 시스템에 추가된 것을 볼 수 있습니다.

sudo dnf repolist

패키지 종속성 설치

Drupal은 Apache2/httpd, Nginx 또는 IIS Microsoft와 같은 웹 서버와 함께 설치할 수 있는 유연하고 강력한 CMS입니다. 또한 Drupal은 MariaDB/MySQL, PostgreSQL 및 SQLite를 포함한 여러 RDBMS를 지원합니다. Microsoft SQL Server 및 MongoDB와 같은 다른 데이터베이스의 경우 커뮤니티 모듈을 통해 둘 다 사용할 수 있습니다.

이제 Drupal용 LEMP 스택 패키지 종속성을 설치합니다. EPEL 저장소를 통해 Nginx를 설치하고, appstream에서 MariaDB를 설치하고, REMI 저장소에서 PHP 8.1 패키지를 설치합니다.

먼저 아래의 dnf 명령을 통해 REMI 저장소에서 PHP 모듈을 재설정하고 활성화합니다. 이 예에서는 최신 버전의 Drupal에서 지원하는 PHP 8.1용 모듈을 활성화합니다.

sudo dnf module reset php
sudo dnf module enable php:remi-8.1

메시지가 표시되면 y를 입력하여 PHP 8.1 REMI 리포지토리를 확인 및 활성화하고 Enter 키를 눌러 계속 진행합니다.

다음으로 아래의 dnf 명령을 사용하여 기본 LEMP 스택 패키지를 설치합니다.

sudo dnf install nginx mariadb-server php php-fpm php-cli php-devel php-mbstring php-gd php-xml php-curl php-mysqlnd php-pdo php-json php-opcache php-pear php-pecl-apcu php-pecl-crypto

y를 입력하고 확인 메시지가 표시되면 ENTER를 누릅니다.

또한 일부 리포지토리에 대한 GPG 키 추가 확인 메시지가 표시되면 y를 입력합니다.

LEMP 스택 패키지가 설치되면 다음 systemctl 명령을 사용하여 Nginx, MariaDB 및 PHP-FPM 서비스를 시작할 수 있습니다. 또한 모든 서비스가 부팅 시 자동으로 실행되도록 할 수 있습니다.

sudo systemctl start nginx mariadb php-fpm
sudo systemctl enable nginx mariadb php-fpm

이제 다음과 같은 출력이 표시됩니다. 이제 Rocky Linux 시스템에서 LEMP 스택이 실행 중이고 LEMP 스택에 대한 모든 서비스가 활성화되었습니다.

방화벽 설정

Firewalld는 Rocky Linux를 비롯한 RHEL 기반 운영 체제의 기본 방화벽입니다. 특히 프로덕션 수준 환경에서 Drupal 또는 방화벽이 활성화된 웹 응용 프로그램을 실행하는 것이 좋습니다.

이제 클라이언트가 Drupal 설치에 액세스할 수 있도록 HTTP 및 HTTPS 포트를 firewalld에 추가합니다.

아래의 firewall-cmd 명령을 실행하여 HTTP 및 HTTPS 서비스를 firewalld에 추가합니다.

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

이제 방화벽을 다시 로드하여 새로운 변경 사항을 적용하십시오. 그런 다음 방화벽에서 활성화된 서비스 목록을 확인합니다.

sudo firewall-cmd --reload
sudo firewall-cmd --list-services

방화벽에 HTTP 및 HTTPS 서비스를 추가해야 합니다.

MariaDB 서버 설정

이 단계에서는 Drupal에 사용할 MariaDB 데이터베이스 구성을 시작합니다. MariaDB 배포를 보호하는 것으로 시작한 다음 Drupal 설치를 위한 새 데이터베이스와 사용자를 생성합니다.

시작하기 전에 다음 명령을 실행하여 MariaDB 서비스를 확인하고 서비스가 실행 중인지 확인하십시오.

sudo systemctl status mariadb

아래는 MariaDB 서비스가 실행 중일 때의 출력입니다.

그런 다음 MariaDB 서버 배포를 보호하기 위해 다음 명령을 실행합니다. 이 명령줄 mysql_secure_installation은 설치를 보호하는 데 도움이 되는 MariaDB 패키지에서 제공합니다.

sudo mysql_secure_installation

이제 MariaDB 서버 구성과 관련된 몇 가지 질문을 받게 됩니다.

  • 기본 MariaDB 설치에는 비밀번호가 없습니다. 비밀번호를 묻는 메시지가 표시되면 ENTER를 누르세요.\n
  • 이제 Y를 입력하여 MariaDB 루트 암호를 설정합니다. 그런 다음 MariaDB의 새 암호를 입력하고 암호를 반복합니다.\n
  • Y를 입력하여 MariaDB 설치에서 익명 사용자를 제거합니다.\n
  • MariaDB 루트 사용자에 대한 원격 로그인을 비활성화하라는 메시지가 표시되면 Y를 다시 입력합니다.\n
  • MariaDB에서 기본 데이터베이스 테스트를 제거하려면 Y를 입력합니다.\n
  • 마지막으로 Y를 입력하여 테이블 권한을 다시 로드하고 새 변경 사항을 적용합니다.\n

MariaDB 배포를 보호한 후 다음으로 Drupal에 대한 새 데이터베이스 및 사용자를 설정합니다.

아래의 mysql 명령을 사용하여 루트 사용자를 통해 MySQL/MariaDB 셸에 로그인합니다.

sudo mysql -u root -p

다음 쿼리를 실행하여 Drupal에 대한 새 데이터베이스 및 사용자를 만듭니다. 이 예에서는 [email 사용자로 drupaldb 데이터베이스를 생성합니다. 또한 기본 데이터베이스 암호를 변경해야 합니다.

CREATE DATABASE drupaldb;
CREATE USER WITH GRANT OPTION;
FLUSH PRIVILEGES;

그런 다음 다음 쿼리를 실행하여 MariaDB 사용자[email 의 권한이 drupaldb 데이터베이스에 대한 액세스 및 권한을 가지고 있는지 확인합니다.

SHOW GRANTS FOR ;

이제 쿼리 exit 또는 quit을 실행하여 MariaDB 셸에서 로그아웃합니다.

PECL 확장 설치: uploadprogress

uploadprogress는 진행률 표시줄을 표시하기 위해 Drupal에서 사용할 확장입니다. uploadprogress는 PECL(PHP Extension Community Library) 저장소를 통해 설치할 수 있습니다.

이제 PECL 리포지토리에서 uploadprogress 확장을 설치하고 PHP 설치에서 활성화합니다.

시작하려면 다음 명령을 실행하여 시스템에서 pecl 명령을 사용할 수 있는지 확인하십시오. pecl을 사용할 수 있으며 pecl 바이너리 파일의 전체 경로가 표시되어야 합니다.

which pecl

이제 아래의 pecl 명령을 실행하여 uploadprogress 확장 프로그램을 설치합니다.

sudo pecl install uploadprogress

설치가 시작되면 다음과 같은 출력이 표시됩니다.

그런 다음 다음 명령을 실행하여 새 구성 파일 /etc/php.d/uploadprogress.ini을 만들고 uploadprogress 확장을 활성화합니다.

cat <<EOF | sudo tee /etc/php.d/uploadprogress.ini
; configuration for php uploadprogress module
; priority 15
extension=uploadprogress.so
EOF

마지막으로 PHP-FPM 서비스를 다시 시작하여 새로운 변경 사항을 적용합니다. PHP-FPM은 현재 추가 확장 프로그램 uploadprogress가 활성화된 상태로 실행 중입니다.

sudo systemctl restart php-fpm

PHP-FPM 구성

이제 /etc/php.ini 파일을 통해 PHP-FPM의 기본 구성을 설정하고 Drupal에 대한 특정 PHP-FPM 풀을 설정합니다.

다음 nano 편집기를 사용하여 /etc/php.ini 파일을 수정합니다.

sudo nano /etc/php.ini

아래와 같이 기본 구성을 변경합니다. 또한 환경에 맞게 date.timezone 옵션을 변경해야 합니다.

memory_limit = 512M
upload_max_filesize = 60M
max_execution_time = 300
date.timezone = Europe/Stockholm

파일을 저장하고 완료되면 편집기를 종료하십시오.

다음으로 기본 PHP-FPM 풀 구성 /etc/php-fpm.d/www.conf/etc/php-fpm.d/drupal.conf에 복사합니다. . 그런 다음 nano 편집기를 사용하여 새 풀 구성 /etc/php-fpm.d/drupal.conf을 수정합니다.

sudo cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/drupal.conf
sudo nano /etc/php-fpm.d/drupal.conf

기본 이름을 [drupal]으로 변경하고 기본 사용자 및 그룹을 nginx로 변경합니다. 또한 drupal PHP-FPM 풀의 목록 양말 파일을 /run/php-fpm/drupal.sock으로 변경해야 합니다.

[drupal]
user = nginx
group = nginx
listen.owner = nginx
listen.group = nginx
listen = /run/php-fpm/drupal.sock

파일을 저장하고 완료되면 편집기를 종료하십시오.

이제 아래의 systemctl 명령을 통해 PHP-FPM 서비스를 다시 시작하십시오. 그런 다음 PHP-FPM 서비스 상태를 확인합니다.

sudo systemctl restart php-fpm
sudo systemctl status php-fpm

다음과 같은 출력이 표시되어야 합니다. - The PHP-FPM 서비스가 실행 중입니다.

다음으로 다음 명령을 실행하여 새 PHPINFO 파일 /usr/share/nginx/html/info.php을 만듭니다.

cat <<EOF | sudo tee /usr/share/nginx/html/info.php
<?php
phpinfo();
?>
EOF

마지막으로 웹 브라우저를 열고 서버 IP 주소와 /info.php 경로(예: http://192.168.5.100/info.php)를 방문합니다. PHP에 대한 자세한 정보를 얻어야 합니다.

Drupal 소스 코드 다운로드

이제 Drupal 설치를 위한 MariaDB 데이터베이스 서버 및 PHP-FPM 구성이 완료되었습니다. 다음으로 최신 버전의 Drupal을 서버에 다운로드합니다.

먼저 현재 작업 디렉토리를 /tmp로 이동하고 아래와 같이 wget 명령을 통해 최신 버전의 Drupal을 다운로드합니다. 다운로드 프로세스가 완료된 후 drupal.tar.gz 파일이 표시되어야 합니다.

cd /tmp
wget https://www.drupal.org/download-latest/tar.gz -O drupal.tar.gz

그런 다음 tar 명령을 사용하여 drupal.tar.gz 파일을 추출하고 추출된 디렉토리를 /var/www/drupal으로 이동하여 Drupal 설치로 사용합니다. .

tar -xvf drupal.tar.gz
mv drupal-* /var/www/drupal

마지막으로 다음 명령을 실행하여 Drupal 설치 디렉터리 /var/www/drupal의 소유권과 권한을 변경합니다. 소유권은 사용자 및 그룹 nginx여야 Nginx 웹 서버가 Drupal 소스 코드를 읽고 액세스할 수 있습니다. 그리고 권한은 755여야 합니다.

sudo chown -R nginx:nginx /var/www/drupal/
sudo chmod -R 755 /var/www/drupal/

SELinux 설정

Drupal 소스 코드를 다운로드한 후 다음으로 Drupal용 SELinux를 설정합니다. SELinux 관리 도구를 서버에 다운로드하고 Drupal 소스 코드에 대한 레이블 지정과 Nginx에 대한 추가 규칙을 설정합니다.

시스템에서 SELinux를 관리하기 위한 policycoreutils-python-utils 패키지를 설치하려면 아래의 dnf 명령을 실행하십시오.

sudo dnf install policycoreutils-python-utils

메시지가 표시되면 y를 입력하여 설치를 확인하고 Enter 키를 눌러 계속 진행합니다.

다음으로 다음 명령을 실행하여 Drupal 소스 코드에 대한 레이블 지정을 설정합니다.

sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/drupal(/.*)?"
sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/drupal/sites/default/settings.php'
sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/drupal/sites/default/files'

sudo restorecon -Rv /var/www/drupal

다음 명령을 실행하여 Nginx 웹 서버가 특정 서비스에 액세스하도록 허용합니다. Drupal 설치의 경우 Nginx가 네트워킹 및 메일 서비스에 액세스하도록 허용해야 합니다.

sudo setsebool -P httpd_can_sendmail on
sudo setsebool -P httpd_can_network_connect on

이제 Drupal 소스 코드를 다운로드하고 사용자 및 그룹 nginx에 대한 올바른 소유권을 구성했으며 755에 대한 올바른 권한을 구성하고 Drupal용 SELinux를 구성했습니다.

Nginx 웹 서버 설정

이제 MariaDB 데이터베이스 서버 및 PHP-FPM의 일부 구성을 완료했습니다. 또한 Drupal 소스 코드를 다운로드하고 SELinux를 구성했습니다. 다음 단계에서는 도메인에 대한 Nginx 서버 블록을 설정합니다.

시작하기 전에 서버 IP 주소를 가리키는 도메인 이름이 있는지 확인하십시오. 또한 SSL Letsencrypt를 생성했는지 확인하십시오.

다음 nano 편집기를 사용하여 새 Nginx 서버 블록 구성 /etc/nginx/conf.d/drupal.conf을 만듭니다.

sudo nano /etc/nginx/conf.d/drupal.conf

파일에 다음 구성을 추가합니다. 그리고 SSL 인증서의 도메인 이름과 경로를 반드시 변경하십시오. 이 예에서는 http://drupal.hwdomain.io 도메인을 Drupal 설치를 위한 기본 도메인으로 사용합니다.

server {
    listen 80;
    server_name drupal.hwdomain.io;
    return 301 https://$host$request_uri;
}

server {
    listen 443 http2 ssl;
    server_name drupal.hwdomain.io;

    root /var/www/drupal;

    ssl_certificate      /etc/letsencrypt/live/drupal.hwdomain.io/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/drupal.hwdomain.io/privkey.pem;

    access_log /var/log/nginx/drupal.hwdomain.io.access.log;
    error_log /var/log/nginx/drupal.hwdomain.io.error.log;

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location ~ \..*/.*\.php$ {
        return 403;
    }

    location ~ ^/sites/.*/private/ {
        return 403;
    }

    # Block access to scripts in the site files directory
    location ~ ^/sites/[^/]+/files/.*\.php$ {
        deny all;
    }
    location ~ (^|/)\. {
        return 403;
    }

    location / {
        try_files $uri /index.php?$query_string;
    }

    location @rewrite {
        rewrite ^/(.*)$ /index.php?q=$1;
    }
    location ~ /vendor/.*\.php$ {
        deny all;
        return 404;
    }


    location ~ '\.php$|^/update.php' {
        fastcgi_split_path_info ^(.+?\.php)(|/.*)$;
        include fastcgi_params;
        # Block httpoxy attacks. See https://httpoxy.org/.
        fastcgi_param HTTP_PROXY "";
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param QUERY_STRING $query_string;
        fastcgi_intercept_errors on;
        fastcgi_pass unix:/run/php-fpm/drupal.sock;
    }
    location ~ ^/sites/.*/files/styles/ { # For Drupal >= 7
        try_files $uri @rewrite;
    }

    # Handle private files through Drupal. Private file's path can come
    # with a language prefix.
    location ~ ^(/[a-z\-]+)?/system/files/ { # For Drupal >= 7
        try_files $uri /index.php?$query_string;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        try_files $uri @rewrite;
        expires max;
        log_not_found off;
    }
}

파일을 저장하고 완료되면 편집기를 종료하십시오.

이제 다음 명령을 실행하여 Nginx 구성을 확인하십시오. test successful - syntax ok와 같은 출력 메시지가 표시되어야 합니다. 이는 Nginx 구성이 올바르고 오류가 없음을 의미합니다.

sudo nginx -t

다음으로 다음 systemctl 명령을 실행하여 Nginx 서비스를 다시 시작하고 새 서버 블록 구성을 적용합니다.

sudo systemctl restart nginx

Nginx 서비스는 이제 새 서버 블록 구성 /etc/nginx/conf.d/drupal.conf로 실행되어야 합니다. 다음 명령을 실행하여 Nginx 서비스를 확인하고 서비스가 실행 중인지 확인하십시오.

sudo systemctl status nginx

다음과 같은 출력이 표시되어야 합니다. Nginx 서비스가 실행 중입니다.

이제 도메인을 통해 Drupal 설치에 액세스할 수 있습니다.

Drupal 설치 시작

이 시점에서 Drupal에 대한 패키지 종속성 구성을 완료했습니다. 이제 도메인을 통해 Drupal에 액세스할 수 있습니다.

이 단계에서는 Drupal 설치를 시작하고 Drupal에 대한 세부 정보를 설정하고 Drupal의 관리 사용자를 설정합니다.

웹 브라우저를 열고 Drupal 설치의 도메인 이름(예: https://drupal.hwdomain.io/)을 방문합니다. Drupal 설치 페이지가 나타납니다.

Drupal 설치 언어를 선택하거나 기본 영어를 사용하고 저장하고 계속하기 버튼을 클릭할 수 있습니다.

설치를 위한 설치 프로파일을 선택하고 저장 후 계속을 클릭하십시오. 이 예에서는 표준 프로필을 사용합니다.

이제 Drupal 설치를 위한 데이터베이스를 설정하십시오. 이미 소유하고 생성한 MariaDB 데이터베이스와 사용자 정보를 상단에 입력합니다.

저장을 클릭하고 다시 계속합니다.

이제 Drupal 설치가 시작됩니다.

Drupal 설치에 대한 자세한 정보를 입력하십시오. 또한 관리자 Drupal의 사용자 이름을 사용하고 강력한 암호를 사용하십시오.

저장하고 계속하기를 클릭합니다.

Drupal 설치가 완료되면 다음 페이지가 표시됩니다. 축하합니다. Drupal을 설치했습니다!와 같은 메시지를 볼 수 있습니다.

Drupal 설치 완료

다음 명령을 실행하여 Drupal 구성 파일 및 디렉터리에 대한 레이블 지정을 설정합니다.

sudo restorecon -v /var/www/drupal/sites/default/settings.php
sudo restorecon -Rv /var/www/drupal/sites/default/files

다음으로 다음 명령을 실행하여 /var/www/drupal/sites/default/settings.php 파일의 권한을 변경하고 쓰기 가능하게 만드십시오. 그런 다음 nano 편집기를 사용하여 파일을 편집합니다.

sudo chmod 644 /var/www/drupal/sites/default/settings.php
sudo nano /var/www/drupal/sites/default/settings.php

스크립트 줄 trusted_host_patterns의 주석을 제거하고 도메인 이름을 추가합니다. 이렇게 하면 Drupal 설치에서 trusted_host가 활성화됩니다.

$settings['trusted_host_patterns'] = [
  '^hwdomain\.io$',
  '^drupal.hwdomain\.io$',
];

파일을 저장하고 완료되면 편집기를 종료하십시오.

마지막으로 Drupal 사이트의 웹 브라우저로 돌아가서 다음 URL에서 보고서 상태를 방문하십시오. 기본 도메인 이름을 자신의 도메인으로 바꾸거나 관리 > 보고서 메뉴를 통해 액세스할 수 있습니다.

https://drupal.hwdomain.io/admin/reports/status

다음 보고서에서 Drupal 설치를 위한 25개의 시스템 요구 사항이 확인됨을 볼 수 있습니다. 이는 Drupal 설치가 정확하고 오류가 없음을 의미합니다.

결론

이 가이드에서는 Rocky Linux 서버에 최신 버전의 Drupal v9를 설치하는 방법을 배웠습니다. 또한 LAMP 스택(Linux, Apache2/httpd, MySQL/MariaDB 및 PHP) 설치와 Drupal 호스팅을 위한 기본 구성에 대해서도 배웠습니다. 또한 PECL(PHP 확장 커뮤니티 라이브러리) 리포지토리에서 PHP 확장을 설치하는 방법을 배웠습니다.

Drupal이 실행 중이고 SSL 인증서로 보호되고 trusted_hosts 구성이 활성화되어 있으므로 이제 새 테마를 설치하거나 Drupal 설치를 위한 일부 플러그인을 추가하여 Drupal 배포를 확장할 수 있습니다.