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

  • php 설치에 앞서 필요한 의존 라이브러리들을 설치합니다.
yum -y install gcc* make libtool-ltdl-devel openssl-devel pcre-devel ncurses-devel libxml2-devel bzip2-devel curl-devel gdbm-devel libjpeg-devel libpng-devel freetype-devel imap-devel libc-client-devel krb5-devel libmcrypt libmcrypt-devel libmhash-devel flex icu libicu libicu-devel gd gd-devel openldap-devel php-devel

2. Libiconv 등 필수 라이브러리 설치

  • php 설치에 앞서 make 파일 생성(compile) 에 필요한 라이브러리들을 다운받고 설치합니다.
cd /home1/username/stage
sudo wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz
sudo tar xvzf libiconv-1.15.tar.gz
cd libiconv-1.15
sudo ./configure --prefix=/usr/local/
sudo make && make install

# PHP 설치시 –with-ldap 옵션을 사용하기위해 아래와 같이 심볼릭 링크를 추가시켜 줍니다.

ln -s /usr/lib64/libldap.so /usr/lib/libldap.so

ln -s /usr/lib64/libldap_r.so /usr/lib/libldap_r.so

3. php 소스 파일 다운 후 configure 실행

http://php.net/downloads.php 사이트에 접속 후 php 다운로드

  • php-x.x.x.tar.gz 파일은 커스텀 설치가 가능한 소스파일입니다.
  • configure는 make 파일을 생성해주는 파일입니다. 생성된 make파일을 통해 컴파일을 진행할 것입니다.
  • configure에 다양한 옵션을 넣어주어 (경로지정, db지정, 라이브러리 연동 등) make파일을 생성하여 줍니다.
# 압축 해제 후
cd /home1/username/stage/php-7.X.X

sudo ./configure \
-prefix=/home1/username/apps/php7.1 \
-with-config-file-path=/home1/username/apps/php7.1/etc \
-disable-debug \
-enable-fpm \
-enable-bcmath \
-enable-exif \
-enable-ftp \
-enable-gd-native-ttf \
-enable-inline-optimization \
-enable-intl \
-enable-mbregex \
-enable-mbstring \
-enable-mod-charset \
-enable-sigchild \
-enable-soap \
-enable-sockets \
-enable-sysvsem=yes \
-enable-sysvshm=yes \
-enable-xml \
-enable-zip \
-with-bz2 \
-with-iconv=/usr/local \
-with-curl \
-with-zlib \
-with-gd \
-with-gettext \
-with-mcrypt \
-with-mhash \
-with-pdo-mysql \
-with-mysqli \
-with-openssl \
-with-xmlrpc \
-with-freetype-dir=/usr/lib64 \
-with-jpeg-dir=/usr/lib64 \
-with-libxml-dir=/usr/lib64 \
-with-png-dir=/usr/lib64 \
-with-zlib-dir=/usr/lib64 \
-with-fpm-user=username \
-with-fpm-group=username \
-with-ldap

#... 기타 옵션이 필요할경우 추가.

**####만약 configure 컴파일 도중 오류가 난다면, library경로나 설치가 제대로 안되어있는것!**
==================오류 해결 =================================
#iconv 오류
iconv 라이브러리의 경로를 확인해볼것!!(아니면 재설치)

#ldap.h 오류
sudo yum install openldap-devel

#Cannot find ldap libraries in /usr/lib. 오류
sudo cp -frp /usr/lib64/libldap* /usr/lib/


==============================================================

4. configre 실행 성공 및 make 파일 생성 완료

  • Thank you for using php라는 메세지가 뜨면 성공적으로 만들어진 것입니다.

5. make 및 make install 진행.

sudo make
sudo make install

6. php.ini파일 을 nginx로 복사하여준다.

sudo cp /home1/username/stage/php-7.2.3/php.ini-development /home1/username/apps/nginx/conf/php.ini


설치법 - nginx와 php연동

nginx는 php-fpm이 설치되어 있어야 연동이 가능합니다.

1. conf 파일 원본 복사

cd /home1/username/apps/php/etc/
sudo cp -arp php-fpm.conf.default ./php-fpm.conf

2. www.conf 복사

cd /home1/username/apps/php/etc/php-fpm.d/
sudo cp www.conf.default www.conf

3. php-fpm실행

sudo /home1/username/apps/php/sbin/php-fpm

-> php-fpm실행시 오류가 안나야함


4.nginx.conf 파일 수정

->nginx와 php가 연동할 수 있도록 nginx파일을 수정하도록 합니다.

sudo vi /home1/username/apps/nginx/conf/nginx.conf
# 주석 해제후 수정 또는 아래 내용 삽입

location \~ .php$ {
            root           /home1/username/apps/nginx/html;
            fastcgi\_pass   127.0.0.1:9000;
            fastcgi\_index  index.php;
            fastcgi\_param  SCRIPT\_FILENAME  $document\_root$fastcgi\_script\_name;
            include        fastcgi\_params;
        }

5. php 구동 테스트

cd /home1/username/apps/nginx/html
echo "<?php phpinfo(); ?>" >> phpinfo.php

-> phpinfo 창이 정상적으로 뜨게되면 연동에 성공!

컴포저란 ?

centos에는 yum, rpm 등 패키지 관리 도구 등이 있다.
php 라이브러리를 자동으로 선언해주는 점에서 composer 또한 패키지 관리 도구로 착각 하기 쉽지만, 엄연히 따지고보면 composer는 php 프로젝트에서 사용하는 의존성 관리 도구이다.

