임대일

Locky Linux: 아파치, PHP 설치하기(feat. Apache 2.4.57, PHP 8.2.13, Remi Repository) 본문

리눅스/Locky

Locky Linux: 아파치, PHP 설치하기(feat. Apache 2.4.57, PHP 8.2.13, Remi Repository)

limdae94 2024. 8. 24. 13:49

1. 시작하기 전에

VirtubalBox 7.0.20 가상 머신: Rocky Liunx 9.4 (Blue Onyx)

locky@localhost ~]$

명령줄 프롬프트($, Command Line Prompt)가 생략된 명령은 모두 홈 디렉토리(~, Home Directory)에서 수행되는 명령입니다.

 

2. 아파치 설치하기

sudo dnf update -y

dnf는 Rocky Linux 및 기타 Red Hat 계열 배포판에서 패키지 관리자로 사용됩니다. 시스템의 전체 패키지를 최신 버전으로 업데이트합니다.

 

sudo dnf list httpd
마지막 메타자료 만료확인(0:28:28 이전): 2024년 08월 24일 (토) 오후 12시 35분 31초.
설치된 꾸러미
httpd.x86_64                    2.4.57-11.el9_4.1                        @appstream

dnf 명령으로 설치 가능한 아파치 버전과 저장소를 확인합니다.

 

sudo dnf install httpd -y
sudo systemctl start httpd
sudo systemctl enable httpd

httpd 패키지를 사용하여 Apache 웹 서버를 설치할 수 있습니다. 그리고 Apache를 설치한 후 서비스를 시작하고, 부팅 시 자동으로 시작되도록 설정합니다. 아파치 설치는 모두 끝났지만, 로키 리눅스에서는 아파치를 웹 서버로 사용하기 위해 최소한 추가적인 설정이 두 가지가 필요합니다. 방화벽 설정 및 SELinux 설정을 해야합니다.

 

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

웹 서버에 대한 접근을 허용하기 위해 방화벽에서 HTTP 및 HTTPS 트래픽을 허용해야 합니다.

 

sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
sudo restorecon -Rv /var/www/html

SELinux(Security-Enhanced Linux)는 리눅스 시스템에서 보안 정책을 강제하는 강력한 보안 모듈입니다. Apache 웹 서버를 운영할 때, SELinux 설정을 신경 쓰지 않으면 예상치 못한 접근 차단이나 오류가 발생할 수 있습니다. 기본적으로 Apache와 관련된 SELinux 설정을 이해하고 필요에 따라 조정하는 것이 중요합니다.

 

기본적으로 SELinux는 Apache 웹 서버의 작동을 제한적으로 허용하는 설정을 가지고 있습니다. 이 설정은 보안 관점에서 중요한 역할을 합니다. 예를 들어, Apache가 특정 디렉토리에 접근하는 것을 제한하거나, 특정 네트워크 포트를 사용하지 못하도록 할 수 있습니다.

 

Apache는 기본적으로 /var/www/html과 같은 특정 디렉토리에서만 파일을 서비스할 수 있습니다. 다른 디렉토리에서 파일을 제공하려면 해당 디렉토리의 파일 컨텍스트를 적절하게 설정해야 합니다. 위 명령은 /var/www/html 경로에 있는 파일들이 Apache에 의해 접근될 수 있도록 합니다.

 

이 명령어를 사용하면 /var/www/html 디렉토리와 그 하위 디렉토리 내의 모든 파일이 Apache가 접근할 수 있도록 적절한 SELinux 컨텍스트를 가지게 됩니다. 이 설정은 웹 서버의 콘텐츠를 적절하게 관리하고 보안을 유지하는 데 필수적입니다.

 

sudo semanage port -a -t http_port_t -p tcp 80

Apache가 기본적으로 사용하는 포트(예: 80, 443) 외에 다른 포트를 사용하려면 SELinux에서 이를 허용해야 합니다. 이 명령은 Apache가 포트 80을 사용하도록 허용합니다.

 

