목차
- 1. 개요
- 2. 사전 작업
- 2-1) 도메인 네임 설정
- 2-2) 패키지 설치
- 3. Apache 소스 설치
- 3-1) 소스파일 다운로드
- 3-2) 의존성 패키지 및 Apache 컴파일 설치
- Apache 컴파일 설치
- 3-3)Apache에 SSL, DNS 적용
- SSL 인증서 발급
- Apache에 SSL 인증서 키 추가
- Apache systemd 등록
- 4. PHP: 7.1.9 소스 설치
- 5. MySQL 소스 설치
- 5-1) 소스파일 다운로드 및 컴파일
- 5-2) MySQL 서버 사용자 추가
- 5-3) MySQL Systemd 등록
- 5-4) PHP-MySQL DB 커넥션 테스트
- 6. WordPress 구축
- 6-1) 워드프레스용 DB 생성
- 6-2) WordPress 소스 다운로드
- 6-3) WordPress 설치
- Apache – PHP-fpm 연동
1. APM 개요
APM이란 Apache 웹 서버 + PHP + MySQL 데이터베이스의 조합으로 이루어진 웹 서버 시스템을 가리키는 약어다.
전부 오픈 소스라는 것이 특징이며, Linux에서 사용할 경우 LAMP라고 불리기도 한다.
Apache :
PHP : 대표적인 서버 사이드 스크립트 언어
MySQL : 오라클 사에서 배포하는 데이터베이스
오픈 소스 소프트웨어로 구성되므로 안정적이고 확장성이 뛰어나며 커뮤니티 지원이 풍부하다.
이런 이유로 웹 서버 시스템을 저렴하게 구축하고 관리할 수 있어 많이 사용된다.
이 가이드에서는 다음과 같은 프로젝트를 진행한다.
– 응용 소프트웨어 소스 빌드 및 실행
Apqche httpd-2.4.57
Mysql 5.7.14
PHP 7.1.9
– 웹서버 도메인 등록,
– 웹서버 SSL 적용
– WordPress 프로젝트 배포
이 가이드에서 사용한 환경은 다음과 같다.
– FlexCloud : Ubuntu-22.04.03-LTS-x86_64-Zone6
– Ubuntu-22.04.03-LTS
2. 사전 작업
2-1) 도메인 네임 설정
이 가이드 중 SSL 파트를 진행하는 경우 네임서버에 등록할 자신의 도메인이 필요하다.
도메인은 내도메인.한국이나 가비아 등의 도메인 업체를 통해 구매 발급할 수 있고, 해당 서비스마다 가이드라인이 제공되므로 이를 참고하여 발급하면 된다.
필자는 내도메인.한국에서 무료 도메인을 생성했다. 주의할 것은, 도메인을 발급받는 것에서 끝내면 안 되고, 도메인과 VM의 IP 주소를 도메인 생성 시 연결해주어야 한다.
내도메인.한국 도메인 발급 및 IP 주소 연결 방법
내도메인.한국에 계정을 생성(회원가입)을 하고 진행해야 한다.
자신이 짓고 싶은 도메인 이름을 검색하고 [등록하기] 버튼이 활성화 되어있는 것들 중 마음에 드는 것을 선택한다.


필자는 맨 위에shjtest.p-e.kr 도메인을 발급받았다.

보안코드 입력창이 나오면 보고 입력한다.

