본문 바로가기
System/Server

Oracle, php 연동 Apache 웹 서버 구축

by 슬픈 야옹이 2023. 5. 2.

일반적인 웹 서비스는 DB 서버와 연동해서 동작한다.

 

이 포스트에서 Oracle Database와 연동 가능한 Apache 웹 서버를 구축해본다. 설정이 약간 다르다.

다운받는 소스 파일의 버전에 따라 명령어를 조금씩 수정해야한다. (상식)

 

대략적인 순서는 다음과 같다.

 

1. 오라클 인스턴스 클라이언트 설치

2. Apache 설치

3. php 설치

 

 

 

 

1. 오라클 인스턴스 클라이언트 설치

Oracle 홈페이지에서 oracle instant client basic, oracle instant client devel을 rpm으로 다운받는다.

파일은 /usr/local 에 다운받는다.

 

https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html

 

Instant Client for Linux x86-64 (64-bit)

Base - one of these packages is required Tools - optional packages Development and Runtime - optional packages

www.oracle.com

 

instant client 다운

 

 

basic
devel

 

 

wget https://download.oracle.com/otn_software/linux/instantclient/1919000/oracle-instantclient19.19-basic-19.19.0.0.0-1.x86_64.rpm
wget https://download.oracle.com/otn_software/linux/instantclient/1919000/oracle-instantclient19.19-devel-19.19.0.0.0-1.x86_64.rpm

 

 

 

다운받은 rpm 파일을 설치한다.

/usr/lib/oracle/19.x 경로가 ORACLE_BASE 디렉토리로 지정되어 설치된다. 

 

rpm -Uvh oracle-instantclient19.19-basic-19.5.0.0.0-1.x86_64.rpm
rpm -Uvh oracle-instantclient19.19-devel-19.5.0.0.0-1.x86_64.rpm

rpm 설치

 

+)

만일 libaio가 필요하다는 메시지가 출력되면 libaio를 설치한 뒤 진행한다. (yum install -y libaio)

보통 최소 설치로 리눅스를 깔면 libaio가 깔려있지 않다.

 

 

sqlnet.ora 파일과 tnsnames.ora 파일을 생성한다.

mkdir -p /usr/lib/oracle/network/admin/ 

vi /usr/lib/oracle/network/admin/sqlnet.ora
=============================================
NAMES.DIRECTORY_PATH= (TNSNAMES)
=============================================


vi /usr/lib/oracle/network/admin/tnsnames.ora
=====================================================================
oracle
 (DESCRIPTION =
 (ADDRESS = (PROTOCOL = tcp) (HOST = <오라클 서버 IP>) (port = 1521))
 (CONNECT_DATA = (SID = DB19))
 )
 =====================================================================

 

sqlnet.ora

 

tnsnames.ora

물론 연동할 oracle 서버에 맞추어 작성해야 한다.

 

 

 

 

 

 

2. 아파치 설치

필수 패키지를 설치한다.

yum install -y gcc gcc-c++ cmake apr apr-util zlib-devel wget net-tools expat-devel perl

필수 패키지 설치

 

PCRE (Perl Compatible Regular Expressions)를 설치한다.

wget --no-check-certificate https://ftp.exim.org/pub/pcre/pcre-8.45.tar.gz 
tar xvfz pcre-8.45.tar.gz
cd pcre-8.45/
./configure --prefix=/usr/local
make 
make install

 

 

아파치 2.4 소스파일을 다운받는다.

pcre 디렉터리에서 나간 뒤 /usr/local 경로에서 해야함에 주의한다.

cd /usr/local
wget --no-check-certificate https://dlcdn.apache.org/httpd/httpd-2.4.57.tar.gz
wget --no-check-certificate https://dlcdn.apache.org//apr/apr-1.6.5.tar.gz
wget --no-check-certificate https://dlcdn.apache.org//apr/apr-util-1.6.3.tar.gz

wget 경로는 종종 바뀐다.

다운 안되면 구글에 검색하면 쉽게 찾을 수 있으니 링크 복사해서 wget 하면된다.

 

 

다운받은 파일의 압축을 푼다.