sudo semanage port -a -t http_port_t -p tcp 8080

포트 8080은 대체 HTTP 포트로 자주 사용됩니다. 만약 Apache를 포트 8080에서 실행하고자 한다면, SELinux가 이 포트를 허용하도록 설정해야 합니다. 이 명령은 SELinux에 포트 8080을 HTTP 서비스용으로 사용할 수 있도록 허용하는 설정입니다. 이 명령은 Apache가 기본 포트 80이 아닌 포트 8080에서 실행될 때 필요합니다.

 

sudo setsebool -P httpd_can_network_connect on

Apache가 외부 네트워크와 상호작용해야 할 경우, 예를 들어 데이터베이스와 연결하는 경우, SELinux가 이를 차단할 수 있습니다. 이때는 관련 설정을 변경해야 합니다. 예를 들어, httpd가 네트워크로 나가는 연결을 허용하려면 위의 명령을 입력합니다.

 

sudo setsebool -P httpd_enable_cgi on

Apache에서 CGI 스크립트나 PHP 같은 서버 측 스크립트를 실행할 때 SELinux가 이를 제한할 수 있습니다. 이 경우 스크립트 실행을 허용하도록 설정해야 합니다.

 

sudo getsebool -a | grep httpd

Apache와 SELinux가 어떻게 상호작용하는지 확인하려면 다음 명령을 사용할 수 있습니다. 기본 설정만으로도 많은 경우에 충분하지만, 추가적인 기능이나 비표준 설정(예: 다른 디렉토리에서 파일 서비스, 비표준 포트 사용 등)을 사용할 때는 SELinux 설정을 조정해야 합니다.

 

3. Remi Repository 설치하기

저장소(Repository)는 소프트웨어를 배포하고 관리하기 위한 서버나 위치를 말합니다. 리눅스의 저장소는 깃허브와는 약간 다른 개념이지만, 소프트웨어를 중앙에서 관리하고 배포하는 역할을 한다는 점에서 유사한 면도 있습니다.

 

리눅스에서의 저장소(Repository)

  1. 소프트웨어 패키지의 모음: 리눅스에서 저장소는 특정 리눅스 배포판에 맞춰 관리되는 소프트웨어 패키지들의 모음입니다. 이 패키지들은 다양한 프로그램, 라이브러리, 도구들을 포함하며, 사용자들은 dnf, apt, yum 같은 패키지 관리 도구를 사용해 저장소에서 소프트웨어를 다운로드하고 설치할 수 있습니다.
  2. 중앙 관리: 저장소는 일반적으로 중앙 서버에 위치하며, 배포판 개발자들이 소프트웨어 패키지들을 검증, 업데이트, 보안 패치 등을 관리합니다. 사용자는 이 저장소에 접근해 안전하고 검증된 소프트웨어를 설치할 수 있습니다.
  3. 자동화된 업데이트: 리눅스에서 제공하는 패키지 관리 도구를 통해 저장소에 있는 소프트웨어는 쉽게 설치, 제거, 업데이트가 가능합니다. 예를 들어, dnf update 명령어를 사용하면 시스템에 설치된 모든 소프트웨어를 최신 상태로 유지할 수 있습니다.
  4. 공식 저장소와 비공식 저장소:
    • 공식 저장소: 배포판이 기본적으로 제공하는 저장소입니다. 예를 들어, 로키 리눅스, 우분투, 페도라 등의 배포판은 각각의 공식 저장소를 가지고 있으며, 여기에는 안정적이고 신뢰할 수 있는 패키지가 포함됩니다.
    • 비공식 저장소: 제3자가 관리하는 저장소로, 공식 저장소에 없는 최신 소프트웨어나 특정 버전의 소프트웨어를 제공하는 경우가 많습니다. Remi repository가 그 예입니다. 이 저장소를 사용하면 공식 저장소에서 제공되지 않는 최신 버전의 소프트웨어를 설치할 수 있습니다.

 

깃허브와의 비교

  • 깃허브(GitHub): 깃허브는 소스 코드 버전 관리를 위한 플랫폼으로, 개발자들이 소스 코드를 저장소(Repository)에 업로드하고, 버전 관리, 협업, 이슈 추적 등을 할 수 있습니다. 여기서의 저장소는 주로 소스 코드와 관련된 파일들의 모음입니다.
  • 리눅스의 패키지 저장소: 리눅스에서 말하는 저장소는 컴파일된 소프트웨어 패키지(예: .rpm, .deb)를 배포하는 곳입니다. 깃허브의 저장소가 주로 소스 코드에 초점을 맞춘다면, 리눅스의 저장소는 실행 가능한 소프트웨어 패키지를 제공합니다.

리눅스의 저장소는 깃허브와 같이 소프트웨어를 관리하고 배포하는 시스템이지만, 깃허브는 주로 소스 코드 관리에 집중하는 반면, 리눅스 저장소는 컴파일된 소프트웨어 패키지의 배포와 관리를 담당합니다. 이를 통해 사용자는 손쉽게 소프트웨어를 설치하고 시스템을 관리할 수 있습니다.

 

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

Remi repository는 Red Hat 계열의 리눅스 배포판(예: RHEL, CentOS, Fedora 등)을 위한 추가 패키지 저장소입니다. 이 저장소는 주로 최신 버전의 PHP 및 관련 모듈을 제공하는 데 중점을 두고 있습니다. 예를 들어 기본 저장소에서 제공하는 PHP 버전이 너무 오래되었거나 최신 기능이 필요할 때 Remi repository를 통해 최신 PHP 버전을 설치하는 것이 일반적입니다.

 

먼저 EPEL(Extra Packages for Enterprise Linux) 저장소와 Remi repository를 설치하고 활성화해야 합니다. 이때 Remi Repository의 주요 기능은 다음과 같습니다.

  1. 최신 PHP 버전 제공: 기본 패키지 저장소에서 제공하는 PHP 버전보다 더 최신의 버전을 제공
  2. 다양한 PHP 버전 선택 가능: Remi repository에서는 여러 버전의 PHP를 제공하므로 필요에 따라 특정 버전을 선택 가능
  3. 다양한 PHP 모듈 제공: PHP와 함께 다양한 모듈과 확장 기능을 설치 가능

Remi repository는 비공식 저장소이지만, 신뢰할 수 있는 이유가 있습니다. 비공식 저장소라는 용어는 단지 해당 저장소가 특정 리눅스 배포판(예: Red Hat, CentOS 등)의 공식 배포판에 포함되지 않았다는 의미일 뿐입니다. 그러나 이는 반드시 신뢰할 수 없다는 의미는 아닙니다. Remi repository의 신뢰성을 설명하는 몇 가지 이유는 다음과 같습니다.

  • Remi repository는 Remi Collet이라는 개인이 운영하며, 그는 PHP 커뮤니티에서 잘 알려진 개발자입니다. Red Hat 계열 리눅스 배포판에서 최신 PHP 패키지를 제공하는 것으로 유명하며, 수년간 유지 및 관리해 왔습니다.
  • Remi는 Red Hat과 Fedora 프로젝트에 적극적으로 기여하고 있으며, 이러한 활동을 통해 그의 패키지가 검증된 품질을 유지하고 있음을 알 수 있습니다.
  • Remi repository는 수년간 많은 리눅스 사용자와 기업들에 의해 사용되어 왔으며, 이 과정에서 안정성과 신뢰성을 인정받았습니다.
  • 많은 웹 호스팅 서비스와 개발자들이 Remi repository를 통해 PHP의 최신 버전을 설치하고 유지 관리하고 있습니다.
  • Remi repository는 최신 보안 패치와 업데이트를 빠르게 제공하는 것으로 유명합니다. PHP의 최신 보안 패치를 빠르게 적용할 수 있어, 서버의 보안을 유지하는 데 도움이 됩니다.
  • 모든 패키지는 그가 직접 관리하며, 이를 통해 소프트웨어의 무결성과 보안을 유지합니다.
  • Remi repository의 모든 패키지는 오픈 소스 소프트웨어입니다. 따라서 누구나 소스 코드를 검토하고 분석할 수 있습니다. 이 오픈 소스 특성 덕분에 투명성이 보장되며, 의심스러운 코드가 있다면 커뮤니티가 이를 발견하고 보고할 수 있습니다.
  • Remi repository는 많은 기업과 오픈 소스 프로젝트에서 사용되고 있습니다. 이러한 대규모 사용자 기반은 문제가 발생할 경우 이를 빠르게 발견하고 해결하는 데 도움을 줍니다.