내도메인.한국 사이트에서 도메인을 발급하고 VM의 IP를 연결해주었다.
2-2) 패키지 설치
아래 커맨드를 통해 apt 패키지 매니저 업그레이드를 진행하였다.
apt update
추가적으로 필요한 패키지들을 설치한다.
apt install -y gcc g++ build-essential libexpat1-dev libssl-dev libxml2-dev libtool cmake libboost-all-dev libncurses5-dev libncursesw5-dev autoconf bison re2c libnghttp2-dev libcurl4-openssl-dev libmysqlclient-dev libpng-dev libjpeg-dev libfreetype6-dev libtool-bin
3. Apache 소스 설치
3-1) 소스파일 다운로드
본 매뉴얼에서는 /home 밑에 apache, php, mysql을 설치할 것이다. 따라서 각각을 설치할 디렉토리를 만들어 주어야 한다.
우선 아파치 소스를 다운받을 디렉토리를 지정하고 설치할 디렉토리를 만들어주자.
vi /home/apache/conf/httpd.conf
#추가
ServerName shjtest.p-e.kr
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule rewrite_module modules/mod_rewrite.so
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
pcre 아카이브 링크는 저것이 맞는 것으로 보임
3-2) 의존성 패키지 및 Apache 컴파일 설치
apr 설치
cd /home/src/apr-1.7.4
./configure --prefix=/home/apr
cp -arp libtool libtoolTa
make && make install
apr-util 설치
cd /home/src/apr-util-1.6.3
./configure --prefix=/home/apr-util --with-apr=/home/apr
make && make install
pcre 설치
cd /home/src/pcre-8.45
./configure --prefix=/home/pcre
make && make install
Apache 컴파일 설치
cd /home/src/httpd-2.4.57
./configure --prefix=/home/apache \
--enable-module=so \
--enable-rewrite \
--enable-so \
--with-apr=/home/apr \
--with-apr-util=/home/apr-util \
--with-pcre=/home/pcre/bin/pcre-config \
--enable-mods-shared=all --enable-ssl \
--enable-ssl
make && make install
Apache 구성파일 편집
vi /home/apache/conf/httpd.conf
#추가
ServerName shjtest.p-e.kr
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule rewrite_module modules/mod_rewrite.so
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
<IfModule dir_module>
DirectoryIndex 지시어는 기본적으로 사용될 인덱스 파일 목록을 지정한다.
사용자가 웹 브라우저에서 요청을 보냈을 때, 서버가 기본적으로 보여줄 파일의 이름을 지정
mod_socache_shmcb 이 모듈은 SSL 세션 캐시를 메모리에 저장하는 모듈이다.
3-3)Apache에 SSL, DNS 적용
SSL 인증서 발급
letsencrypt라는 도구를 통해 SSL 인증서를 발급한다.
apt -y install letsencrypt
letsencrypt certonly --webroot --webroot-path=/home/apache/htdocs -d shjtest.p-e.kr
...
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): [이메일을 입력]
‘y’ 입력
‘y’ 입력
인증서 발급 경로
cd /etc/letsencrypt/live/shjtest.p-e.kr
ls -lrt
[명령 실행 결과]
total 4
lrwxrwxrwx 1 root root 41 Sep 13 10:39 privkey.pem -> ../../archive/shjtest.p-e.kr/privkey1.pem
lrwxrwxrwx 1 root root 43 Sep 13 10:39 fullchain.pem -> ../../archive/shjtest.p-e.kr/fullchain1.pem
lrwxrwxrwx 1 root root 39 Sep 13 10:39 chain.pem -> ../../archive/shjtest.p-e.kr/chain1.pem
lrwxrwxrwx 1 root root 38 Sep 13 10:39 cert.pem -> ../../archive/shjtest.p-e.kr/cert1.pem
-rw-r--r-- 1 root root 692 Sep 13 10:39 README
이 작업을 진행하기 위해 반드시 위에서 안내한 DNS 발급 및 IP 포워딩 적용을 먼저 진행해야만 한다.
이 작업을 하기 위해서는 방화벽에서 80 443 포트 애니오픈하고 ip 붙이기를 필수적으로 진행해야한다.
Apache에 SSL 인증서 키 추가
vi /home/apache/conf/extra/httpd-ssl.conf
<VirtualHost _default_:443>
DocumentRoot "/home/apache/htdocs"
#추가
ServerName shjtest.p-e.kr
ServerAdmin example.com
ErrorLog "/home/apache/logs/error_log"
TransferLog "/home/apache/logs/access_log"
SSLEngine on
#수정
SSLCertificateFile /etc/letsencrypt/live/shjtest.p-e.kr/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/shjtest.p-e.kr/privkey.pem
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
#수정
<Directory "/home/apache/htdocs"> #해당 디렉토리 내의 파일에 대한 SSL 관련 옵션을 적용. 이 디렉토리에 SSL 관력 옵션이 적용된다는 것
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-5]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog "/home/apache/logs/ssl_request_log" \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
httpd-ssl.conf 파일을 편집해 SSL 인증서 키를 추가한다. 굵은 글씨로 되어있는 부분을 추가 혹은 수정하면 된다.
httpd.conf 파일을 편집해 다음 내용을 추가한다..
vi /home/apache/conf/httpd.conf
#추가
Include /home/apache/conf/extra/httpd-ssl.conf
<VirtualHost *:80>
DocumentRoot "/home/apache/htdocs/ "
ServerName shjtest.p-e.kr
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]
</VirtualHost>
구성 파일에 문법적 문제가 있는지 테스트한다.
/home/apache/bin/apachectl configtest
Syntax O <- 문법에 문제가 없을 때
아파치 웹서버 재기동
/home/apache/bin/apachectl restart
브라우저에 도메인을 입력하고 DocumentRoot에 index.html 테스트 페이지가 뜨면 성공이다.
shjtest.p-e.kr

