LowEndBox - Cheap VPS, Hosting and Dedicated Server Deals

Yes, You Can Run 18 Static Sites on a 64MB Link-1 VPS

One thing I hated about WebHostingTalk is how much bad advice the so-called “professionals” are giving out to the world. Some poor college student asked in the VPS forums whether he is able to run 18 static HTML sites on VPSLink.com Link-1 plan (64MB RAM, 2.5GB storage & 100GB/month data), and the typical responses are:

“I do not believe you can host 18 websites on 64MB of RAM. I’d bump that up to at least 128 or 256.” –nexbyte

“I really wouldn’t advise anything lower than 265MB RAM for website hosting.” –RikeMedia

(Well, there are some more optimistic comments but I mainly list out those “with things to sell”)

So, just trying to prove the point that yes, 64MB is more than enough to host 18 static sites, I decided to add a Link-1 Xen to my account and document the process. Btw, thanks to Dan @ VPSLink for getting my billing issue resolved 🙂 You can get 10% recursive discount here, or 66% off for the first 3 months here.

Setting Up the VPS

After my order has been provisioned, I re-image the server with a Debian 5 “Lenny” image. I normally pick Debian or Ubuntu because apt-get uses much less memory than RedHat/Fedora’s equivalent, and it’s also my personal preference. I named my new VPS “endor” as I usually just name my boxes after Star Wars systems. Re-imaging a VPS is pretty fast — 2 minutes later I have my root password sent to my email address so I can ssh in to set up the new system.

$ ssh root@endor
root@endor's password:
Linux 66671 2.6.18-53.1.13.el5xen #1 SMP Tue Feb 12 14:04:18 EST 2008 i686

endor:~# free
             total       used       free     shared    buffers     cached
Mem:         65704      64008       1696          0       5616      44100
-/+ buffers/cache:      14292      51412
Swap:       131064          0     131064
endor:~# cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 15
model name      : Intel(R) Core(TM)2 Duo CPU     E4500  @ 2.20GHz
stepping        : 13
cpu MHz         : 2194.496
cache size      : 2048 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 10
wp              : yes
flags           : fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc up pni monitor ds_cpl est tm2 cx16 xtpr lahf_lm
bogomips        : 5558.81

Plenty of free memory and a single core of C2Duo E4500 — although not a high-end Xeon CPU, but should be more than sufficient to do what we need it to do. The next thing I want to do is to make sure every package is up to date.

endor:~# apt-get update && apt-get upgrade
Get:1 http://debrepo.mirror.vpslink.com lenny Release.gpg [386B]
Get:2 http://debrepo.mirror.vpslink.com lenny Release [63.2kB]
Get:3 http://debrepo.mirror.vpslink.com lenny/main Packages [5295kB]
Get:4 http://security.debian.org lenny/updates Release.gpg [197B]
Get:5 http://security.debian.org lenny/updates Release [40.8kB]
Get:6 http://debrepo.mirror.vpslink.com lenny/contrib Packages [76.1kB]
Ign http://security.debian.org lenny/updates/main Packages/DiffIndex
Get:7 http://security.debian.org lenny/updates/contrib Packages [14B]
Get:8 http://security.debian.org lenny/updates/main Packages [50.6kB]
Fetched 5526kB in 4s (1330kB/s)
Reading package lists... Done
...

Setting Up Web Server

Okay. The 64MB VPS is now up and running. What should we do next? Installing a web server of course, so we can start serving our static pages! Which web server? Definitely not Apache as it would be a waste of valuable memory here. Again my personal favourite is Nginx (pronounces Engine X), which currently powers LowEndBox.com. However, in this exercise I will go for Lighttpd because I found it easier to set up for abitary sites.

First of all — get Lighttpd installed.

endor:~# apt-get install lighttpd
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
...
Setting up libterm-readkey-perl (2.30-4) ...
Setting up libterm-readline-perl-perl (1.0302-1) ...
Setting up lighttpd (1.4.19-5) ...
Starting web server: lighttpd.
endor:~# ps -u www-data u
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
www-data  1690  0.0  1.5   5416  1008 ?        S    07:17   0:00 /usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf

Plain vanilla stripped down and un-configured 32 bit Lighttpd sits around 1MB RSS — not bad.

Next, we need to get our websites up there and point Lighttpd to them. It’s a good idea to put the web sites in an organised structure inside the file system. I usually just place them this way:

  • /var/www/<hostname>/html

So if I have an HTML file at http://www.example.com/testing.html, it will sit on the file system at /var/www/www.example.com/html/testing.html. Unfortunately I do not have 18 static sites. For testing purpose I am only going to display a very basic HTML page at http://test.lowendbox.com/.

endor:~# mkdir -p /var/www/test.lowendbox.com/html
endor:~# echo '<h1>Low End Box Rocks!</h1>' > /var/www/test.lowendbox.com/html/index.html

So now our “website” is ready — how does Lighttpd, our webserver, knows where to find the files corresponding to the website? That’s where Lighttpd’s mod_simple_vhost comes in handy.

endor:~# lighttpd-enable-mod simple-vhost
Available modules: auth cgi fastcgi proxy rrdtool simple-vhost ssi ssl status userdir
Already enabled modules:
Enabling simple-vhost: ok
Run /etc/init.d/lighttpd force-reload to enable changes
endor:~# /etc/init.d/lighttpd force-reload
Stopping web server: lighttpd.
Starting web server: lighttpd.

Now navigate to test.lowendbox.com (which already has an A record to my new VPS’s IP address) — here we have it! Low End Box Rocks!!!

Prerequisite:
You must be already familiar with DNS and know how to create records to point to IP addresses. For free DNS hosting I recommend EveryDNS, which has also been hosting LowEndBox’s domain.

You can now basically just dump static files at /var/www/<hostname>/html, with <hostname> resolved to your VPS’s IP address, and you will have your static websites over there in no time. You do not even need to tell Lighttpd to reload, as mod_simple_vhost automatically maps the hostname to appropriate file name. Repeat it 18 times and problem solved!

At 1 single testing site with no traffic, Lighttpd sits at around 1.5MB RSS, although I doubt it would increase significantly when you increase the number of sites or the traffic. Lighttpd and Nginx are single-threaded poll-based asynchronised web servers so for static file serving, the bottle-neck would be disk/network IO rather than amount of memory or CPU performance.

There are still lots of memory left. Maybe we can have some fun.

Installing WordPress

So you think, “hey Low End Box rocks and it runs on WordPress. So maybe I will have that installed as well!” Wow. But WordPress is a content management system for creating dynamic websites! It simply cannot be possible on a 64MB VPS, the WHT crowd says! Grrr!! Let’s give it a try.

To run WordPress from your static-file serving Lighttpd, you need a few more packages — namely MySQL and PHP in CGI/FastCGI mode.

endor:~# apt-get install mysql-server php5-cgi php5-mysql
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
...
Creating config file /etc/php5/cgi/php.ini with new version
Setting up php5-mysql (5.2.6.dfsg.1-1+lenny2) ...
Setting up sgml-base (1.26) ...
Setting up xml-core (0.12) ...
Setting up mailx (1:20071201-3) ...

I know it installs whole lot of other junks but don’t worry — we will live with them first and will try to optimise later. It also requires you to set up the root password for MySQL server, and I conveniently chose the most obscured password in this exercise — “root” (yes, don’t use that because I am already using it as my root password 🙂

We then need to configure lighttpd to handle PHP files.

endor:~# cat > /etc/lighttpd/conf-enabled/10-cgi-php.conf
server.modules += ("mod_cgi")
cgi.assign = (".php" => "/usr/bin/php5-cgi")^D
endor:~# /etc/init.d/lighttpd force-reload
Stopping web server: lighttpd.
Starting web server: lighttpd.

Done! It should be able to serve PHP files. Just to test it out:

endor:~# echo '<?php phpinfo(); ?>' > /var/www/test.lowendbox.com/html/phpinfo.php

Now navigate to http://test.lowendbox.com/phpinfo.php — you should be able to see the output of phpinfo() function. What we are going to do next is to set up a WordPress blog under http://test.lowendbox.com/blog/. WordPress.org already provides a great tutorial on installing WordPress, but let’s do it step by step on the command prompt.

My plan:

  • Create database “test_blog”
  • Download the latest WordPress and unzip to test.lowendbox.com/blog
  • Set up configuration file and run the WordPress install
  • Update Lighttpd to provide clean URL, aka Pretty Permalinks.

Let’s go!

endor:~# mysqladmin -uroot -proot create test_blog
endor:~# wget http://wordpress.org/latest.tar.gz
Resolving wordpress.org... 72.233.56.138, 72.233.56.139
Connecting to wordpress.org|72.233.56.138|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/x-gzip]
Saving to: `latest.tar.gz'

...

2009-03-17 13:03:15 (1.01 MB/s) - `latest.tar.gz' saved [1624416]