비공식 저장소라고 해서 반드시 신뢰할 수 없는 것은 아닙니다. Remi repository는 오랜 시간 동안 신뢰받아온 저장소이며, 특히 최신 PHP 버전이 필요한 환경에서 매우 유용하게 사용될 수 있습니다. 다만, 중요한 시스템에 적용하기 전에 테스트 환경에서 충분히 검토하고 사용하는 것이 좋습니다.

 

 

EPEL

EPEL(Extra Packages for Enterprise Linux) 저장소는 공식적인 저장소입니다. 이는 Red Hat 계열의 리눅스 배포판(예: RHEL, CentOS, Rocky Linux 등)을 위한 추가 패키지 저장소로, Fedora 프로젝트에서 관리하고 제공합니다.

 

EPEL 저장소의 개념

  • EPEL의 목적: EPEL은 Fedora 프로젝트의 일환으로, Fedora에서 제공되는 소프트웨어 패키지들 중에서 안정적이고 유용한 것들을 Red Hat 계열 배포판에서 사용할 수 있도록 제공하는 것을 목적으로 합니다. Red Hat 계열 배포판은 안정성과 장기 지원에 중점을 두기 때문에, 기본 저장소에서 제공하는 소프트웨어 패키지들이 비교적 제한적일 수 있습니다. EPEL은 이러한 한계를 보완하기 위해 만들어졌습니다.
  • 공식성과 신뢰성: EPEL은 Fedora 프로젝트의 일부로, Red Hat과 긴밀히 연관되어 있습니다. 따라서 EPEL은 공식적인 저장소로 간주되며, 높은 신뢰성을 가지고 있습니다. 이 저장소에서 제공하는 패키지들은 엄격한 품질 관리를 거치며, 시스템의 안정성을 유지할 수 있도록 신경 써서 관리됩니다.
  • 포함된 소프트웨어: EPEL 저장소에는 다양한 추가 소프트웨어 패키지가 포함되어 있습니다. 예를 들어, 시스템 관리 도구, 개발 라이브러리, 네트워킹 도구, 데스크탑 애플리케이션 등이 있으며, 기본 저장소에는 포함되지 않은 여러 유용한 패키지들을 제공합니다.

 

EPEL 저장소를 설치하는 이유

  1. 추가 소프트웨어 제공: EPEL 저장소를 설치하면 기본적으로 제공되지 않는 추가적인 소프트웨어 패키지를 쉽게 설치할 수 있습니다. 이는 특히 서버나 개발 환경을 구축할 때 유용합니다.
  2. 안정성과 호환성: EPEL은 Red Hat 계열 배포판과의 호환성을 보장하며, 시스템의 안정성을 유지할 수 있도록 설계되었습니다. 따라서 EPEL을 사용하는 것은 시스템을 불안정하게 만들지 않으며, 신뢰할 수 있는 추가 소프트웨어를 사용할 수 있게 해줍니다.
  3. 커뮤니티 지원: EPEL은 널리 사용되고 있으며, 다양한 커뮤니티와 문서에서 EPEL을 통해 제공되는 패키지들을 활용하는 방법을 다루고 있습니다. 이로 인해 문제가 발생했을 때 쉽게 해결책을 찾을 수 있습니다.

 

