July 12, 2012

Deploy multiple Node applications on one web server in subfolders with Nginx

Things get tricky with Node when you need to move your application from from localhost to the internet.

There is no common approach for Node deployment.

Google can find tons of articles on this topic, but I was struggling to find the proper solution for the setup I need.

Basically, I have a web server and I want Node applications to be mounted to subfolders (i.e. http://myhost/demo/pet-project/) without introducing any configuration dependency to the application code.

At the same time I want other stuff like blog to run on the same web server.

Sounds simple huh? Apparently not.

In many examples on the web Node applications either run on port 80 or proxied by Nginx to the root.

Even though both approaches are valid for certain use cases, they do not meet my simple yet a little bit exotic criteria.

That is why I created my own Nginx configuration and here is an extract:

From this example you can notice that I mount my Pet Project Node application running on port 3000 to http://myhost/demo/pet-project.

First Nginx checks if whether the requested resource is a static file available at /opt/demo/pet-project/public/ and if so it serves it as is that is highly efficient, so we do not need to have a redundant layer like Connect static middleware.

Then all other requests are overwritten and proxied to Pet Project Node application, so the Node application does not need to know where it is actually mounted and thus can be moved anywhere purely by configuration.

proxy_redirect is a must to handle Location header properly. This is extremely important if you use res.redirect() in your Node application.

You can easily replicate this setup for multiple Node applications running on different ports and add more location handlers for other purposes.

UPDATE: Why and how you should do it in subdomains instead.

June 2, 2012

CoffeeScript version of the time span formatter between now and the date specified in a "Facebook way"

Earlier I published an ActionScript utility method that allows you to format the time span between now and the date specified in a "Facebook way".

Now I port it to CoffeeScript.

You can notice that the code is very similar, but thanks to CoffeeScript native string interpolation it is shorter and easier to read and understand!

You are welcome to contribute at https://github.com/skovalyov/time-format!

June 1, 2012

Game Lines made with CoffeeScript and Stylus

Try my game Lines at http://skovalyov.github.com/game-lines.

The source code is available at https://github.com/skovalyov/game-lines.

A lot of improvements to be done, but you can already play!

I plan to optimize for mobile, make the animation smoother, handle game over properly, introduce different complexity levels and high scores: global, today and probably personal.

Stay tuned and you are welcome to join!

September 22, 2010

How to format the time span between now and the date specified in a "Facebook way"

Recently I was looking for some method to format the time span between now and the date specified in a "Facebook way". There are some, but none was completely what I was looking for. So I have decided to create mine. Moreover, it's not that complicated:

November 6, 2008

Do not comment code!

Commenting code is the worst practice promoted by "wannabe smart" books about software engineering. Joshua Block in his How to Design a Good API and Why it Matters keynote notes that code should read like prose and shows the good example:

And I completely agree with this statement. Thus good code is self-explanatory and does not require comments. On the other hand comments will never rescue bad code. Sure, we can use something like "TODO: I will fix this dummy trick in the next iteration", but no more than it.