1. composer 설치 

curl -sS https://getcomposer.org/installer | php

 

2. 전역사용을 위하여 bin에 등록.

 sudo mv composer.phar /usr/bin/composer

 

3. composer install(라이브러리 선언)

cd /path/to/project
composer install 

패키지 설치 대신 소스 설치 해야 하는 이유 ?

여러가지 이유가 있지만, 실 업무를 진행하며 느낀 개인적인 견해로는....

 

1. 버전 변경에 용이)
apps 전용 폴더 설정 후, S-링크만 연결하여주면 기존 버전 변동없이 바로 버전 up/down 가능. 
(ex: ln -s ~/apps/nginx-1.0.1 ~/apps/nginx   <-->  ln -s ~/apps/nginx-1.1.1 ~/apps/nginx)

 

2. 루트 권한 없이도 유저 or 그룹 단위로 엔지니어링 가능)
패키지 설치와 달리 지정한 폴더로 설치되기 때문에 root 권한이 필요하지 않음.

 

3. 새로운 환경의 서버로 이동할 경우 복구가 용이)
초기 설치한 옵션을 init.sh로 만들면 쉽게 새로운 서버에서 손쉽고 빠르게 재 설정 가능.

 

4. 의존성 문제 크게 없음.

 

1. 설치 전 준비 사항

#pcre 라이브러리 설치
sudo yum -y install pcre*

#gzip 압축을 사용하기 위해서 설치
sudo yum -y install zlib zlib-devel

#open ssl 설치
sudo yum -y install openssl openssl-devel

 

 

2. nginx 다운로드

cd /home1/username/stage
wget https://nginx.org/download/nginx-1.12.0.tar.gz
tar -xvzf nginx-1.12.0.tar.gz

 

3. nginx 컴파일 설치

cd /home1/username/stage/nginx-1.12.0

#NginX 폴더안에 있는 내용 컴파일 
sudo ./configure --prefix=/home1/username/apps/nginx-1.12.0 --user=username --group=username --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module

#make, install
sudo make
sudo make install

#심볼릭 링크 연결
ln -s /home1/username/apps/nginx-1.12.0 /home1/username/apps/nginx

 컴파일 옵션 설명

  • --prefix=경로 : 컴파일후 설치되는 경로
  • --user=사용자계정 : 엔진엑스 작업자 프로세스를 실행하기 위한 기본 사용자 계정 (이설정은 환경설정 파일에 user 지시어를 생략했을 경우에만 적용된다.)
  • --group=그룹 : 엔진엑스 작업자 프로세스를 실행하기 위한 기본 사용자 그룹 (이설정은 환경설정 파일에 group 지시어를 생략했을 경우에만 적용된다.)
  • --width-http_realip_module : 요청 헤데 데이터로부터 실제 IP 주소를 읽어 내는 Real IP 모듈
  • --with-http_stub_status_module : 서버 통계와 정보페이지를 생성하는 스터브 상태
  • 기타 컴파일시 옵션 추가 할 수 있음.

4. nginx conf 수정

여러 사이트를 동시에 nginx에 올려야  할 경우,
conf/nginx.conf를 직접 수정하기 보다는 conf를 각각 작성하여 include 하는 방식을 권장 합니다

  • sites-available 디렉토리에 사이트별로 각각 conf 작성.
  • sites-enabled 디렉토리에 사용할 사이트를 심볼릭링크로 등록.
  • nginx.conf에서 sites-enabled디렉토리를 include.

 

sites-available 디렉토리에 사이트별로 각각 conf 작성.

mkdir -p ~/apps/nginx/conf/sites-available

cd ~/apps/nginx/conf/sites-available

vi test.com.conf
#내용 작성
#test.com.conf
server {
        listen       80 default_server;
        listen       localhost default_server;

		#root 변경!
        location / {
            root   /home1/username/apps/nginx/html/path/to/project;
            index  index.php index.html index.htm;
                try_files $uri $uri/ /index.php?$query_string;
        }
        
        #php-fpm 연동할 경우 아래 내용도 설정.
        location ~ \.php$ {
                root    /home1/username/apps/nginx/html/path/to/project;
                fastcgi_pass    127.0.0.1:9000;
                fastcgi_index   index.php;
                fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include         fastcgi_params;
        }
}

 

sites-enabled 디렉토리에 사용할 사이트를 심볼릭링크로 등록.

mkdir -p ~/apps/nginx/conf/sites-enabled

cd ~/apps/nginx/conf/sites-enabled

ln -s ../sites-enabled/test.com.conf

 

nginx.conf에서 sites-enabled디렉토리를 include.

#nginx conf 수정
cd /home1/username/apps/nginx/conf
vi nginx.conf

...
#user  nobody;
worker_processes  auto;

error_log  logs/error.log;
error_log  logs/error.log  notice;
error_log  logs/error.log  info;

pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    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  logs/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    server_tokens       off;
    keepalive_timeout   65;
    types_hash_max_size 2048;

        include /home1/username/apps/nginx/conf/sites-enabled/*;
}

5. nginx 실행

#nginx 실행
sudo /home1/username/apps/nginx/sbin/nginx

#nginx 중지
sudo /home1/username/apps/nginx/sbin/nginx -s stop

#nginx conf reload
sudo /home1/username/apps/nginx/sbin/nginx -s reload

 

 

6. ip주소로 접속하여 nginx 구동 확인.

+ Recent posts