endor:~# tar zxf latest.tar.gz -C /var/www/test.lowendbox.com/html
endor:~# cd /var/www/test.lowendbox.com/html
endor:/var/www/test.lowendbox.com/html# mv wordpress blog
endor:/var/www/test.lowendbox.com/html# mv blog/wp-config-sample.php blog/wp-config.php
endor:/var/www/test.lowendbox.com/html# vi blog/wp-config.php

When you are editing WordPress’ configuration file, set DB_NAME to “test_blog”, DB_USER and DB_PASSWORD to “root” for something quick, dirty and potentially insecure. Here is one final step — navigate to http://test.lowendbox.com/blog/, and WordPress will guide you through the rest of setup.

It is also relatively easy to set up pretty permalinks for WordPress on Lighttpd. In our example,

endor:~# cat > /etc/lighttpd/conf-enabled/lowendbox.conf
$HTTP["host"] == "test.lowendbox.com" {
    $HTTP["url"] =~ "^/blog/" {
        server.error-handler-404 = "/blog/index.php"
    }
}^D
endor:~# /etc/init.d/lighttpd force-reload
Stopping web server: lighttpd.
Starting web server: lighttpd.

That’s it! You can now go into WordPress to configure the desirable Permalink Structure. Do note that the current WordPress dashboard page is very resource intensive, as it fetches development blog, other WP news, incoming links, etc from various sources, concurrently on separate PHP CGI processes. There might be plugins to turn off this server-killing behavior (or just use older version of WordPress like 2.0.x which is still maintained). Likewise some WP caching plugin can be very useful in reducing the load. Google them and you shall find.

Optimisation — Squeeze More Memory!

So now we have a Debian 5 web server box that can handle lots of static sites + a few WordPress blogs, and it fits “fine” on a 64MB Xen VPS. Let’s see what processes are running:

endor:~# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
...
root       325  0.0  0.4   2032   292 ?        S<s  04:25   0:00 udevd --daem
root       879  0.0  0.4   2788   304 ?        Ss   Mar17   0:00 /bin/bash --
root      1216  0.0  0.0      0     0 ?        S    Mar17   0:00 [pdflush]
root      1649  0.0  0.2   3144   188 ?        Ss   Mar17   0:00 /usr/sbin/famd 
root      6427  0.0  4.4   8024  2928 ?        Ss   Mar17   0:00 sshd: root@pts/
root      6429  0.0  2.3   2804  1564 pts/0    Ss   Mar17   0:00 -bash
root      6441  0.0  1.8  33092  1200 ?        Sl   Mar17   0:00 /usr/sbin/rsysl
root      6453  0.0  1.4   5284   976 ?        Ss   Mar17   0:00 /usr/sbin/sshd
root      6470  0.0  1.3   2048   896 ?        Ss   Mar17   0:00 /usr/sbin/cron
daemon    6482  0.0  0.8   1772   560 ?        Ss   Mar17   0:00 /sbin/portmap
www-data  6510  0.0  2.6   5848  1736 ?        S    Mar17   0:00 /usr/sbin/light
root      6572  0.0  1.7   2488  1156 pts/0    S    Mar17   0:00 /bin/sh /usr/bi
mysql     6611  0.0 26.2 143652 17228 pts/0    Sl   Mar17   0:00 /usr/sbin/mysql
root      6613  0.0  0.8   1636   536 pts/0    S    Mar17   0:00 logger -p daemo
103       6973  0.0  1.3   6112   908 ?        Ss   Mar17   0:00 /usr/sbin/exim4
root      6986  0.0  1.3   2308   908 pts/0    R+   00:01   0:00 ps aux
endor:~# free
             total       used       free     shared    buffers     cached
