Simple file server to serve current directory

I'm looking for a dead simple bin that I can launch up in the shell and have it serve the current directory (preferably not ..), with maybe a -p for specifying port. As it should be a development server, it should by default allow connections from localhost only, maybe with an option to specify otherwise. The simpler, the better.

Not sure which tags to use here.

python -m SimpleHTTPServer

or

python -m SimpleHTTPServer 80

if you don't want the default port 8080. See the docs.

For Node, there's http-server:

$ npm install -g http-server
$ http-server Downloads -a localhost -p 8080
Starting up http-server, serving Downloads on port: 8080
Hit CTRL-C to stop the server

Python has:

  • Python 3: python -m http.server 8080
  • Python 2: python -m SimpleHTTPServer 8080

Note that these two allow all connections (not just from localhost). Sadly, there isn't a simple way to change the address.

There is the Perl app App::HTTPThis or I have often used a tiny Mojolicious server to do this. See my blog post from a while back.

Make a file called say server.pl. Put this in it.

#!/usr/bin/env perl

use Mojolicious::Lite;

use Cwd;
app->static->paths->[0] = getcwd;

any '/' => sub {
  shift->render_static('index.html');
};

app->start;

Install Mojolicious: curl get.mojolicio.us | sh and then run morbo server.pl.

Should work, and you can tweak the script if you need to.

Using Twisted Web:

twistd --pidfile= -n web --path .  --port 8080

--pidfile= disables the PID file. Without it a twistd.pid file will be created in the current directory. You can also use --pidfile ''.