{"id":5412,"date":"2023-03-31T18:35:00","date_gmt":"2023-03-31T16:35:00","guid":{"rendered":"https:\/\/gpmfactory.com\/?p=5412"},"modified":"2023-04-01T17:20:52","modified_gmt":"2023-04-01T15:20:52","slug":"setup-oracle-apex-22-db-21c-express-sur-centos-chez-ovh","status":"publish","type":"post","link":"https:\/\/gpmfactory.com\/index.php\/2023\/03\/31\/setup-oracle-apex-22-db-21c-express-sur-centos-chez-ovh\/","title":{"rendered":"Setup Oracle APEX 22 \/ DB 21c Express sur Centos chez OVH"},"content":{"rendered":"\n<p>Notes et observations<\/p>\n\n\n\n<p>Le projet consistait \u00e0 valider les taches pour obtenir une instance Oracle APEX op\u00e9rationnelle sur le cloud OVH en SSL avec un nom de domaine et au co\u00fbt le plus bas.<\/p>\n\n\n\n<p>Il n&rsquo;y a rien de vraiment compliqu\u00e9 mais comme souvent, de glorieuses incertitudes sont venues pimenter le travail.<\/p>\n\n\n\n<p>Voici les \u00e9tapes que j&rsquo;ai identifi\u00e9es :<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pr\u00e9parer l&rsquo;infrastructure<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Obtenir un nom de domaine <\/h3>\n\n\n\n<p>Le nom de domaine sera d\u00e9sign\u00e9 par &lt;DOMAINE.TLD&gt; dans la suite du document<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Souscrire un serveur chez OVH<\/h3>\n\n\n\n<p>D\u00e9signons-le par \u00ab\u00a0Serveur Y\u00a0\u00bb dans la suite.<\/p>\n\n\n\n<p><em>Sandbox <\/em>S1-8 (2vCores, 8Go RAM, 40 Go disque) 14,30 \u20ac H.T. \/mois en Cloud Public.<br>Cette variante de type <em>Sandbox <\/em>est valable uniquement pour des tests car elle n&rsquo;offre pas la stabilit\u00e9 d&rsquo;une instance conventionnelle.<br>Il faudrait plut\u00f4t s&rsquo;orienter vers une instance Linux Centos (B2-7 \u00e0 24 \u20ac H.T. \/mois ou B2-15 \u00e0 46 \u20ac H.T. \/mois)<\/p>\n\n\n\n<p>En comparaison, on peut garder en m\u00e9moire que la souscription au service Oracle APEX service revient \u00e0 333 \u20ac \/mois (en date d&rsquo;avril 2023)<\/p>\n\n\n\n<p>J&rsquo;ai choisi une image de type Centos 7<\/p>\n\n\n\n<p>Pas la peine de prendre trop de cpu car Oracle XE est cap\u00e9 \u00e0 2 cores.<\/p>\n\n\n\n<p>De m\u00eame, l&rsquo;espace disque d\u00e9di\u00e9 \u00e0 la database est limit\u00e9 \u00e0 12 Go. Cependant, pr\u00e9voir 40 Go car une installation basique occupe pas loin de 17 Go.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">T\u00e9l\u00e9charger les softs Oracle<\/h2>\n\n\n\n<p>Aucun n&rsquo;entrainent des couts de licence.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.oracle.com\/fr\/database\/technologies\/xe-downloads.html\" data-type=\"URL\" data-id=\"https:\/\/www.oracle.com\/fr\/database\/technologies\/xe-downloads.html\" target=\"_blank\" rel=\"noreferrer noopener\">Oracle Express Edition 21c<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.oracle.com\/tools\/downloads\/apex-downloads\/\" data-type=\"URL\" data-id=\"https:\/\/www.oracle.com\/tools\/downloads\/apex-downloads\/\" target=\"_blank\" rel=\"noreferrer noopener\">Oracle APEX 22<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.oracle.com\/database\/sqldeveloper\/technologies\/db-actions\/download\/\" data-type=\"URL\" data-id=\"https:\/\/www.oracle.com\/database\/sqldeveloper\/technologies\/db-actions\/download\/\" target=\"_blank\" rel=\"noreferrer noopener\">Oracle ORDS 22<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Installer Oracle Database 21c Express<\/h2>\n\n\n\n<p>Installer Les pr\u00e9requis pour Oracle XE 21 c<br>dans la page de download, cliquer sur <em>Preinstall RPMs for RHEL and CentOS<\/em><\/p>\n\n\n\n<p>Installer Oracle XE 21 c<br>Rien \u00e0 signaler. Suivre le cookbook livr\u00e9 dans la doc officielle.<\/p>\n\n\n\n<p>V\u00e9rifier le fichier <code>\/etc\/hosts<\/code><\/p>\n\n\n\n<p>V\u00e9rifier le port utilis\u00e9 pour sqlnet et rectifier le port si besoin dans le fichier <code>listener.ora<\/code>.<\/p>\n\n\n\n<p><code>\/opt\/oracle\/homes\/OraDBHome21cXE\/network\/admin\/listener.ora<\/code><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Installer Oracle APEX<\/h2>\n\n\n\n<p>Installer Oracle APEX 22 dans le PDB pr\u00e9sent par d\u00e9faut (xepdb1)<\/p>\n\n\n\n<p>Ajouter dans le domaine cr\u00e9\u00e9 plus haut une redirection sur un enregistrement de type A (l&rsquo;adresse IP V4 du serveur Y)<\/p>\n\n\n\n<p>Bien v\u00e9rifier que le sous domaine cr\u00e9\u00e9 dirige vers l&rsquo;adresse IP en effectuant un ping \u00e0 la fois depuis le serveur Y et depuis son poste de travail.<br>Dans la suite, je d\u00e9signe par NOM.DOMAINE.TLD le nom (<em>fqdn<\/em>) que je vais attribuer \u00e0 mon serveur Y. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Installer Oracle ORDS<\/h2>\n\n\n\n<p>Etre connect\u00e9 sous le compte oracle:oinstall <br>Cr\u00e9er un r\u00e9pertoire <code>\/opt\/ords\/conf<\/code><\/p>\n\n\n\n<p>Ajouter la variable d&rsquo;environnement <code>ORDS_CONFIG=\/opt\/ords\/conf<\/code> dans <code>.bash_profile<\/code><\/p>\n\n\n\n<p>Pr\u00e9ciser dans la chaine de connexion \u00ab\u00a0localhost\u00a0\u00bb et pr\u00e9ciser le PDB: xepdb1. Contr\u00f4ler que le r\u00e9pertoire de configuration est ok.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Installer Apache Tomcat<\/h2>\n\n\n\n<p><a rel=\"noreferrer noopener\" href=\"https:\/\/linuxize.com\/post\/how-to-install-tomcat-9-on-centos-7\/?utm_content=cmp-true\" target=\"_blank\">Installer Tomcat 9<\/a><br>cr\u00e9er un fichier <code>setenv.sh<\/code> dans le r\u00e9pertoire <code>\/opt\/tomcat\/latest\/bin<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>export ORDS_CONFIG=\/opt\/ords\/conf\n#export CATALINA_HOME=\/opt\/tomcat\/latest\n#export CATALINA_OPTS=\"$CATALINA_OPTS -Duser.timezone=UTC\"\nexport JAVA_OPTS=\"-Dconfig.url=${ORDS_CONFIG} -Xms1024M <\/code><\/pre>\n\n\n\n<p>D\u00e9ployer <code>ords.wa<\/code>r dans le r\u00e9pertoire <code>\/opt\/tomcat\/latest\/webapps<\/code><\/p>\n\n\n\n<p>Une diff\u00e9rence importante avec les version pr\u00e9c\u00e9dentes de ORDS est que la localisation des fichiers de configuration ne se trouve plus automatiquement dans le .war (quoique l&rsquo;on puisse le r\u00e9g\u00e9n\u00e9rer avec la commande <code>ords war<\/code>) . Il est plus s\u00fbr de fournir le path via le script <code>setenv.sh<\/code><\/p>\n\n\n\n<p>Recopier les fichiers du r\u00e9pertoire images dans <code>\/opt\/tomcat\/latest\/webapps\/i<\/code><\/p>\n\n\n\n<p>Tester depuis un navigateur<\/p>\n\n\n\n<p><code>http:\/\/&lt;IP_ADDRESS>:8080\/ords<\/code><br><code>http:\/\/&lt;IP_ADDRESS>:8080\/ords\/apex_admin<\/code> (pour l&rsquo;acc\u00e8s au service d&rsquo;administration)<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Occupation espace disque \u00e0 ce stade de l&rsquo;installation. Le 20 Go (20960236) \u00e9tait la valeur initiale avec une instance OVH modeste que j&rsquo;ai upgrad\u00e9e ensuite \u00e0 40 Go.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Filesystem     1K-blocks     Used Available Use% Mounted on\ndevtmpfs         1865500        0   1865500   0% \/dev\ntmpfs            1891000        0   1891000   0% \/dev\/shm\ntmpfs            1891000     8716   1882284   1% \/run\ntmpfs            1891000        0   1891000   0% \/sys\/fs\/cgroup\n\/dev\/sda1       20960236 17065564   3894672  82% \/\ntmpfs             378200        0    378200   0% \/run\/user\/1000<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Mise en place de TLS<\/h2>\n\n\n\n<p>La m\u00e9thode que je privil\u00e9gie est d&rsquo;installer un Apache Listener en Reverse Proxy. C&rsquo;est lui qui sera charg\u00e9 de la v\u00e9rification des certificats et du protocole TLS.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Installer Apache HTTPD<\/h2>\n\n\n\n<p>Pr\u00e9ciser un Virtual Host dans le fichier \/etc\/https\/conf\/httpd.conf<\/p>\n\n\n\n<p><a href=\"https:\/\/www.hostinger.fr\/tutoriels\/installer-lets-encrypt-apache\" data-type=\"URL\" data-id=\"https:\/\/www.hostinger.fr\/tutoriels\/installer-lets-encrypt-apache\" target=\"_blank\" rel=\"noreferrer noopener\">Installer <strong>certbot <\/strong><\/a>et obtenir un certificat aupr\u00e8s de Lets&rsquo;Encrypt.<\/p>\n\n\n\n<p>La proc\u00e9dure param\u00e8tre automatiquement la configuration d&rsquo;Apache.<\/p>\n\n\n\n<p>Tester depuis un navigateur:<\/p>\n\n\n\n<p>https:\/\/&lt;NOM.DOMAINE.TLD&gt;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Rediriger les requ\u00eates TLS vers Tomcat<\/h2>\n\n\n\n<p>Il s&rsquo;agit de rediriger les requetes SSL vers Tomcat qui \u00ab\u00a0\u00e9coute\u00a0\u00bb en http sur le port 8080.<\/p>\n\n\n\n<p>J&rsquo;utilise <code>mod_proxy<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;VirtualHost *:80&gt;\n        Redirect \"\/\" \"https:\/\/&lt;NOM.DOMAINE.TLD&gt;\/\"\n        #ProxyPreserveHost On\n        #RequestHeader unset Origin\nRewriteEngine on\nRewriteCond %{SERVER_NAME} = &lt;NOM.DOMAINE.TLD&gt;\nRewriteRule ^ https:\/\/%{SERVER_NAME}%{REQUEST_URI} &#91;END,NE,R=permanent]\n&lt;\/VirtualHost&gt;<\/code><\/pre>\n\n\n\n<p>Remarque importante: <a rel=\"noreferrer noopener\" href=\"http:\/\/cf https:\/\/www.linuxquestions.org\/questions\/linux-server-73\/apache-reverse-proxy-show-service-unavailable-error-4175691683\" data-type=\"URL\" data-id=\"cf https:\/\/www.linuxquestions.org\/questions\/linux-server-73\/apache-reverse-proxy-show-service-unavailable-error-4175691683\" target=\"_blank\">Si <em>Service unavailable<\/em>,<\/a> il faut probablement modifier une valeur de param\u00e8tre :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>setsebool -P httpd_can_network_connect on<\/code><\/pre>\n\n\n\n<p>Dans le r\u00e9pertoire \/etc\/httpd\/conf.d , il faut modifier le fichier ssl.conf pour indiquer la fa\u00e7on dont se fera la redirection vers tomcat:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;VirtualHost *:443&gt;\n\n# General setup for the virtual host, inherited from global configuration\nDocumentRoot \"\/var\/www\/html\"\nProxyPreserveHost On\nServerName &lt;NOM.DOMAINE.TLD&gt;\n#ProxyRequests Off\n#RequestHeader set Host \"&lt;NOM.DOMAINE.TLD&gt;:443\"\nProxyPass \/  http:\/\/&lt;NOM.DOMAINE.TLD&gt;:8080\/\nProxyPassReverse \/  http:\/\/&lt;NOM.DOMAINE.TLD&gt;:8080\/\n\nSSLEngine on\nSSLProxyEngine on<\/code><\/pre>\n\n\n\n<p>Remarque Importante: Dans le fichier de configuration httpd.conf, il y a la directive suivante: <code>IncludeOptional conf.d\/*.conf<\/code><\/p>\n\n\n\n<p>Cela signifie que TOUS les fichiers .conf vont \u00eatre inclus. Donc, veiller \u00e0 ne pas sauvegarder des fichiers de backup dans ce m\u00eame r\u00e9pertoire, sinon on obtient des erreurs du type: <em>port d\u00e9j\u00e0 utilis\u00e9<\/em>, ou bien <em>Nom de serveur d\u00e9j\u00e0 utilis\u00e9<\/em> qui emp\u00eachent le d\u00e9marrage de Apache Httpd.<\/p>\n\n\n\n<p>A cette occasion, j&rsquo;ai vite constat\u00e9 (avec la commande <code>journalctl -xe<\/code> ) que le serveur faisait l&rsquo;objet de nombreuse tentatives de connexions ssh . J&rsquo;ai neutralis\u00e9 les acc\u00e8s en agissant sur les deux fichiers<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>\/etc\/hosts.allow<\/code> <\/li>\n\n\n\n<li><code>\/etc\/hosts.deny<\/code>:<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Compl\u00e9ment param\u00e9trage Tomcat<\/h3>\n\n\n\n<p>dans la balise &lt;Connector &#8230;&gt; ajouter:<\/p>\n\n\n\n<p><code>proxyPort=\"443\"<\/code><br><code>scheme=\"https\"<\/code><\/p>\n\n\n\n<p>Tester avec un navigateur:<\/p>\n\n\n\n<p>https:&lt;NOM.DOMAINE.TLD&gt;\/ords<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Permettre les communications HTTPS en sortie<\/h2>\n\n\n\n<p>Il faut autoriser les communications entre la database et l&rsquo;ext\u00e9rieur<\/p>\n\n\n\n<p>ACL network<\/p>\n\n\n\n<p>Cr\u00e9er un wallet DB pour les certificats<\/p>\n\n\n\n<p>Cr\u00e9er un <em>wallet <\/em>et y enregistrer les certificats n\u00e9cessaires. Cette \u00e9tape est obligatoire pour r\u00e9aliser des appels REST qui doivent imp\u00e9rativement utiliser TLS.<\/p>\n\n\n\n<p>.<\/p>\n\n\n\n<p> <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Notes et observations Le projet consistait \u00e0 valider les taches pour obtenir une instance Oracle APEX op\u00e9rationnelle sur le cloud OVH en SSL avec&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"ppma_author":[150],"class_list":["post-5412","post","type-post","status-publish","format-standard","hentry","category-non-classe"],"authors":[{"term_id":150,"user_id":1,"is_guest":0,"slug":"admin8700","display_name":"Patrick","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/209d5ed69b74d288390621ab4c1d3773?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/gpmfactory.com\/index.php\/wp-json\/wp\/v2\/posts\/5412","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gpmfactory.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gpmfactory.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gpmfactory.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gpmfactory.com\/index.php\/wp-json\/wp\/v2\/comments?post=5412"}],"version-history":[{"count":26,"href":"https:\/\/gpmfactory.com\/index.php\/wp-json\/wp\/v2\/posts\/5412\/revisions"}],"predecessor-version":[{"id":5442,"href":"https:\/\/gpmfactory.com\/index.php\/wp-json\/wp\/v2\/posts\/5412\/revisions\/5442"}],"wp:attachment":[{"href":"https:\/\/gpmfactory.com\/index.php\/wp-json\/wp\/v2\/media?parent=5412"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gpmfactory.com\/index.php\/wp-json\/wp\/v2\/categories?post=5412"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gpmfactory.com\/index.php\/wp-json\/wp\/v2\/tags?post=5412"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/gpmfactory.com\/index.php\/wp-json\/wp\/v2\/ppma_author?post=5412"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}