Table of Contents

EVE Installation Manual

You are here:

This release of the manual describe the installation process in a Linux Red Hat Advance Server or CentOS versions 7.8 for:

  • Apache 2.4.43
  • PHP 7.0.33
  • Oracle 19.6
  • CouchBase 6.5.1

We assume that the media to install the OS was “minimal install” type.

Create OS user

To clearly identify our processes we are going to create a group and an user:

  • groupadd isretail
  • useradd -g isretail eve
  • passwd eve

Network

To avoid problems during installation or while running the system we suggest check the following configuration files:

  • /etc/hostname where you should be defined the server name
  • /etc/sysconfig/network-scripts/ifcfg-eth0/1/… where IP address is defined
  • /etc/hosts where can be defined the address for servers name when no complex DNS services are uses

These files are also to be remembered when a clone of a VM is the base of a new installation.

Firewall rules are also important if you prefer to mantain the firewall service active:

  • check in which zone we are (normally public) with firewall-cmd –get-active-zones
  • list the services with firewall-cmd –zone=public –list-services
  • add the services we need: firewall-cmd –zone=public –add-service=http
  • and make it permanent: firewall-cmd –zone=public –add-service=http –permanent

You may want to do the same for https service and other ports; for example if you need to open port 1235: firewall-cmd –zone=public –add-port=1235/tcp. Remeber to use “–permanent” for definition that must exist after reboot.

Update and Install packages

OS must be up to date and the following packages must be installed:

  • yum update
  • yum groupinstall “Development Tools” -y
  • yum install pcre-devel -y
  • yum install openssl-devel -y
  • yum install libxml2-devel -y
  • yum install libcurl-devel -y
  • yum install libjpeg-devel -y
  • yum install libpng-devel -y
  • yum install freetype-devel -y
  • yum install memcached -y
  • yum install pkgconfig -y
  • yum install openssl098e -y
  • yum install epel-release -y
  • yum install libmcrypt libmcrypt-devel -y
  • yum install mcrypt -y
  • yum install mhash -y
  • yum install wget -y

After this:

  • mkdir -p /root/install
  • cd /root/install

Apache installation

Please run the following commands from console:

  • wget https://mirrors.up.pt/pub/apache/httpd/httpd-2.4.43.tar.gz
  • wget https://mirrors.up.pt/pub/apache/apr/apr-1.7.0.tar.gz
  • wget https://mirrors.up.pt/pub/apache/apr/apr-util-1.6.1.tar.gz
  • wget https://github.com/libexpat/libexpat/releases/download/R_2_2_9/expat-2.2.9.tar.gz
  • tar -zxvf httpd-2.4.43.tar.gz
  • tar -zxvf apr-1.7.0.tar.gz
  • tar -zxvf apr-util-1.6.1.tar.gz
  • tar -zxvf expat-2.2.9.tar.gz
  • mv apr-1.7.0 httpd-2.4.43/srclib/apr
  • mv apr-util-1.6.1 httpd-2.4.43/srclib/apr-util
  • cd /root/install/expat-2.2.9
  • ./configure
  • make
  • make install
  • cd /root/install/httpd-2.4.43
  • ./configure –prefix=/www –with-mpm=prefork –enable-so –enable-rewrite –enable-vhosts-alias –enable-ssl –enable-modules=’unique-id’ –with-included-apr –with-expat=/usr/local
  • make
  • make install
  • vi /www/conf/httpd.conf to set some parameters:
    • Listen 192.168.45.223:80
    • Listen 192.168.45.223:1235 (if you need for voice)
    • LoadModule deflate_module modules/mod_deflate.so
    • LoadModule expires_module modules/mod_expires.so
    • LoadModule proxy_module modules/mod_proxy.so
    • LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
    • LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
    • LoadModule rewrite_module modules/mod_rewrite.so
    • User eve
    • Group isretail
    • ServerName [hostname]
    • before DocumentRoot “/www/htdocs”
      • <FilesMatch \.php$>
      • SetHandler “proxy:fcgi://127.0.0.1:9000”
      • </FilesMatch>
    • inside directory “/www/htdocs”
      • AllowOverride All
    • end of file:
      • <IfModule mod_expires.c>
        • ExpiresActive On
        • ExpiresByType image/x-icon “access plus 15 days”
        • ExpiresByType image/gif “access plus 15 days”
        • ExpiresByType image/png “access plus 15 days”
        • ExpiresByType image/jpg “access plus 15 days”
        • ExpiresByType image/jpeg “access plus 15 days”
        • ExpiresByType text/css “access plus 15 days”
        • ExpiresByType application/javascript “access plus 15 days”
      • </IfModule>
      • <IfModule deflate_module>
        • SetOutputFilter DEFLATE
        • DeflateCompressionLevel 9
        • BrowserMatch ^Mozilla/4 gzip-only-text/html
        • BrowserMatch ^Mozilla/4.0[678] no-gzip
        • BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
        • SetEnvIfNoCase Request_URI (?:gif|jpe?g|png|swf)$ no-gzip dont-vary
      • </IfModule>
      • <IfModule proxy_module>
        • ProxySet timeout=600000
        • ProxyPassMatch ^/(..php(/.)?)$ fcgi://127.0.0.1:9000/www/htdocs/$1
        • ProxyPassMatch ^/(status?)$ fcgi://127.0.0.1:9000/www/htdocs/$1
        • SetEnvIf Authorization “(.)” HTTP_AUTHORIZATION=$1
        • SetEnvIf Content-Type “(.)” HTTP_CONTENT_TYPE=$1
        • SetEnvIf Accept “(.*)” HTTP_ACCEPT=$1
      • </IfModule>
      • ExtendedStatus On
      • <Location /server-status>
        • SetHandler server-status
        • Order Deny,Allow
        • Deny from all
        • Allow from all
      • </Location>
      • AddDefaultCharset Off

