Sever setup of apache vhots, php with different versions, varnish, redis, proFTPD, Webmin, OpenVPN on CentOS 7

Sever setup of apache vhots, php with different versions, varnish, redis, proFTPD, Webmin, OpenVPN on CentOS 7

Install CentOS 7 and login in via putty.
Change Password


Check for new updates

yum check-update

Update your server

yum update

Install commonly used programs

yum install -y links htop nano

Install the EPEL repository

sudo yum install epel-release

More info on https://support.rackspace.com/how-to/install-epel-and-additional-repositories-on-centos-and-red-hat/
Install Development Tools

yum groupinstall "Development Tools"

Command to list groups

yum group list


Install PHP

Install PHP-FPM and dependancies from base repo

yum install -y php-cli php-common php-devel php-fpm php-gd php-mbstring php-mysqlnd php-pdo php-pear php-pecl-memcache php-process php-xml php-pecl-redis

Install PHP FPM 5.6
Include remi repo to get PHP FPM 5.6

cd /home/; wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

install it using RPM command

rpm -Uvh remi-release-7.rpm

More info on http://www.servermom.org/how-to-enable-remi-repo-on-centos-7-6-and-5/2790/
After you have compiled run the command to install php fpm 5.6

yum install -y php56-php-cli php56-php-common php56-php-devel php56-php-fpm php56-php-gd php56-php-mbstring php56-php-mysqlnd php56-php-pdo php56-php-pear php56-php-pecl-memcache php56-php-process php56-php-xml php56-php-pecl-redis
yum install -y gcc php-devel php-pear ImageMagick ImageMagick-devel

At this point you have successfully installed ImageMagick package on your system. Now are are going to install ImageMagick php extension, So that we can use it through php code.

pecl install imagick
echo "extension=imagick.so" > /etc/php.d/imagick.ini

If you get this error Message: session_start(): open(/var/lib/php/session/sess_m4qebv1i35l7biibc2hslthk26, O_RDWR) failed: Permission denied (13)
Run the following command

chmod -R 777 /var/lib/php/

Reload Apache

service httpd reload
systemctl reload httpd.service

Restart Apache

service httpd restart

Check if Imagick was installed ok

php -i | grep Imagick


Install Apache

sudo yum -y install httpd

Allow Apache Through the Firewall
Allow the default HTTP and HTTPS port, ports 80 and 443, through firewalld:

sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp

install Apache devel

yum install -y httpd-devel

start Apache

sudo systemctl start httpd