tar xvfz apr-1.6.5.tar.gz
tar xvfz apr-util-1.6.3.tar.gz
tar xvfz httpd-2.4.57.tar.gz

 

다운받고 압축 푼 모습

 

apr 파일을 apache 디렉터리 안으로 옮긴다.

mv apr-1.6.5 ./httpd-2.4.57/srclib/apr
mv apr-util-1.6.3 ./httpd-2.4.57/srclib/apr-util

mv

 

 

아파치를 설치한다.

cd httpd-2.4.57
./configure --prefix=/app/apache --enable-rewrite --enable-so --with-included-apr --with-pcre=/usr/local/bin/pcre-config
make
make install

 

 

아파치 설정 파일을 수정한다. 이 부분은 이전의 Apache 설치 과정과 같다.

vi /app/apache/conf/httpd.conf
==================================================
....
#ServerName www.example.com:80 
ServerName localhost <- 수정

....


DocumentRoot "/home/httpd/html" <- 수정

....

<Directory "/home/httpd/html"> <- 수정 (Apache 설치 참고)
..
</Directory>

 

 

webmaster 계정과 웹 서버의 루트 디렉터리를 생성한다.

groupadd -g 1090 web
useradd -g web -u 1099 webmaster
mkdir -p /home/httpd/html
chown -R webmaster.web httpd

mkdir -p /home/webmaster/httpd
chown -R webmaster.web /home/webmaster/httpd
mount --bind /home/httpd /home/webmaster/httpd

 

 

아파치를 실행한다.

/app/apache/bin/apachectl start

 

 

 

 

 

 

 

3. PHP 설치

필수 패키지를 설치한다.

yum install -y sqlite-devel libxml2* libpng-devel, libjpeg-devel

 

 

php 소스파일을 다운받고 압축을 푼다.

wget https://www.php.net/distributions/php-7.4.30.tar.gz
tar xvfz php-7.4.30.tar.gz

 

php를 설치한다.

cd php-7.4.30
./configure --with-apxs2=/app/apache/bin/apxs --enable-sigchild --with-oci8=instantclient,/usr/lib/oracle/19.19/client64/lib 
make
make install
cp php.ini-development /usr/local/lib/php.ini

 

php 설치

 

Apache에 php 설정을 추가한다.

 

# vi /app/apache/conf/httpd.conf
============================================================
....
LoadModule php7_module modules/libphp7.so
AddType application/x-httpd-php .php .php3 .php4 .php5 .html .htm .inc <- 추가

....

<IfModule dir_module>
    DirectoryIndex index.html index.html index.php <- 수정
</IfModule>
============================================================


# vi /app/apache/bin/apachectl
========================================================
....
....
# oracle setup
export TNS_ADMIN=/usr/lib/oracle/network/admin
export LD_LIBRARY_PATH=/usr/lib/oracle/19.19/client64/lib
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
....
....
=========================================================

* apachectl 수정 시 위치에 유의

 

 

 

 

php.ini 파일 수정

 

# vi /usr/local/lib/php.ini
=============================================
short_open_tag = On
default_charset = "UTF-8" 
display_errors = On
include_path = ".:/usr/local/lib"
upload_tmp_dir = /tmp
error_reporting = E_ALL & ~E_NOTICE
=============================================

 

 

 

테스트 페이지를 생성한다.

# vi /home/httpd/html/conn.php
=====================================================================
<?
 $oserver = "oracle";
 $oname = "oracle_계정";
 $opassword = "oracle_pw";
 $conn=@oci_connect($oname, $opassword, $oserver) or die('Could not connect:');
 echo("Oracle 19c \$conn : $conn<br>");
 $st=oci_server_version($conn);
 echo("$st<br><hr><br>");
?>
====================================================================

 

 

아파치 서버를 재실행한다.

/app/apache/bin/apachectl stop
/app/apache/bin/apachectl start

 

 

접속을 테스트한다.

접속 테스트

 

 

웹 서버가 잘 동작하도록 /etc/rc.d/rc.local을 편집한다.

# vi /etc/rc.d/rc.local
=====================================================
....
mount --bind /home/httpd /home/webmaster/httpd <- 추가
/app/apache/bin/apachectl start <- 추가
...
=====================================================