How do you deploy a Happstack application to production?
Asked Answered
B

1

6

I can't seem find any documentation, any blogposts or other resources about this subject.

From what I have seen so far there seems to be support for FastCGI but the project hasn't had a commit for 4 years. And then mod_proxy could probably be used. Maybe you can just run the Happstack application as a daemon which handles all the requests by itself.

I'm just guessing here, it would be really nice to see what people with experience say!

Bouillon answered 18/6, 2013 at 21:1 Comment(2)
The standard across most of the universe is using an nginx reverse proxy, these days.Landside
Generally I just tend to use happstack's builtin web server, that's enough for most cases.Ballata
T
5

@Carl mentions this in his comment, so I'm going to specify my process in the hopes that it's useful for you. These are the steps on Debian linux with nginx as the server.

  • install nginx with apt-get install nginx
  • create a file at /etc/nginx/sites-available/your-app-name containing

.

  server {
       listen 80;
       server_name your-app.com www.your-app.com your-app.ca;

       rewrite .*/favicon.ico /img/favicon.ico last; 

       location ~ ^/(css|js|img|html)/ {
                root /path/to/your/static/resource/folder;
                expires 30d;
       }

       location / {
                proxy_pass http://localhost:3000;
                proxy_redirect off;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                client_max_body_size 10m;
                client_body_buffer_size 128k;
                proxy_connect_timeout 90;
                proxy_send_timeout 90;
                proxy_read_timeout 90;
                proxy_buffer_size 4k;
                proxy_buffers 4 32k;
                proxy_busy_buffers_size 64k;
                proxy_temp_file_write_size 64k;
       }
 }
  • restart your server with /etc/init.d/nginx restart
  • start your Happstack app, and make sure it's listening on port 3000 (or substitute the appropriate port in the location)

I use this tactic to deploy most of my web apps, except for the Erlang-based ones; I trust Yaws to handle itself. Apparently some people are considering the same thing with warp, but I don't know enough about that to comment. The reverse proxy approach will work as long as the language you're running is able to respond to HTTP requests, which is a better bet than counting on (fast)?CGI or the appropriate mod_.*?.

Nginx is chosen as the server because it's faster than the alternatives at serving static files (which is pretty much all it's doing in this case), and because I find it really easy to configure. That's a preference not a rule. You could probably use Apache or Lighttpd or whatever in the same way, but I'll leave that explanation to someone more experienced with it.

Twentytwo answered 19/6, 2013 at 15:35 Comment(2)
Thanks! What a coincidence, I was just reading Nginx for Developers: An Introduction and setting up nginx in a vagrant vm :)Bouillon
And btw, configuring nginx seems so much nicer to configure than Apache. I really like the syntax of the config files.Bouillon

© 2022 - 2024 — McMap. All rights reserved.