Database connections

Before install PHP engine we need to get a client for the database we are going to access.

Oracle client

This step is necessary if you want to access an Oracle Database Server installed in a different machine. If database and application servers are the same you don’t need to.

First obtain from Oracle site the client and the development libraries, then install.

  • wget https://download.oracle.com/otn_software/linux/instantclient/19600/oracle-instantclient19.6-basic-19.6.0.0.0-1.x86_64.rpm
  • wget https://download.oracle.com/otn_software/linux/instantclient/19600/oracle-instantclient19.6-devel-19.6.0.0.0-1.x86_64.rpm
  • rpm -ivh oracle-instantclient19.6*
  • create a tnsnames.ora file in /usr/lib/oracle/19.6/client64/network/admin

MySQL client

Since PHP 5.4 there is no need to install MySQL client libraries since the MySQL native driver is embedded in the PHP extension.

PHP and modules

The version we are going to install is 7.0.33

Some changes to the configure command suggested may be needed; for example:

  • –with-oci8=instantclient,/usr/lib/oracle/19.6/client64/lib if you are using the instant client from oracle
  • –with-mysqli instead of –with-oci8 if you are using MySQL instead of Oracle

In our case we have Oracle Server in the same machine; so:

PHP

  • wget https://www.php.net/distributions/php-7.0.33.tar.gz
  • tar -zxvf php-7.0.33.tar.gz
  • cd php-7.0.33
  • ./configure –prefix=/usr/local –with-libdir=/lib64 –enable-fpm –with-xmlrpc –with-iconv –enable-sockets –enable-mbstring –with-curl –with-gd –enable-soap –with-freetype-dir=/usr/local/lib –with-openssl –enable-pcntl –enable-posix –enable-shmop –enable-sysvsem –enable-sysvshm –enable-sysvmsg –enable-sigchild –enable-zip –with-jpeg-dir=/usr/local/lib –with-png-dir=/usr/local/lib64 –with-zlib-dir=/usr/local/lib64 –with-oci8=$ORACLE_HOME
  • make && make install
  • cp php.ini-development /usr/local/lib/php.ini and adapt; about usefull settings:
    • max_execution_time = 300
    • max_input_vars = 10000
    • memory_limit = 256M
    • error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE
    • display_errors = Off
    • ignore_repeated_errors = On
    • error_log = /www/logs/php_errors.log
    • upload_max_filesize = 4M
    • session.gc_maxlifetime = 3600 (very important since it is used in EVE to decide after how much inactivity an user should re-login)
    • output_buffering = Off
  • cp ./sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
  • chmod +x /etc/init.d/php-fpm
  • cp ./sapi/fpm/status.html /www/htdocs/
  • chown eve.isretail -R /www/htdocs/
  • chkconfig php-fpm on
  • cd /usr/local/etc/
  • cp php-fpm.conf.default php-fpm.conf
  • vi php-fpm.conf and adapt; some settings that can be useful:
    • error_log = log/php-fpm.log
    • log_level = notice
    • process.max = 128
  • cd /usr/local/etc/php-fpm.d
  • cp www.conf.default www.conf
  • vi www.conf; some settings that can be useful:
    • user = eve
    • group = isretail
    • pm.max_children = 35
    • pm.start_servers = 5
    • pm.max_requests = 100
    • pm.status_path = /status
    • slowlog = /tmp/$pool.log.slow
    • request_slowlog_timeout = 3s
    • env[HOSTNAME] = $HOSTNAME
    • env[PATH] = /usr/local/bin:/usr/bin:/bin
    • env[TMP] = /tmp
    • env[TMPDIR] = /tmp
    • env[TEMP] = /tmp
    • env[ORACLE_HOME] = /opt/oracle/product/19c/dbhome_1
    • env[LD_LIBRARY_PATH] = /opt/oracle/product/19c/dbhome_1/lib:/lib:/usr/lib
    • env[NLS_LANG] = american_america.UTF8
    • env[NLS_COMP] = LINGUISTIC
    • env[NLS_SORT] = GENERIC_M_AI
    • env[DOCUMENT_ROOT] = /www/htdocs