Apache systemd 등록
Apache를 System 데몬에 등록하여 systemctl 명령어로 동작을 제어할 수 있게 한다.
vi /etc/systemd/system/httpd.service
[Unit]
Description=The Apache HTTP Server
After=network.target
[Service]
Type=forking
ExecStart=/home/apache/bin/apachectl start
ExecStop=/home/apache/bin/apachectl stop
ExecReload=/home/apache/bin/apachectl graceful
PIDFile=/home/apache/logs/httpd.pid
[Install]
WantedBy=multi-user.target
system 데몬에 잘 올라갔는지 테스트한다.
#시스템 데몬 리로드
systemctl daemon-reload
#Apache 서비스를 부팅 시 자동으로 시작되도록 설정
systemctl enable httpd
#Apache 서비스 시작
systemctl start httpd
4. PHP: 7.1.9 소스 설치
PHP 설치 소스 파일을 다운로드하고 압축 해제한다.
cd /home/src
tar xvfz php-7.1.9.tar.gz
cd /home/src/php-7.1.9
./configure –prefix=/home/php –with-apxs2=/home/apache/bin/apxs –enable-mysqlnd –with-mysql-sock=mysqlnd –with-mysqli=mysqlnd –with-pdo-mysql=mysqlnd –with-curl –enable-fpm –enable-mbregex –enable-mbstring –enable-maintainer-zts
make && make install
PHP 설치 디렉토리를 확인해보자.
ls -lrt /home/php
total 28 #명령 실행 결과
drwxr-xr-x 3 root root 4096 Sep 4 16:30 lib
drwxr-xr-x 4 root root 4096 Sep 4 16:30 var
drwxr-xr-x 2 root root 4096 Sep 4 16:30 sbin
drwxr-xr-x 4 root root 4096 Sep 4 16:30 php
drwxr-xr-x 3 root root 4096 Sep 4 16:30 include
drwxr-xr-x 3 root root 4096 Sep 4 16:30 etc
drwxr-xr-x 2 root root 4096 Sep 4 16:30 bin
# php -v 명령으로 버전에 맞게 컴파일 설치가 되었는지 확인
/home/php/bin/php -v
PHP 7.1.9 (cli) (built: Sep 4 2024 16:29:36) ( ZTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
httpd-ssl.conf 파일을 편집해 VirtualHost 부분에 다음 내용을 추가한다.
vi /home/apache/conf/extra/httpd-ssl.conf
< VirtualHost _default_:443>
DocumentRoot "/home/apache/htdocs"
ServerName shjtest.p-e.kr
ServerAdmin 1c2649394@gmail.com
ErrorLog "/home/apache/logs/error_log"
TransferLog "/home/apache/logs/access_log"
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/shjtest.p-e.kr/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/shjtest.p-e.kr/privkey.pem
<FilesMatch "\.(.php)$">
SetHandler "proxy:unix:/home/php/run/php/php-fpm.sock|fcgi://localhost"
</FilesMatch>
<Directory "/home/apache/htdocs">
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-5]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog "/home/apache/logs/ssl_request_log" \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
/php/etc/php-fpm.d/www.conf 파일을 수정한다.
cd /home/php/etc/php-fpm.d
cp www.conf.default www.conf
vi www.conf
#수정
user = daemon
group = daemon
listen = /home/php/run/php/php-fpm.sock
listen.owner = daemon
listen.group = daemon
chdir = /
php-fpm.sock: PHP-FPM 프로세스와 웹 서버 간의 통신을 처리
php-fpm.sock 파일이 올라갈 디렉토리를 생성해준다.
mkdir -p /home/php/run/php
아파치가 소켓파일에 접근할 수 있도록 사용자를 변경하고 권한을 조정한다.
chown daemon:daemon /home/php/run/php/php-fpm.sock
chmod 660 /home/php/run/php/php-fpm.sock
환경변수를 편집해 php 명령어를 호출할 수 있게 만든다.
vi ~/.bashrc
#추가
export PATH=$PATH:/home/php/bin
/home/php/bin이 아닌 다른 디렉토리에서 php -v 명령을 실행해보자.
php -v
[명령 실행 결과]
PHP 7.1.9 (cli) (built: Aug 26 2024 13:51:18) ( ZTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
php-fpm.conf 파일이 위에서 편집한 www.conf 파일을 포함하고 있는지 확인하고 필요한 부분을 수정해준다.
cd /home/php/etc
cp php-fpm.conf.default php-fpm.conf
vi php-fpm.conf
[global]
; Pid file
pid = /home/php/var/run/php-fpm.pid ;주석해제
;Error log file
error_log = /home/php/var/log/php-fpm.log ;주석해제
php-fpm.pid : 프로세스의 프로세스 ID(PID)를 저장하는 파일
Proxy: proxy:는 Apache의 mod_proxy 모듈을 사용하여 요청을 다른 서버나 프로세스로 전달하도록 지시합니다. 여기서는 PHP-FPM 프로세스를 가리킵니다.
DocumentRoot에 info.php파일을 생성해준다.
vi /home/apache/htdocs/info.php
<?php
phpinfo();
?>
아파치 웹서버 리스타트
systemctl restart httpd
php-fpm : PHP 스크립트를 처리하기 위한 프로세스 관리자로, 웹 서버와 PHP 간의 효율적인 통신을 지원

info.php 내용 브라우저 출력 성공. Apache – PHP 연동이 완료되었다.
5. MySQL 소스 설치
5-1) 소스파일 다운로드 및 컴파일
MySQL 5.7.14 버전 소스파일을 다운로드하고 압축파일을 해제한다.
mysql 아카이브에서 소스파일을 다운로드한다.
cd /home/src
tar xvfz mysql-5.7.14.tar.gz
그런데 이 상태에서 MySQL을 압축해제한 /home/src/mysql-5.7.14 디렉토리에서 바로 컴파일을 하면 오류가 생긴다.
MySQL은 소스파일을 압축해제한 디렉토리 밑에 별도의 빌드용 디렉토리에서 소스를 컴파일 하고 설치할 것을 강제하고 있다.
mkdir /home/src/mysql-5.7.14/mysqlBuild
cd /home/src/mysql-5.7.14/mysqlBuild/
cmake로 MySQL 소스를 컴파일하고 설치해주자/
cmake .. \
-DCMAKE_INSTALL_PREFIX=/home/mysql \
-DMYSQL_DATADIR=/home/mysql/data \
-DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DSYSCONFDIR=/etc \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/home/mysql/boost
make && make install
5-2) MySQL 서버 사용자 추가.
MySQL 서버를 시작해주자.
MySQL을 명령어로 조작할 수 있도록 환경 변수를 등록한다.
vi ~/.bashrc
export PATH=$PATH:/home/mysql/bin ß 추가
source ~/.bashrc # 현재 로그인한 계정에만 환경변수 적용
mkdir /home/mysql/data
OS 서비스 사용자 mysql을 추가하고 MySQL 데이터 디렉토리에 대한 권한을 부여한다
#OS에 mysql 사용자 추가
useradd -s /sbin/nologin mysql
#mysql 사용자에게 소유권 부여
chown -R mysql:mysql /home/mysql/data
OS mysql 사용자의 쉘을 사용 못 하게 한다.
패스워드를 넣어버리면 로그인이 OS로 되기 때문에 하나의 공유 포인트가 생겨버림 -> 보안상 위험.
시스템 데몬을 사용하기 위한 사용자 생성일 뿐이므로 로그인 자체를 막는게 좋다.
nologin으로 주면 FTP만 사용가능하고 쉘은 사용 불가. bash 쉘을 주었을 때는 쉘 사용 가능. 한마디로 불필요한 사용자 접근의 방지가 목적이다.
이름을 구분값이 필요. mysql이라는 이름을 사용하면 기본 DB와 헷갈릴 위험이 있다.
MySQL 테이블 초기화
mysqld --initialize --user=mysql
MySQL 데이터베이스 서버는 실행될 때 my.cnf를 참조하여 프로세스를 올리게 된다.
/etc/my.cnf에 아래와 같이 작성한다.
vi /etc/my.cnf
[mysqld]
socket=/tmp/mysql.sock
datadir=/home/mysql/data
pid-file=/home/mysql/data/mysql.pid
log-error=/home/mysql/data/mysql-error.log
[client]
socket=/tmp/mysql.sock
MySQL 소켓 파일 : MySQL은 클라이언트와 서버 간의 통신을 위해 소켓 파일을 사용한다.
MySQL 안전모드 실행
mysqld_safe --skip-grant-tables &
root 사용자로 접속
mysql -u root
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '[새로운비밀번호]';
EXIT;
MySQL을 중지하고 다시 시작한다.
/home/mysql/support-files/mysql.server stop
/home/mysql/support-files/mysql.server start
그리고 다시 root 사용자로 접속한다.
mysql -u root -p
Enter password:[설정한 root 비밀번호 입력]
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.14 Source distribution
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
mysql 사용자 ‘mysql’을 추가한다. 위에서 추가한 리눅스 서비스 사용자 mysql과는 다름에 유의한다.
mysql> CREATE USER 'mysql'@'localhost' IDENTIFIED BY '[사용할비밀번호]';
mysql> EXIT;
‘mysql’사용자로 MySQL에 접속하여 DB 사용자가 정상적으로 추가되었는지 확인한다.
본 매뉴얼에서는 mysql 사용자 비밀번호를 ‘s3021502’로 설정해주었다.
mysql -u mysql -p
5-3) MySQL Systemd 등록
MySQL을 system 데몬에 등록해서 MySQL을 systemctl로 사용할 수 있게 한다.
vi /etc/systemd/system/mysql.service
[Unit]
Description=Mysql Community Server
After=network.target syslog.target
[Service]
Type=forking
User=mysql
Group=mysql
ExecStart=/home/mysql/support-files/mysql.server start
ExecStop=/home/mysql/support-files/mysql.server stop
Restart=10
Restart=always
[Install]
WantedBy=multi-user.target
시스템 데몬 리로드 및 시작
(먼저 mysql을 중지하고 진행해야한다)
/home/mysql/support-files/mysql.server stop
systemctl daemon-reload
systemctl enable mysql
systemctl start mysql
5-4) PHP-MySQL DB 커넥션 테스트
MySQL 소스설치가 완료되었으니 PHP와의 연결 테스트를 진행해야 한다.
test_database이름의 테스트 DB를 생성한다.
mysql -u root -p
[root 비밀번호 입력]
CREATE DATABASE test_database;
# 'mysql' 사용자에게 데이터베이스에 대한 모든 권한을 부여
GRANT ALL PRIVILEGES ON test_database.* TO 'mysql'@'localhost';
FLUSH PRIVILEGES;
EXIT
DB 연결테스트 페이지 코딩
vi /home/apache/htdocs/test_db.php
<?php
$mysqli = new mysqli("127.0.0.1", "mysql", "[mysql 사용자비밀번호]", "test_database");
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
echo "Connected successfully to the MySQL database.";
?>
브라우저에 주소를 다시 입력해서 DB 커넥션을 테스트한다.

