How To Install (LAMP [ Linux, Apache, MySQL, PHP ]) Stack on Rocky Linux 9.x Version
NAME = “Rocky Linux”
VERSION = “9.3 (Blue Onyx)”
Kernel = “5.14.0-362.8.1.el9_3.aarch64”
System : Vmware fusion
포스팅 목차
LAMP?
LAMP는 Linux, Apache, MariadbL, PHP의 첫 글자를 따서 만든 약어로, 웹 서비스를 제공하는데 필요한 주요 오픈소스 소프트웨어 스택입니다.
1. Linux : 서버의 하드웨어와 소프트웨어 리소스를 관리하고, 다른 소프트웨어가 시스템 리소스에 안전하게 접근하도록 하는 역할을 합니다. Linux는 그 안정성과 보안성, 그리고 오픈소스라는 점 때문에 널리 사용되는 서버 운영 체제입니다.
2. Apache : 클라이언트의 HTTP 요청을 받아 정적, 동적 웹페이지를 생성하고 응답하는 역할을 합니다.
3. MariaDB : MariaDB는 MySQL을 기반으로 만들어진 오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS)입니다. MySQL 개발자 중 일부가 MySQL의 상업화를 우려하여 만든 프로젝트로, MySQL과의 높은 호환성과 개선된 기능을 제공합니다. 데이터를 안전하게 저장, 검색, 수정, 삭제하는 역할을 합니다.
4. PHP : 서버 측 스크립트 언어로, 동적 웹페이지를 생성하는 역할을 합니다. PHP는 웹 개발에 특화되어 있고, HTML과 잘 통합되며, 데이터베이스와의 연동이 쉽다
Step 1 : httpd package install
dnf update를 이용하여 시스템의 모든 패키지를 최신 버전으로 업데이트

아파치 패키지 설치진행
$ sudo dnf install httpd -y

아파치 설치 후 httpd 서비스 start + enable
$ sudo systemctl start httpd
( start -> enable -> status )

Step 2 : Firewall 80,443 port open
80포트의 경우 기존에 이미 열어둔 상태로 있어서 Warning 메세지가 발생했습니다.
방화벽 같은 경우 http(80), https(443) 2개를 오픈 해주시면 됩니다.
방화벽 미오픈 시 웹사이트 접근에 문제가 생길 수 있습니다.
80, 443 Port 오픈 후 방화벽 재기동을 해주시면 됩니다.
$ sudo firewall-cmd --permanent --add-port=80/tcp
$ sudo firewall-cmd --permanent --add-port=443/tcp
$ sudo firewall-cmd –reload

방화벽 오픈 후 정상적으로 등록이 되었는지 확인합니다.
80/tcp, 443/tcp
정상적으로 오픈이 되신 분들은 웹 브라우저에서 서버 IP를 통해 접근을 하시면 됩니다.

Step 3 : Mariadb Install and secure settings
mariadb server 패키지 설치
$ sudo dnf install mariadb-server mariadb -y

mariadb Services 시작
$ sudo systemctl start mariadb.service
$ sudo systemctl enable mariadb.service
$ sudo systemctl status mariadb.service

MariaDB 데이터베이스 시스템을 보안 강화하기 위한 스크립트
-‘Switch to unix_socket authentication‘ 단계에서는 MariaDB의 root 사용자가 unix_socket 인증 방식
운영체제의 사용자 이름과 MariaDB의 사용자 이름이 일치할 경우, 그 사용자는 MariaDB에 패스워드 없이 접근
y/n 개인의 환경에 맞춰서 자율적으로 선택

루트 패스워드 변경 : 이미 루트 패스워드가 설정되어 있으므로 이 단계는 건너뛰겠습니까? (y or n)
익명 사용자 제거 : MariaDB 설치 시 기본적으로 생성되는 익명 사용자를 제거하겠습니까?(y). 불필요한 보안 위협을 제거하는데 도움이 됩니다
원격 로그인 제한 : 루트 사용자가 원격에서 MariaDB에 로그인하는 것을 제한하겠니까?(y). 루트 계정의 보안을 강화하는 데 도움이 됩니다
데이터베이스 제거 : 모든 사용자가 접근할 수 있는 ‘test’ 데이터베이스를 제거하겠습니까?(y). 불필요한 보안 위협을 제거하는데 도움이 됩니다
테이블 즉시 리로드 : 지금까지의 모든 변경 사항을 즉시 적용하기 위해 권한 테이블을 리로드하겠습니까(y).


보안 스크립트 적용 후 DB 접근 root 패스워드 일치여부 확인
$ mysql -u root -p

Step 4 : php package install
PHP 관련 모듈의 목록을 보여줍니다.
“모듈”이란, DNF 패키지 관리자에서 특정 기능 또는 애플리케이션을 지원하기 위해 묶여 있는 패키지 그룹을 의미
$ sudo dnf module list php

PHP 8.1 버전 모듈을 활성화해당 모듈과 그에 속한 패키지들이 설치될 수 있도록 설정하는 것을 의미합니다.
즉, 명령어를 실행한 후에는 sudo dnf install php 명령어를 통해PHP 8.1 버전을 설치
$ sudo dnf module enable php:8.1

php Package Install
$ sudo dnf install php php-cli php-gd php-curl php-zip php-mbstring php-mysqlnd -y
php : PHP 언어의 기본 패키지입니다. 웹 서버에서 PHP 코드를 해석하고 실행하는 데 필요합니다.
php-cli : PHP의 커맨드 라인 인터페이스를 제공합니다. 이를 통해 터미널에서 직접 PHP 스크립트를 실행할 수 있습니다.
php-gd : GD 라이브러리를 PHP에서 사용할 수 있도록 합니다. GD 라이브러리는 이미지를 동적으로 생성하고 조작하는 데 사용됩니다.
php-curl : PHP에서 cURL 기능을 사용할 수 있도록 합니다. cURL은 웹에서 데이터를 전송하는 데 사용되는 라이브러리입니다.
php-zip : ZIP 압축 파일을 읽고 쓰는 기능을 PHP에 추가합니다.
php-mbstring : PHP에서 다양한 문자 인코딩을 지원하기 위한 함수들을 제공합니다. 다국어 웹사이트를 제작하는 데 유용합니다.
php-mysqlnd : PHP에서 MySQL 데이터베이스를 사용할 수 있도록 합니다. 이 패키지는 MySQL 서버와의 네트워크 연결을 관리하며, SQL 쿼리를 실행하고 결과를 가져오는 기능을 제공합니다.

php 버전 확인 후 서비스 재시작
$ php -v
$ sudo systemctl restart httpd


이렇게 LAMP Stack 구축을 완료 하였습니다.
간단하게 phpinfo 정보를 테스트로 확인해보겠습니다.
Step 5 : php web check
/var/www/html/info.php 를 생성 후 아래 사진과 같이 입력

웹 브라우저에서 Server IP/phpinfo 입력 시 접근이 가능합니다.

감사합니다.