At this point if we start php-fpm and we use a phpinfo.php page … it should works.

To start php-fpm: systemctl start php-fpm.service

To restart php-fpm: systemctl restart php-fpm.service

To stop php-fpm: systemctl stop php-fpm.service

opcache

In production environment remember to enable opcache from php.ini.

igbinary

  • cd /root/install
  • wget https://pecl.php.net/get/igbinary-3.1.2.tgz
  • tar -zxvf igbinary-3.1.2.tgz
  • cd igbinary-3.1.2
  • phpize
  • ./configure CFLAGS=”-O2 -g” –enable-igbinary –with-php-config=/usr/local/bin/php-config
  • make && make install
  • echo extension=igbinary.so >> /usr/local/lib/php.ini

After restart, to verify if ok, execute the command php -i |grep igbinary and the output should be:

igbinary
igbinary support => enabled
igbinary version => 3.1.2
igbinary APCu serializer ABI => no
igbinary session support => yes
igbinary.compact_strings => On => On
Registered serializer handlers => php_serialize php php_binary igbinary

memcache

  • cd /root/install
  • wget https://pecl.php.net/get/memcache-4.0.5.2.tgz
  • tar -zxvf memcache-4.0.5.2.tgz
  • cd memcache-4.0.5.2
  • phpize
  • ./configure
  • make && make install
  • echo extension=memcache.so >> /usr/local/lib/php.ini

After restart, to verify if ok, execute the command php -i |grep memcache and the output should be:

memcache
memcache support => enabled
memcache.allow_failover => 1 => 1
memcache.chunk_size => 32768 => 32768
memcache.compress_threshold => 20000 => 20000
memcache.default_port => 11211 => 11211
memcache.hash_function => crc32 => crc32
memcache.hash_strategy => consistent => consistent
memcache.lock_timeout => 15 => 15
memcache.max_failover_attempts => 20 => 20
memcache.prefix_host_key => 0 => 0
memcache.prefix_host_key_remove_subdomain => 0 => 0
memcache.prefix_host_key_remove_www => 1 => 1
memcache.prefix_static_key => no value => no value
memcache.protocol => ascii => ascii
memcache.redundancy => 1 => 1
memcache.session_prefix_host_key => 0 => 0
memcache.session_prefix_host_key_remove_subdomain => 0 => 0
memcache.session_prefix_host_key_remove_www => 1 => 1
memcache.session_prefix_static_key => no value => no value
memcache.session_redundancy => 2 => 2
memcache.session_save_path => no value => no value

xdebug

Warning! This extension must always be declared after opcache when enabled.

  • cd /root/install
  • wget https://xdebug.org/files/xdebug-2.7.2.tgz
  • tar -zxvf xdebug-2.7.2.tgz
  • cd xdebug-2.7.2
  • phpize
  • ./configure –enable-xdebug
  • make && make install
  • echo zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20151012/xdebug.so >> /usr/local/lib/php.ini

After restart, to verify if ok, execute the command php -i |grep xdebug and the output should be:

xdebug
xdebug support => enabled
xdebug.auto_trace => Off => Off
xdebug.cli_color => 0 => 0
xdebug.collect_assignments => Off => Off
xdebug.collect_includes => On => On
xdebug.collect_params => 0 => 0
xdebug.collect_return => Off => Off
xdebug.collect_vars => Off => Off
xdebug.coverage_enable => On => On
xdebug.default_enable => On => On
xdebug.dump.COOKIE => no value => no value
xdebug.dump.ENV => no value => no value
xdebug.dump.FILES => no value => no value
xdebug.dump.GET => no value => no value
xdebug.dump.POST => no value => no value
xdebug.dump.REQUEST => no value => no value
xdebug.dump.SERVER => no value => no value
xdebug.dump.SESSION => no value => no value
xdebug.dump_globals => On => On
xdebug.dump_once => On => On
xdebug.dump_undefined => Off => Off
xdebug.extended_info => On => On
xdebug …

xls2csv – catdoc

To import xls files we need the catdoc package:

  • yum install catdoc -y

Couchbase

With EVE we are going to use more and more NoSQL databases: the immediate purpose is performance; but in the future we cannot exclude some advantages of this kind of approach: geographical distribution, smaller DB server and upgrade on running environments.

The community edition is enough to work with; since we are in a development environment and we can legally install the enterprise edition that give some tools about query analysis and monitoring we will use this one.

  • wget https://packages.couchbase.com/releases/6.5.1/couchbase-server-enterprise-6.5.1-centos7.x86_64.rpm
  • yum install couchbase-server-enterprise-6.5.1-centos7.x86_64.rpm -y
  • firewall-cmd –zone=public –add-port=8091-8092/tcp –permanent
  • firewall-cmd –zone=public –add-port=4396/tcp –permanent
  • firewall-cmd –zone=public –add-port=21100-21199/tcp –permanent
  • firewall-cmd –zone=public –add-port=11209-11211/tcp –permanent
  • firewall-cmd –reload
  • in the browser go to: http://192.168.45.223:8091/ui/index.html
Setup New Cluster
Choose a cluster name and a password: for example “EVE” and “isretail”
Accept terms and go to “Configure Disk…”
Example of configuration 1. Don’t use 127.0.0.1 but the host name or the ip address.
Example of configuration 2

After this step you can add the user “eve” from the dashboard and assign a password.

Now the php client:

  • vi /etc/yum.repos.d/couchbase-Base.repo

[couchbase-server]
name=Couchbase Server
baseurl=http://packages.couchbase.com/releases/couchbase-server/enterprise/rpm/$releasever/$basearch/
enabled=1
s3_enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/GPG-KEY-COUCHBASE-1.0

[couchbase-server-community]
name=Couchbase Server (Community Edition)
baseurl=http://packages.couchbase.com/releases/couchbase-server/community/rpm/$releasever/$basearch/
enabled=1
s3_enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/GPG-KEY-COUCHBASE-1.0

[couchbase-sdk]
name = Couchbase SDK package repository
baseurl = http://packages.couchbase.com/rpm/$releasever/$basearch
enabled = 1
gpgcheck = 1
gpgkey=file:///etc/pki/rpm-gpg/GPG-KEY-COUCHBASE-1.0

  • yum update
  • cd /root/install
  • yum install libcouchbase-devel libcouchbase2-libevent -y
  • wget https://pecl.php.net/get/couchbase-2.6.2.tgz
  • tar -zxvf couchbase-2.6.2.tgz
  • cd couchbase-2.6.2
  • phpize
  • ./configure
  • make && make install
  • echo extension=couchbase.so >> /usr/local/lib/php.ini

After restart, to verify if ok, execute the command php -i |grep couchbase and the output should be:

couchbase
couchbase support => enabled
libcouchbase runtime version => 2.10.6 (git: 61e274aae48b6edeecb081afec843dbe31d72790)
libcouchbase headers version => 2.10.6 (git: 61e274aae48b6edeecb081afec843dbe31d72790)
couchbase.decoder.json_arrays => 0 => 0
couchbase.encoder.compression => off => off
couchbase.encoder.compression_factor => 0.0 => 0.0
couchbase.encoder.compression_threshold => 0 => 0
couchbase.encoder.format => json => json
couchbase.log_level => WARN => WARN
couchbase.pool.max_idle_time_sec => 60 => 60

Extras

Usefull staff.

syntax highlight in vi

  • yum -y install vim-enhanced
  • echo alias vi=vim >> /etc/profile.d/vi.sh