6. WordPress 구축
6-1) 워드프레스용 DB 생성
#mysql에 root 사용자로 접속
mysql -u root -p
[패스워드 입력]
#DB 생성
create database wp_db;
#DB 사용자 생성
create user wp_user@localhost identified by 's3021502';
# wp_user DB사용자에게 wp_db DB에 대한 모든 권한 부여
grant all on wp_db.* to wp_user@localhost;
EXIT
cd /home/apache/htdocs
tar xvfz wordpress-5.2.4-ko_KR.tar.gz
mv wordpress-5.2.4-ko_KR.tar.gz /home/src/
6-2) WordPress 소스 다운로드
도메인으로 곧장 브라우저에서 워드프레스에 접속할 수 있게 하기 위해서는 DocumentRoot를 수정해줘야 한다.
vi /home/apache/conf/extra/httpd-ssl.conf
<VirtualHost _default_:443>
# DocumentRoot 수정
DocumentRoot "/home/apache/htdocs/wordpress"
마찬가지로 httpd.conf 파일의 80포트 부분의 DocumentRoot와 디렉토리를 바꾸어주자.
<VirtualHost *:80>
DocumentRoot "/home/apache/htdocs/wordpress"
ServerName shjtest.o-r.kr
<Directory "/home/apache/htdocs/wordpress">
</Directory>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]
</VirtualHost>
cp 명령어를 이용해 wp-sample-config.php 파일을 wp-config.php이라는 이름의 파일로 복사한다
cd /home/apache/htdocs/wordpress
cp wp-config-sample.php wp-config.php
wp-config.php 워드프레스 설정파일을 편집한다.
본 설정파일에서는 워드프레스와 연동되는 DB의 이름, 사용자, 비밀번호, 호스트명을 정의한다.
위에서 생성한 ‘wp_db’와 연동을 설정하는 부분이다.
vi wp-config.php
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wp_db' );
/** MySQL database username */
define( 'DB_USER', 'wp_user' );
/** MySQL database password */
define( 'DB_PASSWORD', 's3021502' );
/** MySQL hostname */
define( 'DB_HOST', '127.0.0.1' );
Apache를 다시 시작한다.
systemctl restart httpd
6-3) WordPress 설치
6-2)까지의 과정이 정상적으로 되었다면, 브라우저에 도메인을 입력했을 때 다음과 같이 워드프레서 설치 초기 화면이 뜰 것이다.

