반응형

안녕하세요 유똥입니다.

오늘은 Nginx + PHP + MySQL 소스 설치에 대하여 진행해보록 하겠습니다.

 

소스 설치에 앞서, Nginx에 대해서 간략하게 말씀드리겠습니다.

엔진엑스(Nginx)는 lgor Sysoev라는 러시아 개발자가 동시접속 처리에 특화된 웹 서버 프로그램입니다.

Apache 보다 동작이 단순하고, 전달자 역할만 하기 때문에 동시접속 처리에 특화되어 있습니다.

 

nginx를 사용하는 이유가 뭘까?

Nginx가 Apache보다 동시접속 처리가 좋기 때문에

ㄴ 전달자 역할만 하며 이런 이유로 응용프로그램 서버에 요청을 보내는 리버스 프록시로서의 역할을 수행

트래픽이 많은 웹사이트를 위해 확장성을 위해 설계한 비동기 이벤트 기반구조의 웹서버 소프트웨어입니다.

정적 파일을 처리하는 HTTP 서버로서의 역할 수행

 

이 3가지 이유뿐만 아니라, Nginx를 Apache 대신해서 웹서버로 구성하는 이유들은 다양하며, 

둘의 장단점이 분명 존재하기 때문에, 여러분의 구성하는 환경에 따라 두 개 중에 선택해서 설치를 진행하시면 됩니다.

 

소스 설치 ( compile 설치 )는 직접 컴파일러를 이용해 설치해야 하는 설치방법을 말합니다.
소스 코드 → 문법 검사 → 기계어 번역 →복사
                     ↓
                configure  →  make  → make install


그렇다면 소스 설치를 하는 이유가 뭘까?라고 궁금하신 분들이 있으실 거라고 생각됩니다.
소스 설치를 하는 이유는 yum으로 설치 시 불필요하게 설치되는 파일들이 시스템의 필요 없는 자원을 사용하게 되고, 관리적으로도 문제가 발생할 수 있습니다. 그렇기 때문에 배제하고, 정말 필요한 기능만 넣어서 저사양의 서버에서 최대의 효율을 내기 위해서 소스 설치를 하는 것입니다.

 

소스 설치 시, 의존성 에러가 발생하여 설치하는데 문제가 생길 수 있으므로, 관련 패키지들을 확인하고 설치를 진행해야 합니다.

그러면 의존성이란 무엇인지에 대하여 설명드리겠습니다.
A라는 패키지를 정상적으로 설치 및 동작하기 위해서는 A 패키지를 받쳐주는 라이브러리가 필요합니다.
A라는 패키지를 설치하게 되면 의존성 검사를 진행하면서 A 패키지안에 서브 패키지가 있는지를 확인을 하게 됩니다.
이것들이 없으면 의존성 오류가 출력하기 때문에 의존성 오류를 해결하기 위해서는 각 패키지들을 받쳐주는 라이브러리 설치가 필요합니다.

대표적인 라이브러리에 대해서 안내드리겠습니다.
gd 라이브러리
Graphics 라이브러리로 선, 도형, 텍스트, 다중 색깔,
이미지의 cut paste, 채우기 등의 이미지 처리 기능과 이 결과를
그래픽 파일로 (gif, jpeg, png) 저장하는 기능을 제공한다.
gd gd-devel libjpeg libjpeg-devel 

개발 라이브러리
ncurses-devel : 개발 툴 관련 [ 커널 개발 ] 

gcc 라이브러리
gcc-c++, gcc  : C언어로 짜인 프로그램 컴파일 툴

PHP 모듈
PHP 언어를 통해 AES 암호화를 진행해야 하는 일이 있었습니다.
PHP 언어의 양방향 암호화는 mcrypt_encrypt함수를 통해 진행

APM 소스 설치 순서는 
1 ) Nginx → MySQL  PHP 
2 ) MySQL → Nginx → PHP

PHP를 가장 늦게 설치하는 이유는 PHP 컴파일 시 Apache, MySQL 설정이 들어가기 때문입니다.

저는 MySQL 소스 설치를 먼저 진행하겠습니다. 그 이유는 MySQL 소스 설치가 가장 오래 걸리기 때문입니다!


그러면 이제, 차례대로 설치 진행하겠습니다!

 

[ 설치 환경 ]

OS Centos 7.6
Nginx 1.18
PHP 7.3.5
MySQL 5.7.26

 


 1. 의존성 라이브러리 설치

yum -y install cmake
yum -y install libxml*
yum -y install freetype*
yum -y install libpng*
yum -y install libjpeg*
yum -y install flex
yum -y install gcc-c++
yum -y install openssl-devel
yum -y install epel-release
yum -y install gcc
yum -y install ncurses-devel
yum -y install gnutls-devel
yum -y install libxml2
yum -y install libxml2-devel
yum -y install bison
yum -y install gdbm-devel
yum -y install bzip2-devel
yum -y install curl-devel
yum -y install libjpeg-devel
yum -y install libXpm-devel
yum -y install freetype-devel
yum -y install libtool
yum -y install expat-devel
yum -y install apr-devel
yum -y install apr-util
yum -y install libzip
yum -y install libmcrypt
yum -y install libmcrypt-devel
yum -y install php-mcrypt
yum -y install libxslt-devel
yum -y install gd gd-devel

 2. MySQL 설치

