 Extensible integrated workflow solutions for all kinds of apps. I think that the next question that you probably have is something around that So dive a little bit deeper So I was actually doing this presentation the other day putting everything together and I stumbled on this blog post by Jeff Geerling who I think works at aquia And he had done a really good job kind of describing what the perfect local development environment Has the features that it has and these were the nine ones that I kind of extracted from it If you were to put MAMP up here, you could cross some of these off Possibly maybe not But you know usually one Technology has a couple one has another but these are the these are the things that you would want to have if you wanted to have a Perfect local development environment Calibox 2 as a CLI, which is nearly beta has about this many Simple and easy to set up as you might imagine are probably going to be in the GUI version, which we hope to release in a few months So that's kind of where Calibox 2 sits as like a local development product as an integrated workflow solution That has kind of all these features right now where it's at and when we're finished will have all of them so I Think that we've taken a huge step to solving the local development problem We're not quite there yet, but this is about how far we are now Many people here are familiar with version one of the product which was You know kind of a quick proof of concept that we developed quite a while ago Maybe about a year a year and a half ago and kind of put it out there to test the waters see what things are like It might be a good way to just kind of start there and figure out what version 2 looks like from there The easiest way to say it is that there's basically nothing in common between version one and version two That obviously doesn't contain a bunch of information. So I think I'll expand on that a little bit further so if you were to construct a not super Accurate access of things which is what I've done here. Just to give you a picture Mostly between you know vagrant on the left as I get more of a virtual a VM type tool It does do containers, but I think mostly it's virtual machine stuff and docker on the right Symbolizing just like containerization and container technology in general version one was essentially just a Very light wrapper around vagrant We spun up a virtual machine for you. We gave you a bunch of tools You've got what we gave you and if you didn't like it You know Version two is much more the docker side of things which means that we get all the features of docker and containerization Which we'll go into in a little bit greater depth so from a technology standpoint. This is kind of how things Stack up from user experience standpoint. You can also think you could you could think about call box Let's call box to CLI as just a really Superfast highly customizable version of vagrant for containers like a lot of the things that you do on the command line Are gonna be very similar to what you do with vagrant So just dive a little bit deeper This is essentially what the call box one architecture would look like You had to run on Mac. I was the only thing that it worked on it spun up a Vagrant VM from a puppet server Which is basically just an a booted 1204 instance with our calis-tac puppet set of manifests on top of it And then you just had one big monolithic server your entire infrastructure was in this one machine all of your tooling was also in This one machine by tooling. I mean things like drosh or note or whatever And you basically just put all your sites on top of that That entire stack so you had multiple sites running on one machine So each site was its own v-host essentially And then we had some nice integration with pantheon where you could pull a site down And I think it was fairly easy to use in the GUI as well Yeah, and then we gave you these things in v1 and again like we this is what we gave you if you didn't like it Then you were SOL Version 2 that's a little bit different. So this is the architecture in version 2 As you can see it's a lot more fun Fun is good So in version 2 you can run it on anything Windows Mac Linux Although on Linux, we've only tested it on Debian based distro. So if anyone has fedora or people are still using like slack ware Give it a shot. I guess So the architecture now is we still have a VM, but it's basically running boot to docker if anyone's familiar with that It's just a small lightweight VM that's based on tiny core Linux and We were running the docker demon inside of it And we can spin up containers and run certain kinds of apps on these containers So you could have a backdrop app that's running on nginx or an Apache PHP PHP app server with like Maria or MySQL you could have Express on some other containers You could have Drupal running, you know on a cluster of MySQL servers with Redis and memcache and other fun stuff And then with our plug-in architecture, which I'll show you later You can provide all these different connectors to different services so you could push and pull from pantheon or to aquea or or github Or to John Jenkins thing and do Jenkins things One of the really nice things about containerization is allows us to provide this kind of wall separation between The actual infrastructure that's running these apps and tooling that developers need so We don't put so if you're if you're using Drupal with drush as a lot of developers do Normally that kind of like sits like in your infrastructure like if you're running map It's just kind of like on your Mac if you're if you're using something like calis that usually you just put it into your web server And that's like where your drush is or you have it installed locally and you do the remote thing Which is also a good a good model, but in this model. We don't have any tooling in our infrastructure So our nginx cert while php app server or any of our other containers that might be hosting or running a Drupal app The drush does not exist inside that container neither does Grunt or any other set of any other set of tooling that you might be using What we actually do is we set up containers that run just are specifically designed to only run drush commands So we have a drush container and every single time you run a drush command it spins itself off It runs a container it attaches your app onto it. It runs the command and destroys itself This might seem somewhat excessive just to run a drush command But the model is actually quite nice because now you can write you can have one drush container one drush plug-in That can work on any of your apps, which is really nice So you have this ultimate portability and you don't really lose much in the process It also allows you to do fun things like you can have like four different versions of drush in this container If you want and you can kind of tell which one to use Which is pretty cool So much more complicated architecture, but it provides a lot more feature feature richness much more customization options And again more fun So just to go back to like hard numbers Calibox v1, which is most was vagrant based it took about 15 minutes to install it And that's basically like from I have nothing on my computer to I have a Drupal website V2 with with containers and some other things were able to cut that down to five minutes That's like downloading that downloading the actual CLI running the installation and then spinning up an app To compare kind of performance With v1 and vagrant we were using NFS for file sharing if you know anything about NFS and file sharing and Drupal It's not exactly the funnest thing in the world Which and that actually really slows down the web server performance quite a bit So we were implementing this thing that's pure to pure connector called sync thing, which is really neat And that out that actually gives us almost native performance on our on our server or on our containers So you can actually get like if you're just installing panoply like the time that it takes to run the batch API on v1 with six minutes So that's actually a good approximation for any real vagrant stack. That's using NFS to just two minutes on Calibox 2 which is a obviously a great improvement Again V1 was basically just a one monolithic web server with stuff in it v2 you can have a plethora of containers We have ones that we've written that you can use you can write your own fairly easily which I'll show you and Then we gave you these like approximately 20 tools and v2 basically you can use as many tools until you run out of memory Which I wouldn't recommend you try to do but you can't do that if you want and if you do that Please come and find me and show me that you've done it because I'd be interested to see what happens The other fun things are windows support So this whole thing works on windows now, so people who are using windows Congratulations, you now have a legitimate development tool that you can use And people who are on Linux again, we only tested it on Debian so far so Anyone who's using Fedora or some there some other Linux distra be great to see like what it actually does We're more than happy to provide support for it, but we'd like to have someone who actually uses that So one of the fun things about Calibox 2 as well is it's not Drupal specific You can actually run kind of whatever you want in it That's another advantage of having containers if you wanted to spin up like a mean stack and run express You could do that if you wanted to run backdrop you could do that Laraville Jekyll WordPress this other thing called Drupal whatever that is you could do that as well and The nice thing too is you can actually you can build these into repeatable kind of deployable prototypes So we've actually developed to that you can use right now, and I'll show you them back one for backdrop and one for Drupal But you could easily write your own So if you were a development shop that you know ran mostly Drupal sites and WordPress sites you could make an app You know that had the containers that you want to run that you're used to running if you're currently using like puppet Or chef or Ansible or something you can easily use those those manifests and transit them into containers And put them into this And if we can also you can also add additional function functionality with our Plug-in layer, which I'll show you about as well So if you had a workflow where you for example like pull your sites down from Pantheon and then push them up to Get hub to do you know Travis or something you could write that? Very small app it'd be like less than 300 lines of code Probably you'd have to build the containers and then you can deploy that to all your devs And that's what they use which is pretty awesome, and for right now When we have the GUI out you can think about how powerful that will be where you can have your devops person go in and do this And then the callibox GUI becomes kind of your deployment mechanism for all your infrastructure and your tooling and whatever So again, yeah, so one of the really fun things about callibox is this plug-in system I think this is actually what gives it quite a bit of power So almost everything in callibox the callibox to CLI is customizable or over rideable or extensible I'll go into like kind of specifics and show you that a little bit later But just give you a kind of idea of the breadth of the kinds of things that you can do is there's a it's Callibox 2 is a Node.js application So there are lots of events that are admitted that you can lock into and tap into We give you access to quite a bit of utilities to spin containers up and down and do that sort of thing So with this you can add like extra commands to the CLI you can add integrations with other things and You can do that sort of that sort of stuff You can build these apps that I'm describing we actually built the container engine as an interface So if you wanted to actually try to do this with Rocket or LXC directly you could actually write an implementation for that so we just chose to do Docker because Well, you already know so Yeah, so here we go. So this is the container. This is the interface. I was just describing we implemented Docker You could implement other things if you wanted But we just chose Docker because it seems somewhat ubiquitous right now although who knows what will happen Things are moving quickly So that's what we're that's what we're using for right now. That's the back end of pretty much everything It's based on the boot to Docker project if you haven't used it We give it a little bit more of a of an oomph for developers It's kind of not super useful for Drupal out of the box And all this stuff is open source. It's on our github Which just get github.com slash Calibox there's like 30 projects everything that I'm gonna talk to you talk about right now Is on there somewhere either as a repo or in documentation? We also have API docs and all this other fun stuff and it's all accessible from there So if you are taking notes that is the probably the most important thing to write down So what does all of this crazy talk mean? It means these five things that if you that this technology will save everyone tons of time You can finally use the tools that you deserve map is That's really all I have to say So, you know It's it'd be great to you know use use the news modern tools for our local development just like we do in our production Speaking of production with Calibox to you can actually achieve somewhat close to production parody If not complete production parody depending on how you go about doing it This allows you to standardize your team and your tools and your flows and of course It's fun to use the latest and greatest tech and not things that were invented in the Bronze Age of the Internet Again, ma'am. So this is my Like I guess metadata slide that you're not supposed to see that reminds me the things that I'm supposed to do So let's bump out of this and actually start to do some fun stuff And let's check to see how far this timer is good Cool, so that's good. That's always the boring part of everything So let's go in and actually try to do stuff Can all the people in the back actually see this kind of or no? Can I get a is that a is that a power to the people or a yes? Yes, or power to the people Like once Twice Maybe three times a lady Is that good? Okay, so I Call a box is an npm package So I'm not gonna install the whole thing from scratch, but you would just do an npm install global call a box to get it I already have it Here's some fun commands that we give you again I'm not gonna go through all these because you can read and you can use this thing So I'm just gonna kind of get it right to it, which is creating some some apps that we can run These are these two apps backdrop and Drupal these are two completely separate projects that exist that you can So this is you can implement kind of your own if you want and I'll show you as we spin these up I'll kind of show you what these look like so you can get a sense of how easy that that is So yeah, just to go through again real quick actually like so a lot of these commands are You know things that you're used to kind of seeing in vagrant space. They're very similar So let's just start really simply with a kbox create and we'll create a Drupal 7 app like this Actually, let's do this first So for any command you can pass in flag h to get all the options So this gives you a sense of the kind of things that you can do with this command when this command is over what you'll have is Basically two containers a PHP app server container and a web server and a in a Maria DB server And these are kind of the options that you can that you can give it What version of Drush you want to use the PHP version you want to use Whether what I build from a local Docker file or not all sorts of fun stuff If you don't pass these things in the command line will ask you because it is considerate So let's go in and actually do one of these fun things Drupal And I'm passing in this flag I which means just to automatically install it after I create it So what will this app be called? Let's call it awesome Then you get some nice options like what major version of Drupal are you trying to build an app for? I'm just going to do seven And it'll give you some nice options like oh what versions of PHP do you want to use? It'll give you the default probably best version for what you're running So if you put Drupal six in there, it would give you five three So you can choose that and then again you can pick a drush version. We'll use drush six for this example and then just some other fun stuff like my git name so I'll do something like this and But you didn't know that this is email So we can see what's happening right now is we've actually pulled in five different plugins that we use on this app I'll go through those in a little bit And now it's just pulling some containers from the Docker registry. I've actually already pulled them So they're just going to come down really quick And when this is over we'll have a bunch of containers to run our app Which will be exciting and as this is going on it will only take a few seconds I'll just go in and kind of show you what an app looks like so I created this awesome app This is the thing that I just created the architecture of the app is I wish I could make this side thing larger But maybe I can't but this is this is big though. So that's good So the essence of so an app an app is also just a node project And it's it's main meat Well actually so it has a good normal package. Jason. These are where you grab where you can grab specific plugins I'll go into plugins a little bit more in a second But the main the main action is in this cowlbox.json file This is where you can tell it all kinds of fun stuff For example, it's name the name that you want the plugins that you want to implement again I'll go into that in a second. There's this shares ignored directory I can get into that in a second as well, but here's kind of like where you get to the real the real awesome awesome sauce So here's where you can like specify your drush version your PHP version This actually allows you to inject press flow settings We do the database part for you But if you want to add like additional configuration and stuff you can do that It also will inject backdrop settings if you're using for using backdrop Here's again the email stuff that we put in here and here's the real fun stuff. This is the actual This is the actual like manifest file. I guess you would call it. This is where they contain This is the containers that we're grabbing and using There's just two right now this DB container with the has Maria and this PHP app server container So you might ask where do these things come from which would be a great question? And I'm here to answer it which is that they come from the Docker registry right now We've created our own PHP app server We've created our own Maria DB server and by default this will pull from The actual repo is on the Docker registry It's Calibox slash PHP app server and then the version of Calibox that you're running as the tag However, these are all over rideable. So if I wanted to do like You know Bob and like my FP is front page 98 by the way if I wanted to like load my front page 98 web server You know tag stable or maybe Latest would be more fun E You could do that as well or for example if I wanted to add some addition So this is like a very trivial example of like what a containerized infrastructure for Drupal would look like But I wanted to go in here I could also add solar or reddus or whatever and pull those containers down as well So you can kind of put whatever you want in there it doesn't and sometimes you can put seemingly arbitrary things in there in the On our github pages a Calibox app examples repo and in that repo There's a an example of running a Drupal 7 app with a hip-hop virtual machine Which you haven't done is kind of fun or haven't done before is kind of fun. I would recommend you do it I didn't know how to set up the hip-hop virtual machine at all But I found some guy who did and he had a docker container and I just literally put his thing in there I made a couple of small tweaks and it just worked So you have access to a lot of power with this one of the other really fun things about this too is if you If you're if you are almost 100% perfectly happy with our app server But not 100% perfectly happy with it. You can actually make small changes to it or use your own and Actually try it out. So the dockerfiles for all these are actually in the repo for the app itself So I could go in here and say yeah, you know what? I think that I think that the Calibox Maria DB zero seven zero app You know DB server is pretty swell, but what I really want to do is add, you know Vim to it to make it the best app server or the best DB server ever You could do that if you wanted and then Restart your app or rebuild your app with this build local flag passed in and instead of pulling from the repo It would actually Jen it would actually build it from this file So you can go in and you can play around and do all sorts of other things So if you wanted to use Calibox only to try out docker containers and multiple and orchestrate them like you could do It just for that, although I think that would be somewhat missing the point However, feel free to do whatever you want to do of course So that's basically the architecture here. There's this other small key here This basically just lets our reverse proxy, which is Apache. No that this is an app This is a a web server and to like redirect things to this machine for this app So that's all good and fun again, you could add additional containers. You can do whatever So this is already done. So we have an app that's been installed And we go into we called it awesome So now if we just do a kbox start this will actually spin up all the containers to get our app running So there's more so it actually will spin up more than just the app server and The DB server it'll also spin up all these support services and instantiate sync thing Which is the thing that will actually sync your code back and forth There's actually four containers that run by default just to power the whole magic of Calibox One is Apache which functions as a reverse proxy. So that way you can like actually type in, you know, my awesome app dot kbox And have it be directed to the correct container And then there's two other two of the things DNS masks just to handle the actual resolution If you've ever tried to do anything like this and you've managed tried to manually manage Etsy hosts That is like tantamount to suicide So having something like DNS mask is actually quite nice And then we have two special things sky DNS and sky dock which are darker specific containers And those four things are actually completely over rideable too So if you wanted to build your own custom version of Calibox and have engine X as your reverse proxy or just a random Container that prints out. Hello world forever You could do that. I think that second use case is probably what a lot of you are thinking already On how to use this so at this point we have a container. We have two containers running And we have a we have infrastructure that is prepared to receive a payload of Drupal awesomeness Which we will grab and put in there from some place So I'm gonna grab just the pantheon drop seven repo The reason why I'm doing this is because we have a plug-in for a press flow settings And this way we don't have to do any settings dot PHP management Which obviously is also nice So what I'm gonna do right now is run kbox again and what we're gonna see is that we get all these other fun things Inside of this app So we have we have commands that are specific just to this app Plus the other commands that you saw before Some of the ones sorry. I can't actually read this because this thing is in the way, but So you get extra stuff that are provided by these plugins and I'll go into the plugins in a little bit So things like drosh things like get our sink other fun things So we're gonna use the git plug-in really quick So which will be kbox git clone. I'm gonna do depth one because we're in conference Why I finally want to download the entire history of Drupal? And we're just gonna do this so what what's actually happening when this happens is We're spinning up a container. That's only purpose is to run this git command. It's attaching our app onto it It's actually pulling the code down and then destroying itself So you actually don't want so one of the nice things about this is we actually there's actually nothing that you really need to put On your computer everything is just inside of the VM including all your tools that you normally use Which actually becomes quite nice because if you extend this model to things like grunt or note or whatever Now you have a way to make sure that everyone literally is always using the same thing in the same environment Which is obviously gonna be awesome for you. So we have Drupal Now let's go to I guess awesome awesome What's the name of the thing awesome dot barely didn't read this awesome dot kbox and Here we go. Here's Drupal. Yay Drupal So, yeah Yeah, I mean the beauty of Drupal should never be concealed of course It does a good enough job of it itself. I suppose So yeah, let's just go through here. We're just gonna install Drupal 7 really quickly You can see that this is like fairly snappy to do which is which is pretty nice and then We can just bounce around and try some things out really quick. So you can see that there's fun things happening So let's just call this my awesome site And I'll put my email in there We'll make a secure Admin username with password that is also very secure I think that we're in the US And we don't want to receive email And I don't know what that is And yeah, here's Drupal out of the box and you can see that it's nice and quick much faster than even what you might expect for Something else that is local other unspeakable things Um What's that I think it could begin and end lots of things but that might be one of the choices So yeah, so let's just go to our Rex we don't need that Let's just go to our PHP info file real quick, which is somewhere in here Right. So here's our PHP info file This will just tell us some fun things about our instance And let's just figure out how we can go about maybe changing some of these things really quickly for fun um So as you saw before in our app example, we have this nice Version thing so we could switch that out and rebuild the app really quickly and get a different version of PHP So if you have Requirements like that you could do that Which is pretty fun the PHP app server that we have actually contains a bunch of versions of PHP inside of it So you can kind of specify whichever version you want it'll pick it'll pick the one that you're using The other fun thing is we actually have almost all of the configuration That's relevant to you for your services exposed to the outside so in the actual code directory here you get things like your APC config or your PHP I and I or your www.conf which is the FPM pool And your Drush alias and you can go in here and change a bunch of these things and rebuild your server and get that Stuff to take really quickly So you don't have to like actually ssh into anything and like dick around with Vim or nano or whatever those things are that crazy people do and And do that you can just change it in like a nice pretty thing like this on your Mac using the things that you like to use So let's do that really quickly. Let's say that we just like really need a little bit extra from our APC Let's go in here and you know, maybe this is a lot and we don't need that much So let's just bump it down a little bit and then We really think it's important to inject some special environmental variables into this Because we think that that's gonna make everything better So we've done this and now we're going to do this fancy kbox rebuild command and again as I was saying before you could actually You could actually pass this build local thing in so if you wanted to oh actually sorry We actually didn't even switch out this version of PHP either. So let's let's say we want to downgrade because We do So we'll do that as well but if you did this rebuild command all these things will take but you could also go in and use that build local thing and And do an add your vim in or whatever you want to do So you can rebuild in lots of ways So it's really easy to change stuff around and it happens fairly quickly because we're not rebuilding monolithic VMs from Puppet manifests or whatever people are doing these days So yeah, so let's do a kbox rebuild and what we'll do is it'll stop everything And then it will pull it'll destroy all the containers that we're running except for the one that has our data in it And then it will re spin all of them up with all these changes in place So when this is done, we should be able to re go to that info file and it will have PHP 5.3 and it will have The different settings and all of our stuff and it's going to be nice and awesome And while that's happening, I'll go in and show you kind of what these plugins look like really quick So plug-ins are ways to extend extend cali box. In fact, we dog food the entire system for the CLI itself So I'll just show you a really brief example of one You can add them to all of your apps really easily. So for example, we have a drush plug-in We have that same drush plug-in is what we use for triple six triple seven triple eight for backdrop We have a git plug-in you would theoretically probably want to use that for all of your apps no matter what you're actually doing Whether it's a node application or a PHP application or what have you? And they're very simple So I'll just show you a brief example of the git one do not be intimidated by a lot of those files They're mostly just like for CI and testing the meat is actually just this index dot JS file And this docker file the docker file basically just defines a container and this container essentially run This container essentially functions as a git executable itself So even though it is a container and has a service inside of it you can kind of think about it just as a git executable So that's kind of how that works the rest is in this index dot j s all plugins have this sort of structure where you get this kbox object and the kbox object has a lot of fun stuff in it and All that you can find at api dot calbox dot me Which is nice. You can see the kinds of things you'll have access to Certain config the actual engine itself so you can spin containers up and down The event run time so you can actually hook into events. So if you wanted to like say print a Beatles lyric after your app gets spun up because it really just gets you ready to do your stuff You can do that And if you do I would submit that I would suggest that you submit that as a cowl box plug into the npm registry So other people can get that functionality as well Yeah, so api dot calbox dot me that you can get that through the github repo as well But all the things are documented so you can start to write your own fun stuff We'll go back to the git thing, but it looks like this is done. So let's oh We actually have to start it also. So we'll start that and Then go back to this this thing So that kbox object all the stuff that was in that documentation is this thing right here This allows you to get a bunch of a bunch of stuff. So the structure is pretty simple There's only like a hundred lines of code and this is what allows us to spin up and run git command So for a hundred lines of code, we have an app We have sorry We have a plug-in and a container that can run git commands on any of the apps that we want to have Which is super fun and super awesome, and it's very easy to do So for example when we were looking at that list of tasks before the command line print out We had that git command that we could run this is this is that that part right there We have a framework that you can use this task framework. We can easily add other commands So we added this git command and basically just runs this run git command function which we define further up here We also do some fun things. So like here's like the events system that we're using there's this post install event So when you install this Drupal app, it's also saying oh, hey like I need this I need this git container also like it's pretty important So grab it and install it for me as well so You can you can actually get the tools you need on all these apps too. Here's the actual run engine run Which is accessible in all the plugins. So here's the actual magic that we're happening Here's the git username and get email that we entered earlier. We're sharing our SSH directory So we can get our keys We're sharing the data container which actually has our code and stuff in it So every time this every time this thing runs it's just running a git command in the container with all the stuff we need as we showed you when we pulled down that that Drupal code earlier So let's keep going on Let's see What are we doing? Oh, yeah, we have this app So we've restarted this app and now if we refresh this info page We can see that the version has changed which is nice. We can see that we boosted our APC up by one I want to add a bookmark What's happening? There we go Yeah, so we can see the APC went up by one unit of Meg or I guess two units of Meg. That's fun And our PHP info Sorry, I guess we changed our memory limit so we can see that that got bumped down and then we Added that really awesome environmental variable so we can all be on the same page about the awesomeness factor Which is face melting So it's really easy to go in and like change your stuff around like we've provided same defaults But you can go in and you can you can change these things really easily It's a lot easier than having to reprovision a whole machine You can do it in a matter of seconds, which is obviously helpful So let's let's continue on and maybe look at this Drush example really quickly. Oh, actually this so this is This is a very very simple example Very small amount of code this essentially just adds press flow settings and backdrop settings Automatically to all the apps and containers that you have so that they know that they don't need to use settings on PHP So you could use this for any of your Drupal apps as well The drush example looks very similar to The git one it's a little bit longer, but not that much longer We just define a new task called drush, and it does this run drush command thing With the drush container itself which looks essentially like this Which is we actually just copy from the PHP app server itself, which means that those two things are exactly the same So when we change that PHP version in our config and we run a drush command We know it's the same version that Drush is running with the same version that our app server is running with which is obviously helpful and can alleviate pain down The road so we're just grabbing the app server container and adding drush things to it And that's what we're using so this actually has four versions of drush in it For major five six seven and back drush, which is like a hacky thing that sometimes works on backdrop So so yeah, I'll just show you like running it running a so if we're in the app here, and we just do like a kbox of drush status Now we don't have to have drush like anywhere on our stuff And it'll actually run and give us our our stuff as that we're running it natively, which is pretty sweet We can also go in and see that we provided a Some options as well So if you if you really wanted to just like try things on different versions like you could do this sort of thing So if we just do drush status again and pass in drush version equals five This should run with drush five now instead of drush six which you can see there is five dot eleven So this is kind of the power of having these portable containers You can run these different versions of different things and they're super portable and you can put them kind of wherever So lots and lots and lots of power in this sort of this sort of architecture So you can imagine you know if you're if you're a Drupal shop or an organization That's using like vagrant or something else like you can really simplify a lot of your stuff You can deploy it faster. You can change things faster And benefit quite a bit and of course your your actual development itself Will be a lot faster as you can see by just bouncing around here quite fast The last thing I guess that I can show you that is also fun is So inside of this inside of the app directory. You also get this code Directory which is actually where your Drupal code lives. So this is synced through really quickly So if I were to go in and just edit like Where is it index up PHP and just say like Something like this Right and maybe purchase sublime Don't tell anybody You know and then kick back to our Drupal app we should see that that is now the robots have taken over So that's just how you edit your code. So what's actually nice about this or you can think about this In a deployable terms like now you have an entire repo that has not only Your app configuration in it, but also your code So you could actually put this in github or somewhere somewhere else I don't know a bit bucket or whatever other people do. I don't I think it's just github really I mean but So you could put it online and you could basically have all your developers just grab it all they have to do Is pull it down run kbox install kbox star and they have their they have their app with all their stuff and that's great So you could do that as a deployment kind of like strategy for right now, which I think is pretty neat So that's kind of the meat of it I think time is starting to dwindle a little bit, so I think I think questions might be nice So I'll just kick back to the prezzo. Oh, yeah, let's talk about things to come Yeah, so this is basically everything that we have for right now I would consider it an almost beta for the CLI These are the things that we still have left to do that will make this the solution to all the local development problems So these are the things that we're working on for the next I guess half a year Which is to do push and pull integration with Pantheon and Microsoft Asia and WordPress support for people who are using WordPress also which may be some of you and maybe not be some of you So one of the big things that we had don't have we haven't done yet Which I think is gonna be a real awesome real piece of awesomeness is this idea of pushing and pulling So when you create an app you also say oh, yeah I want to create this app with all these containers and all this fun stuff But I also want to get my site from Pantheon or I want to get it from aqua I want to get it from some other place and you can pass in those options as well And it will pull the site down and then build the whole thing for you right now You have to like pull your code down and set up your database which is kind of a pain So we'll be we'll be providing that sort of thing and those will all be plugins too So if you're an organization who has a weird deployment sort of scenario You can pull from multiple places and push to multiple places for example of Calamuna We have standardized when we use basically Pantheon for almost all of our stuff But we push a lot of our stuff to GitHub so we can do GitHub flow and use Travis and that sort of stuff So at some point we'll create a Calamuna app Which we all use internally at Calamuna and that will have like all the containers that we use It'll have solar and red is the things that we're used to having locally And then we'll have integration to pull sites from Pantheon and push to GitHub and that will be the Calamuna app And actually speaking of apps I can show you what those look like really quickly because those are all Customized customizable as well, so maybe I'm just going to get a page because my sublime seems weird so So when we create this Drupal app See I think it's maybe we'll look at the backdrop one So this is what enables us to just do a backdrop create or create backdrop really quickly It's a small plug-in. It's a plug-in like any other plug-in and it basically just contains metadata, which is You basically just define certain tasks like hey I want to create this thing called back to this backdrop task and I want to like have these be the options that are available to the user and Then eventually and then you basically just build a skeleton of the app In this apps folder Where is it? back Here so this is what contains the actual like the package out jason and cow box out jason and the config and the docker files That we saw in the example That's basically all you have to do like I was able after I made the Drupal 7 app I was able to make the backdrop one in like seven minutes Which is pretty nice and if you're you know an auger shop that wants to like customize these things It's actually quite easy you can override all the stuff in the cow box config With a flat jason file, so all you would need to do is go in here This is just a list of the config. Let's actually oops K-box config less So here's our config So all you would have to do is actually sorry this gives me a lot of config because I'm inside the app So let's bounce out of it Let's do this There we go, so you can actually see up here here the apps that we are actually like using That's the github project that we're pulling from it's actually from the npm registry, but you can make your own You know cow box app, you know for kitchens or whatever and you could Put that on github create a node project with it and just edit this Or override this file with like your app and your version and it'll pull it down And you can you can spin up your app sites really easily so you can see the kind of power that this model has So that's just one to show you what the apps look like really quickly because they're quite simple So yeah, let's get back to the roadmap really quick, and then we'll do some questions Yeah, so the things that we're trying to do Next our integration with pantheon so you can push and pull sites to pantheon when you create these apps Asia WordPress and we're hoping to have all that stable version summer 2015 so not very far away We're actually very close to having that already So that's the exciting thing That's gonna be like DevOps Zen I think for everyone who's like using vagrant currently or any command line tool I think this is gonna be a much better way to do our stuff and faster way to do our stuff And then the big thing after that is the is the actual UI So this will be what we will kind of basically the calla box 2 version of what the v1 UI was And this is where things are really gonna be very very different This is when a DevOps person can write all can use calla box to write You know the kinds of apps and tooling and stuff that their shop needs and then they can Edit that config file get all that get all the stuff that they need and deploy all those tools to all of their people With the GUI so they don't really have to do anything You can standardize everything really easily and of course you have a cross-platform solution that all your developers can be on It's not tied to anything. It's not Drupal specific. You could do it for whatever So I think this is a win for everyone and that will be in fall 2015 If you contributed to the Kickstarter last year first of all, thank you very much and second of all like we'll have Betas of this GUI available for testing before this if you're wondering So again just to rehash these five things You know we're very close to solving this problem for people We think it's gonna be much much better than map much better than vagrant much better than anything else That's out there. It's gonna be the thing to use. I think it's gonna be a big deal And if you're interested, that's right. Yes. Now you have the power Thank you to Andrew Malis for finding this gift somewhere and If you're looking to hear more or just to figure out whether like your organization is maybe ready to start moving over to some Of this tech set up a demo with us if you're here at the column We can do it at the con if not we can do it some other time in the ether With the Google Hangouts or the other things that the crazy kids are doing And that's basically it So there's any questions. I'd love to answer them Hopefully there are or should be if not, I will be very disappointed and I will you will all be dead to me forever Yes, there's a microphone back there if you want to use it So let's say you switched the recipe down from 5.3 to 5.5 and PHP and you've made some APC hacks And then do you go down to using off-cache now? So what happens with those settings they get discarded or you keep that container, right? So if you were right, it's a good question. So if you were to if you were to go into So first of all, this is this is fun project that we did to actually enable us to build this app server Which might be also just useful for casual DevOps people or park or DevOps people Which is this PHP brewer project, which is also on the call a box to get hub repo And this is essentially a PHP app server factory, which lets you build from source different versions of PHP Sorry, I can't read this like so small on my computer. There it is PHP brewers. This is what we use to actually build the app server. It's really quite nice It's it's basically a docker into container that spits out PHP versions. There's good documentations easy to use You can build kind of basically whatever versions of PHP you want You can build more than one they all kind of sit together then you can use those in your other containers, which is pretty nice So that's what we're doing. So the way that this is set up is if you were to switch from five three to five five We're not using APC and five five reason off-cache We don't actually have any off. We don't have an off-cache config file right now But you could put one in there and have it kind of work the same way But by default right now, it'll it'll just disable There's no APC extension for five five in our app server. So it just doesn't get loaded Off-cache gets loaded instead of APC Yeah, it's a good question Yeah, nice t-shirt So you showed how to do like a new Drupal install What would you do if you had an existing code base and an existing database that you wanted to set up using this right? That's a great question. So John who's sitting right there wrote this nice quick start guide. That's on our wiki That shows you how to get to how to currently import a site manually into Calibox I showed you how to do the get part of it. That's fairly easy But the DB is actually exposed to the outside world and you can actually access it with like sequel pro or whatever So that would be the way to get the DB in there, but Yeah, Calibox slash Calibox in the wiki. There is a quick start guide Somewhere there's actually quite a quite a nice amount of things in here for anyone who's interested in learning more But yeah, there's a quick start guide This basically will tell you just how to get like a for example like a pantheon site into Calibox 2 But this should be applicable to many other many other use cases as well. Hi. Hi Well, first of all, I wanted to say This is so cool. You're so much ahead of anyone in the field and I run into your session by Really just an accident because it was named something not related to vague and block your devil Else, I thought it's a workflow like content workflow thing My question is you mentioned that This will be cross-platforms of Windows Mac and Linux. I'm sure you covered that too much So can you elaborate on the what is being used for Windows and Mac and specifically around? syncing code like sync folders sure and the performance of those solutions, right? Yeah, sure. So Cross-platform it's a it's a node. It's a node module. So it works kind of just that way Command line should work on Windows and Linux. We've tested Windows 7 and Windows 8 We've tested debian and Ubuntu. We haven't tried fedora yet It seems to work pretty consistently on Mac as well So you could you can you can follow the install steps in the wiki for Calibox the command line of Calibox And it should just work on all those things Of course like we developed mostly on Macs So there likely are going to be more bugs than the other things But we're waiting for people to use it and find them so we can try to fix them For the GUI side of it because this is node We can actually build an angular app on top of it with node webkit And we actually have a prototype of that that already works on Windows and Linux and so the GUI will be this node webkit app It'll be a dot app file for your Mac It'll be a dot exe on Windows and there'll just be a bin on Linux So that will be how those things work regarding sync thing, which is what we're using for The actual file sharing we try to implement with NFS first and it was just ridiculously slow like depressingly slow We're just like we can't use this. It's we can't go up there in front of people and show them this because it's gonna It's gonna be embarrassing That's kind of how slow it was so we looked around for a bunch of things. We found sync thing It's a product that's also still in fairly heavy development. So there are some problems with it And is moving ahead pretty quickly But the nice thing about it is you're not it's it's syncing. It's not sharing So you're not mounting any folders You don't have to do what NFS touch was just like actually check to see if a file has changed every single time You do a read which for Drupal and I'm out of like a ton of small files is really slow It actually just pulls for changes every couple of seconds I think it's like two seconds two seconds and then we'll sync the file over so it's actually It's not so you don't get the change as quickly as you would with NFS But it's virtually the same unless you're one of those people who's just like tab tab tab tab in which case Just like chill out Um But the real nice thing about it is you get basically native file system performance for your web server So you can just develop really really quickly so anytime that you might lose and waiting for the thing to sync you're gonna make up Like almost instantly just by not having to wait 45 seconds for your modules page to load or five minutes for your like features to Diff themselves Which you know it sucks basically so what are you using for the Docker hosts? So the Docker host is is boot to Docker So basically what we when cowlbox installs it'll install boot to Docker Which is just just tiny core Linux with the Docker demon inside of it running in virtual box So that's what the actual infrastructure is all your containers live inside of there Nothing is really changed on your computer at all And that's what we're using for the Docker demon. So when we run commands, we're just we're hitting the Docker room We're using the Docker remote API hitting that stuff and that's how the magic happens. Thank you. Yep Hello Indeed um, can I make your boot to doctor use parallels? And the same thing in solution you've implemented is that easy to reuse elsewhere because that sounds cool Yeah, I think so. I mean we we actually um, I think at some point we're probably gonna publish We basically just build a rest API wrapper node wrapper around it at some point We might want to just publish that for other people to use do that. It is yeah, actually I saw you ping I saw you on some of the issue queues Yeah, it actually so NFS, I mean is much easier to implement It's very simple Sync thing was basically a giant pain in the ass to implement, but the benefits. I think made it justified Yeah, I mean I use it on my computer. I never thought of using it for development. Yeah, we actually we would ping The Borg as we call him about it. He's a guy who like runs a project comic. Yeah. Yeah, I'm age and And asked him, you know, hey, we're using it for this He's just like this isn't really the use case that I had in mind, but I guess it'll work Like good enough for us. It's not a fast. So so yeah, cool. Thanks We're actually currently using where I just started using boxing. Okay I'm just learning about this setup, but it looks very similar to this I was just wondering if you can sort of compare or you know, give me some advantages or disadvantages Sure. Yeah, I'm not super familiar with like the actual details of boxing But they are that I think that they try to solve some similar things. I think that are I mean I think our thing is obviously better I don't know to what extent they've implemented container tech in boxing at all I think they do that to some degree, but I'm not 100% sure if anyone knows just feel free to Like shout out also I'd be interested to see like how they handle the syncing and how they how their architecture is extensible like ours like I think that the fact that we have this plug-in system and you can basically add whatever functionality you want at any time It makes it just a lot different than just a straight-up like orchestration tool like something like figure or even like docker compose promises to be I'm sorry. That's not like a super great answer But that's I think that's the most the most honest I can be with you without just lying about boxing Unless you want me to in which case I can do that as well Hi there. Hey, um, so since this is for local development Version one you have to be online in order to create a new site on your local machine How does this handle if you if you don't have internet? That's a good question. I think I Think that it should work, but I'm not sure we actually have tested. Have you tested this yet? Not I'm not I'm not sure to be honest the way that the DNS is handled it might be it might I think that we'd use open DNS or to Google DNS server So if that's true, then we might you might need to be actually be online, but that's something that we could change So like when you spin up a new site with version one it has to go and download it from the internet's Right does to have to do that as well or do you have something? So if you're if you're just spinning up the containers and you've already downloaded the containers before I Don't think you don't need to have to be connected to the internet to do that because all those all those containers The way the docker works is it basically just like takes these diff these diffs of of images and that kind of piles them on each other So if you have all of them and it sees that you have all of them cached it'll just use what you have already So I think that probably should work Especially if you pass in that like build local flag in which case it'll just kind of like do that cool So I think that it should yeah Hi again, so the question is now that I have this so I can see that this is not intended towards production So how do we once we're done? Let's say making an app my teammates are done How do we take this image of kind of like get a puppet or chef recipe to put it on bare metal or put it on a BPS Is there any plans to we're doing that? Yeah, sure. Yeah, so this is I mean Yeah, this is purely for local only like it would be very bad to try to like put this like to run the Calabox CLI like on Linode somewhere and run your machines with it That would be very bad So there's a that's a good question I The first part of it is the deployment strategy for this is going to be what what happens when we do these push and pull plugins So for example like if you consider like a Pantheon app for example Like the Pantheon app would have an PHP app server MariaDB solar and Redis that the containers that Pantheon actually Uses and those would be very close to production, but they they're not going to be the same But they're going to be very very close And when you go to actually so if you were just if you were just making a site and you wanted to deploy it to Pantheon You would just do a kbox push put in your Pantheon name or whatever And it would just create the instance on Pantheon and push your stuff up And that's how your thing would get on Pantheon for example for something like Linode You could theoretically run if you had if you're using like Puppa chef it chef or whatever to build out your infrastructure And that's production ready stuff You could have all that stuff end up in docker containers and you could use those docker containers on calla box if you wanted In which case the deployment I mean you could write your own app that did the deployment for you as well But it might just make the most sense to have you go in that case you actually I guess you could use calla box to deploy your containers and orchestrate them both locally and for production Like if you follow the containers that you have our production ready, but that is not that is not the intended use case But you could you could do that I suppose You would just have to take your current manifests or recipes or whatever and get them To not generate VMs of the generate containers instead and then just put them into this as I as I kind of like showed Aaron Porter, I'm expecting a heckle at some point also Yeah, yeah, we were actually looking for Fortran developers, but you know couldn't find any Any other questions? I was gonna ask if you were being bought up by Verizon I'm not allowed to discuss that in public Good question. No The actual answer to that is no for anyone that doesn't know that I'm joking I think that yeah, we have time for one more if someone wants to just say something silly other than that I think we're we'll wrap up only no one wants to say anything silly Yeah, it's a good question. So if you if you go to calaminer.com. There's a calla box page Where you can sign up for a demo that will get you on the mailing list. There's also a Google group. What is that? No, it was some random thing Anyway, yeah, so if you go to the calaminer website, there's this calla box section Also, those clouds are awesome Tiago. I really like them. Oh, sorry then go to hell Tiago So you can you can request a demo and you can sign up for email There's also a Google group that you can sign up for which I think that I think just you can get some email like at calaminer.com and Yeah, down here request a demo so All right, I think that's it, but thanks for coming. I appreciate it Handouts at the booth come to the booth and get a handout the calaminer booth. I Don't know what number is it behind four kitchens