Hacker News new | past | comments | ask | show | jobs | submit login
A Docker-inspired Heroku clone in 100 lines of PHP (gist.github.com)
60 points by igorw on Dec 21, 2015 | hide | past | favorite | 32 comments



I have never found "X lines of code" to be impressive. Write clean code and polish it and make it readable. Who cares how long it is. Hackers brag about lines, not engineers.


Well, could be a reason this place is called Hackers News rather than Engineers News


The actual number doesn't matter. It's just shorthand for "It's easy and quick! This isn't a mammoth 10k-line library".


It's also shorthand for "doesn't have feature X or support Y and hasn't really been tested!"


In only 100 lines of PHP!

Requires Symfony.


It requires Silex, a micro-framework, not Symfony. Symfony is a much larger framework that isn't required. He just used two of its modular components, Request for HTTP request parsing, and Process for spawning subprocesses.


Requiring libraries/frameworks shouldn't detract from something like this. I'd be more worried about bugs and feature support.


Nah, requiring Symfony is like requiring Django. Doesn't make much sense.


It's actually Silex. Maybe that makes more sense.


Silex is hardly a "micro framework", it's basically Symfony without the configuration files. So it's a LOT of code. I like it by the way, always hated the Spring like insanity of Symfony, but let's not pretend Silex + all Symfony libs the framework has to import are small.

The irony is that for this very project, Both Silex and Symfony\Process are completely redundant, especially with PHP bloated core APIs.


That's not correct. Silex replaces the Symfony DI (or service locator, if you will) component with something much simpler called Pimple. You can read the code within a few minutes.

The only other required libraries for Silex to function are the event dispatcher, routing (which you can swap out for something like nikic/FastRoute), and the request/response stuff. I'm not sure if you think that's a "lot" of code, but if you're rolling your own you'd probably end up using the HTTPFoundation stuff anyway.


> That's not correct. Silex replaces the Symfony DI (or service locator, if you will) component with something much simpler called Pimple. You can read the code within a few minutes.

That's exactly what I said, what is the point of your message? With Silex there is no configuration through XML or YAML. What is not correct?


You ranted about it being a "lot" of code. The default Silex installation doesn't even bring in the Security component, which is probably what prompted your comparison to Spring.

Event dispatching + kernel (basically a handler) + request/response isn't particularly complex, is it?


But it's not requiring Symfony.


> Requires Symfony.

Silex, not Symfony, and better to rely on trusted library code than to reinvent the wheel and introduce vulnerabilities...


But it's not 100 LOC if you don't reinvent the wheel! /s


People like to specialize and seek extremes of different metrics. Do you think that the demoscene is not impressive because they could do much more with more than 4k of code?

This comment is an example of the type of negativity that is unhelpful and creates the toxic atmosphere HN is renown for, and I believe you know that considering you posted with a throwaway.


What about dokku...loads of plugins and easily extendable.... https://goo.gl/JzMstI


I have been playing with Dokku lately. I ran into some problems with the Dockerfile mode (creates tags like myapp:latest but then tries to start dokku/myapp:latest) and the CLI not parsing arguments correctly (had to put extra " chars in strange places). Perhaps the Procfile mode is more polished. Would like to know if there are any alternative single-host PaaSes out there to use for side projects.


Did you create github issues for these? Dokku is an active project that gets a lot of attention. IMO this is currently the best solution for small scale projects.


+1 As one of the dokku maintainers, I would love to see any random issues fixed. Feel more than free to open an issue on our tracker[1] and I'll be sure to comment.

FWIW space processing in command line args is a bit... difficult given our mode of transport (ssh). This is something we're thinking about fixing somehow, though there isn't a great solution yet.

[1] https://github.com/dokku/dokku/issues


Or use convox https://convox.com/


Dokku is more complete, and works more or less just like Heroku. It's written in Bash and uses Docker for containers.


I work on the fringes of what is, arguably, a Heroku alternative.

Heroku does slightly more than stage and place apps, guys.


Am I the only one who noticed `php -S` is used, which is a debug server, not intended even for testing purposes?

One cannot seriously consider this for anything except a proof that basic utilities like zip, netcat, supervisord and php can be scripted with a higher-level language to hack together something that somehow works.

That being said, I like this cool hack.


I would add that when you use a framework not sure if the 100 lines actually counts


Is this real or ironic?


First one, then the other.


Hmm, but this only runs PHP projects if I understand the code correctly.


https://gist.github.com/igorw/1d67f422689017e814a8#file-app-...

Is it possible to craft a zip file that will write data to parent directories, or an explicit path?


Who cares about a possible directory traversal when the entire purpose of this is to run arbitrary code?

It doesn't appear to attempt to sandbox the uploaded code at all. This is obviously not meant to be exposed to untrusted parties.


unzip intentionally prevents such from happening. So while you could make a .zip file that intends to do that, you need an unzipping tool that would actually allow it.




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: