Категорії

Вcтановлення Oracle Database 11g + Drupal 7

05.09.2013
Автор:

Дана стаття описує процес розгортання 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
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 Рейтинг: 5

Також по темі

1

Facebook є однією з найпопулярніших соціальних мереж в світі. На сьогодні цей сайт налічує більше 1...

2

Друпал-розробники зі стажем не уявляють роботи без утіліти Drush (Drupal shell), адже з її допомогою більшість рутинних дій в друпалі випоконуються...

3

Трапляються ситуації коли потрібно використовувати обидва інтернет-протоколи HTTP та...

4

Сьогодні iPhone та iPad - далі iГаджети - перестали бути для нас у дивовижу, і все частіше розробники наштовхуються на проблему реалізації функціоналу під ці пристрої.

5

Ні для кого не секрет, що Google Analytics (далі — GA) — наймогутніший інструмент для збору даних...

Давайте обговоримо ваш проект у всіх деталях

Шукаєте хороших Drupal-розробників? А ми тут! Яким би ви хотіли бачити проект своєї мрії? Зв’яжіться з нами і розкажіть про це. Із задоволенням втілимо вашу мрію в життя!

Приєднуйтесь до людей, які вже підписалися!

Хочете бути в курсі важливих і цікавих речей, що відбуваються? Ми інформуватимемо Вас про розвиток та нові події в Drupal, дизайні, тестуванні та ін.

Відпишіться у будь-який час