초기 화면이 나타나면 사이트 제목, 사용자명, 암호, 이메일 주소를 입력하고 [워드프레스 설치하기]를 클릭해 설치하면 된다.
설치가 완료되었으면 로그인을 시도한다. 바로 위에서 설정한 사용자명과 비밀번호를 입력하면 된다.


로그인이 성공했을 때 볼 수 있는 관리자 화면이다.
브라우저에서 다른 창을 띄우고 다시 도메인을 입력해보자.
아래와 같이 워드프레스 웹 사이트가 뜰 것이다.

이미지를 포함한 글을 하나 생성해보자.

로그인을해서 글을 하나 생성한다.





사이트에 이미지를 포함한 글 까지 잘 올라갔다.
여기까지 해서 APM 소스설치와 그것에 이은 WordPress 설치, 사이트 구축까지 완료되었다.
Apache – PHP-fpm 연동
PHP-FPM(PHP Fast Process Manager): 웹 서버에서 PHP 스크립트를 효율적으로 처리하기 위해 사용되는 PHP를 실행 소프트웨어.
PHP 5.2.0 버전부터 추가
PHP의 FastCGI 구현체로, 웹 서버와 PHP 애플리케이션 간의 통신을 효율적으로 관리하는 데 사용된다. 높은 트래픽을 처리할 때 성능을 향상시키고 안정성을 높여준다.
FastCGI는 요청을 처리하는 방식을 최적화하여, 더 빠르고 효율적으로 PHP 스크립트를 실행할 수 있게 하는 프로토콜로, 응답 속도와 처리 능력이 크게 개선된다.
동작 원리
1. 웹 서버(예: Nginx, Apache)가 사용자의 요청을 받는다.
2. 처리 요청이 PHP 스크립트인 경우, 웹 서버는 PHP-FPM에 이 요청을 전달한다.
3. PHP-FPM 처리: PHP-FPM은 전달받은 요청에 따라 PHP 스크립트를 실행하고 처리 결과를 웹 서버에 다시 전달한다.
4. 웹 서버는 최종적으로 사용자에게 결과를 보여준다.
아파치 관련 설정파일
vi httpd.conf
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
vi extra/httpd-ssl.conf
<FilesMatch "\.php$">
SetHandler "proxy:unix:/home/php/run/php/php-fpm.sock|fcgi://localhost"
</FilesMatch>
mod_proxy: Apache가 다른 서버(여기서는 PHP-FPM)로 요청을 전달할 수 있도록 해줌. 아파치가 프록시 역할을 해서 php-fpm한테 요청을 전달
mod_proxy_fcgi: FastCGI 프로토콜을 사용하여 PHP-FPM과 통신할 수 있도록 해줌.
<FilesMatch>: 이 설정은 특정 파일 확장자(예: .php)에 대해 Apache가 어떻게 처리할지를 지정
SetHandler: Apache 설정에서 특정 파일 형식에 대한 요청을 처리하는 방법을 정의
proxy: Apache가 요청을 다른 서버로 전달하는 프록시 기능을 사용하겠다는 의미
unix:/home/php/run/php/php-fpm.sock: PHP-FPM과의 통신을 위해 Unix 소켓을 사용하겠다는 의미
php 관련 설정파일
vi /home/php/etc/php-fpm.d/www.conf
listen = /home/php/run/php/php-fpm.sock
listen = /home/php/run/php/php-fpm.sock: PHP-FPM이 이 소켓 파일을 통해 요청을 수신한다.
이 아파치와 PHP가 요청과 처리결과를 전달할 때.
소켓: 소켓은 네트워크에서 데이터를 주고받기 위한 엔드포인트. 간단히 말해, 프로그램이 서로 통신하기 위해 사용하는 “전화선”과 같은 것
Unix 소켓: Unix 소켓은 같은 컴퓨터 내의 프로세스 간 통신에 사용되는 매커니즘. 네트워크 소켓과 달리, 같은 머신에서 동작하는 두 프로세스 간의 빠르고 효율적인 통신 방법

