Установка Oracle Database 11g + Drupal 7

05.09.2013
Share on FacebookShare on TwitterShare on GooglePlusShare on Linkedin
Автор:

Данная статья описывает процесс развёртывания CMS Drupal, который выполняется с использованием Oracle DB на Debian сервере. Таким образом, в наличии у нас операцонная система Debian X64, вебсервер nginx и бэкенд сервер php-fpm, предназначенный для обработки php скриптов. Процесс развёртывания вебсервера nginx + php-fpm описан во множестве статей, и на нём останавливаться не будем, а сразу же перейдём к подготовке установки Oracle DB. Сначала веб-разработчику нужно установить все необходимые модули php:

# apt-get install php5-mysql php5-curl php5-dev php-pear php-db php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
# /etc/init.d/php5-fpm restart

Поскольку мы используем Debian Based ОС, rpm пакеты, выполнить установку стандартними способами не получится, поэтому, для воспользуемся для этого утилитой Alien:

# apt-get install alien

Установливаем необходимые библиотеки:

# apt-get install libaio1 unixodbc

Отладка параметров ядра. Создадим файл /etc/sysctl.d/60-oracle.conf с таким содержанием: 

fs.file-max=6815744
net.ipv4.ip_local_port_range=9000 65000
kernel.sem=250 32000 100 128
kernel.shmmax=536870912

И выполним команду:

# service procps start

Вместе с тем, поскольку в нашем распоряжении операционная система Debian, представляется необходимым создать каталог, в котором разместить базу данных и клиента:

# mkdir /home/oracle-xe
# ln -s /home/oracle-xe /u01

Далее переходим непосредственно к установке Oracle DB. Прежде всего необходимо загрузить zip архив Oracle Database Express Edition 11g Release 2 for Linux x64, который доступен по адресу: http://www.oracle.com/technetwork/products/express-edition/downloads/index.html. Распаковываем и удаляем всё лишнее (версия вашего пакета может отличаться!):

# unzip oracle-xe-11.2.0-1.0.x86_64.rpm.zip
# mv Disk1/oracle-xe-11.2.0-1.0.x86_64.rpm ./
# rm -r Disk1

Создаём deb пакет с помощью утилиты Alien:

# alien --to-deb --scripts oracle-xe-11.2.0-1.0.x86_64.rpm

Поскольку файла /sbin/chkconfig в системе Debian нет, а он нужен для инсталлятора, этот файл необходимо создать и вписать следующее:

#!/bin/bash
# Oracle 11gR2 XE installer chkconfig hack for Debian based Linux (by dude)
# Only run once.
echo "Simulating /sbin/chkconfig..."
if [[ ! `tail -n1 /etc/init.d/oracle-xe | grep INIT` ]]; then
cat >> /etc/init.d/oracle-xe <<-EOM
#
### BEGIN INIT INFO
# Required-Start:     \$remote_fs \$syslog
# Required-Stop:     \$remote_fs \$syslog
# Default-Start:         2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:   Oracle 11g Express Edition
### END INIT INFO
EOM
fi
update-rc.d oracle-xe defaults 80 01

Предоставляем права на запуск:

# chmod 755 /sbin/chkconfig

Также необхлодимо настроить совместимость с Debian системой:

# ln -s /usr/bin/awk /bin/awk
# mkdir /var/lock/subsys

Устанавливаем пакет Oracle DB (в случае возникновения конфликта файла конфигурации /etc/init.d/oracle-xe следует выбрать “установить версию пакета” [Y]) :

# dpkg --install ./oracle-xe_11.2.0-2_amd64.deb

Настройка Oracle:

# service oracle-xe configure

Вписываем порт веб интерфейса, порт базы данных и пароль, который необходим пользователю базой данных SYSTEM.

Устанавливаем пароль для системного пользователя oracle:

# passwd oracle

Настраиваем HOME директорию для пользователя oracle:

# cp /etc/skel/.bash_logout /u01/app/oracle
# cp /etc/skel/.bashrc /u01/app/oracle
# echo '. /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh' > /u01/app/oracle/.profile
# chown -R oracle:dba /u01/app/oracle

Настраиваем правильный SID, для чего приводим файл /u01/app/oracle/product/11.2.0/xe/network/admin/tnsnames.ora к такому виду (следует заменить значение “PORT” на своё):

# tnsnames.ora Network Configuration File:

XE =
(DESCRIPTION =
(ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = TCP)(SERVICE=XEXDB)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
  (SERVICE_NAME = XE)
)
 )

А файл /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora в такой вид (следует заменить значение “PORT” и “HOST” на свое, существенно, чтобы в значении “HOST” был именно hostname, а не IP адрес):

# listener.ora Network Configuration File:

SID_LIST_LISTENER =
 (SID_LIST =
(SID_DESC =
  (SID_NAME = XE)
  (ORACLE_HOME = /u01/app/oracle/product/11.2.0/xe)
  (PROGRAM = extproc)
)
 )

LISTENER =
 (DESCRIPTION_LIST =
(DESCRIPTION =
  (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
  (ADDRESS = (PROTOCOL = TCP)(HOST = debian)(PORT = 1521))
  )
 )

DEFAULT_SERVICE_LISTENER = (XE)

Кроме этого, есть необходимость в настройке переменных сред, поскольку в момент установки пакета они не прописываются. Для этого в файл /etc/environment добавляем следующие строчки: 

ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe
TNS_ADMIN=/u01/app/oracle/product/11.2.0/xe/network/admin
ORACLE_SID=XE
LD_LIBRARY_PATH=/u01/app/oracle/product/11.2.0/xe/lib
NLS_LANG=AMERICAN_AMERICA.AL32UTF8

И выполняем установку переменных среды $PATH для пользователей, которым положен доступ к sqlplus:

# echo 'PATH=$PATH:/u01/app/oracle/product/11.2.0/xe/bin' >> ~root/.bash_profile
# echo 'PATH=$PATH:/u01/app/oracle/product/11.2.0/xe/bin' >> ~oracle/.bash_profile

Следует выставить правильные права на файл /u01/app/oracle/product/11.2.0/xe/bin/oracle, иначе в момент авторизации в sqlplus будет выдаваться ошибка “ORA-12547: TNS:lost contact”:

# chmod 6751 /u01/app/oracle/product/11.2.0/xe/bin/oracle

После этого перезагрузим сервер и попытаемся авторизоваться в консоли sqlplus:

# reboot

(Внимание! По завершении загрузки может возникнуть ошибка 502 Bad Gateway при переходе на страницу сайта. Надо перезапустить php-fpm: # /etc/init.d/php-fpm restart )

# sqlplus SYSTEM

На этом настройка Oracle DB завершена. Дальнейший этап - установка модуля php PDO_OCI, который нужен для взаимодействия Drupal и Oracle DB. Создадим временную директорию, в которую загрузим Oracle instance client. Его можно найти по ссылке http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html, (нужны архивы instantclient-basic, instantclient-sdk, instantclient-sqlplus) и распаковываем их (версии ваших архивов могут отличаться):

На данном этапе необходимо создать символические ссылки, которые будут указывать на нужные нам библиотеки:

# cd /u01/app/oracle/instantclient
# ln -s libclntsh.so.* libclntsh.so
# ln -s libocci.so.* libocci.so
# echo /u01/app/oracle/instantclient >> /etc/ld.so.conf
# ldconfig
# mkdir -p include/oracle/11.1/
# cd include/oracle/11.1/
# ln -s /u01/app/oracle/instantclient/sdk/include/ client
# cd /u01/app/oracle/instantclient
# mkdir -p lib/oracle/11.1/client
# cd lib/oracle/11.1/client
# ln -s /u01/app/oracle/instantclient lib
# ln -s /usr/include/php5/ /usr/include/php

Загружаем модуль php_oci:

# mkdir -p /tmp/pear/download/
# cd /tmp/pear/download/
# pecl download pdo_oci

Распаковываем его:

# tar -xvzf PDO_OCI*.tgz
# cd PDO_OCI*

Далее к модулю нужно добавить патч. Прописываем файл config.m4.patch со следующим содержанием:

*** config.m4 2005-09-24 17:23:24.000000000 -0600
--- config.m4 2009-07-07 17:32:14.000000000 -0600
***************
*** 7,12 ****
--- 7,14 ----
if test -s "$PDO_OCI_DIR/orainst/unix.rgs"; then
  PDO_OCI_VERSION=`grep '"ocommon"' $PDO_OCI_DIR/orainst/unix.rgs | sed 's/[ ][ ]*/:/g' | cut -d: -f 6 | cut -c 2-4`
  test -z "$PDO_OCI_VERSION" && PDO_OCI_VERSION=7.3
+   elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.11.1; then
+ PDO_OCI_VERSION=11.1  
elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.10.1; then
  PDO_OCI_VERSION=10.1  
elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.9.0; then
***************
*** 119,124 ****
--- 121,129 ----
  10.2)
    PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)
    ;;
+ 11.1)
+    PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)
+    ;;
  *)
    AC_MSG_ERROR(Unsupported Oracle version! $PDO_OCI_VERSION)
;;

Сохраняем файл и добавляем патч:

# export ORACLE_HOME=/u01/app/oracle/instantclient
# patch --dry-run -i config.m4.patch
# patch -i config.m4.patch

Компилируем и устанавливаем модуль:

# phpize
# ./configure --with-pdo-oci=instantclient,/u01/app/oracle/instantclient,11.1
# make
# make test
# make install

Включаем модуль, добавив файл конфигурации php:

