CentOS 8에 OpenLiteSpeed, PHP 7.4(LSPHP) 및 MariaDB 설치 및 설정 가이드

중요: 본 가이드는 CentOS 8 환경(권장 최소 사양: 2GB RAM, 25GB 여유 디스크, 2 vCPU)을 기준으로 작성되었습니다. 실제 운영 환경에서는 추가 보안(SELinux, TLS 인증서 관리, 로그 중앙화)과 백업 전략을 반드시 계획하세요.
개요
OpenLiteSpeed는 LiteSpeed Technologies에서 개발한 오픈소스 HTTP 서버입니다. 가벼우면서 고성능을 지향하고 웹 기반 GUI(관리자 대시보드)를 통해 설정을 편리하게 관리할 수 있습니다. OpenLiteSpeed는 LSPHP(=LSAPI 기반 PHP)로 PHP를 실행하며, MariaDB 같은 데이터베이스와 함께 LAMP류 스택을 구성할 수 있습니다.
이 가이드는 다음 작업을 포함합니다.
- OpenLiteSpeed 저장소 추가 및 설치
- PHP 7.4(LSPHP) 설치
- MariaDB 설치 및 기본 보안 설정
- OpenLiteSpeed 관리자 계정 설정(포트 7080)
- LSPHP(PHP 7.4)를 External App으로 등록하고 Script Handler에 연결
- OpenLiteSpeed를 HTTP 기본 포트(80)로 변경
- 동작 확인(기본 페이지, phpinfo)
다음 섹션에서 단계별 명령, 화면 설명, 문제 발생 시 확인 포인트 및 보안 권장사항을 제공합니다.
사전 준비
- CentOS 8 최신 패치 적용 상태
- 루트 또는 sudo 권한
- 방화벽(firewalld) 기본 동작 이해
- 서버 IP, DNS(선택) 준비
팁: CentOS 8은 이미 수명 주기가 지난 경우가 있으니(운영체제 지원 정책을 확인) 장기 운영 시 AlmaLinux, Rocky Linux 등의 호환 배포판을 검토하세요.
용어 한 줄 설명
- LSPHP: OpenLiteSpeed가 사용하는 LSAPI 기반 PHP 구현(PHP 바이너리 집합).
- Listener: OpenLiteSpeed에서 포트 및 바인딩을 관리하는 구성 요소.
- External App: OpenLiteSpeed가 외부 프로세스(예: lsphp)를 호출하는 설정 항목.
단계 1 — OpenLiteSpeed 설치
먼저 OpenLiteSpeed 저장소를 추가한 뒤 패키지를 설치합니다. 저장소 패키지를 rpm으로 설치하면 litespeed 관련 레포가 /etc/yum.repos.d에 추가됩니다.
rpm -Uvh http://rpms.litespeedtech.com/centos/litespeed-repo-1.1-1.el8.noarch.rpm
저장소 추가 후 사용 가능한 저장소 목록을 확인해 설치 준비가 되었는지 확인합니다.
dnf repolist
리포지토리가 정상적으로 추가되었으면 OpenLiteSpeed 패키지를 설치합니다.
sudo dnf install openlitespeed
설치가 완료되면 서비스 시작 및 부팅 시 자동 시작을 설정합니다.
systemctl start lsws
systemctl enable lsws
상태 확인:
systemctl status lsws
검증: 웹 서버가 정상 시작되면 관리 포트(기본 7080)가 동작합니다. 이 시점에서는 방화벽 규칙을 아직 열지 않았을 수 있습니다.
중요: systemctl 명령이 실패하면 /usr/local/lsws/logs/error.log 파일을 확인하세요. SELinux가 활성화된 환경에서는 추가 정책이 필요할 수 있습니다(아래 보안 섹션 참조).
단계 2 — PHP 7.4 (LSPHP) 설치
OpenLiteSpeed는 PHP-FPM 대신 LSPHP(LSAPI)를 권장합니다. LSPHP는 OpenLiteSpeed와의 통신이 최적화되어 있으며 성능/호환성 측면에서 이점이 있습니다.
먼저 EPEL 저장소를 추가합니다.
sudo dnf install epel-release
그다음 OpenLiteSpeed 저장소의 LSPHP 7.4 패키지들을 설치합니다. 필요한 모듈은 애플리케이션 요구사항에 따라 추가/제거하세요.
sudo dnf install lsphp74 lsphp74-mysqlnd lsphp74-process lsphp74-mbstring lsphp74-mcrypt lsphp74-gd lsphp74-opcache lsphp74-bcmath lsphp74-pdo lsphp74-common lsphp74-xml
설치 완료 후 lsphp 관련 소켓/프로세스를 확인합니다.
netstat -pl | grep lsphp
또는 시스템에서 유닉스 도메인 소켓(uds)을 확인하려면:
ss -lx | grep lsphp
설치가 정상적이면 OpenLiteSpeed에서 사용할 수 있는 lsphp 바이너리(예: /usr/local/lsws/lsphp74/bin/lsphp 또는 /usr/local/lsws/lsphp74/bin/lsphp)가 존재합니다.
검증: phpinfo()로 PHP 버전과 로드된 확장 모듈을 확인합니다(나중 단계에서 phpinfo 확인).
설치 참고: 패키지 명칭은 레포지토리 구성에 따라 다를 수 있으니 dnf search lsphp74로 패키지 목록을 확인하세요.
단계 3 — MariaDB 설치 및 초기 보안 설정
데이터베이스로 MariaDB를 설치하고 기본 보안 설정(mysql_secure_installation)을 실행합니다.
sudo dnf install mariadb mariadb-server
서비스 시작 및 자동 시작 등록:
systemctl start mariadb
systemctl enable mariadb
보안 설정(권장): mysql_secure_installation 스크립트를 실행하여 루트 암호 설정, 익명 사용자 제거, 테스트 DB 제거, 권한 테이블 리로드를 진행합니다.
mysql_secure_installation
질문 예시(공식 스크립트 안내에 따라 응답):
Set a root password? [Y/n] Y
Remove anonymous users? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
루트로 로그인하여 사용자 목록을 확인합니다.
mysql -u root -p
Type Your Root Password:
select User, Host from mysql.user;
중요: MariaDB의 인증 플러그인과 암호 정책을 필요에 맞게 조정하세요. 특히 원격 접속을 허용하려면 사용자 호스트와 방화벽 규칙을 신중히 설정해야 합니다.
단계 4 — 관리자 대시보드 인증 설정 및 방화벽 열기
OpenLiteSpeed 관리자 대시보드는 기본적으로 포트 7080에서 HTTPS로 동작합니다. 먼저 포트를 방화벽에 추가하고 admpass.sh로 관리자 계정을 생성합니다.
방화벽에 포트 7080 추가 및 재로드:
firewall-cmd --add-port=7080/tcp --permanent
firewall-cmd --reload
관리자 비밀번호 설정 스크립트 실행:
cd /usr/local/lsws/admin/misc
sh admpass.sh
스프립트는 계정명과 비밀번호를 묻습니다. 안전한 비밀번호를 사용하세요.
브라우저에서 https://서버IP:7080 로 접속해 로그인합니다.
Login 예시: https://10.5.5.25:7080
로그인 후 관리자 대시보드를 확인합니다.
보안 팁:
- 관리자 포트는 외부에 그대로 노출하지 말고, 사내망에서만 접근 가능하게 하거나 VPN, IP 화이트리스트로 보호하세요.
- HTTPS가 기본 활성화되지만 자체 서명서로 오는 경우 브라우저 경고가 표시됩니다. 운영 환경에서는 유효한 인증서를 사용하세요.
단계 5 — OpenLiteSpeed에 PHP 7.4(LSPHP) 연동
관리자 대시보드에서 LSPHP를 External App으로 등록한 뒤 Script Handler로 연결합니다.
관리자에서 Server Configuration → External App 탭으로 이동합니다.
‘+’ 버튼을 눌러 새 항목을 추가합니다. 타입(Type)으로 “LiteSpeed SAPI App”을 선택한 뒤 다음 값들을 입력합니다.
Name: lsphp74
Address: uds://tmp/lshttpd/lsphp.sock
Notes: lsphp74 for OpenLiteSpeed
Max Connections: 35
Initial Request Timeout (secs): 60
Retry Timeout (secs): 0
Command: $SERVER_ROOT/lsphp74/bin/lsphp
설정 저장 후 Server Configuration → Script Handler 탭에서 PHP 핸들러를 편집하여 Handler Name으로 lsphp74를 선택하고 저장합니다.
설정 후 서버 리스타트(관리자 화면에서 적용 버튼) 또는 systemctl로 재시작하여 변경사항을 반영하세요.
systemctl restart lsws
검증: 간단한 PHP 파일(phpinfo)을 웹루트에 생성하고 phpinfo 페이지가 lsphp로 처리되는지 확인합니다.
단계 6 — OpenLiteSpeed를 포트 80(HTTP)에서 실행
기본 OpenLiteSpeed는 포트 8088(또는 환경에 따라 다름)에서 동작합니다. 운영 환경에서는 기본 HTTP 포트(80)로 변경할 수 있습니다. 먼저 방화벽에 http/https 서비스를 추가합니다.
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload
관리자 대시보드에서 Listener → Default → view → Address Settings → edit로 이동해 포트를 80으로 변경하고 저장합니다.
변경 후 서버를 재시작합니다(관리자에서 Restart 또는 systemctl restart lsws).
검증: 브라우저에서 http://서버IP 주소로 접속해 기본 인덱스 페이지가 나타나는지 확인합니다.
단계 7 — 테스트 및 검증
브라우저에서 http://서버IP/ 로 접속하면 OpenLiteSpeed의 기본 인덱스 페이지가 표시되어야 합니다.
다음으로 PHP 동작을 테스트합니다. 관리자 대시보드 또는 직접 생성한 php 파일에서 phpinfo()를 호출하여 PHP 버전 및 로드된 확장을 확인합니다.
성공 기준:
- 루트(또는 가상호스트의 DocumentRoot)에서 phpinfo()가 LSPHP로 처리되고 PHP 7.4가 표시됨
- MariaDB에 루트로 접속 가능(설정한 암호 사용)
- 관리자 대시보드(포트 7080)에 관리자 계정으로 로그인 가능
- http/https 포트가 방화벽에서 허용됨
트러블슈팅 체크리스트
- 서비스 상태 확인: systemctl status lsws, systemctl status mariadb
- 로그 파일: /usr/local/lsws/logs/error.log, /var/log/mariadb/mariadb.log
- 포트 충돌: ss -tulpn | grep :80 또는 :7080
- SELinux: Enforcing인 경우 audit 로그(/var/log/audit/audit.log)를 확인하고 필요한 booleans를 설정하거나 정책을 추가
- 파일 권한: 웹 루트와 lsphp 실행 파일이 적절한 권한/소유권을 가졌는지 확인
중요: 잘못된 Command 경로 또는 잘못된 Address(uds 경로)는 External App이 시작되지 않는 원인이 됩니다. External App 설정에서 명령 경로가 실제 바이너리 위치와 일치하는지 확인하세요.
보안 및 운영 권장사항
- 관리자 대시보드(7080)는 내부망 또는 VPN으로만 접근하도록 제한
- 운영환경에서는 Let’s Encrypt 또는 상업용 인증서를 사용해 TLS 구성
- 정기적인 패키지 업데이트(dnf update)와 MariaDB 백업 전략 구현
- 로그 롤링 및 중앙집중식 로깅(예: rsyslog, ELK/EFK) 도입
- 웹 애플리케이션 방화벽(WAF) 도입 고려
- PHP 확장 최소화: 불필요한 확장은 제거하여 공격 표면 축소
SELinux 참고: SELinux가 활성화된 시스템에서는 OpenLiteSpeed의 UDS 소켓과 파일 접근에 대해 추가 컨텍스트 설정이 필요할 수 있습니다.
대안과 비교
- OpenLiteSpeed vs Apache/Nginx: OpenLiteSpeed는 LSAPI와의 긴밀한 통합으로 PHP 처리 속도/메모리 면에서 장점이 있지만, 생태계(모듈, 문서)와 관행은 Apache/Nginx 쪽이 더 넓습니다. 운영 편의성, 기존 인프라 호환성, 확장성 요구사항을 기준으로 선택하세요.
- PHP 처리 방식: LSPHP(LSAPI) vs PHP-FPM — LSPHP는 OpenLiteSpeed에 최적화되어 있으며 추가 설정이 간단합니다. 기존에 PHP-FPM 기반으로 구성된 환경을 마이그레이션할 때는 핸들러와 소켓 경로를 주의깊게 변경하세요.
운영자용 체크리스트(역할별)
시스템 관리자:
- 저장소(rpm) 추가 및 패키지 설치
- systemd 서비스 관리 및 로그 확인
- 방화벽과 포트 관리
웹 개발자:
- PHP 확장 요구사항 확인 및 설치
- 애플리케이션의 DocumentRoot와 권한 설정
- phpinfo로 확장/설정 검증
보안 담당자:
- 관리자 포트 접근 제어
- TLS 인증서 관리
- mysql 계정 및 권한 정리
간단한 운영 SOP(표준 운영 절차)
- 패치: 운영 전 패키지 업데이트(dnf update) 수행
- 설치: OpenLiteSpeed, LSPHP, MariaDB 설치
- 초기 보안: MariaDB 보안 스크립트 실행 및 관리자 계정 설정
- 방화벽: 관리자/HTTP/HTTPS 포트 규칙 설정
- 검증: phpinfo 및 기본 페이지 확인
- 백업: DB 덤프와 서버 이미지 백업
- 모니터링: 리소스(메모리/CPU) 및 응답시간 관찰
롤백(간단): 패키지 설치 직후 문제 발생 시 systemctl stop lsws, dnf remove openlitespeed lsphp* 후 스냅샷에서 복원 또는 이전 이미지로 롤백.
결정 트리(간단)
flowchart TD
A[서버 준비 완료?] -->|예| B[OpenLiteSpeed 설치]
A -->|아니오| Z[서버 사양/권한 확인]
B --> C{PHP 사용 필요?}
C -->|예| D[lsphp74 설치]
C -->|아니오| E[정적 사이트 구성]
D --> F[External App 등록]
F --> G[Script Handler 연결]
G --> H[방화벽 및 포트 설정]
H --> I[테스트 및 검증]
I --> J[운영 전 보안 점검]
테스트 케이스(수동)
- TC1: 관리자 포트(7080)에 로그인 가능
- TC2: http://서버IP/ 에서 OpenLiteSpeed 인덱스 출력
- TC3: phpinfo 페이지에서 PHP 7.4 및 mysqli, pdo_mysql 확장 로드 확인
- TC4: MariaDB에 루트 로그인 및 간단한 CRUD 쿼리 실행
- TC5: Listener 포트를 80으로 변경 후 외부에서 HTTP 접속 확인
각 테스트는 성공/실패를 기록하고 실패 시 로그(error.log, mariadb log)와 포트/프로세스 상태를 점검하세요.
호환성 및 마이그레이션 팁
- CentOS 8의 향후 지원 여부를 확인하세요. CentOS 8 EOL 환경에서는 AlmaLinux/ Rocky Linux로 전환하는 것을 고려할 수 있습니다.
- Apache/Nginx → OpenLiteSpeed 전환 시 가상호스트 설정, rewrite 규칙, SSL 설정, PHP 핸들러 차이를 점검하세요.
- 기존 PHP-FPM에서 LSPHP로 이전할 때는 php.ini 경로와 확장 로드 경로가 달라질 수 있으므로 설정 파일을 비교하세요.
요약
- OpenLiteSpeed와 LSPHP(PHP 7.4), MariaDB를 CentOS 8에 설치하고 기본 설정을 완료했습니다.
- 관리자 대시보드(포트 7080)와 HTTP 포트(80) 설정, 방화벽 규칙 추가, phpinfo로 검증을 수행했습니다.
- 운영 전 보안(관리자 포트 제한, TLS, 백업, 로그 관리)을 반드시 적용하세요.
핵심 요점:
- 저장소 추가 → 패키지 설치 → 서비스 시작
- LSPHP를 External App으로 등록하고 Script Handler에 연결
- MariaDB 설치 후 mysql_secure_installation으로 기본 보안 완료
- 포트 및 방화벽 설정 후 phpinfo로 동작 검증
참고 링크:
감사합니다.