Возникла потребность создания красивого приложения на APEX используя VPS, а не обычный Dedic.
Устанавливать будем версию Oracle XE, чтобы не покупать лицензию. Имеющиеся ограничения версии XE:
- 3 Pluggable Databases
- 2 CPUs for foreground processes
- 2GB of RAM (SGA and PGA combined)
- 12GB of user data on disk (irrespective of compression factor)
Для нашего приложения — с лихвой хватит данных лимитов.
Предустановка.
Используем «чистую» систему Centos7.
Для начала обновим систему:
yum update
Установка ORACLE любой версии крайне требовательна к пространству swap, а на VDS он часто либо полностью отсутствует, либо мизерных размеров, поэтому — будем увеличивать.
Создаём сам файл размером 4GB:
dd if=/dev/zero of=/swapfile count=4096 bs=1MiB
Ограничим доступ к этому файлу:
chmod 600 /swapfile
«Определяем» файл:
mkswap /swapfile
«Включаем» файл:
swapon /swapfile
Проверяем, что swap увеличился:
swapon --show all
Сохраним изменения, чтобы после перезагрузки swap подключался автоматически:
nano /etc/fstab /swapfile swap swap defaults 0 0
Сохраним, перезагрузимся и проверяем, что swap > 4 GB.
Для подготовки сервера к установке Oracle используем готовый инсталлятор:
curl -o oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm yum localinstall oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm
При этом будут установлены все необходимые для работы СУБД пакеты, а так же выставлены значения системных переменных. Можно переходить непосредственно к установке СУБД.
Установка и настройка Oracle XE.
Скачиваем c официального сайта последнюю версию:
https://www.oracle.com/database/technologies/xe-downloads.html
Копируем на сервер и запускаем установку:
yum localinstall oracle-database-xe-18c-1.0-1.x86_64.rpm
Хочу заметить, что в отличии от установки обычной версии ORACLE, тут не требуется использовать визуальное окно java-машины, следовательно, пробрасывать экран через ssh, да и вообще устанавливать X-окружение.
Так же, установка идёт от пользователя root, а не специально созданного для этого пользователя.
После установки необходимо сконфигурировать инстанс, но перед этим отредактировать при необходимости файл конфига:
/etc/sysconfig/oracle-xe-18c.conf
Запускаем первоначальное конфигурирование, при этом создаётся LISTENER, CDB, PDB, а так же надо будет ввести пароль для системных пользователей.
/etc/init.d/oracle-xe-18c configure
При возникновении ошибки:
[FATAL] [DBT-06103] The port (5,500) is already in use.
пропишите имя сервера с его IP адресом в /etc/hosts !
По окончанию установки появится запись о результатах. Пропишем переменные, параметры базы в /opt/oracle/product/18c/dbhomeXE/network/admin/tnsnames.ora и проверим подключение:
nano ~/.bash_profile # Oracle Settings export ORACLE_HOME=/opt/oracle/product/18c/dbhomeXE export PATH=/usr/sbin:$PATH export PATH=$ORACLE_HOME/bin:$PATH /opt/oracle/product/18c/dbhomeXE/bin/sqlplus "sys@XEPDB1" as sysdba
Для запуска автоматом после перезагрузки базы используем команду:
/sbin/chkconfig oracle-xe-18c on
Не забываем удалить оба установочных пакета!
Установка APEX
Скачиваем нужную версию тут: https://www.oracle.com/tools/downloads/apex-downloads.html
Я предпочитаю пока пользоваться версией 18.2. качаем версию «all-language», распаковываем архив на сервере в папку /opt/apex
Переходим в каталог /opt/apex и подключаемся к нашей базе с правами sysdba:
Запускаем установку APEXa (мы не будем создавать отдельные табличные пространства для объектов АРЕХа и загружаемых файлов) и сразу сменим пароль у администратора:
@apexins.sql SYSAUX SYSAUX TEMP /i/ @apxchpwd.sql
Установка ORDS
Скачиваем последнюю версию: https://www.oracle.com/database/technologies/appdev/rest-data-services-downloads.html
Распаковываем в папку /opt/ords
Создаём папку для хранения конфига (рекомендуется это делать в отдельном каталоге, но мы используем тот же): /opt/ords/config
Запускаем установку (точнее, настройку):
cd /opt/ords/ java -jar ords.war
Во время настройки вводим пароли пользователей, указываем папку с картинками /opt/apex/images , а так же выбираем протокол HTTP (шифровать его мы будем уже в Tomcat).
После настройки необходимо разблокировать только что созданных пользователей.
Настроить отображение статических файлов:
@apex_rest_config.sql
Открываем в браузере ссылку http://IP:8080/ords/f?p=4000 и проверяем, что всё работает.
Установка Tomcat
В качестве веб-сервера будем использовать именно его, т.к. он прекрасно подтягивает java-машину ORDS.
Создадим пользователя для него и группу:
groupadd tomcat useradd -M -s /bin/nologin -g tomcat -d /opt/tomcat tomcat mkdir /opt/tomcat
На странице Tomcat копируем ссылку на дистрибутив. Я пока использую 8 версию. Скачиваем архив на сервер и распаковываем его:
wget https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.71/bin/apache-tomcat-8.5.71.tar.gz tar xvf apache-tomcat-8*tar.gz -C /opt/tomcat --strip-components=1
Сменим права на каталог:
chown -R tomcat:tomcat /opt/tomcat
Для запуска Tomcat в качестве службы, создадим соответствующий файл:
nano /etc/systemd/system/tomcat.service # Systemd unit file for tomcat [Unit] Description=Apache Tomcat Web Application Container After=syslog.target network.target [Service] Type=forking Environment=JAVA_HOME=/usr/lib/jvm/jre Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid Environment=CATALINA_HOME=/opt/tomcat Environment=CATALINA_BASE=/opt/tomcat Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC' Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom' ExecStart=/opt/tomcat/bin/startup.sh ExecStop=/bin/kill -15 $MAINPID User=tomcat Group=tomcat [Install] WantedBy=multi-user.target
Сохраняем файл, перезапускаем демона и запускаем сам Tomcat (убедитесь, что ords установленный ранее не занимает порт 8080 в данный момент).
netstat -tnlp | grep :8080 systemctl daemon-reload systemctl start tomcat
Убеждаемся, что по адресу http://IP:8080/ открывается страница и вносим tomcat в автозагрузку.
Запуск ORDS в Tomcat
Для запуска достаточно скопировать папку images и файл ords.war в папку tomcat-a:
mkdir /opt/tomcat/webapps/i/
cp -R /opt/apex/images/* /opt/tomcat/webapps/i/
cp /opt/ords/ords.war /opt/tomcat/webapps/ords.war
После перезапускаем Tomcat и проверяем работу в браузере по адресу: http://IP:8080/ords/f?p=4000
SSL в Tomcat
Я использую ранее купленный сертификат. Создадим папку /opt/tomcat/SSL/ и скопируем в неё два файла сертификатов chain — цепочка родителей, sert — сам сертификат. Далее, создаёт контейнер ключей и добавляем в него два сертификата со своими алиасами. «root» в последствии меняться не будет, а «tomcat» раз в год будет обновляться.
keytool -import -alias root -keystore /opt/tomcat/SSL/.keystore -trustcacerts -file /opt/tomcat/SSL/chain.crt
keytool -import -alias tomcat -keystore /opt/tomcat/SSL/.keystore -file /opt/tomcat/SSL/sert.crt