Mem:         65704      51424      14280          0        936      22588
-/+ buffers/cache:      27900      37804
Swap:       131064        864     130200

Note that it’s an idle box. The swap is slightly used and at 37MB free it is actually not too bad. Let’s try to squeeze a little bit more memory out from the factory setup.

MySQL is by far the biggest offender, and I have talked about how to reduce MySQL memory usage here. If you are just running simple CMS, InnoDB is probably not required — it uses more memory and a lot heavier on IO as well. We can simply use the LxAdmin’s mysql.cnf which I linked on the other blog post to get the bare-minimum MySQL running.

endor:~# cat > /etc/mysql/conf.d/lowendbox.cnf
[mysqld]
key_buffer = 16K
max_allowed_packet = 1M
table_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 64K
skip-bdb
skip-innodb^D

As mysqld_safe script uses /bin/sh for scripting, it’s also a good idea to check whether dash is used instead of bash.

endor:~# apt-get install dash
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
...
Unpacking dash (from .../dash_0.5.4-12_i386.deb) ...
Processing triggers for man-db ...
Setting up dash (0.5.4-12) ...
endor:~# dpkg-reconfigure dash
Adding `diversion of /bin/sh to /bin/sh.distrib by dash'
Adding `diversion of /usr/share/man/man1/sh.1.gz to /usr/share/man/man1/sh.distrib.1.gz by dash'
endor:~# /etc/init.d/mysql restart
Stopping MySQL database server: mysqld.
Starting MySQL database server: mysqld.
Checking for corrupt, not cleanly closed and upgrade needing tables..

One thing I don’t like about Debian 5 is its default inclusion of rsyslog. Well — it’s feature rich, but I don’t need MySQL and TCP syslog support. Weight at 1.2MB RSS is just a bit too fat I reckon. I am not game enough to go without a syslog daemon, so I just go for syslog-ng. Probably not the most light weight, but it’s just something I have been using for the last couple of years.

endor:~# ps -C rsyslogd v
  PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
 6441 ?        Sl     0:00      0   207 32936  1260  1.9 /usr/sbin/rsyslogd -c3
endor:~# apt-get install syslog-ng && dpkg --purge rsyslog
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
...
Setting up syslog-ng (2.0.9-4.1) ...
Starting system logging: syslog-ng.
(Reading database ... 16517 files and directories currently installed.)
Removing rsyslog ...
Purging configuration files for rsyslog ...
endor:~# ps -C syslog-ng v
  PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
 8215 ?        Ss     0:00      0   105  2754   708  1.0 /usr/sbin/syslog-ng -p 

Shedding 500kb RSS — not too bad I guess 🙂

Next — Portmap and FAM got installed when Lighttpd was first installed. Lighttpd does not really need FAM. It’s used for stat cache to reduce seeks, but can live without. Not that I have noticed any performance difference anyway for small traffic anyway. Having both of them removed from the process list would give us extra 750KB.

endor:~# apt-get remove --purge portmap
eading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
...

OpenSSH can be replaced by dropbear to save memory.

endor:~# touch /etc/ssh/sshd_not_to_be_run
endor:~# apt-get install dropbear
...
endor:~# vi /etc/default/dropbear
endor:~# /etc/init.d/dropbear start
Starting Dropbear SSH server: dropbear.

Just remember to set NO_START=0 in /etc/default/dropbear so dropbear can run as a daemon. Dropbear daemon is using around 500KB less than OpenSSH daemon during idle, and for each connection it uses 1.5MB less on this Debian 5 box — that’s quite a saving!

That’s probably it! Vixie cron can be replaced by a light weight DCRON but I can’t seem to be able find it in Debian’s repository. Exim4 is probably one of the most light weight mail daemon you can have, but then again you might want to question — “do I need a mail daemon running”? You can probably bring it down, and just run /usr/sbin/runq once every 2 hours to process the queue, in case the previous delivery failed. That would probably give you another 1MB to play with.

You can also use PDKSH to replace BASH as interactive shell to loose some weight.

endor:~# ps -C bash v
  PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
 8409 pts/1    Ss     0:00      2   663  2140  1568  2.3 -bash
endor:~# apt-get install pdksh
endor:~# chsh -s /bin/pdksh
<log out and then SSH back in>
# ps -C pdksh v
  PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
 8550 pts/0    Rs     0:00      0   174  1633   588  0.8 -pdksh

That’s 1 full megabyte off the scale! Also note that VPSLink’s /etc/inittab automatically spawn a BASH process on the console — just in case you got locked out from firewall. For me it’s the last line of inittab file. Change it to /bin/sh or /bin/pdksh, run init q to reload init(1), and then kill that bash process.

Here’s the end result:

# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
...
root       325  0.0  0.4   2032   292 ?        S<s  Mar17   0:00 udevd --daem
root      1216  0.0  0.0      0     0 ?        S    Mar17   0:00 [pdflush]
root      6470  0.0  1.3   2048   896 ?        Ss   Mar17   0:00 /usr/sbin/cron
103       6973  0.0  1.3   6112   912 ?        Ss   Mar17   0:00 /usr/sbin/exim4
root      7953  0.0  0.7   1716   524 ?        S    00:23   0:00 /bin/sh /usr/bi
mysql     7992  0.0  8.2  37904  5404 ?        Sl   00:23   0:00 /usr/sbin/mysql
root      7994  0.0  0.8   1636   536 ?        S    00:23   0:00 logger -p daemo
root      8215  0.0  1.1   2860   776 ?        Ss   00:31   0:00 /usr/sbin/syslo
www-data  8313  0.0  2.4   5712  1640 ?        S    00:37   0:00 /usr/sbin/light
root      8418  0.0  0.7   2052   468 ?        Ss   00:51   0:00 /usr/sbin/dropb
root      8527  0.0  0.7   1712   468 ?        Ss   01:19   0:00 /bin/sh --
root      8549  0.0  1.9   2712  1300 ?        Ss   01:21   0:00 /usr/sbin/dropb
root      8550  0.0  0.9   1808   600 pts/0    Rs   01:21   0:00 -pdksh
root      8562  0.0  1.3   2308   908 pts/0    R+   01:26   0:00 ps aux
# free
             total       used       free     shared    buffers     cached
Mem:         65704      58852       6852          0       2180      40344
-/+ buffers/cache:      16328      49376
Swap:       131064        380     130684

That’s 12MB trimmed, which can be used in disk cache to improve static file serving.

Conclusion

So how do we conclude? 64MB is more than enough to serve a few low traffic static websites. You can actually run a few WordPress sites with a few hundred visitors a day — at the price equivalent to many heavily oversold shared hosting and you get root access!

One thing about root access though — in all my examples above I used root account and never bothered to use a normal user account. It is bad from security aspect so don’t do it. Or at least don’t tell anyone that you use nothing but root 🙂

174 Comments

  1. naugtur's avatar
    naugtur:

    No idea if anyone reads my comment, but there’s a lot to do to take mem optimization to the limit.

    For those, who want something extreme I suggest BOA webserver. It serves files and runs CGI. I am using it on embedded devices and it’s easy to use. You won’t set up a wordpress on it (at least not easily) but it can run as a single process and serve your html as fast as hdd and network lets you and it uses virtually no ram (less than 2MB)

    June 13, 2011 @ 2:18 pm | Reply
    • antares's avatar

      well, you could use uHTTPd from the OpenWRT project then as well. It features equally low mem(I use it on an 8MB RAM embedded board, along with a couple of other websites and it _DOES_ allow CGI / PHP, so WordPress is possible(tested on my 8MB Board)

      June 13, 2011 @ 10:38 pm | Reply
  2. kode89's avatar
    kode89:

    Hi, I followed the instructions to install syslog-ng however my installation seems to be using more memory than the one in this tutorial. Here is what I get:

    root@normandy:~# ps -C syslog-ng v
      PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
    18148 ?        S      0:00      0   298 42925   732  0.0 supervising syslog-ng
    18149 ?        Ss     0:00      1   298 53533  2704  0.3 /usr/sbin/syslog-ng -p /var/ru
    

    Mine seems to be running at 2.7mb rss. Has anyone else experienced this?

    July 18, 2011 @ 6:57 am | Reply
  3. tinyray's avatar

    Does anyone know how to configure MySql to use up the memory space left to increase the performance?

    August 18, 2011 @ 12:25 am | Reply
    • Yomero's avatar

      Increase the values for query cache, table cache, etc in my.cnf

      August 18, 2011 @ 2:25 am | Reply
  4. tinyray's avatar

    Thanks, Yomero,
    a number of caches and buffers in there, that’s why I was asking, 🙂

    August 18, 2011 @ 2:30 am | Reply
    • Yomero's avatar

      If you mean that you want specific values, I don’t know, try yourself and see how much memory MySQL uses.

      August 18, 2011 @ 3:01 am | Reply
  5. Bogdacutu's avatar

    On Debian 6 Squeeze, you need to remove the

    skip-bdb

    line for MySQL to work.

    December 17, 2011 @ 8:18 am | Reply
  6. Pats's avatar
    Pats:

    @LowEndAdmin – I have followed most of the steps, havent yet installed WordPress. I want to use Nginx.
    Can you tell if its ok to do “apt-get remove lighttpd” and install Nginx using the links mentioned by some members above. or Do i need to remove php, mysql etc. and install them again after installing Nginx (so they can auto-configure)
    Thanks

    March 2, 2012 @ 1:30 pm | Reply
    • Pats's avatar
      Pats:

      ok i –purge removed and followed bash setup-debian.sh path..

      March 3, 2012 @ 8:09 am | Reply
  7. Hien's avatar

    For people want to disable innodb in MySQL 5.5 http://sshd.info/2012/03/14/disable-innodb-in-mysql-5-5-x/

    March 19, 2012 @ 12:02 pm | Reply
  8. Danny SMc's avatar
    Danny SMc:

    I am trying to make a static website, and I have a RPi box, I have installed Lighttpd on to the box and have installed mysql and php files so now it should be able to run, but when I want to try it out i cant because i dont know what my rpi address, I did it off a site and it said: to test its: http://[your raspberry pi address]/index.lighttpd.html But i don’t know my raspberry pi address…I have searched for it and gone on about 30 different forums and nothing explains :/ could you help?

    August 2, 2012 @ 8:17 am | Reply
    • John_R's avatar
      John_R:

      Log into your RPi box and run ifconfig, look for your IP address.

      ?

      August 20, 2012 @ 8:58 pm | Reply
  9. John_R's avatar
    John_R:

    This worked under Debian 6 32-bit, with one small problem.

    Lighttpd with simple_mod_vhost looks for the vhosts in /srv/YOURDOMIN.COM/htdocs

    It does not look in /var/www at all.

    You should make the appropriate changes in /etc/lighttpd/conf-enabled/10-simple-vhost.conf

    ‘srv’ becomes ‘www’ and ‘htdocs’ becomes ‘html’.

    I have 7 static subdomain sites set up as a test, and it uses a whopping 20 megs of RAM.

    Great work with the simple guide!

    August 18, 2012 @ 7:46 pm | Reply
    • John_R's avatar
      John_R:

      Went ahead and added Webmin, still uses less than 35 megs idle, jumps up to around 55 when I load update the package list through Webmin.

      That is fantastic!

      August 18, 2012 @ 7:58 pm | Reply
      • John_R's avatar
        John_R:

        If you want a flat-file wordpress-type script, check out FlatPress.

        Not only does it use NO mysql, there is also a remote posting plugin so you can post from your phone 😀

        You do have to install php though.

        August 25, 2012 @ 1:18 pm | Reply
  10. John_R's avatar
    John_R:

    O.k., big kids.

    Got the flatpress script lined out. I am running 20 blogs in 64 megs.

    Only problem is the maintainer of Flatpress.

    Contacted them about making a “latest.tar.gz” file on their website for distribution, but haven’t heard back.

    Maybe all of you can request it as well.

    September 2, 2012 @ 9:29 pm | Reply
  11. mark's avatar
    mark:

    Good stuff!

    February 19, 2013 @ 5:11 am | Reply
  12. GBolt's avatar
    GBolt:

    This is really amazing, and it’s so detailed I can’t go wrong even if I tried. Thanks a lot!

    February 23, 2013 @ 5:05 pm | Reply
  13. Maximilian's avatar
    Maximilian:

    Working but…
    less than 128MB could couse problems 503 Errors or PHP Mysql Errors.
    Better are 128MB + Swap that can handle much more requests

    March 17, 2013 @ 2:14 am | Reply
  14. Andrew's avatar
    Andrew:

    Dear Maik,

    I have a WordPress video site and has the below data:
    Disk usage 35GB
    June projected monthly bandwidth 5TB (it doubles every month)
    Average daily visits 600
    Average pageviews 2,700

    At the end of this year, my projections are that my site disk usage will be 200GB and my bandwidth 50TB. In two years time possibly both will double.

    I found Dreamhost VPS that has unlimited disk usage and bandwidth. The only options to choose is the RAM per month I can buy. $15 for 300MB, $30 for 600MB, $50 for 1,000MB, $100 for 2,000 and $200 for 4,000MB.

    Would my site run on 300MB RAM?

    Thank you in advance for your kind assistance.

    June 25, 2013 @ 9:14 am | Reply
  15. girlsbcnonline's avatar

    Excellent article. I will be going through some of these issues as
    well..

    July 3, 2013 @ 4:13 pm | Reply
  16. Ask Fm Ip Tracker's avatar

    Hi there! I just wanted to ask if you ever have any
    trouble with hackers? My last blog (wordpress) was hacked
    and I ended up losing months of hard work due to no data backup.
    Do you have any solutions to prevent hackers?

    July 8, 2013 @ 4:02 pm | Reply
    • John's avatar
      John:

      I dont think this question is very relevant in this context. But some things. First of all, have backups think about how much data you can miss (like one day?) and set the backup schedule to that + check your backups often, setup a site using only your backups and see if it got everything you need to start over. Second keep your WP up-to-date, always. Disable access to /administrator, throw in a .htaccess with a password, or just a deny-all, and remove it when you need to edit something. Dont use FTP, but sftp (ssh) to upload stuff, SSL so you dont sent your passwords unencrypted, and a firewall that only has your ssh port and port 80/443 open…

      July 29, 2013 @ 7:45 pm | Reply
  17. brian's avatar
    brian:

    hello sir,, i see symbol like this ^D on :

    endor:~# cat > /etc/lighttpd/conf-enabled/10-cgi-php.conf
    server.modules += (“mod_cgi”)
    cgi.assign = (“.php” => “/usr/bin/php5-cgi”)^D

    what buttons i have to press??

    August 24, 2013 @ 12:29 pm | Reply
  18. Kizi 9's avatar

    Howdy! This is my first comment here so I just wanted to give a
    quick shout out and say I genuinely enjoy reading through your posts.
    Can you recommend any other blogs/websites/forums that cover the
    same subjects? Thanks!

    September 4, 2013 @ 2:26 pm | Reply
  19. Tech Blog's avatar

    Wonderful tutorial. I was searching for it

    September 22, 2013 @ 2:05 am | Reply
  20. led panel's avatar

    Hi there, I enjoy reading through your post.
    I wanted to write a little comment to support you.

    Here is my web site … led panel

    September 27, 2013 @ 11:45 am | Reply
  21. John Georvasilis's avatar

    You don’t have to be a business owner to take advantage
    of this deduction. So, it is a good idea to go online for selecting a proficient legal representative.
    A IRS Attorney needs to be talented to resolve one’s tax issues
    with one best possible outcome.

    October 13, 2013 @ 12:42 am | Reply
  22. Sina Momken's avatar

    Hello
    I plan to host a simple wordpress, ftp, torrent and the most important a tor client on a hacked router running OpenWRT Linux. The router is D-Link DIR-825 and its hardware is consisted of:
    – 680MHz MIPS cpu
    – 64MB RAM
    – 8MB Internal Flash
    – 1*USB (I prefer to make root and swap partitions on the external USB flash drive and boot from that too)
    This router can be hacked to run OpenWRT, however I want to know is it possible to also run a tor client and a simple webserver (for wordpress) in OpenWRT linux on such a weak hardware?

    Waiting for your exciting response. (Please also email your response comment to me too, I fear to lose your answer!)

    November 22, 2013 @ 3:49 pm | Reply
    • BastetFurry's avatar
      BastetFurry:

      You can run almost anything on that thing, it might just be slow.

      April 5, 2014 @ 5:32 pm | Reply
  23. Rinaldo Jonathan's avatar

    I was really bored, so I translated this article to indonesian and posted it to my blog!
    I put backlink anyway. Nice article though.

    http://itsrinaldo.net/2013/12/30/ya-kamu-bisa-menjalankan-18-website-statis-di-dalam-vps-64mb/

    December 30, 2013 @ 10:42 am | Reply
  24. temple run brave amazon kindle fire free books's avatar

    Everyone loves what you guys tend to be up too.
    This sort of clever work and coverage! Keep up the awesome works guys I’ve
    included you guys to my own blogroll.

    March 23, 2014 @ 2:44 am | Reply
  25. galihrezah's avatar

    ide yang bagus… (Y)
    debian emang bagus untuk server ram kecil..
    namun saya sarankan web server menggunakan nginx

    April 16, 2014 @ 6:43 am | Reply
  26. domain's avatar

    Nice blog right here! Additionally your website
    so much up fast! What web host are you the
    usage of? Can I am getting your affiliate hyperlink for your host?
    I wish my website loaded up as quickly as yours lol

    September 6, 2014 @ 2:47 am | Reply
  27. punzme's avatar

    lol, When I thought this article was a joke. You could probably setup a site with 64 mb but it wont function normaly.

    November 3, 2014 @ 7:34 am | Reply
  28. fix's avatar
    fix:

    apt-get install syslog-ng && dpkg –purge rsyslog

    This is not very good on Debian 7:

    The following NEW packages will be installed:
    cron exim4 exim4-base exim4-config exim4-daemon-light libcap2 libdbi1 libevtlog0 libmongo-client0 libnet1 libsyslog-ng-3.3.5 libsystemd-daemon0 logrotate syslog-ng
    syslog-ng-core syslog-ng-mod-json syslog-ng-mod-mongodb syslog-ng-mod-sql

    December 22, 2014 @ 4:55 pm | Reply
  29. BDWEBIT.COM's avatar

    I have learned lot of things from it on the topic of blogging. thanks.BDWEBIT.COM

    December 28, 2014 @ 7:14 pm | Reply
  30. This Nuts's avatar
    This Nuts:

    Damn! 2016 and this still very usefull!

    Tnx

    March 18, 2016 @ 2:38 pm | Reply
    • dutchie's avatar
      dutchie:

      Hell Yeah! I will keep this bookmark forever!

      May 1, 2016 @ 12:12 pm | Reply
      • Kumar Vivek's avatar

        Finally I am Sure that I can Deploy nearly 20-30 Sites on 512 MB Digital Ocean Droplet configuring centminmod or easyengine on my vps

        May 9, 2016 @ 7:16 am | Reply
  31. Arup's avatar

    18 websites with 64 MB memory ? I’m getting a hard time with memory consumption in a 512MB VPS with two WordPress sites.

    July 11, 2016 @ 8:37 am | Reply
  32. Julián's avatar
    Julián:

    Is the any chance to get this guide updated? For Linode?

    March 8, 2018 @ 2:13 pm | Reply
  33. Songwut K.'s avatar
    Songwut K.:

    How about NodeJS ?

    July 7, 2019 @ 12:14 pm | Reply
  34. Pingback: Whatever Happened to LEAdmin? - LowEndBox

  35. Pingback: v6Node: VMs start at 4.5€ /year in Germany! - LowEndBox

Leave a Reply

Some notes on commenting on LowEndBox:

  • Do not use LowEndBox for support issues. Go to your hosting provider and issue a ticket there. Coming here saying "my VPS is down, what do I do?!" will only have your comments removed.
  • Akismet is used for spam detection. Some comments may be held temporarily for manual approval.
  • Use <pre>...</pre> to quote the output from your terminal/console, or consider using a pastebin service.

Your email address will not be published. Required fields are marked *