
A Docker-inspired Heroku clone in 100 lines of PHP - igorw
https://gist.github.com/igorw/1d67f422689017e814a8
======
rand1012
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.

~~~
georgestephanis
In only 100 lines of PHP!

Requires Symfony.

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

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

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

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

------
khwhahn
What about dokku...loads of plugins and easily extendable....
[https://goo.gl/JzMstI](https://goo.gl/JzMstI)

~~~
simonpantzare
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
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
+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](https://github.com/dokku/dokku/issues)

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

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

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

------
synchrone
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
I would add that when you use a framework not sure if the 100 lines actually
counts

------
tylermauthe
Is this real or ironic?

~~~
Perihelion
First one, then the other.

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

------
pavel_lishin
[https://gist.github.com/igorw/1d67f422689017e814a8#file-
app-...](https://gist.github.com/igorw/1d67f422689017e814a8#file-app-php-L49)

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

~~~
tlrobinson
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.