# touch /etc/php5/fpm/conf.d/pdo_oci.ini
# echo "extension=pdo_oci.so" > /etc/php5/fpm/conf.d/pdo_oci.ini
# /etc/init.d/php5-fpm restart

Проверить, работает ли модуль php, можно с помощью файла info.php. С этой целью в корневом каталоге сайта (по умолчанию для nginx это /usr/share/nginx/html/) создаём файл info.php со следующим содержанием:

phpinfo();
?> 

После этого откроем его в окне браузера http://host-ip/info.php (где host-ip меняем на ІР адрес либо домен, указывающие на сервер), и в списке включенных модулей должен быть pdo_oci
Если всё нормально, можно приступать к развёртыванию Drupal. Сначала создадим и подготовим tablespace. Это потребует внимательности: консоль sqlplus ошибок не прощает:

# sqlplus SYSTEM

SQL> create tablespace drupal
2  logging
3  datafile '/u01/app/oracle/oradata/XE/drupal.dbf'
4  size 32m
5  autoextend on
6  next 32m maxsize 3072m
7  extent management local;

SQL> create user drupal identified by password (где password це пароль)
2  default tablespace drupal
3  temporary tablespace temp;

SQL> grant unlimited tablespace to drupal;

SQL> conn sys/password as sysdba (password меняем на пароль пользователя SYSTEM)

SQL> grant execute on dbms_crypto to drupal;

SQL> grant select on v_$sql_plan to drupal;

SQL> grant select on v_$sqlarea to drupal;

SQL> grant connect to drupal;

SQL> grant resource to drupal;

Tablespase готов и из консоли sqlplus можно выходить (Cntrl+D). Переходим в корень нашего будущего сайта, например /usr/share/nginx/html/ (по умолчанию используется директория сервера Nginx)

# cd /usr/share/nginx/html/

В случае наличия там каких-либо файлов - удаляем их:

# rm -r ./*

Загружаем последнюю версию Drupal, ссылку на которую можна найти на сайте https://drupal.org/project/drupal (версия может отличаться):

# wget http://ftp.drupal.org/files/projects/drupal-7.23.tar.gz

Распаковываем архив и копируем файлы в кореневой каталог сайта:

# tar -xzvf drupal-7.23.tar.gz
# cp -r drupal-7.23/* ./

Удаляем уже бесполезные архив и каталог Drupal:

# rm -r drupal-7.23 drupal-7.23.tar.gz

Устанавливаем модуль, который позволит работать с Oracle DB.

Загружаем модуль (ссылку на последнюю версию можно найти здесь https://drupal.org/project/oracle):

# cd includes/database/
# wget http://ftp.drupal.org/files/projects/oracle-7.x-1.12.tar.gz

Распаковываем и удаляем уже ненужный архив:

# tar -xzvf oracle-7.x-1.12.tar.gz
# rm oracle-7.x-1.12.tar.gz
# cd oracle/module/
# mv oracle/ /usr/share/nginx/html/sites/all/modules/

(не забываем указывать свой путь к кореневому каталогу Drupal)

Выставляем правильные права на файлы:

# cd /usr/share/nginx/html/
# chown -R www-data:www-data ./
# chmod -R 750 ./
После этого, в окне браузера открываем ссылку на наш будущий сайт http://host-ip/install.php (где host-ip меняем на ІР адрес, который указывает на сервер). Важно иметь в виду, что на следующем этапе в поле “Database name” нужно вписывать “XE”, а не имя tablespace, созданное нами, а в поле “Database username” - именно пользователя, которого мы создали, а не “SYSTEM”.

Последующий процесс инсталляции ничем не отличается от обычного: вводим информацию о сайте и переходим к следующему шагу.На этом инсталляция завершена. Мы получили готовую к использованию сборку Drupal, работающую на БД Oracle.

1 vote, Rating: 5
Share on FacebookShare on TwitterShare on GooglePlusShare on Linkedin

Также по теме

1

Иногда ситуация складывается так, что возникает потребность в использовании обоих интернет-протоколов  HTTP...

2

Иногда возникает потребность в реализации таких правил контроля доступа, которые не отвечают ни одному из критериев. К примеру, Вам нужно создать разрешения для...

3

Модуль rules позволяет нам выполнять нужные действия (actions) после выполнения определенных событий (​​events). В своем арсенале он...

4

Для начала - несколько слов о библиотеке.
pChart – это набор классов для...

5

Подключение к разным базам необходимо в случаях экспорта и импорта данных. Рассмотрим три способа как справиться с такой ситуацией.

Need a quote? Let's discuss the project

Are you looking for someone to help you with your Drupal Web Development needs? Let’s get in touch and discuss the requirements of your project. We would love to hear from you.

Join the people who have already subscribed!

Want to be aware of important and interesting things happening? We will inform you about new blog posts on Drupal development, design, QA testing and more, as well news about Drupal events.

No charge. Unsubscribe anytime