Apache + PHP7 설치는 이전글 참고

이전글 : http://oerun.tistory.com/2 

SQL Server 연결을 위해서는 리눅스용 드라이버가 필요하다.

아래 사이트에서 "CentOS7.tar" 파일을 내려받는다. 현재 최신버전은 4.0.6이다.


https://github.com/Microsoft/msphpsql/releases


내려받은 압축파일에는 아래와 같이 파일이 들어있으며, 필요한 파일은 "php_sqlsrv_7_nts.so" 파일이다.

* php_pdo_sqlsrv_7_nts.so 파일을 사용해야 할 것 같으나 로드 시 오류가 발생한다.


"php_sqlsrv_7_nts.so" 파일을 /etc/php.ini에서 설정한 extension_dir 경로(/usr/lib64/php/modules)에 복사한다.


복사 후 권한을 설정한다.

# chmod 755 /usr/lib64/php/modules/php_sqlsrv_7_nts.so

/etc/php.ini 파일을 열어 적당한 위치에 아래와 같이 추가한다.


Apache를 재시작한다.

# systemctl restart httpd


● SQL Server 연결을 위한 FreeTDS 설치

# yum install -y freetds-devel libxml2-devel
# cp -a /etc/freetds.conf /etc/freetds.conf.original
# sed -i '13,15s/;/ /' /etc/freetds.conf
# sed -i '13,15s/tds version = 4.2/tds version = 8.0\n        client charset = EUC-KR/' /etc/freetds.conf
# cp -a /etc/locales.conf /etc/locales.conf.original
# sed -i '2,2s/date format = %b %e %Y %I:%M:%S:%z%p/date format = %Y-%m-%d %H:%M:%S\n        charset = euc-kr/' /etc/locales.conf


● 연결을 위한 PHP 소스

<?
$DB_HOST = "HOST_IP"; 
$DB_NAME = "TEST"; 
$DB_USER = "USER"; 
$DB_PW   = 'DBPW'; 

try {
	$Conn = new PDO("dblib:host=$DB_HOST:1433; dbname=$DB_NAME;", $DB_USER, $DB_PW);
	$Conn -> setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
} catch(Exception $e) {
	die( print_r( $e -> getMessage() ) );
}

try {
	$Qry = "SELECT * FROM [TABLE_NAME]"; 
	$Rslt = $Conn -> prepare($Qry); 
	$Rslt -> execute();
	$Rslt_Data = $Rslt -> fetchAll(PDO::FETCH_ASSOC);
} catch(Exception $e) {
	echo $e -> getMessage();
	exit;
}

foreach ( $Rslt_Data as $LIST ) {
	echo "$LIST[FIELD_NAME]<br>";
}
?>



● 쉘 스크립트 만들기

# echo '#!/bin/sh

