Create your personal Web hosting 2

Now we know that Apache can handle a sufficient number of request, the next step is to test with a real running server. For this purpose I will use WordPress.
Wordpress needs a database, but the box use a sdcard as a mass storage, which is not recommended and should be avoid. To handle this problem I will use an USB port to plug a USB key or later a hd disk if needed. To easily switch I will do an logical link in the system to change the target of the mass storage. Insure that you install a raid solution (see http://olinuxino.4pro-web.com/how-to-speedup-access/)

1
2
3
4
apt-get install mysql-server
mysql_secure_installation
apt-get install php5  php5-mysql
apachectl restart

Now download wordpress

1
2
3
4
5
cd /mnt/raid
wget https://wordpress.org/latest.zip
unzip latest.zip
chmod  -R 755 wordpress
chown -R www-data .

Now it’s time to install wordpress

Edit the file /etc/apache2/sites-enabled/000-default and change the value DocumentRoot to your external hd ( /mnt/raid/wordpress in my case)
Then go to your laptop and in your web browser type your box ip adress (192.168.1.71 in my case).

Be careful if you have errors like can not insert or create databases, ensure that the mass storage have 755 authorization?

Now if you succeed installed wordpress, from your laptop, you have a site in 192.168.1.71

Now we gonna tweak apache. As I have already said sd card are not reliable. So we gonna put logs from apache to memory. The log will be

accesed like a filesystem, but will be stored in memory and will deleted if you reboot your box. Nevertheless you can add a script to store at specific time.
Debian has a specific filesystem named tmpfs, so my /etc/fstab looks like:

1
2
3
4
5
6
7
8
9
10
11
12
13
# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/root      /               ext4    noatime,errors=remount-ro 0 1
tmpfs    /run/shm    tmpfs    defaults    0 0
tmpfs    /tmp        tmpfs    defaults    0 0
tmpfs    /var/tmp    tmpfs    defaults    0 0
tmpfs    /var/log/apache2    tmpfs    defaults,size=50M    0 0
/dev/nanda   /media/nand auto    rw,user,noauto,exec   0   0
#/dev/sda1   /media/hdd auto    rw,user,noauto,exec   0   0
/dev/sda1       /mnt/sdb1           ext4    defaults        0       0 
/dev/sdb1       /mnt/sdb2           ext4    defaults        0       0
/dev/md0 	/mnt/raid	ext2	defaults 	0	1

Now we have the same problem with the mysql database, so I will move it into the Usb key (raid1 in our case).
To do so:

1
2
3
4
5
6
service mysql stop 
mv /var/lib/mysql /var/lib/mysql-old
mkdir /mnt/raid/mysql
ln -s /mnt/raid/mysql /var/lib/mysql
cp -pr /var/lib/mysql-old/* /mnt/raid/mysql 
/etc/init.d/mysqld start
1
ab -n 400 -c 50 -g test_data_1.txt http://192.168.1.71/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Document Path:          /
Document Length:        251 bytes
 
Concurrency Level:      50
Time taken for tests:   30.235 seconds
Complete requests:      400
Failed requests:        0
Non-2xx responses:      400
Total transferred:      242800 bytes
HTML transferred:       100400 bytes
Requests per second:    13.23 [#/sec] (mean)
Time per request:       3779.398 [ms] (mean)
Time per request:       75.588 [ms] (mean, across all concurrent requests)
Transfer rate:          7.84 [Kbytes/sec] received

Result are not very good. Indeed we can serve only 13rq/s. So let’s try to optimize:

1
2
sudo apt-get install php-apc
vi /etc/php5/apache2/php.ini
1
add extension=apc.so at the end of the file

Add WP Super Cache to your WordPress installation and then we have

At conclusion we can support 50rq/s

1
ab -n 400 -c 50 -g test_data_1.txt http://5.49.77.158/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Server Software:        Apache/2.2.22
Server Hostname:        5.49.77.158
Server Port:            80
 
Document Path:          /
Document Length:        9287 bytes
 
Concurrency Level:      50
Time taken for tests:   4.262 seconds
Complete requests:      400
Failed requests:        0
Total transferred:      3836400 bytes
HTML transferred:       3714800 bytes
Requests per second:    93.84 [#/sec] (mean)
Time per request:       532.798 [ms] (mean)
Time per request:       10.656 [ms] (mean, across all concurrent requests)
Transfer rate:          878.96 [Kbytes/sec] received

In conclusion our environment can support a big number of requests,son in the last part of these articles I will show you how to put your website on the web.

Leave a Reply