One disadvantage of having a reliable hosting provider is that you tend to forget about backups. In my ten years with Plus hosting there was not a single case of data loss. Regardless I wanted to go "better safe than sorry" route and make automated backups. And, while I am at it, I might as well use it to make "production replica" environment for testing.
My website environment is based on CentOS 6, MySQL database, and Apache. Ideally I would need exactly the same environment. But in this case I decided to upgrade all components to latest versions. In case of Linux that meant going with CentOS 7.1 (minimal).
Installation for CentOS is as simple as it gets. I basically click on Next until there is no button to press. :) Only possibility of error is forgetting to enable the Ethernet network adapter - not a catastrophic mistake; just annoying one. Once install was done, additional packages were in order:
yum install httpd mariadb-server php php-mysql rsync
To connect to my website I created new SSH keys:
ssh-keygen -b 4096
I appended newly created
.ssh/id_rsa.pub key to
.ssh/authorized_keys on my web server. That meant I could login and copy files without any passwords - great for scripting.
Setting up MySQL/MariaDB came next. It is just a basic setup followed by user and database creation:
chown -R mysql:mysql /var/lib/mysql/
service mariadb start
chkconfig mariadb on
mysql -e "CREATE USER 'mydbuser_wp'@'localhost' IDENTIFIED BY 'mydbpassword';"
mysql -e "CREATE DATABASE mydatabase_wordpress"
For data replication (after making sure
/home/myuser directory exists) I created simple
/root/replicate.sh script with following content:
ssh email@example.com "mysqldump -u mydbuser_wp -pmydbpassword --opt mydatabase_wordpress" > /var/tmp/mysql.dump
mysql mydatabase_wordpress < /var/tmp/mysql.dump
scp -r firstname.lastname@example.org:/home/myuser/* /home/myuser
#rsync -avz -e ssh email@example.com:/home/myuser /home/myuser
First three lines ensure I have a fresh MySQL database import and SCP is tasked with file copy. Better approach would be
rsync but I kept getting
Out of memory errors. As my site is not huge, I opted for dummy copy instead of troubleshooting.
Once I ran script once to verify all is working as expected, i added it to crontab (
crontab -e) so it runs every midnight:
00 00 * * * /root/replicate.sh
For Apache I edited
/etc/httpd/conf/httpd.conf file to change its root:
# Allow open access:
Require all granted
AddType text/html .php .phps
Opening filewall was next task:
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
service iptables save
And all remaining was to start Apache:
chown -R apache:apache /home/myuser/public_html
restorecon -R /home/myuser/public_html
service httpd start
chkconfig httpd on
PS: Do notice that I didn't describe security setup for this machine. Unless there are some mitigating circumstances, you pretty much want your backup as secure as a real thing.