Last Updated on 1월 29, 2023 by Jade(정현호)
Contents
Rhymix
Rhymix는 XpressEngine 1.8 버전을 포크(fork)하여 개발되어지고 있는 PHP CMS(저작물 관리 시스템) 입니다.
XETOWN이라는 XE 사용자 커뮤니티에서 시작된 소프트웨어로, 흔히 라이믹스 라고 불리고 있습니다.
XE 는 현재 1.11.6 으로 큰 변화나 업데이트 없이 일부 보안적인 수정사항으로 종종 업데이트가 되고 있고 XE3 버전에 개발 과 업데이트를 집중하고 있어서 사실상 XE1는 업데이트가 안되고 있습니다.
그에 반해 Rhymix는 현재 1.9.9.9 버전으로 XE 1.8에서 포크 된 이후로도 계속된 업데이트가 진행중이고 포스팅 시점에는 얼마전에 릴리즈된 PHP 8.0에 대응하기 위해서 개발버전이 진행되고 있습니다.
Rhymix는 XE로 부터 나온, 같은 뿌리에서 시작된 소프트웨어이지만 시간이 지남에 따라 과정에서 UI/UX 뿐 아니라 내부의 구조도 많이 변경된 상태 입니다.
기존에 XE를 사용하다가 Rhymix 로 이전시에는 구조적인 차이와 변화가 많이 발생되었기 때문에 테스트 및 확인 후 전환을 하시면 될것 같습니다.
XE3 는 Laravel 프레임워크 기반으로 사실상 XE1 과 구조적으로 차이가 많이 나는, 이름이 같으나(XE) XE1 과는 구조가 달라서 1.x 대의 모듈이나 플러그인등이 호환이 되지 않습니다
즉 별개의 소프트웨어 or XE1 과는 별개의 버전 입니다.
1.x 버전대의 XE 의 생태계를 사용하시려면 계속 업데이트와 커뮤니티가 이루어진 Rhymix 를 사용하시는 것이 좋습니다.
[먼저] 해당 포스팅은 AWS 프리티어를 이용하여 EC2 환경에서 진행하였습니다.
사전에 AWS 가입 및 EC2 생성, 우분투 OS 설정이 필요 합니다
시스템 환경 내역
Infra : AWS EC2
OS : Ubuntu 18.04
Nginx : 1.19.5
PHP : 7.4.13
Mysql : 5.7.32
아래 포스팅을 참조하여 사전에 EC2 와 우분투 설정 후 포스팅을 계속 보시면 됩니다.
1. AWS 클라우드 프리티어 : 계정 가입/생성 - MFA OTP 설정[Link]
2. AWS 클라우드 프리티어 : EC2(VM/VPS) 생성[Link]
3. AWS 클라우드 프리티어 : 탄력적 IP(고정IP) 생성 및 할당[Link]
4. 우분투 18.04 서버 기본 설정[Link]
라이믹스 2.0.0 출시
포스팅 완료 후 얼마 지나지 않아 2.0.0 버전이 출시(릴리즈) 되었습니다.
개발자 분인 기진곰님의 릴리즈 코멘트는 아래 링크를 참조해보시면 좋습니다.
웹 어플리케이션을 위한 PHP 스택
LEMP는 Linux + Nginx + PHP-FPM + Mysql(MariaDB) 를 의미하는 약자이며 웹 어플리케이션을 구현하기 위해서 필요한 PHP Stack 입니다
LEMP 외에 예전부터 많이 사용해온 APM 혹은 LAMP 인 Linux + Apache + PHP + Mysql(MariaDB) 형태의 Stack 도 여전히 많이 사용 되고 있습니다.
Nginx는 러시아의 프로그래머 이고르 시쇼브(Игорь Сысоев)가 개발한 웹서버로 Apache에 비해 가볍고 빠른 장점이 있으며 Proxy Pass 형태로 백엔드에 있는 어플리케이션으로 전달하는 역할로 주로 사용 되고 있습니다.
AWS EC2에서 우분투 서버 18.04, nginx 1.19.5 + php 7.4 + Mysql 5.7 로 구성 하였습니다.
* LEMP/APM 설치 ,도메인 설정 등을 완료 후 워드프레스 이외 제로보드XE 나 라이믹스(Rhymix),그누보드 등 사용하여도 됩니다
Nginx 설치
Nginx 는 Mainline 버전과 Stable 버전이 있습니다.
새로운 특징, 기능, 버그 패치 등은 Mainline 버전에서 작업하고 그 이후에, 새로운 기능이 추가되지 않고 버그 패치만 하는 게 Stable 버전입니다.
버전 선택에 관련해서 NGINX의 공식 입장은 다음과 같습니다.
We recommend that in general you deploy the NGINX mainline branch at all times.
The main reason to use the stable branch is that you are concerned about possible impacts of new features,
such as incompatibility with third-party modules or the inadvertent introduction of bugs in new features.
기본적으로 Mainline 버전을 택하고 지속적으로 업데이트 하기를 권장하고 있습니다.
Stable 버전은 3rd party(서드 파티) 모듈과 호환성 문제 또는 New Feature 로 인한 문제로 인하여 업데이트가 불가능한 상황에서 사용하면 된다고 합니다.
버전을 환경을 고려하여 선택하시면 될 것 같습니다
* 여기 에서는 Mainline 버전으로 하여 최신버전을 설치 하도록 하겠습니다.
* 진행 하는 과정에서의 모든 프롬프트는 ubuntu$ 입니다.
선행 필요 패키지 설치하기
ubuntu$ sudo apt install curl \
gnupg2 ca-certificates lsb-release -y
APT Repository 설정
둘 중 1가지를 선택 하여 수행하시면 됩니다.
# mainline 버전의 nginx packages 설치시
ubuntu$ sudo echo "deb http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
# stable 버전의 nginx packages 설치시
ubuntu$ echo "deb http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
추가 확인
설치전 공식적인 서명키를 받아와서 apt 패키지의 진위 여부를 확인합니다.
ubuntu$ sudo curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
-> OK
ubuntu$ sudo apt-key fingerprint ABF5BD827BD9BF62
Nginx 설치
사전 준비가 다 끝났고 apt update 실행후 nginx 를 설치 합니다
ubuntu$ sudo apt update
ubuntu$ sudo apt install nginx
버전 확인
ubuntu$ nginx -V
nginx version: nginx/1.19.5
built by gcc 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)
built with OpenSSL 1.1.1 11 Sep 2018
(running with OpenSSL 1.1.1g 21 Apr 2020)
TLS SNI support enabled
* Nginx 설정은 아래에서 진행됩니다.
MySQL 설치
MySQL 은 관계형 데이터베이스 관리 시스템으로 오픈소스 RDBMS 에서는 전세계 적으로 가장 많이 사용 되는 관계형 데이터 베이스 입니다.
설치 가능한 패키지 검색
ubuntu$ sudo apt-cache search mysql-server
mysql-server - MySQL database server (metapackage depending on the latest version)
mysql-server-5.7 - MySQL database server binaries and system database setup
mysql-server-core-5.7 - MySQL database server binaries
default-mysql-server - MySQL database server binaries and system database setup (metapackage)
default-mysql-server-core - MySQL database server binaries (metapackage)
mariadb-server-10.1 - MariaDB database server binaries
mariadb-server-core-10.1 - MariaDB database core server files
percona-xtradb-cluster-server-5.7 - Percona XtraDB Cluster database server binaries
MySQL 설치
ubuntu$ sudo apt install mysql-server
설치 직후 MySQL 은 시작된 상태 입니다.
ubuntu$ ps -ef |grep mysql
mysql 15443 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid
설치가 완료가 된 후 유저별로 아래와 같이 접속 할 수 있습니다
(기본은 OS 인증으로 패스워드 미입력)
root 유저에서는 mysql
일반 유저에서 sudo mysql
MySQL 기본 인증 설정 내역
apt 로 설치하게 되면 접속 인증 방식에 대해서 OS 인증방식으로 설정되어 db가 생성됩니다.
mysql> select user,host,plugin from mysql.user where User='root';
+------+-----------+-------------+
| user | host | plugin |
+------+-----------+-------------+
| root | localhost | auth_socket |
+------+-----------+-------------+
비밀번호 로그인 방식으로 변경
현재 기본적으로는 OS 인증으로 패스워드 없이 로그인 할 수 있습니다.
ubuntu$ sudo mysql
root 유저에서는
root# mysql
기존과 같이 패스워드 입력 방식으로 사용하길 원할 경우 아래 절차대로 진행 하시면 됩니다.
OS 인증을 통하여 사용 하실려는 경우 패스워드 변경 절차는 생략하여도 됩니다.
패스워드 방식으로 변경
mysql> UPDATE mysql.user
SET plugin = 'mysql_native_password', authentication_string = PASSWORD('패스워드')
WHERE User = 'root';
mysql> FLUSH PRIVILEGES;
mysql> quit
* phpmyadmin 에서 root 를 사용 하려면 패스워드 를 지정해야 사용 할 수 있습니다.
MySQL 설정 변경
설정 파일의 위치는 2곳에 있습니다.
/etc/mysql/mysql.conf.d/
/etc/mysql/conf.d/
그 중에 [mysqld] 항목은 아래 경로 파일에 있습니다.
/etc/mysql/mysql.conf.d/mysqld.cnf
먼저 mysqld.cnf 에서 몇가지 수정 하겠습니다.
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld] <-- 절에 아래 내용을 추가로 입력해 줍니다.
user=mysql
innodb_buffer_pool_size = 384M
# -> 값은 더 크게 해도 되고 128MB 단위로 변경하면 됩니다.
innodb_file_per_table=TRUE
init_connect=SET collation_connection = utf8mb4_general_ci
init_connect=SET NAMES utf8mb4
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
bind-address = 127.0.0.1
to
bind-address = 0.0.0.0
-> 외부에서 직접 접속 하려는 환경이라면 위의 값을 public-ip 나 0.0.0.0 으로 설정 합니다.
MySQL 재시작
설정파일을 수정 하였다면 mysql을 재시작 합니다.
ubuntu$ sudo systemctl restart mysql
MySQL 설정 확인
재시작이 완료되었다면 몇가지를 확인 해봅니다.
ubuntu$ mysql -u root -p
Enter password: [패스워드 입력]
Welcome to the MySQL monitor. Commands end with ; or \g.
< 중략 >
# status 로 조회
mysql> status;
--------------
mysql Ver 14.14 Distrib 5.7.32, for Linux (x86_64) using EditLine wrapper
<중략>
Server version: 5.7.32-0ubuntu0.18.04.1 (Ubuntu)
<중략>
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
# innodb_buffer_pool_size 조회
mysql> show global variables like '%innodb_buffer_pool_size%';
+-------------------------+-------------+
| Variable_name | Value |
+-------------------------+-------------+
| innodb_buffer_pool_size | 402653184 |
+-------------------------+-------------+
버전 확인
mysql> select version();
+-------------------------+
| version() |
+-------------------------+
| 5.7.32-0ubuntu0.18.04.1 |
+-------------------------+
여기까지 설정하면 apt 로 mysql 설치가 완료 된 것 입니다
PHP 설치
이번에는 PHP 를 설치하도록 하겠으며 버전은 포스팅에서는 7.4 버전으로 진행하였습니다.
APT 저장소 등록
ubuntu$ sudo apt -y install software-properties-common
ubuntu$ sudo add-apt-repository ppa:ondrej/php
# LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php
More info: https://launchpad.net/~ondrej/+archive/ubuntu/php
Press [ENTER] to continue or Ctrl-c to cancel adding it.
[엔터] 입력
ubuntu$ sudo apt update
PHP 7.4 설치
ubuntu$ sudo apt install php7.4 php7.4-cli \
php7.4-fpm php7.4-bcmath php7.4-bz2 \
php7.4-common php7.4-curl php7.4-dba \
php7.4-gd php7.4-json php7.4-mbstring \
php7.4-opcache php7.4-readline php7.4-soap \
php7.4-xml php7.4-xmlrpc php7.4-zip \
php7.4-ctype php7.4-pdo php7.4-redis \
php7.4-mysql php7.4-imagick php7.4-intl \
php7.4-mysqlnd php7.4-gmp php7.4-geoip \
php7.4-dev -y
설치 후 php.ini 수정
/etc/php/7.4/fpm/php.ini 파일을 수정하여 5개 항목에 대해서 수정 및 추가 합니다.
ubuntu$ sudo vi /etc/php/7.4/fpm/php.ini
date.timezone = Asia/Seoul
expose_php = Off
post_max_size = 500M
upload_max_filesize = 200M
memory_limit = 512M
-> memory_limit 의 default 값은 128M 입니다
-> 위의 용량 사이즈는 절대적인 수치가 아닙니다. 필요에 따라서 줄이거나 늘려도 됩니다.
php-fpm Opcache Config
참고) PHP 5.5 버전 부터 기본에 포함 되었으며 이전에는 zend optimizer 를 별도로 설치 및 plugin 하여 사용 하였습니다.
사용 용도는 컴파일 / 실행 / 결과 의 순으로 처리되는 PHP에 대해서 Opcache(예전의 Zend Optimizer)를 이용하여 컴파일된 PHP 코드를 메모리에 Cache 해서 접속요청에 더 빠르게 응답을 줄수 있는 기능 입니다
PHP 7.x 버전부터 Opcache 의 기본 메모리가 128M 입니다.
메모리를 변경하거나 다른 파라미터를 조정 하고자 한다면 opcache.ini 에서 설정할 수 있습니다.
ubuntu$ cd /etc/php/7.4/mods-available
ubuntu$ sudo vi opcache.ini
opcache.ini 파일에는 opcache.so 모듈이 plugin 되어 활성화는 되어 있는 상태 입니다
그외 별도의 내용은 없어서 활성화 상태에서 기본값으로 동작 중 입니다
추가적으로 opcache의 파라미터의 변경하시려면 아래의 내용을 참조하여 수치를 변경 하시면 됩니다.
추가적인 opcache configuration 은 아래 링크를 참조하시면 됩니다.
• opcache.configuration.php
opcache.enable=1 - Zend Opacache 활성화 여부 결정 , 1일때 활성화 됨
opcache.enable_cli=1 - PHP CLI 버전에서(명령행 버전에서도) Zend Opcache 활성화 여부 결정
opcache.memory_consumption - 캐쉬에 사용할 메모리 크기. 7.0부터 기본 크기는 128M
opcache.interned_strings_buffer=8 - 메모리에서 interned 문자열을 위해 사용할 메모리량
opcache.fast_shutdown=1 - 활성화 시 accelerated code 에 대해서 사용되어짐
opcache.interned_strings_buffer
- Opcache 가 사용하는 내부 스트링( class name 이나 file등)을 저장하기 위한 메모리의 크기
opcache.max_accelerated_files - Opcache 가 캐쉬할 최대 파일 갯수
opcache.validate_timestamps
- Default 1 / 0(off)이 아닐 경우 opcache.revalidate_freq 에 설정된 시간마다 코드와 캐쉬의 변경 여부를 체크
validate_timestamps 가 꺼져 있을 경우 코드의 변경 여부를 체크하지 않으므로 PHP 소스가 수정되어도 반영되지 않음
그러므로 변경 사항을 반영하려면 httpd 를 재기동하거나 httpd 에 SIGUSR2 시그널을 전송해야함
opcache.file_cache_only=1
- makes sure that the in-memory opcache is disabled and only files are used, which is what you want for CLI.
1 로 설정할 경우 in-memory opcache 사용이 안됨 = php-fpm 에서 사용할수 없음
기본적으로 활성화 및 Default value 설정되어 있기 때문에 PHP-FPM 사용 가능 합니다.
먼저 추가 해볼 수 있는 파라미터 2개만 추가 하겠습니다 그외 파라미터는 Default 값에 따라 활성화 및 Default value 로 동작 중입니다.
opcache.enable=1
;-> 활성화가 되어있지만 명시적으로 한번더 기재를 해주겠습니다.
opcache.memory_consumption=256
;-> 입력의 예시 이며 단위는 MB 입니다
;-> 이부분(메모리 변경) 은 필수는 아닙니다.
PHP-FPM 설정
Apache + PHP + MySQL 구성시 가장 일반적인 구성은 Apache 에 Mod_PHP 모듈을 plugin 하여 사용하지만 Nginx 에서는 이런 mod_php 모듈을 사용 할수가 없습니다.
그래서 Proxy 방식을 사용 해야 하고 PHP 5.3.3 부터 내부 코어에 포함된 PHP-FPM를 사용하여 사용 할 수 있습니다
PHP-FPM은 FastCGI 기능 입니다 ( PHP-FPM - FastCGI Process Manager )
참고로 Apache 에서도 Mod_PHP 보다 PHP-FPM 으로 많이 사용 하고 있는 추세 입니다.
php-fpm.conf 수정
ubuntu$ cd /etc/php/7.4/fpm
ubuntu$ sudo vi php-fpm.conf
error_log = /var/log/php7.4-fpm.log
-> 주석 해제 혹은 위치 경로 수정, 위와 동일 할 수 도 있습니다.
;log_level = notice
-> Log Level은 alert, error, warning, notice, debug 이 있습니다.
-> Config설정 및 nginx 정상 연동에 대해서 더 자세한 정보가 필요 하다면 잠시 debug 로 사용 해도 됩니다
-> 기본은 notice 레벨 입니다.
php-fpm.conf 파일 보다는 실제로 접속을 받고 처리하는 FPM Pool 설정파일에 대해서 수정 및 설정할 내역이 존재 합니다.
FPM Pool은 별도의 Container 적인 의미를 갖고 있습니다
Pool 별로 max process 수 와 포트를 지정 할 수 있고 PHP로 사용중인 여러 웹페이지(사이트가 있다면) Pool을 분리하여(포트를 분리 하여) 웹 서비스 별 - PHP Pool 을 지정하여 사용할 수 있습니다.
꼭 1개를 써야 하는 것도 꼭 다수를 써야하는 것도 아닙니다.
Pool 설정 - www.conf
php-fpm.conf 파일에 이어서 pool 설정을 하도록 하겠습니다 포스팅에서는 기본 파일인 www.conf 파일을 수정하여 사용 하도록 하겠습니다.
www.conf 수정
ubuntu$ cd /etc/php/7.4/fpm/pool.d/
ubuntu$ sudo vi www.conf
user = nginx
group = nginx
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
=> 유저및 그룹을 변경 하고 nginx 가 구동되는 유저와 동일하게 설정 합니다
=> mode 는 0660 으로 설정 합니다.
listen = /run/php/php7.4-fpm.sock
=> 이부분은 접속을 받는 방식을 설정하는 부분으로 Socket(UDS) 방식으로 사용 하거나 IP 방식으로 사용하거나 둘중 하나를 선택하여 설정해야 합니다.
=> IP 방식으로는 아래와 같이 지정 할 수 있습니다.
listen = 123.123.123.123.123:9000
listen = 127.0.0.1:9000
listen = 9000 <== 이와 같이 IP 없이 포트만 기재하면 모든 주소에서 접속이 가능한 상태 입니다
(listen on a TCP socket to all addresses)
소켓 방식은 위와 같이 파일명을 지정해주면 됩니다.
listen = /run/php/php7.4-fpm.sock
같은 서버에서 nginx 와 php-fpm 사용 하는 설정으로 할 것임으로 socket 을 지정하여 설정하도록 하겠습니다.
# pm 으로 시작하는 파라미터5개는 프로세스와 연관되어 있습니다.
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 40
pm.max_requests = 500
* 위의 수치는 절대적인 수치가 아닌 예시 입니다.
pm.max_children 는 설정된 PHP Pool(여기서는 www) 내에서 가동할 수 있는 최대 자식 프로세스 수를 의미 합니다
pm.start_servers 는 php-fpm 을 실행할 때 초기에 생성하는 자식 프로세스의 개수입니다
pm.min_spare_servers 는 idle 상태의 자식 프로세스 개수가 이 개수보다 작으면 자식 프로세스를 생성합니다
pm.max_spare_servers 는 idle 상태의 자식 프로세스의 최대 개수를 의미 합니다.
pm.max_requests 는 각 프로세스가 최대 request를 처리하면 수 입니다.
500 으로 설정되어 있다면 500번 request 후 프로세스를 다시 생성 합니다
프로세스가 점진적인 메모리 증가에 대한부분을 방지 할 수 있습니다.
apache 에서 유사한 설정으로는 MaxRequestsPerChild 있습니다.
로그 관련 설정 변경
access.log = /var/log/php-fpm-$pool.access.log
--> 주석제거 및 경로 및 파일명 변경
access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
--> 주석제거
slowlog = /var/log/php-fpm-$pool.log.slow
--> 주석제거 및 경로 및 파일명 변경
request_slowlog_timeout = 5
--> 주석제거, 내용변경
--> 단위는 초로 5는 예시 입니다. 해당 시간은 선택해서 변경 하시면 됩니다.
php_admin_value[error_log] = /var/log/fpm-php.$pool.error.log
--> 주석제거 및 경로 및 파일명 변경
php_admin_flag[log_errors] = on
--> 주석제거
* 위에서는 최대한 로그 파일을 유사하게 맞추려고 경로 나 파일명을 조정 한 것 입니다.
Nginx 설정
설정의 홈 디렉토리는 /etc/nginx 입니다.
nginx 최근버전에서는 /snippets /sites-enabled , /sites-available 같은 디렉토리 없이 conf.d 디렉토리만 존재 하고 nginx.conf 파일에서는 모든 conf 파일을 include 하여 사용하게 됩니다.
ubuntu$ cd /etc/nginx
ubuntu$ cat nginx.conf | grep conf
include /etc/nginx/conf.d/*.conf
==> /etc/nginx/conf.d/ 아래에 .conf 파일은 자동으로 include 되어 적용 되게 됩니다.
nginx.conf 수정
ubuntu$ cd /etc/nginx
ubuntu$ sudo vi nginx.conf
user nginx;
<== nginx 에서 사용할 OS로 유저로 nginx 로 사용하면 무난합니다.
#master_process ON; # ON is default
<== 엔진엑스는 하나의 메인 프로세스(마스터 프로세스)와 여러 개의 작업자 프로세스를 시작할 수 있습니다 (ON)
<== ON 이 default 이고 off 로 해제하면 단인 프로세스로 동작하게 됩니다.
<== 해당 옵션은 기재가 되어있지는 않습니다 내용 참고를 위해 기재 한 것 입니다
worker_processes 4;
or
worker_processes auto;
접속을 받고 처리하는 worker process의 수 이며 정한 수만큼 기동시 프로세스가 생성됩니다.
보통 CPU Core 나 CPU Count 와 상관되어 결정되며 설정 이후 CPU의 사용률이 높지 않다면 올려서 사용 할 수 있습니다.
혹은 auto 로 nginx 알아서 생성되게 할 수도 있습니다.
저는 일단 4로 설정하고 사용 하도록 하겠습니다.
error_log /var/log/nginx/error.log notice;
로그 파일명과 경로, 로깅 레벨을 설정 할 수 있습니다. 로깅 레벨은 warn, error crit, alert, and emerg 설정 할 수 있습니다.
기동 과 중지 시 로그를 받을 수 있도록 notice 를 기본으로 사용 하면 됩니다. 문제 파악이나 설정시 테스트를 위해서는 debug를 사용하면 됩니다.
events {
worker_connections 1024;
}
worker_connections 는 woker 당 가능한 접속수를 의미 합니다.
위에서 worker 4로 지정 하였으면 4*1024 하여 4096 Connection이 가능하게 됩니다.
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
main 명칭의 로그 포팻으로 설정된 정보가 있고 설정된 main 포맷 Access 로그에서 사용 하고 있습니다
log_format main 을 수정하여 사용하거나 별도의 log format을 생성 후 access 로그에서 변경하여 사용 할 수 있습니다
log_not_found off; <-- 추가
server_tokens off; <-- 추가
### deflate ###
gzip on;
gzip_disable "msie6";
gzip_comp_level 6;
gzip_min_length 500;
gzip_buffers 16 8k;
gzip_proxied any;
gzip_vary on;
gzip_types text/plain text/css text/js text/xml text/javascript application/javascript application/x-javascript application/json application/xml application/rss+xml image/svg+xml image/png;
# gzip 설명
gzip(deflate) 는 HTTP 압축으로 HTTP 데이터는 서버로부터 전송되기 전에 압축됩니다.
nginx.conf 파일에 설정 하였기 때문에 모든 server block 에 공통으로 적용 되게 됩니다.
gzip on;
이 line을 통해 gzip을 사용할 것이라고 알려주는 것입니다.
gzip_disable "msie6";
IE 6이하에는 적용시키지 않습니다.
gzip_comp_level
압축의 정도를 설정하는 부분으로 높을수록 압축율이 높습니다
그대신 서버에서의 CPU 사용률이 올라가거나 압축에 더 시간이 소요될 수 있어서 적절한 값을 사용하는 것이 좋습니다.
gzip_types
압축을 할 대상 Source 파일의 종류를 지정 하는 것입니다.
그리고 gzip_types 아래 설정 내용도 추가해 줍니다.
keepalive_timeout 65;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
aio on;
sendfile_max_chunk 512k;
directio 4m;
server_tokens off;
client_max_body_size 50M;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
fastcgi_buffering on;
fastcgi_buffer_size 256k;
fastcgi_buffers 256 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_connect_timeout 600;
fastcgi_send_timeout 600;
fastcgi_read_timeout 600;
http2_max_concurrent_streams 512;
[참고] -> , => , ==> 는 모두 설명 입니다
이제 각 서버 설정 파일을 수정 하도록 하겠습니다
ubuntu$ cd /etc/nginx/conf.d
ubuntu$ sudo cp -rp default.conf default.conf.ori
==> 먼저 default 값으로 설정된 파일은 백업 후 설정을 변경 하여 사용하겠습니다.
ubuntu$ sudo vi default.conf
server {
listen 80 default_server;
==> 사용할 포트 번호입니다.
==> default_server는 server 절이 여러개 있을 때 IP로 접속 하거나 없는 서브도메인 등으로 접속시 default 로 접속을 하게 되는 sever 절을 의미 합니다.
==> server { } 중에서 한곳만 사용 할 수 있습니다
server_name localhost;
==> IP나 /etc/hosts에 설정된 호스트네임 , 도메인이 있다면 도메인명을 기재해 줍니다.
==> 도메인이 없다면 localhost 로 지정하시면 됩니다.
charset utf-8;
==> character set 설정입니다.
access_log /var/log/nginx/localhost.access.log main;
error_log /var/log/nginx/localhost.error.log;
==> Access , Error 로그는 기본적으로는 주석처리 되어 있습니다.
==> 주석을 해제하고 서버명이나 도메인명 등을 추가하여 로그를 확인 할 때 파일명으로 쉽게 찾을수 있도록 명시적으로 지정하는 것이 좋습니다.
root /usr/share/nginx/html;
==> html이나 php 파일을 읽을 디렉토리를 지정합니다.
index index.php index.html index.htm;
==> 접속시 처음 index 할 파일을 지정 합니다 index.php는 없으므로 추가 합니다
client_max_body_size 32m;
# include conf.d/rhymix.properties;
# 라이믹스 설정 파일을 다운 받고 주석해제 하여 사용 할 예정 입니다.
# rewrite 규칙에 location / { try_files ... } 블럭이 포함되어 있어서 사이트 설정에 동일한 블럭을
# 추가하면 오류가 발생될 수 있어서 location 은 제거 또는 주석처리 합니다.
# rhymix.properties 는 라이믹스 에서 rewrite 처리 관련된 설정 입니다 (아래에서 다운로드 받음)
#location / {
#root /usr/share/nginx/html;
#index index.html index.htm;
#try_files $uri $uri/ =404;
# }
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
아래 부분이 PHP-PFM 과 연결되는 Proxy 설정 부분 입니다.
설명된 내용처럼 같은 서버에서 설정을 진행 하고 있기 때문에 UDS 방식으로 사용 하면 되고이부분은 php-fpm pool 에서도 socket이 사용 되로록 설정이 먼저 되어야 합니다.
PHP-FPM 에서 "listen = /run/php/php7.4-fpm.sock"
# 아래 내용을 중간에 추가 합니다.
location ~ \.php$ {
fastcgi_pass unix:/run/php/php-fpm.sock;
# fastcgi_pass ip 혹은 UDS(Unix Domain Socket)인 .sock 파일중에
# php-fpm.d/www.conf 에서 설정대로 사용 해야 합니다
# fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_read_timeout 300;
}
# 주석을 해제 합니다.
location ~ /\.ht {
deny all;
}
* 붙여넣기 후 nginx 시작시 에러가 발생시 해당 내용을 메모장이나 노트패드에 붙여넣은 후 복사하여 다시 nginx 로 붙여넣어보시기 바랍니다
설정 확인 및 테스트
php가 정상적으로 동작 하는지를 확인 하기 위해서 phpinfo 페이지를 하나 만들겠습니다.
먼저 nginx 기본 html home 으로 이동 후 파일을 생성 합니다.
ubuntu$ cd /usr/share/nginx/html
ubuntu$ sudo vi phpinfo.php
<?php
phpinfo();
?>
ubuntu$ sudo chown nginx:nginx phpinfo.php
여기 까지 설정 하였다면 저장 후 nginx 와 php-fpm 를 시작(또는 재시작) 합니다
ubuntu$ sudo systemctl restart php7.4-fpm
ubuntu$ sudo systemctl restart nginx
브라우저에서 ip주소/phpinfo.php 로 phpinfo 페이지가 정상적으로 출력 되는지를 확인을 해보시기 바랍니다
* 클라우드 보안 방화벽 오픈이 안되어 있다면 보안 관련 설정 후 다시 접속 테스트 해보시기 바랍니다.
AWS EC2 보안그룹 설정
현재 진행중인 환경은 아마존 AWS 를 프리티어로 이용중이며 EC2에 우분투 18.04를 생성하여 사용 중입니다.
AWS에서 이용 중이기 때문에 AWS의 방화벽(보안 그룹)을 설정 해야 접속을 할 수 있습니다.
AWS 콘솔에 접속 후 EC2 로 이동 합니다.
인스턴스 메뉴에서 인스턴스 아이디를 선택 합니다.
인스턴스 정보 하단에 EC2에 해당하는 보안그룹을 선택 합니다.
인바운드 규칙 -> 인바운드 규칙 편집 으로 이동 합니다.
유형 에서 "HTTP" 를 선택 하고 소스 에서 위치무관 을 선택 합니다.
80 포트 HTTP 웹서비스는 모든곳에서 접속하기에 모든 접속을 허용 으로 설정하게 됩니다.
완료 되면 아래와 같이 인바운드 규칙이 설정되게 됩니다.
[참고] AWS 의 우분투 이미지는 iptables 정책이 설정되어 있지 않습니다.
설정된 정책 확인
ubuntu$ sudo iptables -nL
만약 아래와 같이 내용이 출력 된다면 설정된 정책이 없는 것 입니다.
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
브라우저에서 IP주소/phpinfo.php 로 접속해서 php정보가 정상적으로 로딩 되는지를 확인 합니다.
여기까지 완료 되었다면 기본적인 LEMP 설정은 완료 되었습니다.
그 다음 phpmyadmin 설치 및 무료 도메인 구입 ,SSL 적용 등 추가 작업을 하시면 됩니다.
라이믹스 설치
Nginx 와 PHP-FPM 구성 및 연동 설정이 완료 되었다면 이제 라이믹스 설치를 진행 하면 됩니다.
DB 스키마 와 유저 생성
라이믹스 설치 전에 먼저 MySQL 에서 Schema와 유저를 먼저 생성 해야 합니다.
ubuntu$ sudo mysql
mysql> CREATE DATABASE `rhymix` DEFAULT CHARACTER SET utf8mb4;
mysql> CREATE USER `rhymix`@`localhost` identified by 'rhymix';
mysql> GRANT ALL PRIVILEGES ON `rhymix`.* TO 'rhymix'@'localhost' WITH GRANT OPTION;
mysql> flush privileges;
라이믹스 다운로드 및 압축해제
이제 라이믹스 다운로드 후 압축 해제를 진행 하도록 하겠습니다
위의 링크 홈페이지에서 다운받아도 되며 wget 으로 직접 받으셔도 됩니다.
ubuntu$ wget https://github.com/rhymix/rhymix/archive/master.zip
ubuntu$ sudo mv /usr/share/nginx/html /usr/share/nginx/html.ori
ubuntu$ sudo unzip master.zip -d /usr/share/nginx/
ubuntu$ cd /usr/share/nginx/
ubuntu$ sudo mv rhymix-master html
ubuntu$ sudo chown -R nginx:nginx html
nginx는 .htaccess 파일을 사용한 설정 변경을 지원하지 않으므로 서버 설정을 직접 수정해야 합니다.
라이믹스에서 제공하는 rewrite 규칙 파일을 다운받아 사용해야 합니다.
주의: 라이믹스 2.0부터는 rewrite 규칙에 location / { try_files ... } 블럭이 포함되어 있으므로 사이트 설정에 동일한 블럭을 추가하면 오류가 발생합니다.
ubuntu$ wget https://url.kr/XoO86m
ubuntu$ sudo mv rhymix-nginx.conf /etc/nginx/conf.d/rhymix.properties
* rhymix-nginx.conf 파일 다운로드 경로는 url 단축하였습니다.
Nginx default.conf 에서 주석 해제
ubuntu$ cd /etc/nginx/conf.d
ubuntu$ sudo vi default.conf
# include conf.d/rhymix.properties;
to
include conf.d/rhymix.properties;
<-- 주석 해제
nginx 를 재시작 합니다.
ubuntu$ sudo systemctl reload nginx
라이믹스 Setup(설정)
브라우저에 접속하여 설정을 진행 합니다. 체크 하고 다음 을 클릭 합니다.
설정이 정상적으로 되었다면 아래와 같이 모두 OK 로 확인 될 것 입니다.
다음 을 클릭 합니다.
MySQL정보를 입력 후 다음 을 클릭 합니다.
관리자 계정 정보를 입력 후 완료 를 클릭 합니다.
설정이 완료 되면 바로 메인 화면으로 이동하게 되고 정상적으로 페이지가 로드 되는것을 확인 할 수 있습니다.
연관된 다음 글
Principal DBA(MySQL, AWS Aurora, Oracle)
핀테크 서비스인 핀다에서 데이터베이스를 운영하고 있어요(at finda.co.kr)
Previous - 당근마켓, 위메프, Oracle Korea ACS / Fedora Kor UserGroup 운영중
Database 외에도 NoSQL , Linux , Python, Cloud, Http/PHP CGI 등에도 관심이 있습니다
purityboy83@gmail.com / admin@hoing.io