#생성된지 15일 이상된 백업파일은 삭제
find /home/backup/*.tar.gz -mtime +15 -exec rm -f {} \;

#Data 디렉토리 및 필요없는 디렉토리를 제외하고 백업
tar cfzP /home/backup/WebPage_$(date +%Y-%m-%d.%s).tar.gz /home/백업경로 --exclude=/home/백업경로/public_html/Data --exclude=/home/백업경로/Module
' >> /home/계정/source_backup.sh
# chmod 755 /home/계정/source_backup.sh

● lftp 설치

# yum install -y lftp

ssh로 연결하여 복사하기

# lftp -u '사용자ID','사용자암호' -p 22 sftp://백업해야할서버의IP -e "mirror -a --only-newer /home/원격서버의경로 /home/내려받을경로 && bye"

옵션

--delete                remote site에 없는 파일 삭제

--only-existing       target에 존재하는 파일만 다운로드

--only-newer         새로운 파일만 다운로드

--no-recursion       subdirectory는 무시

--reverse              역방향으로 mirror (get이 아닌 put)


한글문제(euc-kr)

utf-8 환경에서 한글파일명을 전송할 경우 문제가 발생할 수 있다.

해결을 위해서 /etc/lftp.conf 파일을 수정한다.

man lftp 로 찾아보면 아래와 같은 설정이 있다.

set file:charset utf-8
set ftp:charset euc-kr

위 두줄을 /etc/lftp.conf 파일에 추가해준다.

● vsftp 3.0.2 설치

# yum install -y vsftpd
# cp -av /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.original
# sed -i 's/anonymous_enable=YES/anonymous_enable=NO/' /etc/vsftpd/vsftpd.conf
# sed -i 's/#ascii_upload_enable=YES/ascii_upload_enable=YES/' /etc/vsftpd/vsftpd.conf
# sed -i 's/#ascii_download_enable=YES/ascii_download_enable=YES/' /etc/vsftpd/vsftpd.conf
# sed -i 's/#chroot_local_user=YES/chroot_local_user=YES/' /etc/vsftpd/vsftpd.conf
# sed -i 's/#chroot_list_enable=YES/chroot_list_enable=YES/' /etc/vsftpd/vsftpd.conf
# sed -i 's/#chroot_list_file=\/etc\/vsftpd\/chroot_list/chroot_list_file=\/etc\/vsftpd\/chroot_list/' /etc/vsftpd/vsftpd.conf
# sed -i 's/#ls_recurse_enable=YES/ls_recurse_enable=YES/' /etc/vsftpd/vsftpd.conf
# sed -i 's/listen=NO/listen=YES/' /etc/vsftpd/vsftpd.conf
# sed -i 's/listen_ipv6=YES/listen_ipv6=NO/' /etc/vsftpd/vsftpd.conf
# echo '
allow_writeable_chroot=YES
local_root=public_html 
use_localtime=YES' >> /etc/vsftpd/vsftpd.conf
# systemctl start vsftpd
# systemctl enable vsftpd
# firewall-cmd --permanent --zone=public --add-service=ftp
# firewall-cmd --reload

상위 디렉토리 접근을 허용 할 경우 ID 등록

# echo '
oerun' >> /etc/vsftpd/chroot_list
# systemctl restart vsftpd


1. YUM 설치를 위한 저장소 추가

CentOS 7에서 기본적으로 제공하는 PHP버전은 5.X 버전이다.

최신버전인 PHP7을 설치하기 위해서 Webtatic EL 저장소를 추가한다.

# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm


2. Apache 설치

# yum --enablerepo=epel,remi install httpd mod_ssl
# systemctl start httpd
# systemctl enable httpd
# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --permanent --zone=public --add-service=https
# firewall-cmd --reload

Apache 설정

# cp -av /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.original
# sed -i 's/AddDefaultCharset UTF-8/#AddDefaultCharset UTF-8/' /etc/httpd/conf/httpd.conf
# sed -i 's/DirectoryIndex index.html/DirectoryIndex index.html Index.html Index.php index.php/' /etc/httpd/conf/httpd.conf
# sed -i 's/Options Indexes FollowSymLinks/Options FollowSymLinks/' /etc/httpd/conf/httpd.conf
# echo 'KeepAlive On
ServerTokens Prod
' >> /etc/httpd/conf/httpd.conf
# systemctl restart httpd

Apache SSL 설정 - 빨갛게 된 부분의 도메인은 SSL 인증서를 사용할 자신의 도메인을 입력하면 된다. crt 파일과 key파일을 발급은 SSL 발급업체에서..

# sed -i 's/#DocumentRoot "\/var\/www\/html"/DocumentRoot "\/home\/oerun\/public_html"/' /etc/httpd/conf.d/ssl.conf
# sed -i 's/#ServerName www.example.com:443/ServerName www.oerun.com:443/' /etc/httpd/conf.d/ssl.conf
# sed -i 's/SSLCertificateFile \/etc\/pki\/tls\/certs\/localhost.crt/SSLCertificateFile \/etc\/pki\/tls\/certs\/cert_www.oerun.com.crt/' /etc/httpd/conf.d/ssl.conf
# sed -i 's/SSLCertificateKeyFile \/etc\/pki\/tls\/certs\/localhost.key/SSLCertificateKeyFile \/etc\/pki\/tls\/certs\/prv_www.oerun.com.key/' /etc/httpd/conf.d/ssl.conf
# systemctl restart httpd


3. PHP 7 설치

먼저 PHP7 본 패키지를 설치한다.

# yum install php70w

기타 필요한 모듈을 설치한다. yum search php70w 명령으로 설치할 수 있는 모듈을 찾아볼 수 있다.

# yum install php70w-cli php70w-common php70w-dba php70w-devel php70w-fpm php70w-gd php70w-imap
# yum install php70w-ldap php70w-mbstring php70w-mcrypt php70w-mysqlnd php70w-odbc php70w-opcache
# yum install php70w-pdo php70w-pdo_dblib php70w-pear php70w-pecl-imagick php70w-pecl-imagick-devel
# yum install php70w-pgsql php70w-phpdbg php70w-process php70w-snmp php70w-soap php70w-tidy php70w-xml php70w-xmlrpc

PHP 설정

# cp -av /etc/php.ini /etc/php.ini.original
# sed -i 's/short_open_tag = Off/short_open_tag = On/' /etc/php.ini
# sed -i 's/expose_php = On/expose_php = Off/' /etc/php.ini
# sed -i 's/display_errors = Off/display_errors = On/' /etc/php.ini
# sed -i 's/;error_log = php_errors.log/error_log = php_errors.log/' /etc/php.ini
# sed -i 's/error_reporting = E_ALL \& ~E_DEPRECATED/error_reporting = E_ALL \& ~E_NOTICE \& ~E_DEPRECATED \& ~E_USER_DEPRECATED/' /etc/php.ini
# sed -i 's/variables_order = "GPCS"/variables_order = "EGPCS"/' /etc/php.ini
# sed -i 's/post_max_size = 8M/post_max_size = 100M/' /etc/php.ini
# sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 100M/' /etc/php.ini
# sed -i 's/;date.timezone =/date.timezone = "Asia\/Seoul"/' /etc/php.ini
# sed -i 's/session.gc_maxlifetime = 1440/session.gc_maxlifetime = 86400/' /etc/php.ini
# systemctl restart httpd
# echo '<?
echo __FILE__;
phpinfo();
?>' >> /var/www/html/phpinfo.php

브라우저에서 http://서버IP/phpinfo.php 실행하면 php 정보가 출력된다.



4. MariaDB 설치

설치 전, 아래 주소에 접속하여 원하는 버전을 선택하여 저장소 파일을 만든다.

https://downloads.mariadb.org/mariadb/repositories/#mirror=kaist&distro=CentOS&distro_release=centos7-amd64--centos7&version=10.1

# echo '# MariaDB 10.1 CentOS repository list - created 2016-10-13 00:14 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
' >> /etc/yum.repos.d/MariaDB.repo
# yum install MariaDB-server MariaDB-client
# systemctl restart mysql
# mysql_secure_installation
# systemctl restart mysql
# firewall-cmd --permanent --zone=public --add-service=mysql
# firewall-cmd --reload
# mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'DB암호' WITH GRANT OPTION; # systemctl restart mysql

MariaDB 설정

# rpm -ql MariaDB-server.x86_64 | grep cnf

* 환경설정 파일이 어디 있는지 확인
# mv /etc/my.cnf /etc/my.cnf.original
# cp -f /usr/share/mysql/my-huge.cnf /etc/my.cnf

InnoDB로 사용하기

# cp -f /usr/share/mysql/my-innodb-heavy-4G.cnf /etc/my.cnf
# sed -i 's/\[mysqld\]/\[mysqld\]\ntransaction-isolation = READ-COMMITTED/' /etc/my.cnf
# sed -i 's/\[mysqld\]/\[mysqld\]\nlog-bin-trust-function-creators = 1/' /etc/my.cnf
# sed -i 's/\[mysqld\]/\[mysqld\]\nlower_case_table_names = 1/' /etc/my.cnf
# sed -i 's/\[mysqld\]/\[mysqld\]\nexpire_logs_days = 5/' /etc/my.cnf
# sed -i 's/\[mysqld\]/\[mysqld\]\nwait_timeout = 90000/' /etc/my.cnf
# sed -i 's/max_allowed_packet = 16M/max_allowed_packet = 128M/' /etc/my.cnf
# sed -i 's/default-storage-engine = MYISAM/default-storage-engine = InnoDB/' /etc/my.cnf
# sed -i 's/transaction_isolation = REPEATABLE-READ/transaction_isolation = READ-COMMITTED/' /etc/my.cnf
# sed -i 's/log-bin=mysql-bin/#log-bin=mysql-bin/' /etc/my.cnf
# sed -i 's/long_query_time = 2/long_query_time = 3/' /etc/my.cnf
# sed -i 's/innodb_buffer_pool_size = 2G/innodb_buffer_pool_size = 24G/' /etc/my.cnf
# sed -i 's/innodb_data_file_path = ibdata1:10M:autoextend/innodb_data_file_path = ibdata1:2000M;ibdata2:2000M;ibdata3:2000M:autoextend/' /etc/my.cnf
# sed -i 's/innodb_flush_log_at_trx_commit = 1/innodb_flush_log_at_trx_commit = 0/' /etc/my.cnf
# sed -i 's/innodb_log_file_size = 256M/innodb_log_file_size = 4G/' /etc/my.cnf

MariaDB를 EUC-KR로 사용하기

# sed -i 's/\[client\]/\[client\]\ndefault-character-set = euckr/' /etc/my.cnf
# sed -i 's/\[mysqld\]/\[mysqld\]\ncharacter-set-client-handshake = FALSE\ninit_connect = \"SET collation_connection = euckr_korean_ci\"\ninit_connect = \"SET NAMES euckr\"\ncharacter-set-server = euckr\ncollation-server = euckr_korean_ci/' /etc/my.cnf
# sed -i 's/\[mysqldump\]/\[mysqldump\]\ndefault-character-set = euckr/' /etc/my.cnf
# sed -i 's/\[mysql\]/\[mysql\]\ndefault-character-set = euckr/' /etc/my.cnf
# systemctl restart mysql

MariaDB를 UTF-8로 사용하기

# sed -i 's/\[client\]/\[client\]\ndefault-character-set = utf8/' /etc/my.cnf
# sed -i 's/\[mysqld\]/\[mysqld\]\ncharacter-set-client-handshake = FALSE\ninit_connect = \"SET collation_connection = utf8_general_ci\"\ninit_connect = \"SET NAMES utf8\"\ncharacter-set-server = utf8\ncollation-server = utf8_general_ci/' /etc/my.cnf
# sed -i 's/\[mysqldump\]/\[mysqldump\]\ndefault-character-set = utf8/' /etc/my.cnf
# sed -i 's/\[mysql\]/\[mysql\]\ndefault-character-set = utf8/' /etc/my.cnf
# systemctl restart mysql

DB 경로 수정하기 - 최근 버전부터는 오류가 발생함 ㅜ.ㅜ

# mkdir /home/mysql
# chown mysql.mysql mysql
# chown -R mysql:mysql /home/mysql
# service mysql stop
# cp -rap /var/lib/mysql/* /home/mysql/

설정파일의 데이터 경로 수정(#vi /etc/my.cnf)
# sed -i 's/\[mysqld\]/\[mysqld\]\ndatadir = \/home\/mysql/' /etc/my.cnf
# sed -i 's/#innodb_data_home_dir = <directory>/innodb_data_home_dir = \/home\/mysql/' /etc/my.cnf
# sed -i 's/#innodb_log_group_home_dir/innodb_log_group_home_dir = \/home\/mysql/' /etc/my.cnf

# service mysql start


5. 설치된 버전 확인

# php -v
PHP 7.0.6 (cli) (built: May  1 2016 10:24:20) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built:   Nov 19 2015 21:43:13
# mysql -V
mysql  Ver 15.1 Distrib 10.1.14-MariaDB, for Linux (x86_64) using readline 5.1


● phpMyAdmin 4.6.1 설치

# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
# yum --enablerepo=remi,remi-test install -y phpMyAdmin
# cp -a /etc/httpd/conf.d/phpMyAdmin.conf /etc/httpd/conf.d/phpMyAdmin.conf.original
# sed -i 's/Alias \/phpMyAdmin/Alias \/phpMyAdmin_oerun/' /etc/httpd/conf.d/phpMyAdmin.conf
# sed -i 's/Alias \/phpmyadmin/Alias \/phpmyadmin_oerun/' /etc/httpd/conf.d/phpMyAdmin.conf
# sed -i '15,17s/Require local/Require all granted/' /etc/httpd/conf.d/phpMyAdmin.conf
# systemctl restart httpd

* 접속 URL : http://서버IP/phpmyadmin_oerun



+ Recent posts