설치 링크 : https://downloads.mysql.com/archives/community/

 

MySQL :: Download MySQL Community Server (Archived Versions)

Please note that these are old versions. New releases will have recent bug fixes and features! To download the latest release of MySQL Community Server, please visit MySQL Downloads. MySQL open source software is provided under the GPL License.

downloads.mysql.com


 2-1. MySQL 설치

wget 뒤에 링크 주소 복사를 붙여 넣으시면 됩니다.
해당 링크 주소 시간이 지나면 변하기 때문에 직접 MySQL 홈페이지를 통해서 다운로드 받으시는걸 추천드립니다.

yum -y install wget
mkdir /root/src/
cd /root/src
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.26.tar.gz
tar xvfz mysql-5.7.26.tar.gz
cd mysql-5.7.26

 


 2-2. MySQL 컴파일

cmake -DCMAKE_INSTALL_PREFIX=/opt/mysql -DWITH_INNOBASE_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DENABLED_LOCAL_INFILE=1 -DENABLE_DOWNLOADS=1 -DWITH_EXTRA_CHARSETS=all -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost

위에 컴파일 내용은 아래의 내용 참고 부탁드립니다.
configure는 소스파일에 대한 환경설정을 해주는 명령어다.(configure뒤에 옵션을 넣음) 서버 환경에 맞혀 makefile을 생성해주는 과정이다.


-DCMAKE_INSTALL_PREFIX=
mysql 디렉터리 설치 경로 지정

-DWITH_PERFSCHEMA_STORAGE_ENGINE= 서버에 정적스토리지 엔진 설정

-DWITH_PERFSCHEMA_STORAGE_ENGINE= 서버에 정적스토리지 엔진 설정

-DDEFAULT_CHARSET=  컴파일 환경에 대한 설명 코멘트

-DWITH_EXTRA_CHARSETS= 추가 charset 지정

-DDEFAULT_COLLATION=  서버의 기본 케릭터셋 설정

-DENABLED_LOCAL_INFILE=  gprof 사용 여부(최적화된 리눅스에서 가능)

-DENABLE_DOWNLOADS= 어떤 파일을 다운로드할지 여부

-DWITH_BOOST: Cmake 컴파일러에게 Boost 지점를 알려준다. Boost 지점은 다음의 셋중에 하나여야 한다.

  • tarball/zip 파일
  • tarball/zip 파일을 포함하는 디렉토리
  • tarball/zip 파일을 압축해제한 디렉토리

-DDOWNLOAD_BOOST: boolean 값으로 Boost tarball/zip 파일을 자동으로 다운로드 받게 할지 말지를 결정


 2-3. MySQL 설치

make -j `grep processor /proc/cpuinfo | wc -l`; make install

위에 내용은 아래의 내용 참고 부탁드립니다.
make는 소스를 컴파일하는 명령어입니다. 
컴파일이란 것은 소스파일을 사용자가 실행 가능한 파일로 만들어 주는 과정입니다.
make install은 make를 통해 만들어진 설치 파일(setup)을 설치를 하는 과정입니다.
빠른 설치를 위해, CPU 사용을 MySQL사용에 집중적으로 설치할 수 있도록 해당 명령어를 이용했습니다. 
-j : 옵션의 경우 job을 분산시킨다 
CPU 코어가 4개라면 , 한 번에 수행할 수 있는 명령을 -J4으로 지정하여, 프로세스가 4개가 생성되어 병렬로 수행합니다. 명령수는 프로세스 수로 정의


 2-4. MySQL 계정, 그룹 생성

useradd -M -s /bin/false mysql 
groupadd mysql 
useradd -g mysql mysql

 2-5. MySQL 설치된 MySQL 경로 권한 설정

chown mysql:mysql /opt/mysql -R 
chmod 755 /opt/mysql -R

 2-6. MySQL 설정 파일 및 basedir datadir 설정

vi /opt/mysql/support-files/mysql.server
↓ 아래 내용추가 ↓
basedir=/opt/mysql
datadir=/opt/mysql/var

위에 내용은 아래의 내용 참고 부탁드립니다.
mysql.server는 mysqld_safe를 실행합니다.
mysqld_safe는 위의 내용과 같이 mysqld를 호출하고 프로세스 모니터링하게 됩니다.


[ basedir ]
MySQL Engine 설치 위치
MySQL이 직접 설정하는 값


[ datadir ]
MySQL이 생성하는 파일들의 default 위치
default 위치는 basedir/data
my.cnf에 설정하여 수정 가능합니다.

 


 2-7. my.cnf 설정

