Recentemente me solicitaram colaborar em um problema de conexão entre OracleXE 10.2g e PHP 5.6
Por serem duas plataformas antigas, precisei montar meus servidores para emular tal situação.
Como na descrição não veio se era Apache ou Nginx e o comum era usar o Apache2 e me indicaram estar rodando em Ubuntu20, optei por Apache2.
Este, então, é o roteiro que segui para construir um laboratório que emulasse essa situação. Levantei dois servidores. Um para conter o Oracle XE e outro para o LAMP assim podia realizar meus testes.
O que se segue é o relato da saga.
Repare que estamos rodando sempre como root. Caso queira usar um usuário (como de fato é o certo a fazer) basta adicionar o sudo
antes de cada comando.
No nosso caso é root pois os contêineres OpenVZ já rodam em ambiente seguro.
Garantir os templates do OpenVZ
Usamos OpenVZ para criarmos nossas VPS. A imagem do CentOS 7 já tínhamos, mas nos faltava a do Ubuntu. Começamos por ela.
Após uma busca, achamos este repositório:
https://plug-mirror.rcac.purdue.edu/ubuntu-cloud/releases/20.04/release/
Mas ele se mostrou inadequado.
Optamos então por usar o template do Ubuntu 16 disponível em http://mirror.yandex.ru/mirrors/download.openvz.org/template/precreated/
Criação da primeira VPS
Se bem temos nosso próprio script para criarmos as VPS preferi colocar linha por linha o que foi feito para que fique mais claro… e de quebra alguém se interessa em OpenVZ
$ vzctl create 104 --ostemplate ubuntu-16.04-x86_64 --config basic
$ vzctl set 104 --save --name lamp $ vzctl set 104 --save --onboot yes
$ vzctl set 104 --save --hostname lamp.InovacaoSistemas.com.br
$ vzctl set 104 --save --ipadd 192.168.1.104/24
$ vzctl set 104 --save --searchdomain InovacaoSistemas.com.br
$ vzctl set 104 --save --nameserver 1.1.1.1 --nameserver 8.8.4.4
$ vzctl set 104 --save --cpus 2
$ vzctl set 104 --save --ram 512M
$ vzctl set 104 --save --swap 1G
$ vzctl set 104 --save --diskspace 20G
$ vzctl start 104
$ vzctl exec 104 passwd
$ vzctl exec 104 apt-get update -y
Atualização para Ubuntu 20.04
Após instalarmos o Ubuntu 16, procedemos com um upgrade para termos um 20.04 rodando o do-release-upgrade.
O problema é que como escolhemos a imagem mínima, tivemos que primeiro instalar a ferramenta e logo a seguir atualizar o sistema.
$ apt install ubuntu-release-upgrader-core
$ apt update -y
$ apt upgrade -y
Primeiro atualizamos de 16.04 para 18.04
$ do-release-upgrade
E mais uma vez para irmos de 18.04 para 20.04
$ apt update -y
$ apt upgrade -y
$ do-release-upgrade --mode=server --quiet
Como é uma atualização de uma instalação nova, respondemos que sim a todas as perguntas…. como se fossemos usuários Windows.
Uma vez feito isso, reiniciamos a máquina e testamos algumas coisas para ver se estava tudo ok.
Como nos pode ser útil ter um Ubuntu 20, decidimos guardar uma cópia na forma de template.
$ vzctl stop 104 $ cd /vz/private/104 $ tar -cvzpf /vz/template/cache/ubuntu-20.04-server-amd64.tar.gz .
Mas isso não faz parte do roteiro. Foi apenas um agradável desvio.
Criação da segunda VPS
A segunda máquina é uma CentOS 7 mas a criamos usando o script e a chamada ficou assim:
$ ./createCentos7VM.sh 102 oracleXE inovacaosistemas.com.br
Instalando o Oracle 10.2 XE no CentOS
Dentro do CentOS realizamos as seguintes operações:
$ yum install epel-release
$ yum update -y
$ yum install libaio bc flex -y
$ yum install install glibc.i686
$ wget http://ftp.cs.stanford.edu/pub/fedora/6/i386/oracle-xe-10.2.0.1-1.0.i386.rpm
$ rpm -ivh oracle-xe-10.2.0.1-1.0.i386.rpm
$ /etc/init.d/oracle-xe configure
No arquivo /etc/bashrc adicionamos uma chamada ao script que constrói o ambiente dentro do qual os comandos do oracle podem funcionar como a seguir
. /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle_env.sh
(não esqueça do ponto seguido de um espaço no inicio)
Liberamos algumas portas no firewall assim
$ firewall-cmd --permanent --zone=public --add-port=8080/tcp
$ firewall-cmd --permanent --zone=public --add-port=1521/tcp
$ firewall-cmd --reload
Feito isso, criamos a partir do nosso micro um túnel assim:
$ ssh root@192.168.1.102 -L8080:localhost:8080
Isso nos permitiu abrir o navegador localmente com o seguinte endereço:
http://localhost:8080/apex
Usando o APEX, criamos um usuário como mostramos nesta figura:
Esse usuário e senha é o que usaremos mais adiante para testarmos nossa conexão.
Instalando o Apache2 e o PHP5.6 no Ubuntu
Instalamos o apache2 da seguinte maneira
$ apt get install apache2 -y
Como não nos interessa problemas de domínio, segurança e coisas parecidas, deixamos ela como está.
Já instalar o php5.6 requer um pouco mais de voltas. Mais ou menos com quando um cachorro vai deitar.
$ apt install software-properties-common
$ add-apt-repository ppa:ondrej/php
$ apt update -y $apt install -y php5.6
Criamos um pequeno script para nos mostrar a situação em /var/www/html
chamado info.php
com o seguinte conteúdo:
<?php phpinfo();
E abrimos ele no navegador para visualizar se o PHP estava rodando e em qual versão
http://192.168.1.104/info.php
Reiniciamos o servidor para termos certeza que tudo está ok.
Instalando o cliente Oracle no Ubuntu
Fizemos download do basic-10.2.0.5.0-linux.zip e sdk-10.2.0.5.0-linux.zip deste endereço: https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html
E depois o instalamos
$ unzip basic-10.2.0.5.0-linux-x64.zip $ mkdir /opt/oracle_instantclient $ mv instantclient_10_2/* /opt/oracle_instantclient/ $ unzip ../sdk-10.2.0.5.0-linux.zip $ mv instantclient_10_2/* /opt/oracle_instantclient/ $ cd /opt/oracle_instantclient/ $ ln -s libclntsh.so.10.1 libclntsh.so $ apt-get install php5.6-dev -y $ apt-get install libaio-dev -y $ apt-get install php5.6-common php5.6-xml php5.6-cli -y $ apt-get install php-pear -y $ pecl channel-update pecl.php.net $ pecl install oci8-2.0.12
Na hora em que pergunte onde está o cliente instantclient, devemos indicar instantclient,/opt/oracle_instantclient
Dando tudo certo com a compilação, devemos adicionar o oci8.so
aos php.ini da seguinte forma:
$ echo "extension=oci8.so" >> /etc/php/5.6/apache2/php.ini $ echo "extension=oci8.so" >> /etc/php/5.6/cli/php.ini
Outra coisa que precisamos fazer é indicar onde ficou a livraria do instant-client como segue:
$ echo /opt/oracle_instantclient/ > /etc/ld.so.conf.d/oracle-instantclient.conf $ ldconfig
E finalmente reiniciamos o apache2 assim:
$ apachectl restart
Navegando novamente no http://192.168.1.104/info.php
podemos confirmar que o OCI
está configurado como mostra a figura
Finalmente, testamos nossa conexão com um pequeno script colocado em /var/www/html
sob o nome testar-conexao-oracle.php
com este conteúdo:
<?php $conn = oci_connect("teste", "abc123", "192.168.1.102/XE"); if ($conn) { echo "Conexão realizada com sucesso\n"; } else { echo "Erro na conexão com o banco de dados\n"; }
E testamos o mesmo desde a linha de comando:
$ php testar-oci8.php
Se tudo ocorreu bem ele nos mostrará que a conexão deu certo.
Podemos também testar usando o navegador:
http://192.168.1.104/testar-oci8.php
Bem, com isso chegamos ao fim do problema da conexão com vanilla PHP.
Você precisa fazer login para comentar.