Settings

Theme

A Docker-inspired Heroku clone in 100 lines of PHP

gist.github.com

60 points by igorw 10 years ago · 33 comments

Reader

rand1012 10 years ago

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.

  • diggan 10 years ago

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

  • gkoberger 10 years ago

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

    • mbreese 10 years ago

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

  • georgestephanis 10 years ago

    In only 100 lines of PHP!

    Requires Symfony.

    • dangrossman 10 years ago

      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.

    • MichaelApproved 10 years ago

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

      • ihsw 10 years ago

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

        • mod 10 years ago

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

          • aikah 10 years ago

            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.

            • Gigablah 10 years ago

              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.

              • aikah 10 years ago

                > 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?

                • Gigablah 10 years ago

                  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?

        • Killswitch 10 years ago

          But it's not requiring Symfony.

    • mschuster91 10 years ago

      > Requires Symfony.

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

  • mmanfrin 10 years ago

    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.

khwhahn 10 years ago

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

  • simonpantzare 10 years ago

    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.

    • infecto 10 years ago

      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.

      • savant 10 years ago

        +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

  • matthewcford 10 years ago

    Or use convox https://convox.com/

kenshaw 10 years ago

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

jacques_chester 10 years ago

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

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

synchrone 10 years ago

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.

guillegette 10 years ago

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

tylermauthe 10 years ago

Is this real or ironic?

deepflame 10 years ago

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

pavel_lishin 10 years ago

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?

  • tlrobinson 10 years ago

    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.

  • CaveTech 10 years ago

    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.

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection