大话西游免费版法宝用经验升一级要多少

    1. <form id=TuUEamabd><nobr id=TuUEamabd></nobr></form>
      <address id=TuUEamabd><nobr id=TuUEamabd><nobr id=TuUEamabd></nobr></nobr></address>

      Inside Forge 2.0 and Laravel VPS with James Brooks

      Matt Stauffer:
      All right, welcome back to Laravel podcast season seven. I am your host as always, Matt Stauffer, CEO of Tighten. And in this season, I'll be joined every episode by a new member of the Laravel team. And today I get to talk to my delightful friend, James Brooks, the Forge engineering team lead at Laravel. James, can you say hi and share a little bit about what you do at Laravel day to day?

      James Brooks:
      Yeah, hi Matt. So my name is James Brooks. As Matt said, I'm the engineering team lead on Laravel Forge, which basically means that I kind of oversee the development of Forge. Most recently, the redesign that we launched or we shared at Laracon US, but also previously various things, documentation, the framework, that kind of thing.

      Matt Stauffer:
      So you know this, but one of the things I want at the beginning of every episode is I want to hear your journey to Laravel, whether that is the last year or the last, I mean, it can't be the last year for you because you've been working there for what, like five, six years. But anyway, it could be just the short period of time leading up to moving to work at Laravel, but it can be as far back as you want to go. And I want you to go as far back as you're comfortable going, because I really want to hear the story of kind of what got you through the various stages, especially as one of the earliest kind of Laravel team members.

      James Brooks:
      Yeah. So, man, we can go back quite, quite far. When I was seven, I fell over, hurt my knee. This is quite a long story, but I'll try and keep it relatively brief.

      Matt Stauffer:
      I'm fascinated to see where this goes.

      James Brooks:
      So I, yeah, I fell over, chipped my knee cap and I was kind of like bed bound for a while. And I went to, my mom was going to the library because they used to be like big popular things back then in the nineties. And she was like, would you like a book? And I said, I want to learn to make games. So like a couple of weeks before that, my school friends, dad had come in and we had like fruit bread, the Soren company. And they had some games that were like on a floppy disk where you would play asteroids and it was all like bread instead of asteroids. I like those kinds of variations of those games. And I was like, I want to learn how these are made.

      So my mom, I was like, I want to learn to write code or whatever it is that I need to be able to do to do this. And, she came back with a book on JavaScript. And so it was like a very early version. I can't even remember what the book was. And so I kind of like seven year old did not have the capacity to read a book like that. So what I did was copy all the code into notepad and then just like see how it would run. So like my parents had me out, get kind of started with that kind of thing, not technical people themselves, but like show me how to like save a file, open it in Internet Explorer or whatever it was back then. And then, yeah, I kind of, I was like, that's it, I'm gonna, I'm gonna be a software engineer or whatever it is that, I don't think these terms are like really things, but like, I want to do this, this is what I want to do. And it was between that or being a stuntman.

      Matt Stauffer:
      Being a what? Stuntman.

      James Brooks:
      So, yeah, stuntman. So like, yeah, yeah.

      Matt Stauffer:
      I thought you said Stumpman. And I was like, is that another Britishism that I get to learn today? Okay, software engineer Stuntman. Yeah, okay.

      James Brooks:
      Yeah, bit of extremes. And I mean, being a stuntman didn't work out, but being a...an engineer did.

      Matt Stauffer:
      Clearly.

      James Brooks:
      So like I kind of went through different types of engineering. So I did Windows development. I was writing a 16 bit operating system at one point. I was like, I tried to make games.

      Matt Stauffer:
      How do I not know this?

      James Brooks:
      I just like, I tried a lot of things, right? And at one point I found PHP and that was like 4.2, 4.3. So early 2000s. And I was like, this, this is my language. I understand it. It makes sense. I'm like going all in on this. And I've still done other things around that, but, yeah. So I went to college, which is like not university college, but, 17 years old. Did, an IT course. One of the things there was like, VB six. So I tried that for a while.

      And then I got my first job at a, jewelry company doing like IT support.

      Matt Stauffer:
      Okay.

      James Brooks:
      And they also made all their like EPOS, that point of sale software for all the shops around the UK and all in VB six. So I was like, well, I know a bit of VB. I like, can I help out? Can I do something? So I did that for a while and then I found, yeah, a lot.

      Matt Stauffer:
      Was this just kind of classic procedural VB? Or was it class? OK.

      James Brooks:
      Yeah, Well, VB6. So was like the drag and drop UI components.

      Matt Stauffer:
      I don't know the VB Delaney. okay, got it, got it.

      James Brooks:
      Yeah, like drag and drop stuff. And then it was like, I can't remember the handles. So you could do click on button and it would do this and run procedures. And then I saw an advert for a travel agency that were looking for a web developer. I was like, that's really what I want to be doing. So I worked there for near on 10 years, up to the software development manager.

      And so during that time, there was like a already built CMS CRM system and they would get quotes on the phone. Agents would assign them to themselves and work through those. And then I was a couple of years in, I was tasked with rebuilding it. And this was all like PHP in HTML, like what people think is really bad these days.

      Matt Stauffer:
      Okay, yeah

      James Brooks:
      That's exactly, it was exactly that everywhere. So I was like, well, we're definitely going to use a framework. Like that's a no brainer here. And I was looking around for different frameworks and I came across Laravel, which was like 4.1, I think at the time. So this is like January, 2014. We'd already tried building this CRM by the way in Node.js, but it was like very early. We had real time kind of, if one agent tags a quote, it would remove it from everybody else so that we didn't keep running into people working on the same thing.

      But it just didn't work. Like, I don't know what was going on. We had memory leaks and all sorts of stuff. So I was like, let's rebuild it in PHP. That's what we know. I found Laravel. I read through the documentation one afternoon. I was like, this is it. This is what we're going with. The documentation explained everything. I think like even the documentation at the time was mentioning flights as like models and stuff, which I was dealing with.

      Matt Stauffer:
      Yeah.

      James Brooks:
      And it was like, wow, this is, this is everything I could ever want in a PHP framework. Um, and I built a proof of concept that afternoon, just like tagging things, like connecting to our existing database, figuring stuff out. Um, so yeah, that was January 2014. And then, uh, I started kind of contributing to the Laravel community kind of around that time as well.

      So there used to be like a Slack channel and I was involved in that. I spoke to Abby at some point and, famously mispronounced Arkansas as Arkansas. And then, I still don't understand how I got it wrong.

      Matt Stauffer:
      It's very reasonable to say Arkansas, Yeah. Yeah. Arkansas. Yeah.

      James Brooks:
      Right? I mean, Kansas, Arkansas, it makes no sense. Yeah. So yeah, then I started working on like an open source status page system called Cache that got kind of well known. It's like used by lots of companies around the world, big, big companies. And then around that as well, I was contributing to the Laravel ecosystem. So I added Blade highlighting to GitHub.

      I say I added, I like enabled it, it's like a linguist thing.

      Matt Stauffer:
      What was the syntax for that when you built that?

      James Brooks:
      And then it was all like Ruby configuration files. They like use the TM language files. I think it was TM language and it just needed enabling, but I enabled it and there we go. So yeah, I did that. And then I applied for one of those, so was like early twenties.

      Matt Stauffer:
      Okay.

      James Brooks:
      I yeah, early twenties. And I applied for one of the Laracon giveaway, like for the tickets to the US, which I won. So incredibly grateful for that. Like a bit of a defining moment in my career, really. So Taylor gave me a ticket and then I convinced my company at the time to send me. I was like, look, are the tickets paid for? I'll sort my hotel out, but like we're a travel company. Can I get some help with the flights? So they helped me out with that.

      Matt Stauffer:
      Yeah.

      James Brooks:
      I went to Louisville, was my first conference, 2015 that was, and then kind of met Taylor a little bit. I was talking to him and then kind of in between all of that, I ended up with his phone number and like messaging him on Telegram as you do. And there was a thing in Envoyer I wanted. I can't remember exactly what the feature was now, but I messaged him and was like, Hey Taylor, can you please just add.

      Matt Stauffer:
      Wow.

      James Brooks:
      this one feature, um, it's like, you've had it. I'll merge it in. So I got access to Envoyer. I built the feature. Um, and then that kind of, that was that. And then I was listening to Taylor's podcast and he was saying that, um, this is what he, when he used to kind of record himself, just talking about business and Laravel and that kind of thing. And, um, yeah, he was saying that, oh, I'm thinking maybe I'll hire somebody for Forge that kind of thing. Maybe we'll see. It was like very loose, very tentative. So I messaged him. I was like, Hey,

      Matt Stauffer:
      I'm your guy.

      James Brooks:
      you know like do I need to say anything and he was like yeah yeah send me your CV so I did that and I'm sure he didn't read it because if he did I'm sure he wouldn't have hired me and so he was like yeah I mean when can you start and then I joined in 2019 so yeah six years on Laracon US actually while I was giving the keynote was my six year anniversary at Laravel

      Matt Stauffer:
      Six years is incredible. Because I don't know, were you, was there anybody else other than you and Muhammad at the time? Okay. I knew you were in the initial few.

      James Brooks:
      Dries as well, it was Mohammed, Dries, myself. Yeah, we used to, OG, yeah. And we used to, it was that small, we used to message on Telegram, like all of these packages, no Slack, no.

      Matt Stauffer:
      Not even have slack or anything like that. Yeah.

      James Brooks:
      All of these messages, all of these products and services and packages, and we're like discussing everything, and there's no threads in Telegram. And one day we were just like, we gotta sort this out. So four of us moved to Slack.

      Matt Stauffer:
      That's amazing. So when you started, what was the delineation? Was it Dries on open source and you on the products or how did you kind of split your work?

      James Brooks:
      It was kind of very loose really. When I started, I was actually working on the framework a little bit. So my first task was to replace Swift mailer with Symphony mailer. And I was like, man, like that was my first thing.

      Matt Stauffer:
      Thank God for you. Yeah.

      James Brooks:
      And I was like, I've made a terrible mistake. I can't do this. Yeah.

      Matt Stauffer:
      Pretty nasty bit of work so for that to be your first thing is pretty incredible.

      James Brooks:
      Yeah, it's massive. It's really like gnarly is the only way I can really describe it.

      Matt Stauffer:
      Yeah.

      James Brooks:
      And so I pulled it all apart. like pulled out all the Swift mailer and I was going through and I was like, just can't get it to work. wasn't like, kind of works, but like it was missing so many things and you couldn't like configure settings as like headers as easily. And I was like, this doesn't feel right. So I like calling Dries or Mohammed and I was like, I think I've like massively oversold myself here. I'm not capable. Can you just check this out? And they're like, whoever it was at the time they're like, yeah, it looks like, I think you're right. I think this is too early. so the product got like canned at the time.

      Matt Stauffer:
      Like too early in the Symphony Mailer's life, it just wasn't ready. Yeah.

      James Brooks:
      I was like, my God. I like got out of that one. Yeah. It wasn't ready yet. And it was a couple of years later that I think Dries picked up where I left off and, and it was in a much better state then. So that was, I breathed a sigh of relief that day. I felt like, okay, I can do this.

      Matt Stauffer:
      Okay.

      James Brooks:
      Yeah. So then from the open source, I did a couple of things here and there. And then moved to Nova for a few months. I think it was like nine or 10 months. So I worked with David Hemphill, on that. So he was kind of like, a boss slash manager. It was like, right, James, you go work on these things, tidy up all the issues. so I did that.

      Matt Stauffer:
      Yeah, yeah, yeah.

      James Brooks:
      Contributed a few things there, so that was nice. Really got to know the community at that point as well and people that were using Nova. And then it kind of naturally fell to kind of managing Envoyer and Forge. I'm a big Forge fan, always have been, used it very early. It's just an incredible product, right? It does exactly what it says it does.

      Matt Stauffer:
      It is incredible. It's still my favorite tool I use every day. So, yeah.

      James Brooks:
      I love to hear it. So yeah, kind of just like naturally fell into that because I just enjoyed working on it. And yeah, that's where I've kind of been focused. Yeah. Look at me now.

      Matt Stauffer:
      You know. Okay. So, so when cloud came out, a lot of us, you know, I shouldn't say us because I felt confident that Forge would always have a life. But a lot of people in the community were really nervous that like this means the end of Forge. And I was not worried because I trust, you know, Taylor and I trust you and other folks in the organization. But if I had been worried, it would have been a big worry. Because like I said, I use Forge every day. My company relies on Forge to run automated scripts hundreds of times a day. Like Forge is like at one of the heartbeats of Tighten. I freaking love that tool. And so I was so delighted to hear that Forge is gonna get like an extra, not just, yeah, we're gonna maintain it, but actually we're gonna kind of put more energy and effort.

      And it wasn't, that wasn't the initial pitch, right? The initial pitch was Forge is gonna be around, don't worry. And then sometime like halfway through last year, when I was talking to Taylor, you on the podcast and off, he would start saying, no, we're gonna kind of put some extra energy and attention into Forge. And I was like, I'm excited about this, whatever. So I'm curious, like for you, was there a moment where you all sat down and said, all right, it is time for us to figure out what is the next iteration? What's Forge 2.0 look like? And if so, what was the impetus there? Did you all brainstorm together? Did Taylor say, this is what it's going to be? And you internalized it and then split it up for the team? What was that process like?

      James Brooks:
      Kind of a bit of everything really. So at Laracon US last year in Dallas, we did an offsite with the company and there was like 40 of us, think 30 or 40. And we kind of sat there and so the team leads were giving like updates on kind of where like Jess's team were with Nightwatch, Joe's team were with Cloud. And then I did a bit of like, here's what we're thinking with Forge. We think we could do a lot more.

      Matt Stauffer:
      Okay.

      James Brooks:
      But we knew that we needed to implement things like organizations, we knew that we needed to do teams, we had this massive backlog of things. And so we're sat there in this room giving these talks and we're just kind of chatting. And I think it was Taylor was just sat there like, what if we just completely overhaul Forge, like Forge 2.0 and...

      It went from like everyone's been super excited about Nightwatch and Cloud and that kind of thing, all this new stuff. And then we spent like a good 45 minutes hour just discussing like what Forge 2.0 could be. The room was like, it was so excitable in there. And so we're like, it came away like really invigorated and energized and excited about what it was. And then like we hadn't really come up with anything concrete as to what Forge 2.0 was, bar like what we were already working on.

      Matt Stauffer:
      Love that.

      James Brooks:
      and until like a bit later where we were like, okay, so we need these features. we're to add this and this is where I'm going to ship. And then like the Cloud redesign really helped because I introduced a lot of our design language. So we knew that like, okay, well, we can apply that to Forge. We need a designer. He's going to have to, or there is no gym, but they're going to have to kind of apply the design language to Forge, every aspect of Forge.

      But initially, the feature set was organizations and teams, health checks and heartbeats, zero downtime deployment. And then it just turned into this, well, actually, we can do a lot more than that. Let's set it up for the future. And so it's of grown in places, and we've had to take a bit of the scope back a bit, because there's just too much that we want to get done. So yeah, it's quite exciting, though.

      Matt Stauffer:
      Yeah.

      And so when I had Taylor in the podcasts a week and a half ago or something like that I was saying so what does this mean for the future of Envoyer and what I did not think about the fact is that you're also like a very kind of connected to Envoyer person because I feel like there's those of us who've used Envoyer extensively like we've used it on a bunch of projects it's the best way to have zero downtime deploy the heartbeats and the health checks are just so freaking convenient that's like why not use it but I know a lot of people have never touched Envoyer before so I while I love Envoyer and Taylor's answer kind of ended up being like there's a level of multi-server configuration on Envoyer that you're not going to get in the new Forge.

      James Brooks:
      Mm-hmm.

      Matt Stauffer:
      I am still very excited that every single one of my Forge sites without having to add Envoy are now getting all these features. Was there any part of you that was like, was there any sorrow in knowing that kind of Envoy usage is just gonna drop a little bit as you're building these features in?

      James Brooks:
      Yeah, kind of. I mean, so Forge, Envoyer and Vapor are all under the Core Services team. So technically that's my remit. I'm like engineering team lead of Core Services, but like fundamentally that's Forge.

      Matt Stauffer:
      Okay.

      James Brooks:
      And so, and given like my history and attachment to Envoyer as well, like that being almost one of the pivotal moments of me getting my job here. Yeah, like part of me is like, man, that's such a cool product. Like it's nice to work on. People love it as well, like it just works. It does exactly what it says it does. The only time it ever really fails is if like a source control provider is down. Not often, yeah. And so...

      Matt Stauffer:
      That's not on Envoyer. Yeah. Yeah.

      James Brooks:
      Yeah, part of me is like, oh man, that's kind of nice that like it's gone because it's one less, it's not gone, it will be maintained. There'll always be people that don't use Forge and they just want Envoyer, but like zero downtime is kind of now just something that you get with a lot of hosting services or deployment services. So I think there's still be, there's still be usage. And like Taylor said, Forge will only deploy to one server at a time currently.

      Matt Stauffer:
      Yeah.

      James Brooks:
      It's definitely something we want to explore because we think we can make that a lot better in Forge. But it's like stepping stones. Got to start somewhere.

      Matt Stauffer:
      Yeah. Okay. So as you were building out all these kind of new changes to Forge, you were to do obviously you've been maintaining Forge for the last, you know, however many years, but this was Taylor's first public software as a service project, right? Things have changed quite a bit in terms of how we write code, but also things have changed quite a bit in the team since he first wrote Forge.

      James Brooks:
      Mm-hmm.

      Matt Stauffer:
      How much did you do the refactors that you've been dreaming of for the last five years and how much were you like? This is kind of kind of looking pretty good for something that's this old.

      James Brooks:
      Yeah, There's still a lot of the original code around. Like we've moved things around. we now put models into a models namespace. That's like a default Laravel standard now that we didn't used to have. I think one thing that's super interesting about Forge, although not as true anymore, is that you could see the evolution of Laravel, the framework, through Forge. Because Taylor built like Cashier before he implemented Cashier. He built like the Echo stuff before we had Echo. Notifications before we had that in the framework. And you could see like where the inspiration came from. I was like, why do we not just use the notification system? Oh, it just didn't exist. Like it exists now. Yeah, but we've got to refactor that.

      Matt Stauffer:
      Yeah. Notification system is this pulled out into the framework. Yeah.

      James Brooks:
      Exactly, yeah. And there's like lots of things where you can see Taylor's played with ideas and seeing the evolution and it always comes out better in the framework. I think the framework nails every time.But yeah, there's still like, we've done a lot of refactoring to the action pattern for this new version of Forge. And we really chose to do that because we have the front end and the API. And we want to share a lot of the logic there. It wasn't just like, the action pattern is here, but everyone's doing it. We actually had like reason to do so. And it also meant that it's like units of all unit testing, which is something for us never really had it any before was any tests, anything meaningful.

      Matt Stauffer:
      Yeah. Which is tough for Forge, right? Because Forge is doing a lot of, it's not, and I wanted to ask you about this a second, but Forge is doing a lot of calls to terminal things that are also being streamed back live.

      James Brooks:
      Yeah.

      Matt Stauffer:
      Like I'm in the middle of building something right now that I used actions for and I had to unaction it in order to be able to stream its stuff. And so I actually wanted to ask you specifically how you did that in a second. But there's a lot of pieces about Forge that make it not our standard kind of use case. I don't know if you mind kind of diving into that. Like what is testing something that's all terminal calls? Is it a lot of process sniffing basically?

      James Brooks:
      So we do a lot of faking, basically.

      Matt Stauffer:
      Okay, yeah.

      James Brooks:
      We try doing like actual testing where we connect to a server and we run some code and some of the bash and see what the output is. But it's actually really hard to do that because especially where Forge is changing configuration files on the server, you basically have to then delete the server, spin that back up. And we all know that takes time. So it's like, well, how often can you run actual tests, like full integration tests?

      Matt Stauffer:
      Yeah. Yeah.

      James Brooks:
      Which ends up being never, cause it's just too slow and inconvenient. And like if a test goes wrong, well, that's it. That server is kind of just dead now, like delete it and start again. So what we do is we have like SSH wrapping classes, which we call a tunnel. And then we fake it basically. that, yeah. Yeah. And does it have the right script? Has it generated with the right variables and that kind of thing, which we find like,

      Matt Stauffer:
      Got it. Yes, and just make sure it gets a call that says, you know, SSH run, whatever. Totally. Okay.

      James Brooks:
      good enough, like plenty good enough. I don't want to undersell that, but we find it good enough that like we don't need to do this full end-to-end testing. Yeah.

      Matt Stauffer:
      Yeah. Yeah, yeah.

      I built a lot of tools that end up at some point wrapping a whole bunch of local utilities. So there's a composer class that we will fake to make sure composer class gets these calls, whatever. So very familiar. Mine are usually on command line. They're the command line tools that we built. But I'm like, yeah, it's pretty similar. You got to make sure it ssh is in with these parameters and then sends this particular thing. So that makes a ton of sense. But now I do want to ask you about the action pattern. And I'm sorry to listeners, because this is just my pet thing right now. But I literally had a tool that I built

      James Brooks:
      Mm-hmm.

      Matt Stauffer:
      where it was something I built for my Laracasts course where I wanted to send off little terminal requests to call FFmpeg. And I would click a button, it would say, this video has not been run through this particular FFmpeg process. I click the button and then two minutes later, in theory, it's done. And I hear you refresh and it's done, but I'm not getting that whole terminal output, right? And it was just dispatching an action. And it was great in a way that I think it's probably valuable for Forge as well because the user interface is really just triggering. complex actions somewhere else. Whereas like a lot of times the user interface is triggering PHP actions and then it stays in our world, right?

      But in Forge and in this thing I was building, it's really triggering these things that are happening somewhere else. Something else is responsible for this. So for me, I was just like, kind of lose access to what's happening if I use the action pattern. Whereas when I kept the actions happening in the controller, I could do things like the OB flush and stuff like that, every element of the loop. So I can do these streaming things. How do you handle that with the action pattern?

      James Brooks:
      So the action pattern itself is used for like dispatching jobs essentially. So for us, an action encapsulates setting state on a model. That might be like installing a new version of PHP. So we would either create that record or if we're patching it, maybe we set the status to updating.

      And then we dispatch a job, which we call a provisioner. Like provisioners in Forge are like glorified jobs. They have some nice DX for us to set like event logs. We can do like failed hooks. So if the process code of the command we're running is like 55, then what was that error? it basically, what was the non-zero exit code? And then kind of handle that. Maybe we need to reset some state on the server.

      And then the other part of that is kind of handling the output. So sometimes we need the output, like if we're syncing databases, we need to actually echo the list of databases on the server. So we'll print those out. Then we sync, we take kind of like read that, sync it into Forge. But then that's like one of the few cases where we need to kind of deal with output. And the other one is deployment output. So as you're deploying, we want to, yeah, we want to print that out, keep you up to date with what's happening so you see the stream of content. The original way that I built that was using server-side events before AI kind of like mainstreamed it.

      Matt Stauffer:
      That's what I was thinking, yeah.

      James Brooks:
      But we weren't sure how well that would scale. Forge gets a surprising volume of traffic. So we kind of like, do we want to put that onto the server? Probably not. Or like the main web server. So what we settled on was handling, reading the output from the process. So we use like the Symphony process classes for that. And then we can kind of pull out that output. And what we do is we just cache it.

      For like a few seconds. And then what Forge's front end is doing is actually pulling that cache and refreshing get every few seconds. So it gives the illusion of real time output. But it's up to date enough that you're like not behind on anything.

      Matt Stauffer:
      Okay, that makes sense. That's really cool.

      Matt Stauffer:
      Yeah, and there's just basically like a cache prefix that you're pulling from.

      James Brooks:
      Yep, yep, just a generated cache key that we pull out.

      Matt Stauffer:
      Okay, huh. Yeah. Thank you. Learned something.

      James Brooks:
      Yeah, sometimes it's the simplest things, yeah.

      Matt Stauffer:
      Yeah, I hadn't even thought about that. I'm like, it's got to come straight across the wire. Well, you know, so awesome. Okay, thanks for teaching us that. Yes, and that's what I thought you were going to say.

      James Brooks:
      Yeah, I mean the other way of doing that would be with like web sockets, I guess, but that's quite a lot of... Yeah. Nope. I'm afraid not. Just, just good old cache.

      Matt Stauffer:
      Okay, so back to the actual topic that I interrupted you, I'm sorry about that. So you kind of made all these Forge 2.0 plans, you talked about the, you know, being this zero-down time deploy and stuff. When did the Laravel VPS come in?

      James Brooks:
      That was a good question. That was like earlier this year in some ways. So we'd been partnering with DigitalOcean already and it kind of came to us like, what if we just offered our own provider? What would that look like? Because one of the biggest barriers to entry in Forge is that you have to sign up, which we always know is a big one. And then you have to bring a server provider. So with our partnership with DigitalOcean, we actually brought in like a wolf. So was like one click.

      Matt Stauffer:
      Yeah.

      James Brooks:
      go to the O and then select which team you want to link and then you get back and it's done. So that's awesome because it already speeds it up. But then not everybody's using DigitalOcean and not every provider has that flow available. So we're like, well, what if you just didn't have to press any buttons and we could just be the server provider for you? Like that's cool in terms of getting people on boarded, but then like what's the actual value for that? Because really it saved you a few steps. And then it kind of

      Matt Stauffer:
      Yeah. Yeah.

      James Brooks:
      turned into what if we could deploy a server in a minute or less? Like how is that even possible? Because we have to spin the server up. It takes time to install things. MySQL alone takes a good couple of minutes. Like how could we possibly do that? And to what point is it acceptable where we say like, you know, provisioning takes like 10 minutes. What performance increase do you have to get to be like, hey, you provision a server faster. And it actually means something. So Taylor's original, like remit was a server like one minute or less. And so Kieran, who's our DevOps on the core services team, he was like, what if there were just no loading pages? I was like, oh boy.

      Matt Stauffer:
      Hahaha!

      James Brooks:
      Like what if there wasn't, but like, how are you going to do that? And I'm not going to give anything away. But he, I mean, you've seen he managed to do it. It's incredible. So we have like a lot of servers just running ready to go at this point. It's, it's impressive. Yeah.

      Matt Stauffer:
      I was wondering about that. I don't know what I'm allowed to ask you questions about, so I'm just gonna ask and you tell me what you can't say.

      James Brooks:
      Okay.

      Matt Stauffer:
      The first two ideas I came up with, and I'm sure there's millions of others, they either came up with a custom stock image and so they're spinning it up off of a custom image that already has these things installed and they have to keep this image constantly up to date, or they literally just have a pool of servers that have already been spun up that are just being weighted to hand off to customers when they want them and they make sure there's always at least a pool of 100 or something like that. Are you able to tell me any... if I'm right on either of those and any more details or does this all have to be top secret for now?

      James Brooks:
      I mean, I don't know what I can and cannot say to be honest, but what I would say is that both of those are correct. Like it's more than that, but yeah, you've got somewhere with that.

      Matt Stauffer:
      Okay, cool. Great. Some some measure. huh. Okay, cool, cool, cool.

      James Brooks:
      Yeah. But I know I don't want Taylor or Tom to listen and, Andre, be like, whoa, that's the magic sauce.

      Matt Stauffer:
      Totally fine. Yeah, totally. And I won't take you any further. Okay, so VPS for me, because one of the things we were talking about is like, what motivates somebody to choose VPS? And is it enough to motivate someone to take an existing app and move it over to Laravel VPS? Or is it mainly for new clients? So it's very clear to us for new clients, because we, the number of times, I'm telling you, every single new client who's like, where do I host? I'm like, Forge and DigitalOcean.

      That's that has been my answer for a decade. I think that's been around for decade. But anyway, it's been around since that's been my answer for clients since Forge has existed. And we basically just put one of our project managers on a on a Zoom call and we walk them through signing up for Forge and then we walk them through signing up for DigitalOcean and then we walk them through handing off the keys because there's no way our clients would be able to do that. So I'm already sold purely because it's on DigitalOcean. So I don't have to be like, oh, we're moving to AWS or whatever, because I don't like AWS. When I can avoid it.

      But also I'm just like, it's just so much easier. We can literally just say, hey, go up, sign up. You we can make them a little walkthrough. it's, I get it for new clients immediately. But there was also some pitches for, it's not just the signup flow that is beneficial, but there's elements in which some of the internal services that Forge is gonna offer get like a zero latency, zero, not zero, like a lower latency and lower ingress, egress costs when you're using Laravel VPS.

      Can you talk a little bit about like, what are the reasons for someone to use VPS other than the easier onboarding flow?

      James Brooks:
      Yeah, so the servers are kind of all managed by us, which is like a big thing already. And then you also get.

      Matt Stauffer:
      Mm-hmm.

      James Brooks:
      not, you technically get two bills because you're through Forge, but essentially you only get billed through Forge, which is, which is a nice plus, especially as like businesses have lots of invoices, lots of expenses. Like it's nice to consolidate those where possible. So the firstly, like the reason for getting two invoices through Forge is that you get your subscription, but then we only charge you based on when you start using VPS. So you have your like current subscription, which might be $39 a month.

      Matt Stauffer:
      Mm-hmm.

      James Brooks:
      But then maybe it's a week later you actually provision a server. Well, we'll now like, because we don't use like first of the month billing, it's always anniversary, like that could change and we can't pro-rate it. So we give you an invoice month to month from the date that you sign up, sorry, the date that you start provisioning the server. So you've only got two outgoings, but one service and then...

      There are some features that we want to build that we can do with VPS that we might not be able to do elsewhere. Just because it's kind of like catered to us and what we can provide. So there's options for integrations in the future, which would be nice. And then things like the terminal you saw could be exclusive to Laravel VPS because you don't actually get kind of SSH access to that server.

      Matt Stauffer:
      Mm-hmm.

      James Brooks:
      directly through the provider, right? So we have to provide something for you. And that's a kind of a nice way of managing that could be that Laravel VPS is like, you get the terminal there. And the other thing.

      Matt Stauffer:
      Okay. I was going to ask if the terminal was VPS specific because it wasn't super clear in the keynote. that is a VPS, they're all VPS specific thing. Okay. Yeah.

      James Brooks:
      Yeah, it's up for debate at the moment. We think it's kind of like cool for everybody, but VPS, like there's an actual reason for providing it for VPS over other servers.

      Matt Stauffer:
      Mm-hmm. Yeah.

      James Brooks:
      But we think it is very cool. Yeah.

      Matt Stauffer:
      It's very cool, yeah. I use the DigitalOcean one a lot, and if you were to tell me I would lose that, I mean not a lot, but it's a really helpful fallback. So knowing that we have that fallback in LaravelLVPS stuff, big fan.

      James Brooks:
      Yeah, super nice. And the other part of that as well, goes in hand in hand with that is access control. So using the same permissions that you can have on organizations and teams, that can also restrict access to the servers. So you could give terminal access that way. But also like people have access to the server. You don't need to give them access to like Digital Ocean as well. It's all in one place.

      Matt Stauffer:
      That's great. Yeah. I hadn't thought about that. Yeah, because right now I use the Forge circles to primarily define who has access to those things. And every once in a while someone's like, hey, I've got access to the circle, but you haven't added me to DigitalOcean. I'm like, So yeah, that's nice. Are there any costs if I were to just today take one of my existing DigitalOcean on Forge apps that I know how it's been working, it's been doing great for eight years, and I just want to move it over to VPS? Is there any you're like, eh, be careful if.

      James Brooks:
      Nope, works the exact same way. So no bandwidth. It is technically usage-based billing, but only in the same way that DO and other providers are. So it's a fixed cost over a month that gets kind of broken down into hourly costs with a maximum set on that. So it's always the round number and then that's where you pay. Yeah.

      Matt Stauffer:
      OK, cool. Is there anything about VPS that we have not covered that you wanted to make sure we get to talk about?

      James Brooks:
      I mean, the team have done a cracking job of it. It's like technically very cool to see it come together and actually be as good as it is. Mohammed and Kieran have really nailed that entire service. Very exciting. Yeah.

      Matt Stauffer:
      Yeah, I love that. so with Forge, we've talked about Laravel VPS. We've talked a little bit about kind of the fact that some of these onboard services are coming back. Were there any fun or less fun, but notable technical challenges about moving those zero downtime deployment, heartbeats, health checks over to Forge? And was it more like a recreation from scratch or was there any, I assume there wasn't a ton of code copying, but what was that process like? Was anything interesting about it?

      James Brooks:
      So everything has been written from scratch for these services. So we actually have two new microservices. I hate using that term, but they are. So health checks and heartbeats are both individual services. So they can receive and send their own kind of updates and whatever. And they can scale independently of the rest of Forge. And then, yeah, so even though we have all of this stuff kind of existing in Envoyer, we wanted to do it again, but with like more usefulness. like health checks, for instance, currently in Envoy, it's like, is it an opposite down? Is it 200 code or is it not a 200? With health checks in Forge, we wanted to actually be like, well, this page took five seconds to respond from New York, but only one second from London. And we also show you the actual status code that we received when we were trying to access your site.

      Matt Stauffer:
      Nice.

      James Brooks:
      So you get some more insight. You get notifications around that as well. then health checks, sorry, heartbeats with the cron stuff. wanted to improve that service, make it kind of more natural to use. we felt that some of the way that we did it in Envoy wasn't quite as clear as like notify me after. When you configure it, you can say like, I only want to be notified if that job runs for five minutes longer than it should do because maybe it is one of those kind of flaky third party services that just sometimes takes longer. And we wanted to make that just smarter in the way that we did it retries that kind of thing.

      Matt Stauffer:
      Yeah. Yeah.

      James Brooks:
      And then zero downtime, in Envoyer that uses Tarble. So it downloads the actual archive of the repository from the source control provider. In Forge, it's worth noting actually currently zero downtime will only work for newly created sites because we have to set it up slightly differently.

      Matt Stauffer:
      Okay.

      James Brooks:
      Well, what was I saying? So zero downtime. Yeah. So that Tarble in Envoyer, but actually we could use the OAuth tokens to kind of clone those through Git still. So you get all of the like rollback functionality potentially. You can still ignore some of the files in there. It just felt a bit more reliable than like Git never fails, but downloading stuff has failed. And then...

      Yeah, so that's kind of like where we've brought over features from Envoyer. Technical challenges, I would say, was introducing organizations and kind of refactoring circles to teams. So previously, you would sign up as a person and then you get billed like personally, even if you represent a business. And what's confusing about that is that you, you can't use the same email for multiple accounts. You have to sign up a new email address every single time. And then you could use circles to get added to other people's accounts, but there's like a Venn diagram of what you're allowed to actually see. And it's like a really weird mental model. So we knew that we had to fix that like big

      Matt Stauffer:
      Yeah.

      James Brooks:
      point number one on the list is organizations and teams. Circles just don't cut it. So we spent last year, June onwards, June till August, just implementing organizations and what that would look like and refactoring all this circle stuff to teams. And we had to do a ton of migrations to do that. So we've actually been running organizations on like, the backend was calling everything Teams and it was working with individual permissions and like, role-based authorization and that since August last year.

      Matt Stauffer:
      Really?

      James Brooks:
      Before we had announced 2.0, like we knew that that's the direction we were going in. We actually took Forge down for us for like a few minutes because of this migration. So we were migrating old users into organizations and then kind of overlapping where they had been in circles of these organizations and then migrating them into teams that only were in those organizations with the set of permissions that they which are now roles. So we had to do like all of these migrations to kind of put people into the right state as the world is with organizations. Move all the billing stuff over to it at the same time. Locally, so we ran this migration locally on these like brand new MacBook M3s and it takes like 20 seconds. Like it's super quick.

      Matt Stauffer:
      Yeah.

      James Brooks: \
      Production day comes around, we're going to deploy it. We're like, okay, we know that this works. We've absolutely nailed this. Let's all jump on tuple and just get ready just, just in case. And then, yeah, we took down Forge because the migration took far too long to run. And we're like, well, managed really shows that these Apple and serious stuff is serious business. Like very powerful.

      Matt Stauffer:
      They're very powered. Yeah, yeah, yeah.

      James Brooks:
      And then there was like some performance stuff that came around because we have like this, table that we join on to get permissions and what you have access to. So we did some optimizations around it, but we redeployed it and it's been in production since August. But that has been one of the biggest challenge and bits of work on this version of Forge. So actually, one of the things that we've been doing

      Matt Stauffer:
      That's crazy.

      James Brooks:
      And Taylor kind of hinted at this as well on stage was that what you saw in that demo is actually in production right now. It's just a feature flag away.

      Matt Stauffer:
      Yeah.

      James Brooks:
      So one of our early decisions was, we had a decision really, which was, how do we work on Forge? Do we do it in a new repository? Do we clone the repository and like...

      Matt Stauffer:
      Mm-hmm.

      James Brooks:
      of sorry, fork it and then work on that. Do we do it on a new branch or do we just keep shipping to production as we go? All of which have varying levels of challenges, we opted to just keep shipping behind feature flags. So that's what we've done. It's been a lot easier to test things, but also a lot harder to actually keep like legacy working the same.

      Matt Stauffer:
      Yeah.

      James Brooks:
      But on the flip side of that, it's afforded us the ability to actually battle test everything that we're doing. So we have a new deployment pipeline that's already in production that you're using right now, which solves a few problems with deployments. We have the new UI that's behind a feature flag. We've like refactored all to these actions and then we've updated legacy with it as well. So when we switch you to the new Forge, we are a lot more confident, highly confident, fingers crossed, that everything just works.

      Matt Stauffer:
      Yeah.

      James Brooks:
      because it has been working.

      Matt Stauffer:
      Yeah. Yeah. I would, and I had been wondering this whole time. I'm like, the thing that made me most nervous for y'all. And I told the team this, I was like, is circles. I'm like, how you're going to move this extraordinarily complex system of permissions over. And I'm sure every person is using their circles a little different. So I was just like, can't admit it, but basically what you're saying is we already did. It's just, we kept a circles UI on top of the new system. And at some point you're going to swap out a UI that gives us a totally different level of interaction with it.

      James Brooks:
      Yeah.

      Matt Stauffer:
      Brilliant. Love it. Very happy for you and for me that that's the case.

      James Brooks:
      Yeah, it's done and you don't need to worry about it, which is nice. One of the big things there as well was introducing roles because we figured that the individual permissions, there's like 45 individual permissions currently, which is just like, it's a bit overwhelming. It doesn't really mean anything. It's, mean, it does, but it's hard to kind of quickly like, oh, that user can't do this thing. What permission do they need?

      Matt Stauffer:
      Yeah.

      James Brooks:
      So we knew that we wanted to simplify that to roles, which are just groups of these permissions. But then we had to kind of also migrate every single circle member into a role. So what we did is we looked at like the common groups of permissions. So we knew that like an owner would just have every permission. Owners are the people that actually created the accounts to begin with. So that's easy. That's taken care of. Therefore every organization immediately has one owner. And then admins, developers, those kinds of things. We were like, what do we see as like the top groups of permissions and what do we call those? Because that's like clearly a common pattern that people are applying, whether they know it or not. And then what do we do about all these people where they've only got like a handful of permissions? How do we get those into roles? So we had to like auto-generate custom roles for everybody as well. Which is, yeah, that was a challenge as well.

      Matt Stauffer:
      Interesting. So you basically were able to say like, hey, if somebody is not the owner, but they have all the permissions on, then we're going to instantly put them in an admin group or something like that.

      James Brooks:
      Yeah, yeah, exactly.

      Matt Stauffer:
      If they have this very common set of permissions, we'll put them in the developer group and stuff like that. That's very clever. Cause I was just like, again, like, are we all going to have to walk through this like onboarding process the first time? It's like, no, like we're going to make really smart assumptions. I love that. That's great. It's a really nice pattern.

      James Brooks:
      Yeah. I mean, it's not going to be perfect, but it's like for them, everyone that we've, it's good enough. Yeah.

      Matt Stauffer:
      Yeah. It's good enough. Yeah.

      James Brooks:
      And you can always go through and edit that as well, right? That you could go and change those roles. You can change the roles that users have. You could even say, actually, I don't want to be the only owner anymore. I can add somebody else. Now they, they can manage the billing side of things for you and do whatever else they need to do as well. Yeah.

      Matt Stauffer:
      I'm very grateful. We're going to need that at Tighten. We've had varying levels of roles over the years. And sometimes I couldn't give anybody all the accesses I want. Sometimes, like you said, it's hard to know what to put to people. And sometimes I've got 12 people at the organization with the same permissions, and I don't want to set those same check marks every time. So this is great. I love it.

      James Brooks:
      Yeah. It makes so much sense, right?

      Matt Stauffer:
      Yeah, it really does. I just looked at time, and we're...I was supposed to have been cutting us off like five minutes ago, but I'm just having a great time here. So I have to ask the question as usual, which is, is there anything that we didn't get to today? Because obviously we could have just kept going. Is there anything we can get to today that you wanted to make sure we covered?

      James Brooks:
      I do want to give a shout out to the team because they have been incredible.

      Matt Stauffer:
      Yeah.

      James Brooks:
      They really heads down focused on getting this to be the best thing that we can ship. And I know everybody says that everybody means it as well, but I'm truly grateful for every single one of them for all the effort they put in. Like they've really gone above and beyond.

      Matt Stauffer:
      Love to hear that. Well, James, I talked to several people. So one of the things I like to do at Laracon is to make sure I'm connecting with people who are there for the first time. We do the Laracon sponsorships and stuff like that. But also I just kind of like hunt out people who are coming for the first time, especially people who are new to the Laravel community. And I was delighted and unsurprised to hear multiple of them mention, oh, and then I met James Brooks and he's just such a sweetie. He's so kind, everything like that. And obviously, you know that that's been my experience of you for the longest time. Also my wife, you know, when she first came in the community, you were one of the first people that she met.

      And we left the first LaraCon she was at, she's naming all people, she's like, and then James, and you guys had this wonderful, so anyway, I just wanna name that there are so many good and kind and wonderful people in the community, but you are one of the kindest, caringest people, and you have a reputation of just, you've been in Laravel team since you're an OG, like you said, and I don't know that we always recognize the combination of expertise and experience and OGness and also just being like a good human being together. You sometimes we, you know, someone knows about James the kind guy, he does the podcast and stuff like that. And then sometimes people know James like the big deal, but I just want to name that like you're both of those. And I'm very grateful that you are not just a good person, but a good person doing great work. Like you don't have to be one of the other, you know what I mean? So thank you for being who you are in our community.

      James Brooks:
      I appreciate that Matt. I think it comes from just like the community as a whole. I think that could be true for everybody because at Laracon is always one of the most welcoming, if not the most welcoming conference I've ever been to, ever had the pleasure of attending and speaking at.

      You know, like I went to, when I went to my first one in 2015, everybody was so kind then. And I go now 2025 and everyone's just as kind. And if not kinder, like it just, I think it's something that like Taylor and people like yourselves and Eric and Ian that have all kind of led and paved the way for that. Everyone is just kind and it, I mean, it helps that everyone just seems like genuinely kind people anyway. But it's nice to see that like being kind of the waves of that going across the community in various ways.

      Matt Stauffer:
      Well, grateful to have you as a part of the community and thank you so much for hanging out today and as a dear, dear Forge fan, thank you so much for you and your team doing all the work you did on Forge. All right, go ahead.

      James Brooks:
      I appreciate it. Thank you so much, Matt. It's been an honor to be here. I was looking back at the original episodes I was listening to and it was like Sean McCool 2014. Like, it's been a dream of mine to be on here. Everybody says that, but it's true for everybody.

      Matt Stauffer:
      We finally got you.

      James Brooks:
      Yeah. I'm here. Yeah.

      Matt Stauffer:
      I gotta catch them all, right? Yes. Awesome. Well, thank you again. And for the rest of you, thanks for hanging out with us and we'll see you next time.

      Creators and Guests

      Matt Stauffer
      Host
      Matt Stauffer
      CEO Tighten, where we write Laravel and more w/some of the best devs alive. "Worst twerker ever, best Dad ever" –My daughter
      Inside Forge 2.0 and Laravel VPS with James Brooks

      headphones Listen Anywhere

      More Options »
      Broadcast by
      He went upon the sick report at once, and for three days thereafter raved of crucified women with fair hair, of children lying dead in the ca?on, of the holes in his boot soles, and a missing aparejo, also of certain cursed citizens, and the bad quality of the canned butter. And the Indian may be trusted to know of these. Here where the jacales clustered, there was grass and wood and water that might last indefinitely. The fortifications of Nature had been added to those of Nature's man. It was a stronghold. "Doctor, he can't die. He mustn't die," said Shorty in agony. "The regiment can't spare him. He's the best soldier in it, and he's my pardner." to Miss Jerusha Briggs, at this plais, and I will pay the "I did," answered Shorty. He was carrying his Belbis beam, of course. The little metal tube didn't look like much, but it was guaranteed to stop anything short of a spaceship in its tracks, and by the very simple method of making holes. The Belbis beam would make holes in nearly anything: Alberts, people or most materials. It projected a quarter-inch beam of force in as near a straight line as Einsteinian physics would allow, and it was extremely efficient. Albin had been practicing with it for three years, twice a week. Mating, he thought. If the chain of obedience was broken would the trees refuse to obey, in their turn? Puna had said so, and it was true. And if the trees refused to obey there would be no mating.... "Wandered, you mean. Just wandered off. And—oh, I suppose a few have. Our methods aren't perfect. But they are pretty good, Johnny: look at the number of Alberts who simply stayed around." Then suddenly she began to plead: He took his place beside her, but he could not fix his mind on what they sang. In the intervals between the[Pg 153] anthems he was able to pour out instalments of his tragedy. Bessie was very brave, she lifted her eyes to his, and would not let them falter, but he felt her little coarse fingers trembling in his hand. God save the Queen!" Tilly had a spurt of anger. HoME大话西游免费版法宝用经验升一级要多少 ENTER NUMBET 0017
      heze5.com.cn
      nemans.com.cn
      taizi6.net.cn
      shentiba.com.cn
      www.zstotem.com.cn
      liuqu0.net.cn
      www.junan7.net.cn
      sikou0.com.cn
      www.xidan2.com.cn
      xiaqi5.net.cn
      日本女同性爱毛片 妹妹av黄色 色女人激情图 双飞做爱图 6655人体亚洲 WWW.720BB.NET WWW.LBPMK.COM WWW.GEGE0.COM WWW.9ZY.COM WWW.AKXS6.COM WWW.SE59.COM WWW.V2511.COM WWW.TE3456.COM WWW.WUYESE.COM WWW.HNYEZF.COM WWW.977X.COM WWW.465E.COM WWW.CRXZ.COM WWW.OMYTVS.COM WWW.ENET.COM.CN WWW.8FKD.COM WWW.HYWIC.COM WWW.313K.COM WWW.NI37.COM JESSCIA.STROUP WWW.MXIEZI.COM MIDE543荒木在线 偷拍自拍在线录音 欧美少妇乱淫图 怡红院更新前的主页 黄影视 裸片A片 全球免费共享视频在线 岳母丝袜乱论 mcomcomc免费A片在线播放 大型色小说 www搞处女cn 中文往往对电影 欧美sm免费无插件在线视频 亚姐妹 咪米色网站 亚洲视频国产自拍亚洲色图 怎样进黄色电影网站 华人av偷拍视频在线 亚洲色图美利坚 oo后自慰高潮网站 性爱技巧9页 色色影www38rjcom wwwribi 美国伦理母亲电影 57AV00com 超碰涩涩涩 自拍偷拍卡通动漫黑白中文 内射妹妹 快播 3344nq 福利云点播免费日本A片黄片 144人体图片 appssav25com wwwpp856cc 人妻熟女自拍在线播放 快播理论黄色片 看老婆被技师抽插 少妇舔阴茎 欧美色网胖女人 kk44kk44com 黄色淫乱片子一 澉情五月网vv99vvcom 成人丝袜视频大全集 a资源吧亚洲首页 丝袜电话 在线影院淫色熟妇 欧美成人网站555dvd 西西性爱电影 黑太阳731续集之杀人工厂 欧美丝袜整片 sexwww ddfnetwork免费 射精卡通动漫 黄色l乱伦 变态强奸片 强奸乱伦破处 欧美干老太婆 小泽玛利亚女上男下 cao320AV 快插毛片电影百百度 淫淫色色色色 撸吧全迅 操少妇双洞齐开15p 日本有什么黄直播app 动漫啪福利 大香蕉霞 1769导航 成人文学公共汽车 老婆的淫荡晚会 大鸡吧在线av 成人嘿咻嘿咻网 成年人电影毛黄片 国语对白干妈视频 老头抽插美女 亚洲超碰撸撸在线视频 神雕侠侣伦理片 wwwbibiav520com WwW683kKC0med2k 每天射十次大叔 www97kxwcom av能看的操逼 WWW48com 一本道性欲?⒌纳俑 姐姐在线爱 在电影院偷情舔逼 3366vod下载 成人玩具哥色咪色 发嫩藤 和姐夫做爱吸乳 御姐很哀伤ckplayer wwavav521com japanesex无码日本动漫 色色哥哥色 孙丽让谁干过 淫chacha 张柏芝艳门b照图片 操中年女人的肥臀骚逼 长谷川由奈写真 妺妹网日本人体人体图片 cccaobipian 亲家母狠狠撸 东莞扫黄女子图片 欧美骚妇淫色诱惑图片 很很干很很撸图片 淫乱无码网站 最大胆美女人体艺术 她噢片级 春暖花开有你性亚州 无码 颓废的国模林邈子 pptv色色电影 超爽的性爱16p 影音先锋南洋第一邪降 肏阴部 手机性爱视频综合社区 丝袜诱惑小穴 台湾妹视频 66abcd怎么不能看了 国产人妻多年3p4p激情照62p 回家开门时被人强行拖进家中强奸中的女优 亚洲激色图 医生强奸 等爱的玫瑰 petsaga 生死狙击辅助 dewsuperior 操骚逼女 少女之交配 偷拍wc欧美 欧美女与动物发生性关系视频 影音先锋影院影视 99人体艺术网com 哥哥ppp 操乱伦操骚逼小说 乱伦另类撸 撸一撸色奶奶有妓看 韩国嫩白美女小穴图片 韩有天伊宝媛 亚洲另类先锋快播 超碰肛交免费视频 五月天丁稥婷婷 人体艺术女同性恋视频 翘起鸡巴日亲娘 亚洲性爱视频网站 国产AV资源百度云盘 东亚兽皇 韩国日本偷拍自拍视频 操昏迷女逼图 骚穴黑丝口 亚洲欧美卡通动漫偷拍自拍 theporn最猛成人网站 大鸡巴干衅电影 人体艺术图片有人体艺术图片 37av免费视频 漫画淫图 浴室性片 人妻被公公操的动漫 葫芦岛性息 轻吻也飘然在线福利 www老人兽laojjcom 韩国高中生美穴 日本人体阴唇艺术摄影 兄弟交换夫妻用 20岁成人免费视频在线免费试看 韩国美女主播阿里快播 商务qq黄色片 2017伦理电影手机农夫山泉在线 68人体艺术私处 赶紧撸东北浪妇偷情小说 010酷播妹妹 HDXXX幼女 国产超级法在线 俄罗斯人与shou 成人三级片黄片毛片 四虎相关网站 夫妻交换高清图片 米雪儿麦库尔A片 干少妇丝袜小说 色久久影院app最新版 贾静雯三级片 舔b全露视频 聊城交通违章查询 爱色影天天色 美丽熟女网 香港大胆人体 丝袜骚妇丝袜腿模 我的第一次被干从清纯到淫荡的幼儿教师 色中色人体艺术电影 美国裸体俱乐部 黄色一级倨情 91retvwww91retvm91retv 玉蒲团淫女 调教母狗的网站 另类激情小说淫色人与兽 五月天涩涩爱 情欲轮奸小说 移动上不了h网 东京热大乱cd2rmvb 怎么在快播里看黄片 前田かおり 红磨坊影院 高清成人图片 开心激情影视 美女娃娃做爱 御の二代目谁有E谁有G 色五月女王来了图片 俺去橹 色七七2018综合 久悠影视 李宗瑞偷拍影院 日韩αv小视频 vv影院 蒂亚AV资源 avtt144 韩国美女与男友宾馆开房嘿呦自拍表情销魂,我一旁拍摄她男友不行换我上,嫩 午夜丁香花在线电影 青青私密视频 性交无码教学 在线看片瑟瑟爱 日橹免费在线 酒店真实高清露脸对白 亚洲 小明看看 大香蕉X影院 阿v影音在线观看 五十岚纪子在线视频 诸葛影院在线理 日日夜夜不卡另类视频 了:国产自拍 亚洲狠狠色无码视频 黄色咸网 9877黄小游戏大全手机版 新视界影院 magnet 日本AV黄图 mp4 福利大鸡吧 九州资源永久免费视频 真人啪啪啪视频AV 邪恶插阴口动态图 五福影院aⅴ凹凸av 中国内地在线av免费视频 看看十八岁的性器官视频 淫荡便器电影 亚洲VS天堂 ssn190 谷露影院手机在线0 成人A片 迅雷下载 aiaifulidaohang snis885磁力 834成人视频 手机在线电影 国产区 色青春亚洲综合 影音先锋资发布站 香港成人夜色影 221sihucim 彩乃奈奈中文字幕在线播放 h版神探夏洛克下载 丁香五月网韩国主播 xxo影院 大尺度广场舞视频 日本换妻性交视频 一本道mag magnet 免费色系视频二十多分钟 2018仙女屋19禁电影大全 色酷狠狠干 8090电影风筝 女仆资源 曰本黄色视频免费高清 好XXOO在线视频 潮喷合集丝袜无码mp4 看着我的女友变淫荡 mp4 成人看片小视频 四虎影院手机观看视频 五月丁番 巨乳无码电影 平凡夫妻性生活自拍 3p美女拍拍 91密秀官网 九九深夜福利在线免费试看 干妹妹高清在线影院 依人综合在线观看视频 水上百合中出孕妇 sss黄片 洗澡自慰在线播放 三d影院深夜不再寂寞 色站导航丁香色 迅雷无码冲田杏梨 AV走 ssni-056 胸部跳蛋视频 小泽玛利亚无码在线视频 性交视频内射白浆视频 操洒店小姐 唐朝AV中文字幕 偷拍福利萝莉 后入大屁股美女全集 亚洲高清自拍有码 吃女友的胸她娇喘 日本高清959dd 一级黄色录像带 tyod-278hd 整个福利 感谢不删好友不屏蔽之大恩院线同步电影 发给没时间去电影院的朋 今日排名第一页长片 xooⅹ430 爆乳保姆激情电影 国产自拍裸照 mp4 操日本美女视频播放 被控者完整版在线观看 色搜在线播放 深夜直播 magnet 色悠久久桃花综合网 另类小说五月天综合网 色琪琪aⅴ stringendo av仓库永久地址 ww884aaco wuxiaorui renrenmoshiping japanese AV 谭晓彤在线福利视屏 成人操逼激情视频 维他命色vvtvt av宫前幸惠在线观看 颜射大奶在线播放 透b叉叉在线自慰视频 老司机影院院写真集福利 国内自拍va偷拍视频 本庄玲在线 国产足j在线观看 播放3个98年艺校小美女买完零食回来比赛 草榴在线自拍 国产在线 幼幼在线av 校花啪啪啪影院 少女哥哥我想看那个床震作文 换妻性交真实影片 日本做爱全集 酒色成人网1314 日韩欧洲淫荡视频 7zav gouhemaoxingjiao 国产自拍操逼直播 迷奸技师 花井美纱 真性中出在线播放 萝莉还债视频内个 热热色源20在线观看 让人想不到样子清纯的妹子居然在公园色诱个老头到厕所调教舔逼喝尿吮脚趾看大爷那 骑士影院宅男福利 苹果在线免费看a片 性女传奇 干小妹妹 美女写真摄影视频 真实破处妹子被日哭了 逼里香1 正在草她老公打电话来一边草一边打 风吟鸟唱摄影师嫩模 黄色网站在线视频 欧美裸体模特展示阴部app 欧美番号库 哦快拿大鸡巴操我 mp4 黑人大干金发美女 老司机免费福利AV 捆梆绳模羽洁视频 成人视频 你懂的 操我2 1乱伦强奸图片 淫色戏院 在线超碰天天 先锋AV 现场 sexo 漫话 东方在线αv 群交视频种子 街头射头视频迅雷下载 男同志cartoonyaolp 男人的福利你懂得 免费不卡的亚洲AV 影院在线观看 乖妈姨通叔伯 av大明星97影院 55xxp。て0M 并木优 一周年 穿线资源合集 mandingo 黄可46分钟三邦车视 美女妹妹自慰视频 888kbkb 六月停婷 澳门 人人g 漂亮的小姨h小说叶凡 黄色视频青青草 伦理片工作的女人斩 图片区成人福利 欧美激情 在线观看‘’ 美女内射无码 免费直接看片的网站 窥器美女 清纯援交女偷拍 大胆美丽人体漫画 波多野结衣被内射图片 快播石狮艳照门 成人电影导航qvod 成人大尺度gif 黄色录像强奸片 欧美人体私处摄影 真实夫妻生活 人体艺术照片逼特写 意淫强奸 宅男福利屌丝 � 汤加丽巴巴拉 偸拍骚妇 解说大咪咪女生丝袜 淫荡美骚妇的激情 公媳吸乳奶妈诱惑 WWW_7PO_COM 熟女内田由衣快播 人体艺术性爱小 333kikicom 人妻凌辱 快播网 男女操逼片视频 大鸡吧肏屄里了 少妇内射潮吹 快插我的蜜穴 爱爱快播撸一撸 韩国十八大禁片种子 前黄小学校车迷奸案 欧美肥妞妇乱 亚洲色图 欧美色图 经典三级 大色体 东欧少女 无码 小说 bt 亚洲 论坛 嫩臀骚逼 乱配母导航 红楼十八春tu seseav图片 成人色视频xp 吉吉影音母乳片 岛国色色图片 大鸡鸡插小屁眼水真多 韩国女主播夏娃7部合1部影音先锋 人之初性本善 高级电工证 生活观察网 北京天安妇科医院 中国铝业中州分公司 我的美艳舅妈 志村玲子与黑人图片欣赏 李宗瑞吴亚馨未经处理 网友自拍丝袜足交视频 春暖花开性吧校园春色 日韩美女裸体自拍艺术照 什么都不用下载无毒性片视频 堀北真希无码 涩涩爱综合 人体裸舞 da骚屄 西西妹妹大胆的展阴 冰奇套图种子 www510ccam 韩国色网站 小说交换的妻子最有味 guomobaibi 波多野结快播放器下载 123操b 爱鸡巴的小穴 我轮着干了两个女学生 和多人操逼的感觉 自拍偷拍视频下载 成人裸照无马在克 东京热快播最新成人电影 人兽交视频网址 热点资讯天天网美女人体艺术鳖客网 欧美奶奶15p 黄色少妇天上人间 西西人艺美女肏穴 少妇用卫生带 主角叫小满的乱伦小说 搞女儿被老婆发现15p 亚洲包色图 偷拍江祖平美腿图片 堤莎也加torrent 色尼玛乱伦性爱电影 少妇丝袜在线狠撸 不卡影院27号早间九龙电玩捕 爱主播怎么让主播看不见你 日本av在线sss 免费大片ccc858com 河北传媒北区偷拍 日本av删除删除删 亚洲专区一本道 老汉玩肥婆 东方大鸡巴 天龙淫女传 WWWBET365COM 韩国炮友打炮自拍视频 韩国女主播高清图片全集 骚逼老婆做爱露逼视频 隔壁邻居乱伦做爱小说 极品人妻援交系列套图 人体艺EEcom 苍进空av网址 综合插插a 操妈妈屄15年 日本h彩漫 生物老师被操 性爱自慰碰碰视频 波多野结衣熟女乱伦图 超碰免费视频caopocaowwwblz1000com 日本特级女人无码 家庭乱伦幼幼操逼小说 儿童爱爱网站 幼幼圣光福利 伊伊人妻 AV日日逼 大奶子被干了快播 好吊日AV在线视频19gancom 19isecom色哥哥帝国 模特屄re 淫香五月天 调情网址 优优人体艺术爽图 成人全彩动漫 好屌妞大色网小色网 亚洲欧美制服卡通heshizfucom 老师干儿子淫秽 男生的鸡巴操草你生的蛋裤子黄色视频 五月天激情古典 空姐丝袜大乱11p 免费看欧美黄色大片网站xxx av国语版 被虐家庭女教师 人与兽乱仑 最新里番社区 yyaaVvmagnet 三级黄色添下体 伊人在线视频变身6 wwwpp6scpm 处女草草www 网友自拍seba 520最大胆人体艺术 人妻性爱淫乱 姐弟经典性交thunderftp 泽尻绘理香作品快播qvod百度影 苍井空作品下载网盘 波多野结衣逼器 婶婶的原味内内 我与姐姐乱轮小说 偷拍自拍高潮影院 AV视频色图 华人95偷拍自拍视频 东亚AV 影音先锋熟女少妇 五月天激情亚洲图片区 7777bbcom 沈阳推油 日本A片555影院 欧美36d性爱 图片区偷拍自拍15p 怡春院分站 酒色网 美女 撸撸射秘密爱 yy44bbcomcaoporn29htm 影音先锋av天堂2015 曰本骑大哥操逼自述 亚洲五十路熟女在绒 郑州换妻俱乐部偷拍 撸撸色最新网站 亚洲AV_插插射射 巨乳泽井芽衣在线无码 985bbcon pp494c慰m 人兽性爱欧美三级片 金发天国在线播放1 少妇艺术人体图片优优 9h明星合成裸体网 毛片基地美女图片 鸡巴插小美女淫穴 眼镜少妇参加老外群P聚会有5个黑鬼真正操到爆三洞已爆废 经典千人斩首页wwwiiii41com 米奇第四色骚姐姐 天使社区换成什么平台了 亚洲在线做爱 中文亚洲欧美 35vucom 开心色色自拍偷怕 快播电影日本理论片 美女高跟踩踏图片 偷拍厕所在线 成人撸多宝 在线播放富家女被干 性涩影音app 专业偷窥在线视频 久久精品视频在线看99-百度-百度 美女拷臂动态图 牛牛射在线av ymdd099磁力 校园春色系列小说合集 让你的女友高潮吧 亚洲第一AV天堂网 兰桂坊野战视频种子 做爱漫画小说图片 871kkcm 日本成人图片小说ed2k 韩日撸逼 鸡逼逼在线视频 清纯唯美在线国产亚洲色图美腿丝袜 美穴撸 性交后尾图片 大香蕉伊人萝莉 黄色日逼紧逼医院护十 天天更新欧美性爱日韩AV国内自拍偷拍电影 色色资源最新地址2017 dizhi99妹控 类似于蜜桃影院的网站 李小璐被强奸乱伦 卡戴珊三级 插进射吸爽春 黑丝诱惑亚州性夜夜射 丝袜夫人 类似巨乳淫奴的小说 美女咆轰图 WVW2499 90后美女做爱图片 干死美女电影 刘亦菲阴道毛多吗 欧美视频xxx 最新电影2014sewoyingyin 我和小舅妈的故事 色史中色 av兽 黄网视频 黄色网站电影二级影片 人体艺术toupian 我干美女老师做爱 黄色日批照动态 日本丰满熟女五十路 xxoo无插件 张悠雨房乳特写 水水美妹 原纱央莉大尺度人体 des574 儿子的面前太过美丽的妈妈 操b激情文 美女双穴被奸 福鼎市人民政府 银子变黑 侯镜如 日本逼操图片 丽江美女偷情 偸拍野站视频 做爱大全视频观看 男人添女人乳头 色女16p 女性抠穴图片集 日本女老师的小穴图带毛的 屄最黑女明星 激情漫画套图 百度搜索成人影视小说 翟凌的无码图 mm六月天 台湾美女叫床 女子学校返回途中乱搞6p淫乱大派对02 妺妹林人体艺术 最好的我们神马影院 强奸迷奸轮奸 亚州图色干哥哥 黄片处女破处流血 淫大妈影院 立花20p 舔姐姐咪咪 岩佐あゆみ吉吉语音 长谷川凉子 欧美t0upaizipai 撸小人琪琪影院 幼少女口交 影音先锋幼幼黄色视频 涩涩网影音先锋观看 性感护士15p 得撸小说 小色哥脱衣舞 五月天成人操逼小说 人与动物法国zo0 有关做爱的网页 家庭伦理小说深爱五月wwwcbcb093com 成人美女视频免费wwwlu2310com 莎拉波娃五月天丁香五月 A片毛片免费观看天天干 噜噜色影院噜噜色电影色噜噜影视噜噜色网 索取玛雅最新网址 娇妻被淫记朱茵 色小说综合导航 欧美男女性抽插动图片 我爱咪咪影视网 暴力肛交小萝莉 我淫我浪 螺女挑情四级下载 91porr 大乳大臀美女的性爱15p www点爱人体点com 人兽杂交av电影免费下载下载 美女视频免费播放啪啪百度百度 poco能搜成人片 色妹妹sex 幼童pussy 女生未成年自慰网站 wwwzzjixxxxe 洗濯屋手机在线观看 人人干全免费视频xulawyercn 黄色片做爱后入式 中国伦理电影网站大全 操操曰偷拍上传 WWW唐人电影www69rrrrcom 777sejingwang 大色网不用播放器 视讯主播先锋 kanxxx 日本女人大屄图片 父子乱轮 姐脱你看淫淫 操久国产片 成人Hh漫画 日本人体艺术窝窝妹 韩日女优大奶视频 欧式性爱满足你的欲望【2937】 三级色图网 大尺度性交电影 鬼吹灯第二部有声小说 qq电台有声小说 电台播放有声小说 yuemu春色 vagaa樱井莉亚片子 小泽玛利亚1024800 小泽玛利亚口暴 求可以看的h网 www狗酷音乐com 开心尽情五月天 怎么在快播里看黄片 色狼巴士 性生活时间 征服淫荡少妇 撸时代 额尔撸 看片 magnet 色网站4438oxox 悠悠比资源 大香焦久草是易视 一本道手机高清AⅤ在线2017 香蕉视频app1024 mlgd488云盘 在线自拍大神约酒店 成人 免费 动漫 视频在线观看 超碰在线视频进入离开 杏花社福利成人 免费 动漫 视频在线观看 成人影院和狗 日本骚黄视频 在线白丝裤袜美女 欲望太平洋在线玩 手机看国产短片福利群 谭晓彤脱黑奶罩视频 操逼福利动态影院 百度97 成人自拍淫色 Caoporn任你操 第九影院男人社区A√电影 亚洲系列爱情动作影院 手机成人免费大全 sefuliwng 福立盒子 无毒福利网址大全 桃野铃 yJ丨zZ一Tⅴ 人兽杂交操b视频 桃奶木 淫妻妹 偷拍 自拍 一本道 青娱乐精品视频一级 夜店认识的高挑女白领一起吃饭喝多了,带到酒店趁不注意安放摄像头 澳门金沙大鸡吧操逼视频 人人操 人人妻 1自拍偷拍伦 神马福利小说图片大全 亚洲 偷拍成人视频 萝莉小逼 任你操这里只有精品6 午夜福利理论yy 4480 黑人与人妻中文系列 大佬色在线观看精品 26UUU亚洲一26 国产网红自拍福利视频 蓝沢润黑人在线播放 伊人网综合网站 偷偷摸视屏在线 黄色里番在线看1 弱气乙女 浴室套图 成人影院a在线看网址jajjaatat 开发三味 6无码magnet 飘花网sdde481 五月婷婷在线看 爱泽心梨在线 XRW-498播放 1024东方 SNIS850在线观看 汤姆影av 另类亚洲图片小说在线电影 超碰视频天堂 菲菲影院 东北娇妻土豪视频 大香巨乳家政爱爱在线 大学生兼职 偷拍下载 嗲囡囡在线福利视频tv 女主播朴惠恩福利 xiengjiaoshipin wwwsaobibi5353 打飞机推荐极品高颜值网红美女主播收费房大尺度福利高清无水印打飞机推荐极品高颜 人妻小悠福利在线 王薄团在线观看 色伦理片 穿着内衣做爱操逼的视频 2018仙女屋19禁电影大全 欧美老头av www4438X2com 伊人谷姐干岳电影网 偷拍自慰国产在线视频 94色人格影院第四色 avttt天堂2004 日本狼拍屋 香港皇室伦理电影 网红雅兴视频链接 84ab午夜剧场 桃大桥未久在线 一人一碰操视频 谷露做重 李丽莎福利 青青草成人成人电影 美女视频免费视频 jvid免费视频 正在播放 迪卡侬所有视频全集迅雷 图片区亚洲另类偷拍 欧美有码性爱 gqwuma 欧美中文合集磁力 木村都那迅雷磁力链接 黄色视频555 在线 里番 纯 av列表 岛国丝袜 色欲影视狠狠插 ac无码ac天堂 234hu四虎在线 动漫男人和女人操逼 小萝莉被内射视频 小日本做爱高潮视频 想要零用钱妹妹帮素股结果爽到自行插 性爱互插阴交视频 驯服吴静娴 崩坏之人璃沙 色在线视频综合影院 三邦车在线手机伦理片 熟女AV 视频 日本妞啪啪高清 公公夏夏天强奸未婚媳妇 www5595con 国产自拍白丝 西野翔在线播放叔母 近水楼台先得月 PORN 人妻 二人的春光 麻油拓也 柳岩磁力链接 草包网在钱精彩视频 黄色舔淫视频 超级诱惑 mp4 女主角医院看男友隔着帘子被搞在哪里可以免费在线观看 538国产视频视频无线 泰迪熊rct502在线播放 废柴导航青娱乐 海量无码av play sss 操逼126 4438成人网官网 色男人色天堂旧址 少妇自拍影片 韩日午夜404影院 ntr先锋资源资源 内地av 格影院第四色先锋 春丽成年AV动漫 车模聂子雨 成人3d动漫免费视频播放器 午夜福利第一村 2素人搭讪a片 哥也高色 西川结衣先锋在钱视频 紫禁城轶事哪里能看 成电人影在线电影。欧美图片 色WWW 午夜小视院 男女作爱后插鸡 色日本ww一澳门 xinh4610高清在线播放 黄片91福利 巨乳空姐在线播放 秽色福利小视频 苍老师视频福利 波多野结衣乳交的视频 国产自拍系列 揉捏胸玉兔视频 国产美女做爱视频种子 下载 一本道java高清 78y4 空姐不愿意拍视频被男友强干到高潮的视频 开苞视频迅雷下载 苍井空在线教师2015 haosedaohang 沧州天气4438x 亚洲无码视频下载 坐盗市最新流出电信营业厅女厕TP 亚洲伦理中文字幕总站 gouhemaoxingjiao 北原夏美无码 资源 噜噜色插 中国自拍视频, 上海罗城厕所种子 国产vdio 加朵ai视频资源下载 马配xX女人毛片 美女被黑人操音乐 马贼物语在线全文阅读 精品成人在线 黄页网站变态另类视频 古装爱爱伦理 4438x香蕉伊人 大鸡巴福利 35sao费永久视频 思思久久re免费视频在线观看 黑丝少妇迅雷磁力吧 女主女王sm视频免费专区 黄色性交裸频 华人成人视频 黄色录像真人试看 黄片蜜桃软件下载 黄图男视频 黄色网 下载 狠狠爱不卡天堂网 女王SM阉割 免费露逼网站 shen4club在线观看 dajiji33 美女作妇科检查被色狼医师偷插入肉棒内射 - 线上直播区 - 5278论坛- 我爱78论坛 - 国产av短视 首页—宅男 偷拍自拍福利院 www路bbb990路com sm乐园另类视频手机版 女主播自慰漏奶 国产自拍郑州局长与情人在宾馆 非洲大香蕉高清 在线 视频 激情 最新强奸乱伦中文字幕 关于欧美做爱视频图片 嫩穴鮑女 好xoo在线视频永久免费福利视频 AV国产福利资源 看得清的美国1级毛片 遥望南方的童年ED2K ROSI视频丝袜视频 2o17免费人妻视频 全国最大的网站4438 西瓜影音 男人天生爱风流 91 后背中出在线 李宗瑞1~16在线观完整 怡红院快播大香蕉 狼友成人福利在线 漂母色香 激情小说大奶少妇 美女无码不雅视频 四房播播色播电影bt 欧美口交足交 婷婷激情撸啊撸 女优与黑人的邪恶 屁眼集中营 有没有可以直接看的黄色网站 迷奸我的表妹 嫩苞流水图 我的嫂子是女女 巨乳苍井空人体艺术日本