EPEL 저장소 설치 방법

EPEL 저장소를 설치하는 방법은 매우 간단합니다. dnf 명령어를 통해 EPEL 패키지를 설치하고 활성화할 수 있습니다.

sudo dnf install epel-release -y

 

이 명령어를 실행하면 EPEL 저장소가 시스템에 추가되며, 이후 dnf를 통해 EPEL에서 제공하는 패키지들을 설치할 수 있습니다.

 

EPEL 저장소는 공식적이고 신뢰할 수 있는 추가 패키지 저장소입니다. Red Hat 계열의 리눅스 배포판을 사용하는 경우, EPEL을 설치하면 추가적인 소프트웨어 패키지를 활용할 수 있어 시스템 운영과 관리에 큰 도움이 됩니다. 따라서 대부분의 사용자들이 EPEL을 설치하여 다양한 소프트웨어를 사용하는 것이 일반적입니다.

 

4. PHP 설치하기

sudo dnf module list php

Remi repository에서 사용할 PHP 버전을 선택합니다. Remi repository는 기본적으로 여러 PHP 버전을 제공합니다. 기본 저장소에서 PHP 8.2 스트림을 명시적으로 활성화한 후 설치하고 싶다면, 다음 단계를 따를 수 있습니다.

 

PHP 모듈 스트림을 확인하고 리셋하기

sudo dnf module reset php -y

이 명령어는 PHP 모듈 스트림을 초기화합니다.

 

PHP 8.2 스트림 활성화

sudo dnf module enable php:8.2 -y

이 명령어는 PHP 8.2 스트림을 활성화합니다.

 

PHP 8.2 및 필요한 모듈 설치

sudo dnf install php php-cli php-common php-fpm php-json php-mysqlnd php-pgsql php-xml php-mbstring php-tokenizer php-curl php-zip php-bcmath php-gd
  • php: PHP 인터프리터
  • php-cli: PHP 명령줄 인터페이스(CLI)용 패키지. 라라벨 아티즌 명령어를 실행할 때 필요합니다.
  • php-common: PHP와 관련된 공통 파일들
  • php-fpm: FastCGI Process Manager로, 고성능 PHP 애플리케이션 서버용
  • php-json: JSON 데이터 처리를 위한 PHP 확장. 라라벨에서 JSON 형식의 데이터를 다룰 때 필요합니다.
  • php-mysqlnd: MySQL Native Driver로, PHP와 MySQL 데이터베이스 간의 네이티브 통신용 드라이버입니다.
  • php-pgsql: PostgreSQL과의 연동을 위한 PHP 모듈
  • php-xml: XML 데이터를 처리하기 위한 모듈. 라라벨과 여러 PHP 라이브러리에서 XML을 처리할 때 필요합니다.
  • php-mbstring: 다국어 문자열 처리용 모듈. 라라벨에서 다국어 지원을 위한 문자열 처리를 위해 필수적입니다.
  • php-tokenizer: PHP 코드에서 토큰화를 위한 모듈. 라라벨의 블레이드 템플릿 엔진에서 사용됩니다.
  • php-curl: 라라벨에서 외부 API와의 통신을 위해 필요한 모듈
  • php-zip: ZIP 압축 파일을 처리하기 위한 모듈. 라라벨에서 파일 압축 및 다운로드 기능을 구현할 때 유용합니다.
  • php-bcmath: 수치 연산을 위한 확장 모듈. 라라벨에서 특정 연산을 수행할 때 필요할 수 있습니다.
  • php-gd: 이미지 처리와 같은 그래픽 관련 작업을 위한 모듈. 라라벨에서 이미지 조작 라이브러리 사용 시 필요합니다.