 Claventure, this is a talk about Lando. Administer your own Cloud City, I call it. You'll forgive the Star Wars geekery throughout, or maybe I'll just enjoy it. So I'm a partner at Consensus Enterprises. We do lots of Drupal development, back-end DevOps-y kind of stuff, and Lando's sort of of late been our preferred local development tool. So I thought I'd just sort of give you a bit of the story of how I got into it, kind of what I particularly like about it. If you're here, I'm guessing you're aware that there are a bunch of these tools floating about. Yeah, just kind of get into some of the details. So a quick overview. I'm going to share with you some of my assumptions and the stuff that I'm not going to go into detail about. I'm going to cover some Lando basics and sort of show you this idea that really it's just kind of a convenience wrapper over top of Docker Compose, right? We'll look at that a little bit. Then some customization stuff that they've got built in. How do I do a little more advanced stuff? And then a little bit of the workflow. So some of the some of the interesting pieces we've been working out about. How do we work with this thing? How does it integrate with pushing up to production? Stuff like that. And in spite of my, I don't want to talk about some things. Please feel free to ask questions. And I mean, just because of time, right? I could talk in detail about one particular thing, but I want to get into some of the details. So I'm assuming a little bit of Docker, Docker Compose, at least kind of a familiarity with the idea of containers and stuff like that. You know, get your workflow, an idea of what Composer is doing for us. Like I'm hoping that you folks are mostly sort of developers or, as I say, have some familiarity with that kind of workflow, right? Especially if you're familiar with Node.js at all. You like that kind of thing. I wanted to recommend installing Lando from Source. There's a bunch of different ways to install. They have like packages for all the different operating systems and stuff. It's really easy. I started doing this because they were having releases really quickly. Like every couple of weeks, there'd be a new one and I was finding it a pain in the butt to go off and find the new .deb package and download and so on. When I cloned there, Git repo was a matter of just fetching and checking out the new tag or whatever. And then you run a couple of node commands and you're up and running on the new version. But it's actually become really handy. I'm not really a node guy, but I've managed to sort of dig into the code a little bit. Having a copy of it on my machine that it's running from is a helpful thing to see what the heck is this recipe actually doing? So I'll show you a little bit of that as we go along as well. Okay, that's the install from Source link. So it feels sort of obligatory to at least mention some of the other tools out there, right? There's a whole host of them. The venerable Drupal VM, which maybe some of you have used over the years, right? It's vagrant based, but Jeff Geerling is actually doing a bunch of work lately. There's sort of early support for Docker built into Drupal VM. And that's kind of a cool use case. If you're a Windows developer, sorry, I'm a Linux guy. If you're on Windows, go for it. Run Drupal VM, do the Lando stuff inside of that, right? Then you have all of the power of all of these things. Also, Jeff's done tons of work building out like ansible roles and doing cool stuff with that, right? Like it's a good body of work. There's other things, Ddev, Doxel, you know, there's a variety of them that are doing similar stuff to this, right? Using Docker as the underlying thing and then building kind of a framework on top of that to make it a little easier to manage Drupal sites. In the case of Lando, one of the things I really like is that it's really agnostic. They started from a Drupal perspective, but like you want to do WordPress? Go for it. You want to do Node.js? Go for it. It's really kind of agnostic at that level, which some of these other ones are as well. And as I was putting this talk together, right, like I started thinking, well, I'll just talk about Lando because this is what I know best. And I started looking into the other ones and I started to realize like there's a kind of convergence happening in the community, right? There's a set of best practices around using Drupal for this stuff, starting to emerge. And that's really cool. So to this extent, it's kind of personal preference, but it also starts to feel like we're getting to the point where we could start to abstract and focus our efforts on some of these best practice things. And maybe there's some underlying tools that all of these guys could use that sort of set the groundwork, right? So there's a lot of stuff going on. One of the things that ran across as I was getting this is just very recent. Mo Schweitzman published a blog post about how they ended up using Docker for the Massachusetts government website. The team there had some familiarity with Docker and they ended up deciding he takes some trouble to mention some of these other ones that I just showed you. And he says, well, for us, it made more sense to just kind of vanilla, just build our own thing on top of Docker compose. And again, this put to me sort of points to this idea that we're starting to figure out like, okay, how is this tool really useful? And what are the kind of common things that we want to be able to do with it, right? So that's linked to the post. It's a really interesting read. It's a cool idea, I think. So good luck to them with that. And you if you want to follow that approach or whatever, right? I say, like I say, quick shout out. The other neat project I ran across recently that's, that's again, kind of extending this idea of what Lando is doing is the amazing folks have this thing called Lagoon, right? And they they've taken this idea of Lando as local development, but sort of set it up in such a way that what you're running locally is literally what you could deploy into your Kubernetes cluster, right? So you're now you're the difference between your site running on your laptop and the site running in production is almost nothing, right? You have the same container images. Is it still Lando or? It's not Lando is it's their own thing. Yeah, yeah. But it's again, it's like the local thing is built on sort of wrapping around Docker compose and this is what I'm saying, right? These same ideas are emerging across the board. Yeah. So so I'm really excited about this. I haven't had as much chance as I'd like to dig into it. But I think it's, like I say, it's sort of where we should be heading, right? So that's their site. Okay, so some basics, right? You get Lando installed. You want to start a brand new site. So this is all top half of this slide is is really standard, right? You make yourself a directory, you run this composer create project stuff. Now you have a Drupal code base. He throw it in git. Okay, I've taken the liberty of doing all that stuff for you just to avoid composer slowdown. I had most of the packages cached. But last time I ran it was a little bit slow. Then you do this Lando thing. And I've expanded here if you don't provide these, these options, it just asks them for you on the on the command line. So you can literally just say Lando and net, right? And I've done that up to that point already. So here I'm going to paste in my Lando and net. Clear that screen for you. And it it goes off and figures out from this recipe, kind of what the what the setup I want for this site, right? And that then creates me. Let me let me do these steps first. Then I throw that Lando dot YAML file, the config that it's created into git for myself so I can keep track of it. And I run the Lando start. And that's going to take that Lando YAML config file that I that I created, spin up the relevant containers that I need and do a little trick with this proxy container called traffic, which a bunch of these other tools are using as well. It just kind of sits in front catches the fancy name that they have. So that this chewy dot Lando dot site redirects through traffic and into my my containers. Sorry here. Right. So there's my now I can start installing. Now one minor hitch that might catch you the first time you do this, the the database because we're in Docker, right? I think this is triple seven triple seven. These are all just default credentials that Lando sets up for you. Usually your MySQL database is local. In this case, it's it's not local. It's in a separate database service container, right? So I call it database. That's how it finds it. So I can say saving continue and miss something. Maybe this is just Drupal. Oops, other one too. Oh, you're right. Good call. Thanks. Drupal eight. There we go. So now it's off and running, right? So that Lando YAML config file. That's it. That's the whole thing. And you know, that's sort of convention. It's relying on these ideas of recipes, right? So because I said this is a Drupal eight site, it makes a whole bunch of assumptions built in that's taken from this recipe Drupal eight line. And it assumes a whole bunch of other configuration about the Docker compose file that I want to generate, right? So when I'm saying Lando start, first thing it does it look is look at this and then create a new Docker compose file for me to use that to spin up the containers that I want, right? So that file lives in here or usually what I haven't followed exactly how this logic works. There's usually a few of these after you've been running it for a little while. You got to look at the the one with the most recent timestamp if you really care about seeing the the latest and greatest one. It's not necessarily by the numbers. I'm not clear exactly what they're doing there. But that file is 127 lines long. And like complicated, you know, Docker compose is cool and like easy to get into. But at that level, like all of the stuff that's built in there, you don't want to maintain that by hand, right? So that's the simple case. So I look at this, I read the initial docs, and I'm like, great, but most of the time, I'm not actually starting from a pristine Drupal site. Right? I mean, these days, I am because nowadays, I start a project and I know I want Lando right away. And so I start from that basis. But more often than not, I'm inheriting a site or it's something that's in brilliant production for years. And I want to bring it into the Lando framework, right? Well, it's basically the same thing. So this is this is the set of commands I run, right? This is my, my father in laws, Drupal seven website, that he wants me to help them with with upgrading or whatever, right? So I went off and grabbed a copy of that, which I have here. And, you know, that's his Drupal seven code base, I just pulled it off of net firms or whatever it lived, I grabbed a database dump over here, right? And now I'm going to do this. I say Lando and it great. Now you have a Lando YAML file. It's going to look like this down here. I started up. Same thing as before, right? Say it again. Yeah. Yeah. So let's take a minute to spin up. But yeah, then I'm going to run this, this DB import command, it's going to grab my database dump, suck it into the containers the proper way. And you'll see, I should put the link there, but I'll be able to flip to a tab and have that site up and running, it's going to look pretty much like the the other one. And I first time I did this, I thought, uh, it's probably going to take me an hour to work this out, right? Like literally 10 minutes. And the hard part was getting the copy of the site on my laptop, right? I had to like figure out how to log into his thing. And okay, how do I access net firms file download? Oh, I can SFTP, yada, yada, right? This part's trivial. Right. So there now I have Smith writer dot Lando site. Incidentally, this is a this is a convention that they've they've registered this top level domain for this, this, this Lando dot site domain to just point to local host. There you go. Right. There's my local copy of Doug say. So that that's what traffic is doing essentially is just intercepting the DNS local host picks up the name sends you the right set of containers, right? Okay. It gets better. So I was talking about the recipes, right? So the the recipes live in this sub directory. This is my again, this is my source, my source clone of the of the Lando stuff. It's hard to find this. I think it's still possible if you install it from a debt package or whatever, right? So I just found it super handy if I'm like, what is this recipe actually doing for me? Well, I can go into this JavaScript file and it's just a bunch of functions, the meat of which is this build function, right? Which is where the assumptions are baked in, right? They say, well, probably you're going to want Apache unless you said something else, right? Probably you're going to want PHP seven unless you said something else. Let's grab Drush for you, right? Set that up and so on. And you might have noticed when I did the droop late one same idea it, it pulled in Drush into the into the containers for me kind of automatically. So now I have access to Drush commands inside my containers, which is just handy, right? And there's lots of good capacity to add in more things yourself. I'll get to those later. But this is, you know, I haven't actually needed to do this, but it's like to customize this, but it's nice to know if I want to write my own recipe, it's a matter of implementing this kind of a file, right? And if you look at the Drupal eight, one of these, there's a comment at the top of the file that says, let's just cheat and pull in the Drupal seven stuff. And they import this file. And then there's a little bit more code that's droop late specific, right? So maybe you want it to customize a little bit beyond droop late, you have a, you have a basic droop late thing, but then you pull in some custom modules or something like that. You could, you could do that at this level, right? Or maybe there are some libraries that you want natively or that kind of thing. In many, most cases that I've found so far, there are other good ways to go, to go about this, but it, you know, it's cool to know this is available. Yeah. As opposed to the post, like the post install, right? The post install, or is there any closer cons of putting it in the recipe versus the post install? I mean, I guess it would, like if you're using the recipe a lot, right? It's handy to, to wrap it in here, and then any new site you spin up, you just go dash dash recipe, blah, and it makes those assumptions for you, right? You don't have to explicitly add them into your handle. Yeah. So good times. Like I said earlier, right? Anybody know grab CMS? So a new ish PHP CMS that's just based in flat files. So it's kind of cool. You can edit all the stuff, just markdown or whatever. So this one is a, is an instance of like a custom thing, right? Something there's no recipe for per se. But I want to, I want to spin something up on it, right? So here's my grab has this idea of skeletons, which is kind of like a, almost like a distribution, sort of a pre-wrapped set of functionality. I just grabbed one of those for the sake of, of demo because it spins up a relatively complete site out of the box. So I'll show you how that works. So there's my grab skeletons zip file that I downloaded. I unpack it. Just going to do this move. And again, Lando knit, right? My recipe is custom. Give it a name and a web root. Same idea. Custom is a recipe that sort of makes minimal assumptions. Yeah. And so you'll see right now if I show you the Lando YAML, it's spit out there. It's mostly like it was before, but it just says custom instead. And like I say that kind of means make very, very few assumptions. So then what I need to do in this case is I need to sort of tell it a little bit more about what I needed to run this custom thing. Oops. So basically I want to, I want to name the, the sites. The proxy does the right thing. And I want to tell it, you know, I want, I want latest and greatest PHP. It's going to use Apache turn on SSL for me. SSL certs are self signed by Lando. So you get this mess, but whatever. There's my graph site. Right. So what was that like 15 minutes? I just spun up three new sites. So customizing, right? I want to do slightly more advanced stuff. There's a lot of cool stuff. This is the other thing that I, that I should say that I'm really pleased with Lando about. The documentation site is excellent. They really put quite a lot of effort into it to, you know, talk about basics, how to install, you know, there's details about all these different recipes. If you go to one of these and, and scan down, this droop late one is probably the most elaborate, but it gives you a fair bit of detail about how to use that particular recipe. How do I customize it to do stuff that's common within that, right? Similarly, you know, stuff about the different services, stuff about running it on the command line, right? Then there's sort of troubleshooting stuff, known issues. There's some like advanced workflow stuff and so on. The docs are really quite excellent. So that being said, say I want nginx instead of Apache. That's, that's the change. Then I, then I run Lando restart and I'm running on nginx. I want Maria instead of my SQL by default. Same thing, right? In the case you probably want to decide this up front, like maybe don't change your database after you've got it going, but if you really want to, you can do that. Yeah, so it's nice at this level, right? Obvious customizations are exposed at the config level. So changing it out is as simple as one line in the, in the config, right? Similarly, I want to add mail, mail hog. This is what Lando calls services, right? I want extra containers doing specific things. Mail hog is a nice one. If you're running a development site, it catches all the email, right? So if you're doing a workflow testing user registration process makes it super easy to flip back and forth between tabs, get the, get the registration email link, go back to your development tab, log in with it, right? Run through that really quickly. So I add that, let's go back to my chewy site here. App server is the, is the conventional default that Lando calls your, your web server container. And like everything else, you can, you can override that, but that's the, the sort of standard one. Well, actually I might need to do a, let's see if this works. Yeah, there we go. So creating, so created a new container for me for the mail hog service. And once that finishes, it should show me that list of URLs and you'll see there's an extra one in there. It's going to be called mh.Jewy or something like that. There's Drash. Oh, I think I forgot the proxy. Well, I want to, I want to keep moving, but you get the idea, right? I would get a, I, I missed a proxy config line in that Lando YAML that would, that would expose another one of these URLs for me. I can show you an example of that as we go along later. You know, or whatever. Elastic search, on GoDB, NPM, whatever. And again, the, the docs are great on this. Tons of detail about all of the ones that are available, as well as some, some stuff about how to add your own if you, if, you know, what you want is not in this list, right? So what if I want a custom configuration, right? I need specific parameters in my PHP I and I. Well, I go into my services area. This is again, this Lando YAML config. I say within the app server, I want to, I want to override some config, this PHP I and I grab from my lower repository. And then I create this PHP I and I file. I can, what I typically do is I go and grab the default one from the recipe, copy it in and, and adjust it as I need. Or if I know I need something specific from production or whatever, I drop it in there, right? Similarly, those database credentials I showed you earlier were as insecure as they might get. So I might want to override those. So more exciting stuff. We were working on a project that was a single sign on system, right? So we needed authentication, you know, showing the whole registration process from the user, user registers an account, they get a credential, the OAuth scenario, right? Well, now I technically need two sites to be able to, to, to play with and go back and forth between, right? I need a registration authority on the one hand, the like OAuth provider or whatever, and I need like a client site, the relying party that's going to authenticate against that, that authority, right? So I need two sites. Well, okay. This is the start of my Lando YAML. Same basic idea. See a little bit of more detail here. I've turned on X debug. That's going to be handy. I've pulled in some extra composer or Docker compose stuff that sets up Chrome driver for me. So I get nice JavaScript testing. Then in my services area, now I've overridden that app server default that I mentioned, the convention and called it RA Web and RADB. So my first two containers are the registration authority ones, right? My second two are the relying party ones. So now I have four different containers I've defined and I had a, sorry, where's my mail hug down here at the end, right? And now I just say I want you to hug mail from both of those web servers. Sorry, I forgot to fix those. Those should be RA Web and RP Web. One of the things they noticed when we were doing this, we spent a while troubleshooting a problem where we weren't explicitly overriding the default, the app server one. And we noticed that the default app server container was behaving differently than the secondary one. I think it was the RP in that case. Dug into it a bunch and discovered that Lando sort of treats the app server a little bit special. So the fix for that was basically just name them explicitly and then they're all treated the same way. And basically that's sort of the trend anytime you want to be sure about something, be explicit about it in the config, right? So that worked out really great. Like, you know, same thing I've been showing you just spins up a few more containers and now I have two different sites I can work on and bounce back and forth between So a little bit of workflow stuff. Drumkit is a project Christopher started. It's basically a collection of make files. And it comes to mind because a few of those other blog posts I've been reading and tools and stuff kind of use make files as a way to sort of package some other other commands for yourself. And we found this really helpful as just a way to sort of abstract out upstream some of the common things that we do with Drupal sites so we can just pull it in across the board. So he's very humble about this, but it's really quite a cool project. Worth taking a peek at. You might have your own thing, but this is what what we've been doing. So you set it up like that. There's this handy one liner, which if you're security conscious, you might cringe at. But if you look into it, that's basically what it's doing. So we'll do that here. And now if I run a make, I have a whole bunch of make targets built in that have some awareness about Drupal and stuff like that. He's let me kind of quickly run tests or rebuild the site from scratch. And, you know, I can I can configure it to to know which database import I want to pull in or do some of those. You know, Lando has some facility for this. Like I say, this is kind of what we've landed on is as our way of tackling it. And it has had some something composer exactly. Exactly. Exactly. Yeah. And I'll show you as we go along, one of the things that that it's proven really handy for is it kind of unifies things in terms of our CI system, right? So the make targets apply on GitLab just as well as they do on my on my local. And, you know, in some cases, we've had to do some CI specific stuff, but they ultimately end up sort of doing this the same set of things, just becomes a convenient place to package like common tasks I do with this site, right? Just a question then. So if you have like a CI specific thing, how do you put that conditional like here? Are you running the same the same CI? We've ended up doing like in the make file. So what what this what this is basically doing, right, is adding a sub module for that repo that has the collection of of make tools and then Simlinks sort of references it by a project global make file, right? So that file by default, just has this one line. But if I have project specific stuff I want to do, I just add it in there and then I have new targets available, right? And but, you know, one of the one of the cool things out of the box drum kit can do is pulling composer for you. So it's maybe relevant most of the time, but other packages like that, I can say make composer and it'll pull it in, set it up for me. I can't think of another example off the top, but other other things like that sort of tools that you that you readily use that, you don't you don't want to have to remember to go have to go look up the install set of commands every time, right? So just collect those for me. Say it again. Yes, right. That's where it's like we have a custom thing or the library that that's too many. So yeah, so this is our an example of the GitLab CI Yeah, right. So in my in my build phase, I call this make build. Right. And that's the same one that I would call on my local to do the same thing on my local, right? I run down here. This is my my actual test run makes CI and this is one of those cases where tests ran a little bit differently on on GitLab because they do weird stuff. So I think locally we would have make test, but it basically just calls Bayhat in a slightly different way. So yeah, this is the this is the sourcing that Christopher was talking about. It sort of that would do the credentials thing. So that works in GitLab for us as well. You know, we instead of the local like a home directory creds file, you have the credit the secrets in your GitLab project set up, right? And then it pulls them from there for you and debugging stuff. I mentioned earlier X debug, right? It's fairly straightforward to set up. Well, after the first time you do it at least, but the docs again are pretty good. This is a link to them. I won't get to it in detail, but but it's it's really nice. Like you can get set up so PHP Storm can just step through your stuff like you're used to, but it's all happening in the container. It's very nice. And then tooling is the other the other interesting thing here. I haven't showed you yet, but in here I told you I can do Lando Drush for example, and that's running in my inside my Docker containers. But if I want to add new ones of those, I can define them in my Lando YAML file. So if there's a, you know, well, that Lando DB import was another example of that, right? But I can make up my own. This is an interesting example from the docs where it's like dynamically just you can you can specify on the command line which service you want it to run on. So their example is like I want to know what the environment looks like in my database container and in my app server container, I want to be able to specify when I'm actually typing it, I can go and run it like Lando dynamic would be the name of my command and then a dash s to specify a non default container service for it to run, right? Those kinds of things. So that's about it. Thanks for listening. Thanks to the North organizers for putting it on. Any questions or anything? Yes. Instead of the self-signed certificates, could we stick in less and grab certificates? Yeah, I haven't followed that closely. It's changed since I first looked at it. They were actually doing that kind of stuff originally. I think it's a little bit tricky because of the way that you have to authorize the search, right? And yeah, I didn't follow it closely, but in theory, that's possible for sure. Yeah, you can also provide your own, right? Like you can override and just, yeah. I mean, for local development, it's mostly not worth it, right? You click through, you add that exception one time. You can carry on if you'd like. Exactly. Yeah, you would have to add. Yeah. Yeah. I thought about installation from source. So when this imagine that you actually came on what is the message? So did you get through and after that? In terms of Lando. So most of the time you can, well, okay, a lot of the time you can get away with just updating your code base and carry on with your docker containers as they were, right? If something dramatic changes, you might need to do a Lando restart just to sort of kick the containers in the butt and get the new stuff. Yeah, that's it. Yeah. Sometimes, usually it happens if you're actually editing something in the Lando YAML. Like if you change something, you add a new service or something like that. Sometimes you have to go as far as doing a Lando rebuild, which is a slightly more drastic version. It takes a little bit longer because usually it'll pull in the new service containers that you need and stuff like that. But yeah, that's it. Yes. So although I always see the button to my server is CentOS, I still might put the laptop on normal and have the databases windows. Now, if you said something about putting your Lando inside Group of YAML, I thought that part of the attraction of Lando was that I could run it. Absolutely. And if you're on Linux, that's absolutely the way I would recommend. Really the only use case I can think of for Group of YAML and then Lando inside would be if you're on windows or something where it's a bit more of a pain to just run Lando directly. So yeah, so my daily driver is a Windows 10. Yeah. And so if you think that it may be better to run it inside, you could do Group of YAML instead of... Again, I'm not a Windows guy. I can't speak to it directly. If you were going to go the Drupal VM, I would start with looking at Jeff's Docker support built into Drupal VM. It's kind of experimental at the moment. He says that, but it's probably going to be the easiest thing to start with. But if that doesn't work for you for whatever reason, I would just install Lando inside your VM and off you go. Yeah. I think there's, like, I think there's a native Windows build of Lando as well. So start there. Start there. There was like a year ago. Yeah. Right. Yeah. I'm pretty sure there's still, yeah. Yeah. It's exposed internally. So in terms of the networking, it sets up a bridge network for your set of containers and then exposes 3306 or whatever you override it to the other services. So it goes out of the Lando MySQL Easiest way to do it is do a Lando, yeah, Lando MySQL or whatever to get in there. Gotcha. I'm trying to think. There is a way to do that. You can tell it that you want to expose the database service to your host. Yeah. And then you could point, like a local MySQL workbench or something at that port to get at it. Yeah. In terms of persisting the database to drive, is that part of the repository? No. What Lando does is create volumes for that stuff and it persists the database stuff on a volume for you. So unless you do Lando destroy my app, that volume will persist for you, which is sometimes helpful. I think that's what Rebuild does differently is it actually destroys the containers and restarts them for you. So if you need to fully start from scratch, get a fresh database dump in or whatever, that's the way to go. Can you remember off the top where it puts those volumes? I think it's somewhere in that like tilde slash dot Lando. It sets them up for you? Yeah. Good. Anything else? Just that, I think it's kind of silly but running, if you run multiple projects at once, if you spin this up twice, you're going to eat up two gigs of memory for a Lando container or whatever, they're both heavy? A little bit, yeah. I've definitely found running more than a couple at a time starts to slow things down. You should just shut it you're not working your projects simultaneously. Yeah. And there's a nice shortcut you can do Lando power off within a project and it will just shut the containers down for that one. Right. So it's pretty easy to spin them up and down as you need like that. One gotcha I noticed about running like if you you want to check a feature branch of the same project you have somewhere else, if you clone it under the same directory name and you do a Lando in it and you don't explicitly say what name you want to call it, it will try to call it the same as your default one or whatever. Right. And then you end up two with the same name and things go astray. So I've just taken to explicitly specifying the name each time. So the top name of the Lando file. Yeah, like when you do that Lando in it. Yeah, yeah. And this was mostly coming up because we were committing the Lando YAML config into the repo and pushing it up, right? So then you clone it down and you check out your branch but the name in the Lando config is still the same. Still the same. So if you don't change it things get confused. Yeah. So I ran into an issue where we were just booting up and it was strange because I have three machines and Lando was working great on two of them. They're all Max, same LS and then I'm just getting the red. When you're finished spinning it up you get green for the working aliases and just red on two of them and for the life of me I couldn't figure out what application was even after reboot. I've seen this happen as well. Sometimes the .Lando.site aliases don't come online properly. As best I can tell it's some networking disconnect that happens when it's spinning up the containers or something because I notice typically when I do a Lando start my Wi-Fi for whatever hotspot I'm on will disconnect for a moment and then come back online. So I think it's just kind of a timing issue like your networking on the system goes down and then it can't it's trying to validate that those URLs are right but it can't because you don't have a network. This is a weird kind of chicken and egg thing but I think it's actually docker's fault, honestly. Right. And it's just a future pull. Right. Yeah. And typically when that happens if I do a Lando restart it will fix itself. Rebuild. Really, yeah. That did happen to me earlier today too and I've seen it a few times on this laptop where actually I needed to fully reboot. It's like the like post-level networking stuff goes awry and just needs a full kick in the pants. Yeah. So I'm planning to switch now from Mac to Linux. Yeah. So installing Lando on Linux what is the process to like and do you find that you find more weird stuff on the Linux that's kind of a hard to maintain or is pretty much running? No. If anything it seems to me like the Linux stuff is easier because A. you get away from the docker for Mac problems. That's right. It's just the virtualization thing which makes it slower, right? Yeah. Yeah. And then like I think the developers of Lando are working in a Linux environment so I think that's there. That's right. Yeah. That's all right. Yeah. So the standard way of doing it in Linux you know you make sure you get the docker community edition packages from the official sources and then you grab they have these release packages on GitHub. So you just download the right one for your for your OS right in Ubuntu is the .dev. They have like Pac-Man ones or RPMs and just install that. And like I say for me and maybe for you if you're comfortable with Node write the I can find that where's that link that from source instructions are you know clone the repository run yarn. Okay. Right. And then like I say when there's a new release you do a get pull get check out the new tag run yarn again and you're on the new version. Right. So it's really that's why I say that's how you're spelling that's how I'm doing it locally. Yeah. And then you know unless you're really like I don't want to touch Node which I was there for a while but this is this is really really easy like yeah. Yeah. Yeah. I was thinking for you this is probably comfortable. Yeah. What's the same look for there? Sorry. Optionally said it was similar because right. Right. Yeah. Which I which I think I've done in this case there. Yeah. Okay. Anything else? Yeah. Yeah. What I probably do what was the tool I did this for recently Ubuntu has some nice it's tricky because I mean you could probably write like a system v service for it. Right. It just does that custom thing so on boot it would do that. I might be inclined to approach it at the user level. Right. So it spins up when I log in because Ubuntu makes it easy to just add some like startup applications and I can point it to the to the front Lando start in this directory for it's easier than writing a system v service. That's probably what I would do there. Great.