Edit /etc/httpd/conf/httpd.conf and add the following at end
IncludeOptional sites-enabled/*.conf
Also add index.php in the block

<IfModule dir_module>
DirectoryIndex index.html index.php

Create folders in apache

mkdir /etc/httpd/sites-available
mkdir /etc/httpd/sites-enabled
mkdir /var/www/vhosts

Create a dummy vhost for all not configured properties in “/var/www/vhosts/”

<VirtualHost *:8888>
ServerName null
ServerAlias *
Redirect 404 /

How to create a vhost for new property

mkdir /var/www/vhosts/xyz.abc.com
mkdir /var/www/vhosts/xyz.abc.com/httpdocs
mkdir /var/www/vhosts/xyz.abc.com/logs

Create a new site in “/etc/httpd/sites-available” with name “01-xyz-abc.conf”

nano /etc/httpd/sites-available/01-xyz-abc.conf

Place the virtual host code

<VirtualHost *:80>
ServerName xyz.abc.com
# ServerAlias www.xyz.abc.com
DocumentRoot /var/www/vhosts/xyz.abc.com/httpdocs
#ErrorLog /var/www/vhosts/xyz.abc.com/logs/error_log
ErrorLog /var/log/httpd/error_log
CustomLog /var/www/vhosts/xyz.abc.com/logs/access.log combined
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php-fpm/php5-fpm_xyz.abc.com.sock|fcgi://xyz.abc.com/"
<Proxy fcgi://xyz.abc.com>
ProxySet connectiontimeout=5 timeout=240
<Directory "/var/www/vhosts/xyz.abc.com/httpdocs">
Order allow,deny
Allow from all
AllowOverride FileInfo All
# New directive needed in Apache 2.4.3:
Require all granted

Create a file in /etc/php-fpm.d/01-xyz-abc.conf and place this content

nano /etc/php-fpm.d/01-xyz-abc.conf
; Start a new pool named 'www'.
;listen =
listen = /var/run/php-fpm/php5-fpm_xyz.abc.com.sock
listen.allowed_clients =
user = xyz-abc-user
group = xyz-abc-user
listen.mode = 0666
; By default use ondemand spawning (this requires php-fpm >= 5.3.9)
pm = ondemand
pm.max_children = 100
pm.process_idle_timeout = 3s
pm.max_requests = 10000
request_terminate_timeout = 600
; Following pm.* options are used only when 'pm = dynamic'
; pm.start_servers = 30
; pm.min_spare_servers = 30
; pm.max_spare_servers = 150
;pm.status_path = /status
;ping.path = /ping
;ping.response = pong
;request_terminate_timeout = 0
;request_slowlog_timeout = 0
; The log file for slow requests
; Default Value: not set
; Note: slowlog is mandatory if request_slowlog_timeout is set
slowlog = /var/log/php-fpm/www-slow.log
;rlimit_files = 1024
;rlimit_core = 0
;chroot =
;chdir = /var/www
;catch_workers_output = yes
;security.limit_extensions = .php .php3 .php4 .php5
; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from
; the current environment.
; Default Value: clean env
;env[PATH] = /usr/local/bin:/usr/bin:/bin
;env[TMP] = /tmp
;env[TMPDIR] = /tmp
;env[TEMP] = /tmp
; Additional php.ini defines, specific to this pool of workers. These settings
; overwrite the values previously defined in the php.ini. The directives are the
; same as the PHP SAPI:
; php_value/php_flag - you can set classic ini defines which can
; be overwritten from PHP call 'ini_set'.
; php_admin_value/php_admin_flag - these directives won't be overwritten by
; PHP call 'ini_set'
; For php_*flag, valid values are on, off, 1, 0, true, false, yes or no.
; Defining 'extension' will load the corresponding shared extension from
; extension_dir. Defining 'disable_functions' or 'disable_classes' will not
; overwrite previously defined php.ini values, but will append the new value
; instead.
; Default Value: nothing is defined by default except the values in php.ini and
; specified at startup with the -d argument
;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com
;php_flag[display_errors] = off
php_admin_value[error_log] = /var/www/vhosts/xyz.abc.com/logs/www-error.log
php_admin_flag[log_errors] = on
;php_admin_value[memory_limit] = 128M
; Set session path to a directory owned by process user
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
php_value[open_basedir] = "/var/www/vhosts/xyz.abc.com/:/tmp/:/dev/urandom"

Once you have create a vhost config, now you need to enable it

ln -s /etc/httpd/sites-available/01-xyz-abc.conf /etc/httpd/sites-enabled/01-xyz-abc.conf

Add new user to to new vhost entry

useradd -s /user/sbin/nologin -d /var/www/vhosts/xyz.abc.com xyz-abc-user

Change ownership of vhost

chown -R xyz-abc-user:xyz-abc-user /var/www/vhosts/xyz.abc.com

Change Permissions of vhost

find /var/www/vhosts/xyz.abc.com -type d -exec chmod 755 {} \;
find /var/www/vhosts/xyz.abc.com -type f -exec chmod 644 {} \;

Now you need to restart apache

service httpd restart

Restart the php fpm

service php-fpm restart

install MariaDB

nano /etc/yum.repos.d/MariaDB.repo

Add the follwing files

# MariaDB 10.2 CentOS repository list - created 2017-11-09 08:10 UTC
# http://downloads.mariadb.org/mariadb/repositories/
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64

Save the file and install MariaDB

sudo yum install -y MariaDB-server MariaDB-client

You can also check for new updates and see the install guide on https://downloads.mariadb.org/mariadb/repositories
create myslq temp folder in /dev/shm everytime after restarting server.

mkdir  /dev/shm/mysql
chown -R mysql:mysql /dev/shm/mysql

MySql config file path /etc/my.cnf.d/server.cnf
Change the password and reset the settings after installation

sudo mysql_secure_installation

Create new user privilidges

REVOKE ALL PRIVILEGES ON `example-database-name`.* FROM 'example-user'@'localhost'; GRANT ALL PRIVILEGES ON `example-database-name`.* TO 'example-user'@'localhost';


Install Redis

sudo yum install -y redis php-pecl-redis

Start Redis

sudo systemctl start redis

To automatically start Redis on boot

sudo systemctl enable redis

Verify that Redis is running with redis-cli

redis-cli ping


Install ProFTPD

Import the EPEL GPG-key:

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

update the packages

yum -y update

We will install ProFTPD and OpenSSL

yum install -y proftpd openssl proftpd-utils

We need to start the service and enable it to start at boot automatically.

systemctl start proftpd.service
systemctl enable proftpd.service

Check ProFTPD version

proftpd -v

Edit /etc/proftpd.conf file and modify
Search for AuthOrder and replace with:

AuthOrder mod_auth_file.c mod_auth_unix.c
AuthUserFile /etc/proftpd/ftpd.passwd
AuthGroupFile /etc/proftpd/ftpd.group

Create a folder in etc

mkdir /etc/proftpd

get user id and group id for below command.

tail /etc/passwd

Create ftp users

cd /etc/proftpd
ftpasswd --passwd --name=xyz-abc-user --home=/var/www/vhosts/xyz.abc.com/httpdocs/ --shell=/sbin/nologin --uid=1000 --gid=1000
ftpasswd --group --gid=1000 --name=xyz-abc-user

Restart ProFTPD

service proftpd restart

Install php 7

yum install php71

Create a file in “/etc/opt/remi/php71/php-fpm.d/01-xyz-abc.conf” and place same code from above /etc/php-fpm.d/01-xyz-abc.conf
Also please make sure to change below line in  “/etc/opt/remi/php71/php-fpm.d/01-xyz-abc.conf”

listen = /var/run/php-fpm/php5-fpm_xyz.abc.com.sock

Also change the existing /opt/remi/php56/root/etc/php-fpm.d/www.conf file and change

listen =


listen =

create a folder for sessions

mkdir /var/lib/php/sessions/
chmod 0777 /var/lib/php/sessions/

Restart Apache

service httpd restart

Restart php fpm

service php71-php-fpm restart


Install webmin

change webmin port

nano /etc/webmin/miniserv.conf
change port=10000 to port=7777

Configure PHP Settings


Install phpMyAdmin

Copy latest link downoad link from https://www.phpmyadmin.net/downloads/

wget https://files.phpmyadmin.net/phpMyAdmin/4.7.6/phpMyAdmin-4.7.6-all-languages.zip
unzip phpMyAdmin-4.7.6-all-languages.zip

Correct ownership

chown -R xyz-abc-user:xyz-abc-user /var/www/vhosts/xyz.abc.com/phpmyadmin

Follow the guide to install phpmyadmin http://www.trustfm.net/ebooks/DedicatedServer.php?page=MySQL

yum install phpmyadmin

Reboot the server


Install OpenVPN Access

copy latest link from https://openvpn.net/index.php/access-server/download-openvpn-as-sw/113.html?osfamily=CentOS

curl -O http://swupdate.openvpn.org/as/openvpn-as-2.1.12-CentOS7.x86_64.rpm
sudo rpm -i openvpn-as-2.1.12-CentOS7.x86_64.rpm
sudo passwd openvpn

bind to all ports on digital ocean otherwise admin wont open
login to admin panel and change its ports if hosting provider is blocking vpn

Go to admin -> Server Network Settings -> change TCP Port number, also change UDP Port number and change Port number


Daily Basic Command

backup command

tar -cpf - /var/www/vhosts/abc.com/httpdocs | gzip > /var/www/vhosts/abc.com/backup-2017-12-01.tar.gz

Rsync command

rsync -av --progress --exclude 'uploads' /abc-directory-old/ /abc-directory-new/ --progress

Rsync to another server.

rsync -av -e "ssh -p 8822" /SOURCE/ root@IP:/DESTINATION/ --progress


rsync -av -e "ssh -p 8822" root@111.111.1111.111:/backup/rdiff/ /home/db/CLIENT/ --progress


Share this post