Php 프로세스 중지/시작
pkill php-fpm
/home/php/sbin/php-fpm
PHP-FPM 연동 방식
장점:
- 성능: PHP-FPM은 프로세스 풀이 관리되어 더 많은 요청을 효율적으로 처리할 수 있음
- 비동기 처리: 여러 요청을 동시에 처리할 수 가능. 높은 트래픽 처리
- 유연성: PHP-FPM은 다양한 PHP 버전을 관리할 수 있음 -> 여러 애플리케이션을 동시에 운영하기 용이함
단점:
- 구성 복잡성: 설정이 상대적으로 복잡할 수 있고, 초보자가 접근하기 어려울 수 있음
- 리소스 소비: 프로세스를 따로 관리해야 하므로 메모리 사용량이 증가할 수 있습니다.
모듈 연동 방식
장점:
- 단순성: 아파치에 PHP 모듈을 직접 로드하는 방식으로 설정이 간단하고 직관적
- 낮은 리소스 소비: 프로세스 관리가 필요 없으므로, 메모리 사용량이 상대적으로 적음
단점:
- 성능 저하: 높은 트래픽 상황에서 성능이 떨어질 수 있음
- 안정성 문제: 하나의 요청에서 문제가 발생하면 서버 전체에 영향을 줄 수 있음
- 버전 관리의 어려움: PHP 버전을 변경할 때 아파치 서버를 재시작해야 하는 불편함이 존재
결론적으로, 높은 성능과 안정성을 원한다면 PHP-FPM을 추천하고, 간단한 설정과 저렴한 리소스 사용을 원한다면 모듈 연동 방식을 선택할 수 있다.