Как стать автором
Обновить

Установка Oracle ApEx

Время на прочтение6 мин
Количество просмотров27K

Здравствуйте, друзья и коллеги. Однажды в компании возникла необходимость в создании веб-интерфейса для небольшой базы данных. Уже тогда было понимание того, что в будущем понадобится интеграция с LDAP, возможность гибко управлять правами доступа пользователей на просмотр определенных страниц, удобный конструктор для создания страниц, инструменты бизнес-аналитики. Тогда-то я и познакомился с Oracle Application Express (ApEx). Это мощнейшее средство входит в состав таких продуктов, как Oracle Database 11g, 12c, которые, в зависимости от используемой редакции, могут стоить немало. Как это часто бывает, желания превышали возможности...


Для таких случаев у Oracle есть бесплатная версия СУБД Oracle Database Express Edition (коротко XE). На нее накладываются следующие ограничения:


  • на один сервер можно установить только 1 инстанс;
  • может быть установлена на многопроцессорный сервер, но использоваться будет только 1 CPU;
  • для СУБД доступно максимум 1Gb RAM;
  • размер пользовательских данных ограничен 11Gb (в некоторых документах всё ещё встречается ограничение в 4Gb, но это уже устаревшая информация);
  • HTTPS не поддерживается встроенным веб-сервером, для этого приходится использовать Apache/Nginx.

Нас эти ограничения вполне устраивали. Для сервера мы взяли VPS в Digital Ocean с 2Gb RAM, установили Centos 7.2. В следующей главе будет описана установка Oracle XE, а затем — обновление встроенного Application Express v.4 до последней актуальной версии (на момент написания статьи — 5.0.4).


Установка Oracle 11g XE


Установим необходимые пакеты, добавим swap в виде файла и внесём изменения в /etc/fstab:


yum update -y && yum install screen vim bash-completion wget telnet mailx unzip epel-release -y && yum install bc libaio flex -y
dd if=/dev/zero of=/var/swapfile bs=1M count=2048 && chmod 0600 /var/swapfile && mkswap /var/swapfile
echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab && swapon -a && swapon -s

Следующий шаг — опциональный. Можно сконвертировать Centos в Oracle Linux, затем скачать пакет, меняющий настроки ядра в соответствии с рекомендациями Oracle, подробности можно прочитать тут.


curl -O https://linux.oracle.com/switch/centos2ol.sh && sh centos2ol.sh && yum distro-sync -y && yum install oracle-rdbms-server-11gR2-preinstall.x86_64 -y

Для загрузки дистрибутива Oracle XE (доступны версии под Windows и Linux) понадобится регистрация на сайте вендора, она бесплатна и ни к чему не обязывает. Скачаем zip-архив, распакуем его и установим:


wget [[вставьте сюда ссылку для загрузки]]
mv oracle-xe-11* oracle-xe-11.x86_64.rpm.zip
mkdir oracle-xe && mv oracle-xe-* oracle-xe/ && cd oracle-xe/
unzip oracle-xe-* && cd Disk1/
rpm -ivh oracle-xe-*

После установки RPM-пакета необходимо запустить oracle-xe с параметром configure — в этом случае запустится мастер завершения настройки, в интерактивном режиме задающий вопросы. Также доступна установка с использованием файла ответов, в который мы внесем порты по умолчанию и пароль учетной записи SYS:


echo "ORACLE_HTTP_PORT=8080" > /root/oracle-xe/Disk1/response/xe.rsp
echo "ORACLE_LISTENER_PORT=1521" >> /root/oracle-xe/Disk1/response/xe.rsp
echo "ORACLE_PASSWORD=[[вставьте сюда пароль]]" >> /root/oracle-xe/Disk1/response/xe.rsp
echo "ORACLE_CONFIRM_PASSWORD=[[повторите пароль]]" >> /root/oracle-xe/Disk1/response/xe.rsp
echo "ORACLE_DBENABLE=y" >> /root/oracle-xe/Disk1/response/xe.rsp
/etc/init.d/oracle-xe configure responseFile=/root/oracle-xe/Disk1/response/xe.rsp

После установки с использованием файла ответов, не забудьте сохранить пароль в надежном месте и удалить его из файла xe.rsp.


Установка Application Express


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


cd ~ 
wget -O apex_5.zip [[вставьте сюда ссылку для загрузки]]
mkdir apex5 && mv apex_5.zip apex5/ && cd apex5/ && unzip apex_5.zip

В файле oracle_env.sh содержатся переменные окружения, необходимые для работы клиента SQL*Plus, добавим инициализацию этого файла в параметры bash и применим к текущему окружению:


echo ". /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh" >> /etc/bashrc
. /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh

Приступим к обновлению. Подготовьте пароль, который использовался в файле ответов и введите его — это необходимо для подключения к базе под учетной записью SYS:


cd apex/ && sqlplus sys as sysdba

Из консоли SQL*Plus необходимо запустить следующие скрипты:


@apexins SYSAUX SYSAUX TEMP /i/
@apxldimg  /root/apex5
@apxchpwd     [[enter]]
Enter the administrator's username [ADMIN]  [[enter]]
User "ADMIN" exists.
Enter ADMIN's email [ADMIN] [[enter]]
Enter ADMIN's password []   [[сюда нужно вставить другой длинный пароль]]
Changed password of instance administrator ADMIN.

Последний скрипт @apxchpwd меняет пароль учетной записи admin для Application Express. Следующий шаг в какой-то мере небезопасен, используйте его только когда это действительно необходимо: этой командой разрешаются удаленные подключения к Listener (с использованием SQL-клиентов или различного другого софта), использующего по умолчанию порт 1521:


EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);

Рекомендую ограничить подключения к этому порту соответствующим правилом iptables.
При подключении к Listener через интернет, к примеру, с использованием SQL Developer, логины/пароли/запросы передаются в открытом виде. Чтобы этого избежать, необходимо использование SSH-туннеля либо VPN.


Из консоли SQL*Plus изменим другие важные параметры: максимальное число сессий, процессов, т.к. эти параметры не динамические, понадобится рестарт базы. Также перейдем от режима Onlinelog к режиму Archivelog и увеличим лимит дискового пространства, доступного для бэкапов.


alter system set sessions=250 scope=spfile;
alter system set processes=200 scope=spfile;
shutdown normal
startup mount
alter database archivelog;
alter database open;

Резервное копирование


Бэкапы мы кладём на отдельный том. Для этого воспользуемся услугой Volumes хостинга Digital Ocean и после подключения нового раздела к VPS, выполним следующие команды:


mkfs.ext4 -F /dev/disk/by-id/scsi-0DO_Volume_oracle-backups-volume
mkdir -p /opt/oracle-backups
echo "/dev/disk/by-id/scsi-0DO_Volume_oracle-backups-volume /opt/oracle-backups ext4 defaults,nofail,discard 0 0" | tee -a /etc/fstab
mount -a
chown oracle:dba /opt/oracle-backups

Эти команды создают файловую систему, папку для монтирования диска, прописывают параметры автомонтирования при загрузке в файл /etc/fstab и меняют владельцев папки для бэкапов. Запускаем консоль SQL*Plus и меняем параметры резервного копирования:


sqlplus sys as sysdba
alter system set DB_RECOVERY_FILE_DEST_SIZE = 20G;
alter system set DB_RECOVERY_FILE_DEST = '/opt/oracle-backups';

Для начала мы воспользуемся предустановленным скриптом, осуществляющим резервное копирование с окном восстановления в 2 дня. Первый запуск мы осуществим из консоли, но в дальнейшем будет необходимо добавить этот скрипт в cron пользователя oracle:


su - oracle
bash /u01/app/oracle/product/11.2.0/xe/config/scripts/backup.sh

После всех изменений нужно будет перезагрузить сервер. Для запуска сервиса oracle-xe вручную и включения в автозагрузку пригодятся следующие команды:


systemctl start oracle-xe.service
systemctl enable oracle-xe.service

Настройка веб-сервера


Для того, чтобы весь трафик шифровался, я решил использовать Nginx.
Его установка предельно проста:


wget http://nginx.org/keys/nginx_signing.key
rpm --import nginx_signing.key
yum -y install nginx

Затем необходимо скопировать на сервер SSL-сертификаты и внести изменения в конфигурационный файл веб-сервера, либо создать новый с расширением .conf в папке /etc/nginx/conf.d/. Туда необходимо добавить следующие строки, изменив пути к сертификатам и указав соответствующее доменное имя:


конфиг для nginx
server {
    listen 80;
    server_name example.com;
    rewrite ^(.*) https://$server_name$1 permanent;
}

server {
    listen 443 ssl;
    server_name example.com;
    resolver 8.8.8.8;
    ssl_stapling on;
    ssl on;
    ssl_certificate      /etc/nginx/keys/cert.crt;
    ssl_certificate_key  /etc/nginx/keys/cert.key;
    ssl_dhparam /etc/pki/nginx/dhparam.pem;
    ssl_prefer_server_ciphers on;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers kEECDH+AES128:kEECDH:kEDH:-3DES:kRSA+AES128:kEDH+3DES:DES-CBC3-SHA:!RC4:!aNULL:!eNULL:!MD5:!EXPORT:!LOW:!SEED:!CAMELLIA:!IDEA:!PSK:!SRP:!SSLv2;

    location / {
        rewrite ^ "/app/f?p=101" permanent;
    }

    location /app {
        proxy_pass http://127.0.0.1:8080/apex;
        include /etc/nginx/reverse_proxy.conf;
    }

    location /i/ {
        proxy_pass         http://127.0.0.1:8080/i/;
        include /etc/nginx/reverse_proxy.conf;
    }
}

содержимое файла /etc/nginx/reverse_proxy.conf:


proxy_set_header   Host             $http_host;
proxy_set_header   X-Real-IP        $remote_addr;
proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
proxy_max_temp_file_size 0;

client_max_body_size       1000m;
client_body_buffer_size    128k;

proxy_connect_timeout      180;
proxy_send_timeout         180;
proxy_read_timeout         180;

proxy_buffer_size          4k;
proxy_buffers              4 32k;
proxy_busy_buffers_size    64k;
proxy_temp_file_write_size 64k;

Пояснения: при переходе по адресу http://example.com/ будет происходить редирект на http://example.com/app/f?p=101, этот адрес будет обработан директивой proxy_pass, которая перенаправит трафик на http://127.0.0.1:8080/apex с указанием соответствующего номера веб-приложения, в данном случае 101.
Не забудьте проверить конфигурацию, затем запустить веб-сервер и включить его в автозагрузку:


nginx -t
systemctl start nginx
systemctl enable nginx

На этом установка Oracle Application Express закончена. В следующей статье мы установим тестовое веб-приложение, а затем сделаем что-нибудь по-настоящему полезное.


Update. В связи с пожеланиями, в статью добавлено описание фронтенда, который обеспечивает TLS-шифрование.


Буду искренне рад Вашим комментариям, замечаниям, вопросам.

Теги:
Хабы:
+15
Комментарии21

Публикации

Истории

Работа

Ближайшие события