apache와 php, mysql을 리눅스와 사용하면
Linux, Apache, PHP, MySQL을 앞글자만 사용하여 LAMP라고 표현합니다.
LAMP를 설치하기 위한 과정은 전 글을 참고하여 진행할 수 있습니다.
2024.03.28 - [OS/Linux] - Centos7 apache 2.4, apr설정, php 7.4.33, sqlsrv 설치 및 연동 (1)
Centos7 apache 2.4, apr설정, php 7.4.33, sqlsrv 설치 및 연동 (1)
들어가기 앞서... 일반적으로 바이너리 설치를 통해 소프트웨어를 설치할 때는 정해진 옵션을 사용하여 간단한 몇 가지 명령어로 설치할 수 있습니다. 반면, 소스 코드를 컴파일하여 소프트웨어
engineer1.tistory.com
더욱 간편하게 하기 위해 스크립트를 사용하여 자동화를 하는 방법이 있어 추후 소개해드리도록 하겠습니다.
반면 LEMP는 Apache가 아닌 Nginx를 사용하여 구성하는 것을 의미합니다.
오늘은 Nginx, php, mysql을 소스 컴파일로 설치하여 구성하는 방법을 알아보겠습니다.
진행 환경은 centos7의 root계정이고
Nginx 1.25.4, MySQL 5.5, PHP 8.2.4입니다.
1. 기본 설정
1-1) 소스파일 디렉터리 생성 및 레포 등록
mkdir /usr/local/src/NPM_Setup
yum install -y vim wget epel-release
yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum update -y
1-2) 필수 패키지 설치 및 환경변수 등록
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig:/usr/lib64/pkgconfig:/usr/lib/pkgconfig
echo "NGINX_HOME=/usr/local/nginx" >> /etc/profile
echo "MySQL_HOME=/usr/local/mysql" >> /etc/profile
echo "PHP_HOME=/usr/local/php" >> /etc/profile
echo "PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig:/usr/lib64/pkgconfig:/usr/lib/pkgconfig" >> /etc/profile
echo "PATH=$PATH:$PKG_CONFIG_PATH:$NGINX_HOME/sbin:$PHP_HOME/bin:$PHP_HOME/sbin:$MySQL_HOME/bin" >>/etc/profile
source /etc/profile
yum install -y libdb-devel enchant-devel libxslt libxslt-devel net-snmp-devel readline-devel readline aspell-devel unixODBC unixODBC-devel libicu-devel icu libicu libc-client libc-client-devel libc-client-2007f freetype-devel freetype* freetype libXpm libXpm-devel libpng-devel libpng* libvpx-devel libvpx libcurl libcurl-devel curl* curl-devel curl tcp_wrappers-devel libzip environment-modules uw-imap-utils uw-imap-devel uw-imap uw-imap-static pam-devel libldb-devel openldap-devel cyrus-sasl-devel bzip2-devel bzip2 bzip2-libs ncurses-devel ncurses mysql-devel libjpeg-devel libjpeg* libjpeg-devel openssl-devel openssl* openssl-libs libxml* libxml2 libxml2-devel libmcrypt libmcrypt-devel libmcrypt* mcrypt mhash* mhash mhash-devel libmhash libmhash-devel expat-devel expat expat* gmp* gmp gmp-devel krb5* krb5-devel db4 db4-devel wget make cmake libtool* pcre* gdbm* gdbm gdbm-devel libtiff* libtiff libtiff-devel flex zlib* zlib-devel zlib gd* gd gd-devel patch t1lib t1lib-devel readline libedit-devel libtidy libtidy-devel gcc* gcc gcc-c++ libtermcap-devel dialog sqlite-devel oniguruma oniguruma-devel libzip5 mod_ssl postgresql-devel lcov systemtap-sdt-devel mod_ldap elfutils-devel libwebp-devel libwebp git gzip libnghttp2-devel valgrind* mod_proxy* editline editline-devel patchelf systemd-devel ImageMagick-devel libzstd-devel libffi libffi-devel libraqm-devel libraqm libsodium libsodium-devel perl-ExtUtils-Embed gperftools-devel libatomic_ops-devel tree geoip-devel
1-3) 버전 화환성 관련 및 64비트 호환 관련 설정
nginx의 모든 모듈을 설치하며 필요한 도구들의 버전을 맞춥니다.
# openldap 호환
cp -arpf /usr/lib64/libldap* /usr/lib/
ln -sf /usr/lib64/libm.so /usr/lib/libm.so
ln -sf /usr/lib64/libssl.so /usr/lib/libssl.so
# libXpm 모듈 32비트 호환
ln -s /usr/lib64/libXpm.so /usr/lib/
ln -s /usr/lib64/libXpm.so.4 /usr/lib/
ln -s /usr/lib64/libXpm.so.4.11.0 /usr/lib/
# cmake 최신버전 설치
cd /usr/local/src/NPM_Setup
wget https://github.com/Kitware/CMake/releases/download/v3.26.3/cmake-3.26.3.tar.gz
tar zxvf cmake-3.26.3.tar.gz
cd cmake-3.26.3
./bootstrap --prefix=/usr/local
make && make install
# pcre2 버전 최신버전 설치
cd /usr/local/src/NPM_Setup
wget https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.42/pcre2-10.42.tar.gz
tar zxvf pcre2-10.42.tar.gz
cd pcre2-10.42
./configure --prefix=/usr/local --enable-pcre2-8 --enable-pcre2-16 --enable-pcre2-32 --enable-jit --enable-jit-sealloc --enable-pcre2grep-jit --enable-pcre2grep-callout --enable-pcre2grep-callout-fork --enable-unicode --enable-pcre2grep-libz --enable-pcre2grep-libbz2 --enable-pcre2test-libreadline --enable-valgrind --enable-fuzz-support --enable-percent-zt --with-gnu-ld --with-pcre2grep-bufsize=20480 --with-pcre2grep-max-bufsize=1048576 --with-link-size=2 --with-parens-nest-limit=250 --with-heap-limit=20000000 --with-match-limit-depth=MATCH_LIMIT
make -j && make install
# libgd 최신버전 설치
cd /usr/local/src/NPM_Setup
wget https://github.com/libgd/libgd/releases/download/gd-2.3.3/libgd-2.3.3.tar.gz
tar zxvf libgd-2.3.3.tar.gz
cd libgd-2.3.3
./configure --prefix=/usr/local --with-pic --with-aix-soname=both --with-x --with-gnu-ld --with-libiconv-prefix --with-zlib --with-png --with-freetype --with-raqm --with-fontconfig --with-jpeg --with-xpm --with-tiff --with-webp
make -j && make install
# libzip 최신버전 설치
cd /usr/local/src/NPM_Setup
wget https://libzip.org/download/libzip-1.9.2.tar.gz
tar zxvf libzip-1.9.2.tar.gz
mkdir libzip-1.9.2/build
cd libzip-1.9.2/build
cmake ../ -DCMAKE_INSTALL_PREFIX=/usr/local -DENABLE_BZIP2=1 -DENABLE_COMMONCRYPTO=1 -DENABLE_GNUTLS=1 -DENABLE_LZMA=1 -DENABLE_MBEDTLS=1 -DENABLE_OPENSSL=1 -DENABLE_ZSTD=1 -DLIBZIP_DO_INSTALL=1 -DSHARED_LIB_VERSIONNING=1
make -j && make install
2. Nginx
2-1) Nginx 다운로드 및 설치
nginx의 압축폴더를 다운로드하기 위해서 링크에 접속하여 필요한 버전을 선택하시면 됩니다.
cd /usr/local/src/NPM_Setup
wget http://nginx.org/download/nginx-1.25.4.tar.gz
tar zxvf nginx-1.25.4.tar.gz
cd nginx-1.25.4
2-2) nginx 소스 컴파일 및 설치
# nginx 소스 컴파일 설치
./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--modules-path=/usr/local/nginx/modules \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--error-log-path=/usr/local/nginx/logs/error_log \
--user=nobody \
--group=nobody \
--with-threads \
--with-select_module \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_xslt_module \
--with-http_image_filter_module \
--with-http_geoip_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_auth_request_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_degradation_module \
--with-http_slice_module \
--with-http_stub_status_module \
--with-http_perl_module \
--http-log-path=/usr/local/nginx/logs/access_log \
--http-client-body-temp-path=/usr/local/nginx/tmp/body \
--http-proxy-temp-path=/usr/local/nginx/tmp/proxy \
--http-fastcgi-temp-path=/usr/local/nginx/tmp/fastcgi \
--http-uwsgi-temp-path=/usr/local/nginx/tmp/uwsgi \
--http-scgi-temp-path=/usr/local/nginx/tmp/scgi \
--with-mail \
--with-mail_ssl_module \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module \
--with-stream_geoip_module \
--with-stream_ssl_preread_module \
--with-google_perftools_module \
--with-compat \
--with-pcre \
--with-pcre-jit \
--with-libatomic \
--with-debug
make -j && make install
mkdir -p /usr/local/nginx/tmp
chown -R nobody:nobody /usr/local/nginx/tmp
필요한 환경에 따라 설정을 바꾸거나 첨삭해 주시면 됩니다!
2-3) systemd 등록
# 서비스 등록
echo "[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/bin/rm -f $PIDFile
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
#ExecReload=/bin/kill -s HUP $MAINPID
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target" >> nginx.service
이후 systemctl start nginx로 실행하여 정상적으로 웹페이지가 작동하는 것을 확인합니다,
2-4) conf 변경
php와 연동을 하기 위해. php파일을 인식하여 php로 넘겨주는 설정을 해야 합니다.
vi /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name localhost;
root /usr/local/nginx/html/; # 추가
index index.php index.html index.htm; # 추가
#location / { # 주석처리
# root html;
# index index.html index.htm;
#}
location ~ \.php$ { # 주석 해제
fastcgi_pass unix:/usr/local/php/var/run/php-fpm/php-fpm.sock; # 소켓 사용
# fastcgi_pass 127.0.0.1:9000; # TCP포트 사용
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
nginx와 php서버를 분리한 환경에서 9000 포트를 사용하여 nginx와 php-fpm간의 통신을 연결해야 하지만,
nginx와 php서버를 같이 사용한다면 소켓을 사용하여 tcp통신보다 빠르게 전달할 수 있습니다.
만약 9000포트를 사용하여 tcp통신을 구성하시고 싶으시면 반대로 주석을 처리하시면 됩니다.
서비스의 환경과 인프라에 맞게 설정을 변경하여 사용하시면 됩니다!
3. Mysql
mysql은 LAMP를 구성하는 과정과 동일하므로 생략하겠습니다.
# MySQL 사용자 생성
groupadd -g 400 mysql
useradd -u400 -g400 -d /usr/local/mysql -s /bin/false mysql
# MySQL을 다운로드하고 압축 해제
mkdir -p /usr/local/src/APM_Setup
cd /usr/local/src/APM_Setup
wget http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.5/mysql-5.5.62.tar.gz
tar zxvf mysql-5.5.62.tar.gz
cd /usr/local/src/APM_Setup/mysql-5.5.62
mkdir -p /usr/local/src/APM_Setup/mysql-5.5.62/build
cd /usr/local/src/APM_Setup/mysql-5.5.62/build
# MySQL을 컴파일하고 설치
cmake ../ \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_TCP_PORT=3306 \
-DCOMMUNITY_BUILD=1 \
-DENABLE_DTRACE=1 \
-DWITH_DEBUG=0 \
-DWITH_EMBEDDED_SERVER=1 \
-DWITH_LIBEDIT=1 \
-DWITH_LIBWRAP=1 \
-DWITH_PIC=1 \
-DWITH_SSL=system \
-DWITH_VALGRIND=1
make && make install
# MySQL을 설정 및 권한 수정
mv -f /etc/my.cnf /etc/my.cnf_source_before
cp -arpf ./support-files/my-innodb-heavy-4G.cnf /etc/my.cnf
sed -i 's/skip-locking/skip-external-locking/g' /etc/my.cnf
sed -i 's/#external-locking/skip-external-locking/g' /etc/my.cnf
mkdir -p /usr/local/mysql/logs
chown -R mysql:mysql /usr/local/mysql
chmod 711 /usr/local/mysql
chmod 751 /usr/local/mysql/bin
chmod 750 /usr/local/mysql/bin/*
chmod 755 /usr/local/mysql/bin/mysql
chmod 755 /usr/local/mysql/bin/mysqldump
ln -s /usr/local/mysql/lib/ /usr/local/mysql/lib64
# 데이터 베이스 초기화 및 스토리지 엔진 InnoDB로 변경
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
sed -i '/default-storage-engine = MYISAM/s/^/#/' /etc/my.cnf
sed -i '/#default-storage-engine = MYISAM/a default-storage-engine = InnoDB' /etc/my.cnf
# 로그 로테이트 설정
mkdir /root/bin
cp -arpf ./support-files/mysql-log-rotate /root/bin/
echo " " >> /etc/crontab
echo "0 0 * * * root /usr/sbin/logrotate -f /root/bin/mysql-log-rotate" >> /etc/crontab
# 암호 설정
/etc/init.d/mysqld restart
echo "MySQL root 비밀번호를 설정하세요:"
read -s MYSQL_ROOT_PASSWORD
/usr/local/mysql/bin/mysqladmin -u root password $MYSQL_ROOT_PASSWORD
# systemd 설정
echo "[Unit]
Description=MySQL Server
After=network.target
[Service]
Type=simple
PIDFile=/usr/local/mysql/data/mysql.pid
ExecStart=/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/mysql.pid
ExecStop=/usr/local/mysql/bin/mysqladmin -uroot shutdown
ExecReload=/bin/kill -HUP \$MAINPID
Restart=always
[Install]
WantedBy=multi-user.target
" >> /lib/systemd/system/mysql.service
4. PHP
php 또한 유사하지만, php-fpm.sock을 생성하는 과정을 추가하였습니다.
# PHP imap 관련 모듈 64비트 32비트 라이브러리 호환설정
ln -s /usr/lib64/libc-client.a /usr/lib/libc-client.a
unlink /usr/include/db.h
ln -s /usr/include/libdb4/db.h /usr/include/db.h
ln -s /usr/include/sqlext.h /usr/local/include/sqlext.h
ln -s /usr/lib64/libgdbm_compat.so /usr/local/lib64/libdbm.so
# PHP 이미지모듈 64비트 32비트 라이브러리 호환설정
ln -s /usr/lib64/libjpeg.so /usr/lib
ln -s /usr/lib64/libpng.so /usr/lib
# PHP 8.2 다운로드 및 배포
cd /usr/local/src/NPM_Setup
wget https://www.php.net/distributions/php-8.2.4.tar.gz
tar zxvf php-8.2.4.tar.gz
cd php-8.2.4
# PHP 컴파일 설정
./configure --prefix=/usr/local/php --enable-zts --enable-roxen-zts --enable-fpm --with-fpm-user=nobody --with-fpm-group=nobody --with-fpm-systemd --with-config-file-path=/usr/local/php/etc --disable-debug --with-external-pcre --enable-phpdbg --enable-phpdbg-debug --enable-phpdbg-readline --enable-dom --enable-bcmath --enable-cli --enable-cgi --enable-gcov --with-iconv --enable-sigchild --with-openssl --with-openssl-dir --with-system-ciphers --with-pcre-jit --with-zlib --with-zlib-dir --enable-opcache --enable-opcache-jit --enable-ctype --with-bz2 --enable-calendar --with-curl --enable-dba --enable-pcntl --with-pspell --with-zip --with-dbm --with-gdbm --enable-exif --with-ffi --enable-fileinfo --enable-filter --enable-ftp --enable-gd --with-external-gd --enable-gd-jis-conv --with-avif --with-webp --with-jpeg --with-xpm --with-freetype --enable-shmop --with-imap --with-imap-ssl --with-kerberos --enable-mbstring --enable-mbregex --enable-huge-code-pages --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --with-tidy --enable-tokenizer --with-xsl --enable-soap --with-ldap-sasl --with-ldap --enable-intl --with-mhash --with-gmp --with-gettext --with-enchant --enable-phar --enable-posix --enable-libgcc --with-snmp --with-libedit --with-readline --with-pear --with-libxml --enable-xmlwriter --enable-simplexml --enable-xml --enable-xmlreader --enable-session --enable-pdo --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-mysqlnd --with-mysql-sock=/tmp/mysql.sock
# lber 라이브러리 참조 못하여 강제적으로 넣어주기
sed -i 's/-lcrypto -lcrypt/-lcrypto -lcrypt -llber/g' /usr/local/src/NPM_Setup/php-8.2.4/Makefile
sed -i 's/-lcrypto -lcrypt/-lcrypto -lcrypt -llber/g' /usr/local/src/NPM_Setup/php-8.2.33/Makefile
make -j
make install
# php.ini 설정파일 수정
cp -arpf php.ini-development /usr/local/php/etc/php.ini
sed -i 's/;upload_tmp_dir =/upload_tmp_dir = \/tmp/g' /usr/local/php/etc/php.ini
sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 100M/g' /usr/local/php/etc/php.ini
sed -i 's/post_max_size = 8M/post_max_size = 100M/g' /usr/local/php/etc/php.ini
sed -i 's/memory_limit = 128M/memory_limit = 256M/g' /usr/local/php/etc/php.ini
sed -i 's/allow_url_fopen = On/allow_url_fopen = Off/g' /usr/local/php/etc/php.ini
sed -i 's/expose_php = On/expose_php = Off/g' /usr/local/php/etc/php.ini
sed -i 's/display_errors = Off/display_errors = On/g' /usr/local/php/etc/php.ini
sed -i 's/log_errors = Off/log_errors = On/g' /usr/local/php/etc/php.ini
sed -i 's/;error_log = syslog/error_log = syslog/g' /usr/local/php/etc/php.ini
sed -i 's/short_open_tag = Off/short_open_tag = On/g' /usr/local/php/etc/php.ini
sed -i 's/;date.timezone =/date.timezone = "Asia\/Seoul"/g' /usr/local/php/etc/php.ini
sed -i 's/session.gc_maxlifetime = 1440 /session.gc_maxlifetime = "3600"/g' /usr/local/php/etc/php.ini
# php-fpm 설정파일 및 데몬 설정
cp -f /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp -f /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
# /usr/local/php/etc/php-fpm.conf 설정파일 수정
sed -i 's/;pid = run\/php-fpm.pid/pid = \/usr\/local\/php\/var\/run\/php-fpm.pid/g' /usr/local/php/etc/php-fpm.conf
sed -i 's/;error_log = log\/php-fpm.log/error_log = \/usr\/local\/php\/var\/log\/php-fpm.log/g' /usr/local/php/etc/php-fpm.conf
sed -i 's/;syslog.facility = daemon/syslog.facility = daemon/g' /usr/local/php/etc/php-fpm.conf
sed -i 's/;syslog.ident = php-fpm/syslog.ident = php-fpm/g' /usr/local/php/etc/php-fpm.conf
sed -i 's/;log_level = notice/log_level = warning/g' /usr/local/php/etc/php-fpm.conf
sed -i 's/;log_limit = 4096/log_limit = 4096/g' /usr/local/php/etc/php-fpm.conf
sed -i 's/;log_buffering = no/log_buffering = yes/g' /usr/local/php/etc/php-fpm.conf
sed -i 's/;emergency_restart_threshold = 0/emergency_restart_threshold = 5/g' /usr/local/php/etc/php-fpm.conf
sed -i 's/;emergency_restart_interval = 0/emergency_restart_interval = 30s/g' /usr/local/php/etc/php-fpm.conf
sed -i 's/;process_control_timeout = 0/process_control_timeout = 20/g' /usr/local/php/etc/php-fpm.conf
sed -i 's/; process.max = 128/process.max = 1024/g' /usr/local/php/etc/php-fpm.conf
sed -i 's/; process.priority = -19/process.priority = -19/g' /usr/local/php/etc/php-fpm.conf
sed -i 's/;daemonize = yes/daemonize = yes/g' /usr/local/php/etc/php-fpm.conf
sed -i 's/;systemd_interval = 10/systemd_interval = 10/g' /usr/local/php/etc/php-fpm.conf
# /usr/local/php/etc/php-fpm.d/www.conf 설정파일 수정
mkdir /usr/local/php/var/run/php-fpm/ # 소켓 디렉터리 생성
sed -i 's/;listen.backlog = 511/listen.backlog = 65535/g' /usr/local/php/etc/php-fpm.d/www.conf
echo "net.core.somaxconn=65535" >> /etc/sysctl.conf
sysctl -p
sed -i 's/;listen.owner = nobody/listen.owner = nobody/g' /usr/local/php/etc/php-fpm.d/www.conf
sed -i 's/;listen.group = nobody/listen.group = nobody/g' /usr/local/php/etc/php-fpm.d/www.conf
sed -i 's/;listen.mode = 0660/listen.mode = 0660/g' /usr/local/php/etc/php-fpm.d/www.conf
sed -i 's/; process.dumpable = yes/process.dumpable = yes/g' /usr/local/php/etc/php-fpm.d/www.conf
sed -i 's/pm = ondemand/pm = dynamic/g' /usr/local/php/etc/php-fpm.d/www.conf
sed -i 's/pm = static/pm = dynamic/g' /usr/local/php/etc/php-fpm.d/www.conf
sed -i 's/pm.max_children = 5/pm.max_children = 64/g' /usr/local/php/etc/php-fpm.d/www.conf
sed -i 's/pm.start_servers = 2/pm.start_servers = 32/g' /usr/local/php/etc/php-fpm.d/www.conf
sed -i 's/pm.min_spare_servers = 1/pm.min_spare_servers = 32/g' /usr/local/php/etc/php-fpm.d/www.conf
sed -i 's/pm.max_spare_servers = 3/pm.max_spare_servers = 64/g' /usr/local/php/etc/php-fpm.d/www.conf
sed -i 's/;pm.process_idle_timeout/pm.process_idle_timeout/g' /usr/local/php/etc/php-fpm.d/www.conf
sed -i 's/;access.log = log/access.log = \/usr\/local\/php\/var\/log/g' /usr/local/php/etc/php-fpm.d/www.conf
sed -i 's/;access.format/access.format/g' /usr/local/php/etc/php-fpm.d/www.conf
sed -i 's/;slowlog = log\/\$pool.log.slow/slowlog = \/usr\/local\/php\/var\/log\/\$pool-slow.log/g' /usr/local/php/etc/php-fpm.d/www.conf
sed -i 's/;request_slowlog_timeout = 0/;request_slowlog_timeout = 10/g' /usr/local/php/etc/php-fpm.d/www.conf
sed -i '/^;listen = 127.0.0.1:9000$/a listen = /usr/local/php/var/run/php-fpm/php-fpm.sock' php-fpm.conf
# 소켓 위치 지정
# imagick 모듈 설치
cd /usr/local/src/NPM_Setup
wget https://pecl.php.net/get/imagick-3.7.0.tgz
tar zxvf imagick-3.7.0.tgz
cd imagick-3.7.0/
/usr/local/php/bin/phpize && ./configure --with-php-config=/usr/local/php/bin/php-config && make -j && make install
echo "[imagick]" >> /usr/local/php/etc/php.ini
echo "extension=imagick.so" >> /usr/local/php/etc/php.ini
echo " " >> /usr/local/php/etc/php.ini
# mcrypt 모듈 설치
cd /usr/local/src/NPM_Setup
wget https://pecl.php.net/get/mcrypt-1.0.4.tgz
tar zxvf mcrypt-1.0.4.tgz
cd mcrypt-1.0.4
/usr/local/php/bin/phpize && ./configure --with-php-config=/usr/local/php/bin/php-config && make -j && make install
echo "[mcrypt]" >> /usr/local/php/etc/php.ini
echo "extension=mcrypt.so" >> /usr/local/php/etc/php.ini
echo " " >> /usr/local/php/etc/php.ini
# systemd 설정
echo "[Unit]
Description=PHP FastCGI process manager
After=local-fs.target
After=network.target
After=nginx.service
[Service]
PIDFile=/usr/local/php/var/run/php-fpm.pid
# ExecStartPre=/bin/mkdir --parents %t/php
ExecStart=/usr/local/php/sbin/php-fpm --fpm-config /usr/local/php/etc/php-fpm.conf --nodaemonize
ExecReload=/bin/kill -USR2 $MAINPID
Type=simple
[Install]
WantedBy=multi-user.target" >> /lib/systemd/system/php-fpm.service
5. 연동 테스트
이제 nginx의 index파일을 수정하여 php와 nginx의 연동을 확인하겠습니다.
php형식으로 mysql의 연결을 확인하겠습니다.
vi /usr/local/nginx/html/index.php
<?php
// MySQL 연결 설정
$servername = "localhost"; // MySQL 서버 주소
$username = "root"; // MySQL 사용자 이름
$password = "password"; // MySQL 사용자 비밀번호
$dbname = "test"; // 사용할 데이터베이스 이름
// MySQL 연결 생성
$conn = new mysqli($servername, $username, $password, $dbname);
// 연결 확인
if ($conn->connect_error) {
die("MySQL 연결 실패: " . $conn->connect_error);
}
echo "MySQL 연결 성공!";
// 현재 시각을 가져오는 쿼리 실행
$sql = "SELECT CURRENT_TIMESTAMP";
$result = $conn->query($sql);
if ($result) {
// 결과 출력
$row = $result->fetch_row();
echo "현재 시각: " . $row[0];
} else {
echo "현재 시각을 가져올 수 없습니다.";
}
// MySQL 연결 종료
$conn->close();
?>
지정한 password를 바꿔주시고 localhost로 접속하시면
아래와 같은 페이지를 보실 수 있습니다.
이상으로 LEMP구성 방법을 마치겠습니다.
감사합니다.
'OS > Linux' 카테고리의 다른 글
letsencrypt를 사용하여 무료ssl 인증서 발급 및 적용 (0) | 2024.04.11 |
---|---|
ubuntu) LEMP(nginx + php + mysql) 설치 및 연동테스트 (0) | 2024.04.08 |
mod_jk를 활용하여 lb설정 하기 (0) | 2024.04.04 |
Ubuntu22.04) apache, tomcat 설치 및 연동 (mod_jk) (1) | 2024.04.03 |
centos7) apache, tomcat 설치 및 연동 (mod_jk) (2) | 2024.04.03 |