vi /etc/my.cnf
↓ 기존 설정 된게 전부 지우고 아래의 내용 추가 ↓
[mysqld]
init_connect=SET collation_connection=utf8_general_ci
init_connect=SET NAMES utf8
character-set-server=utf8
collation-server=utf8_general_ci
table_open_cache=1024
max_connections=2048
max_user_connections=500
max_connect_errors=10000
wait_timeout=300
query_cache_type=1
query_cache_size=128M
query_cache_limit=5M
slow_query_log
long_query_time=3
max_allowed_packet=16M
sort_buffer_size=2M
skip-name-resolve
symbolic-links=0

[mysql]
default-character-set=utf8

/etc/my.cnf 옵션 설명

max_connections = 허용 가능한 최대 동시 접속수, 각각의 커넥션은 최소 thread_stack의 사이즈만큼의 메모리

max_connect_errors = 서버가 차단되기 전에 최대 연결 오류수

max_allowed_packet =  한 패킷의 최대 크기

symbolic-links = 심볼릭 링크 비활성화

slow_query_log = 느린 쿼리 기록 활성화

table_open_cache = DB전체에서 오픈할 수 있는 테이블 갯수

wait_timeout = 접속한 후 쿼리가 들어올 떄까지 대기하는 시간(초) = noninteractive 커넥션 닫기까지의 시간

query_cache_type =쿼리에서 힌트로 쿼리 캐시를 사용하겠다고 설정한 경우에만 쿼리 캐시 사용

# 0 or OFF : 쿼리 캐시 사용 안 함, 쿼리 캐시를 안 쓰려면 query_cache_size도 0으로 설정해야 함

# 1 or on : SQL_NO_CACHE를 설정하지 않은 모든 쿼리의 결과를 캐싱함

# 2 or DEMAND : SQL_CACHE로 설정한 쿼리의 결과만 캐싱함

query_cache_size = 쿼리 결과를 캐싱하기 위해 할당하는 메모리 크기 (DB전체)

query_cache_limit = 쿼리 결과가 이 값보다 크면 캐싱 안 함 (기본은 1M)

long_query_time = 느린 쿼리의 기준 시간(초)

sort_buffer_size = (인덱스를 사용할 수 없는) 정렬에 필요한 버퍼의 크기, ORDER BY 또는 GROUP BY 연산 속도와 관련

skip-name-resolve = 역DNS 검색 비활성화 (IP 기반으로 접속을 하게 되면 hostname lookup 과정 생략)

wait_timeout = 접속한 후 쿼리가 들어올 떄까지 대기하는 시간(초) = noninteractive 커넥션 닫기까지의 시간

max_user_connections = user 접속 허용 수

 

mysql 기본 문자셋 UTF-8

init_connect=SET collation_connection=utf8_general_ci

init_connect=SET NAMES utf8

 

서버 character set, collation 설정 변경하기

character-set-server = charset_name을 기본 서버 문자 집합으로 사용하십시오.

collation-server=utf8_general_ci


 2-8. MySQL 패스워드 초기화 

mysql_install_db 패스워드 초기화 후  설치 디렉터리 및 데이터  /opt/mysql/var 로 설정

/opt/mysql/scripts/mysql_install_db --basedir=/opt/mysql --datadir=/opt/mysql/var
2021-02-13T06:45:14.208935Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-02-13T06:45:14.608368Z 0 [Warning] InnoDB: New log files created, LSN=45790

2021-02-13T06:45:14.691027Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2021-02-13T06:45:14.756940Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 06f4f6e8-6dc7-11eb-a7b1-ac1f6b910efa.
2021-02-13T06:45:14.759742Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2021-02-13T06:45:14.761160Z 1 [Note] A temporary password is generated for root@localhost: AJHH3)OKcLY4

저의 경우 패스워드는 AJHH3)OKcLY4 로 설정되었습니다

랜덤으로 초기 패스워드가 설정되기 때문에 해당 패스워드는 기억하시면 됩니다.


 2-9. MySQL 실행 및 접속

# MariaDB 실행
/opt/mysql/support-files/mysql.server start
SUCCESS!

# MariaDB 접속 [ 패스워드 초기화 했으므로, enter 치고 들어가시면 됩니다 ]
/opt/mysql/bin/mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.3.15-MariaDB-log Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> 

 2-10. MySQL 버전 확인

/opt/mysql/bin/mysql -V
/opt/mysql/bin/mysql  Ver 14.14 Distrib 5.7.26, for Linux (x86_64) using  EditLine wrapper


여기까지 진행하셨으면, 
MySQL 설치 완료되었습니다.
다음장에는 이어서, Nginx 진행하겠습니다. 

정리.txt
0.00MB

반응형

'IT > Linux' 카테고리의 다른 글

Nginx + PHP + MySQL 소스 설치 (3)  (0) 2021.02.13
Nginx + PHP + MySQL 소스 설치 (2)  (0) 2021.02.13
리눅스 CentOS 7 설치  (0) 2021.02.13
Ubuntu 18.04 LTS 서버버전 설치  (0) 2021.01.31
Ubuntu 16.04 LTS 서버버전 설치  (0) 2021.01.30
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기
});