Michael Kennedy: Managing Your Own Python Infrastructure | Real Python Podcast #272

Real Python · Beginner ·☁️ DevOps & Cloud ·8mo ago

Key Takeaways

Michael Kennedy discusses his book 'Talk Python in Production' which provides a cloud-agnostic guide to building, scaling, and managing Python infrastructure, covering topics such as containerizing Python applications and avoiding cloud service lock-in. He shares his experiences with deploying Python applications and managing infrastructure using various tools and technologies.

Full Transcript

Welcome to the Real Python podcast. This is episode 272. How do you deploy your Python application without getting locked into an expensive cloud-based service? This week on the show, Michael Kennedy from the Talk Python podcast returns to discuss his new book, Talk Python in Production. Michael runs multiple Python applications online, including a training site, blog, and two podcasts. While searching for the best solution to host his business, he documented what he learned into a book. We talk about containerizing Python applications, generating static sites, preparing for traffic spikes, and avoiding cloud service lockin. All right, let's get started. [music] The Real Python podcast is a weekly conversation about using Python in the real world. My name is Christopher Bailey, your host. Each week, we feature interviews with experts in the community and discussions about the topics, articles, and courses found at realpython.com. After the podcast, join us and learn real world Python skills with a community of experts at realpython.com. Well, I'm very happy to welcome back Michael Kennedy to the show. I'm glad you could make it out in wartorrn Portland as it is. >> Christopher, thank you for having me back. You know, it's [laughter] >> it's all right out here. It's all these thing all these crazy things you see on the news. It's like if you leave the five block area where that's happening, then >> yeah, >> it's like it's not like that. >> Yeah, totally. It's such a beautiful town. We looked at moving there when I was moving from Hawaii, partly because of all the gluten-free options, which are amazing there. [laughter] >> Yeah, the the food scene's bigger. >> Well, you're back after 5 years, so that's fantastic. And congratulations on 10 years of of Talk Python, I guess. >> Yeah, thank you so much. Yeah, Talk Python has been around for 10 going on 11 years. And >> yeah, >> also congratulations to you. We we both been going a long a long time. And >> yeah, that's cool. Yeah, >> when I started, there had been other Python podcasts and they all stopped >> after a while and you know, there's not many. Even today, there's not very many. And so, it's it's a big deal to keep going and keep working on this stuff. So, yeah, congrats to to you as well. >> Yeah, I don't know if you edit it yourself. I'm still doing that, which people think I'm crazy, but I do enjoy it. And [laughter] so, >> you know, I go I do have an editor. Yeah, >> he's an amazing guy. He does really good work. But I find sometimes that it's it's better like if I'm in the moment just to like go through it and just sort of capture >> Yeah. Yeah. >> capture the ideas and the inspiration that have have been flowing. So, yes and no. >> Yeah. Yeah. Well, you're here to talk about a book. Is this the first book you've ever written? >> Let's say yes. >> Okay. Yeah. >> I I published a book I co-authored a book with Matt Harrison. >> Oh, okay. I kind of did most of the background work and he did [clears throat] most of the book writing work on it. >> Okay. >> Yeah. And that was on PyCharm and it's good but I don't I don't feel like it counted for me as a book cuz like I did sort of the foundation but I didn't sit down and write the book as much. So this is the first solo book that I've ever done and yeah. >> So it's titled talk Python in production and then I'll give the subtitle because I think it's good. a cloud agnostic guide to building, scaling, and managing your own Python infrastructure. And it's uh what officially released October 3rd, 2025 here. >> Officially released. And you know, it's a little bit like app store like I think it came out on Amazon on the fourth or fifth after they approved the book. [laughter] You know what I'm >> sure? Yeah, totally. >> They didn't make me add inapp purchasing to the book like Apple did for my apps, but you know, it's okay. >> Yeah. Yeah. That's so funny. I remember that [laughter] battle you were going through. You've done a couple interesting things with it. One, I just want to talk about the book generally a little bit. I feel like it reads like a blog, and I do not mean that at all in a derogatory way. You include links to lots of other resources and blog posts by other people that like explore topics more deeply. And a couple questions there, like why did you choose to do that? And then the other question is, do you think a typical quote unquote publisher would be against that practice? >> You know, I actually I think they might be just a little bit. >> Yeah. >> I think they want to have a lot of control over it, you know. >> Yeah. >> And to me, I was hoping to capture the zeitgeist, like, you know, the the feeling in the air that other people are also going through. And that was a lot of the motivation of the book is like I just I see a lot of people struggling getting their Python apps out. >> Yeah. >> Or I see at all or I see people struggling with overly complex, overly expensive setups that are probably amazing but probably not suited for their context. One of the most important lessons in programming I think that people can take is >> context is crucially important for what you're doing. Right. >> Sure. >> If you >> Hey Christopher, you should have unit tests. >> Oh, is this a little utility you're going to run one time and it's going to transform data over and you're going to throw it away and never run it again because now [laughter] you got the new data. >> Yeah, >> you probably shouldn't have unit tests. You run it until it works and then you're happy. You know what I mean? like there's cuz your unit tests are for generally for like long term and as things change you want to make sure it keeps working right >> and I feel like in the deployment side and the cloud side we have >> that that sort of that gets a little bit opaque and people don't see it as well because people love to talk about oh now we've leveled up now we're doing this next thing and look how amazing now we're bringing in this service too and look how cool that is plus on top of it you have financial incentives that are not necessarily aligned, let's say. >> Yeah, I just watched uh Corey Dr. uh one of the many times he's talked about initification, if you will. Probably the first time I've cursed on the show, but uh whatever. It's a it's a word. [laughter] >> Yeah, it's an amazing >> Yeah, >> it's an amazing concept. I really I like Cory Docro. I like yeah that concept, >> but it's true with hosting entirely like just like this idea of like who are the customers >> and where are they sort of pushing you toward and then you're sort of locked into it. And so I like this idea of sort of again sort of carving out your own >> piece of uh the internet in that sense. >> I'm I'm a huge fan of autonomy. uh you know I I would take a different job if you not it doesn't apply to me necessarily because I have my own company but [laughter] but if I was working at a company I would take a different job that paid less that gave me more autonomy with my time that gave me more autonomy with the technology that I choose that I get to program with and so on even if it paid less you know maybe not extremely less but like to a significant degree I feel like this autonomy >> is it's really important But also it keeps you inspired. Yeah. You know, you're like, "Oh, I get to work. I get to do what I exactly what I want to do." And when you sort of carve out your little own piece of the cloud, you can look across the entire open source world and go all of these things are possible. I can bring in any of these pieces that I want, >> right? You're not locked into other people's solutions in that sense. you. It involves a learning curve and uh some potential pitfalls, but hopefully there'll be resources for you. But yeah, it's nice to not be whatever K letter of of services offered by [laughter] AWS at this point, you know. >> Yeah, I just logged into AWS. I mean, gosh, it's must be over 200 services there. It's >> it's a significant number. So, >> yeah, >> you know, and we were talking about incentives, right? There's there's a bunch of really big companies that have truly complicated scenarios that need solving and those companies pay the hosting companies millions and mil hundreds of million dollars potentially. >> Yeah. >> And then when you show up with your $20 a month, >> right? >> You know, like that's sort of the like, okay, we're going to kind of lean towards the hundred million people because it's better. >> We're going to really design the features for [laughter] them. I know they consider everyone but at the same time there's just natural drift that occurs right and I don't know there's just something wonderful about a >> oh that's all it's that simple yeah it's that simple and it's just like a a couple of things beyond running my app in development and you're good to go. You know what I mean? And that's what's really kind of cool is that it is more than a book on DevOps and setting up a Python project in a sense and putting it out on the web. It's also this journey that you've been on, this sort of post-mortem that you get to see all of your background and it's not you specifically looking at a a fictitious example. It's like this is your business. you also give, you know, an example project for people to play with and maybe we'll discuss that further as you go, but the idea that, you know, no, this is what I'm doing and these are the choices I made and why I made them, which I really appreciate in the book. >> Yeah, thank you. I really like to give these looks inside what I'm doing or what I can find out that other people are doing if I have that visibility because that's what I wanted to see when I was getting started. I didn't want just something in the abstract. I wanted to see like no this >> this these are the four things that we actually these are the four apps we how we build them this is the web server we use and here are the settings that that make it way better than if you just got it out of the box for example right those kind of things like oh okay I can just copy that and I'll just mimic that but that's not for me but this part is let's go >> right you can kind of choose from the menu yeah >> yeah a buffet a deployment buffet >> yeah but I was really intrigued that you were like you know linking out to like Highex blog and you're linking out to to just a whole mix of people, you know, um across the board in there. Was that I just kind of make sense to you or is that kind of in your style? >> It is. And also a lot of the stuff that I linked to like talking with Hiking, he um he helped a lot. There's a couple of people that gave me feedback on blog posts or little samples that I posted along the way and said, "You say it's good, it's 80% good. If you put this little bit of, you know, [snorts] sprinkle listing on there, it's all the way going. >> Oh, okay. >> That's amazing. You know what I mean? >> That's cool. So, they're kind of contributors in in a way. >> Yeah. In a way, >> which is nice to be able to give them a credit, which is usually just like in a Yeah. It would just be in the back of the book normally, but here you're actually giving it in the body of like, well, actually, this is where this concept kind of came up and >> Right. Exactly. Right. >> kind of a continue the conversation. >> Yeah. And he's also a really great writer. So happy to link to the stuff that that he writes, you know. >> Yeah. Yeah. One other feature you added that I I found really intriguing uh and I didn't know about it until I, you know, actually dug into the first chunk of the book is you have these audio reader briefs. You want to describe them and and why you included them. >> I they're they're they're uh let's say they're quirky. I really like them. They're not for everybody, but I really like them. They're not at all required. They're just an extra. So, I tried to do a bunch of extra stuff for the book and one of them was these audio reader briefs. I thought, hey, I'm okay with audio. I have a expensive mic in something like a studio. I could literally do an audio book version of this. No problem. Except >> who wants to [clears throat] listen to you read code? [laughter] >> Even the code might be kind of okay if you sorted, but but when you get to the 40 lines of engine X config, holy moly. Just no. I just don't think it's practical. So I'm like, well, I want kind of people that have like this audio aspect. Like you and I were both like really into audio as well. And so what can I do? And so I thought, >> what if I could give you the equivalent of I didn't say it because it's copyrighted, but cliffnotes in audio form kind of for for the chapter, right? So >> I actually came up with if I if I take each chapter and I sort of structure the text in the right way and then I I create a research project with notebook LM and I get it to create a you know notebook LM is incredible. I can create like a little multi-person podcast conversation thing like all right create a >> It's so funny because it includes all the ums and >> I know it's you know [laughter] and stuff like that >> and they they interrupt each other right they like jump over each other. Oh, and yeah. Yeah, I know. >> And I think it's kind of it's cute and it's it's fun. And so each chapter includes like a 4minute or so little riff by these these two >> Yeah. >> quote hosts from Notebook Elem. Yeah. >> Talking about what's in there and they get it not 100% right, but pretty right. So I thought, you know what? >> Yeah. Yeah. The acronyms you said you got to watch out for. >> Yeah. You can tell it how to pronounce stuff, but sometimes it ignores you. Sometimes it gets it right. You never, you know, sometimes it'll it'll pay attention to what you say. >> Yeah. >> But those are in there so that people can just it's I think it's an hour and 20 minutes. And if you want to just listen to it after you read the book or listen to it as like kind of a refresher or you want to listen to it before each chapter, maybe it kind of just puts you in the mindset because it's it's a wandering sort of flowing conversation around the ideas and then the book is like more structured. you know what I mean? So, yeah, I threw those in there. >> That's cool. >> Yeah. I also put a code gallery, something that I that goes at the end. So, I wrote my own custom book building publishing thing that takes markdown to this this book thing. >> Nice. >> Sounds like you were building lots of tech across this. [laughter] >> It was fun. Yeah, it was really fun. And so, it would go through and say anytime I have a code listing, you know, like a triple like a code fence, triple block markdown piece, it will pull that out. it'll figure out what chapter it's in and what subheading is. It'll put that as a little like a listing one and this chapter listing two. So, if you want to find the code, you just chapter [snorts] three, here's all the code. You don't have to hunt through the text. You know what I mean? Same thing for the links used. There's a section same things for the pictures. Like those kinds of things I tried to add because once you're writing your own code, and there's there's a whole chapter on like maybe you should build it yourself. Uh once you're kind of in there, you're like, "Oh, it's like 20 lines of code and a few regular expressions and we're good to go here." >> Yeah. Yeah, I have a tough time on the show generally deciding how really deep I want to get into DevOps because as we've already kind of discussed a little bit, it's not always a great fit for the audience, you know, like the audience is here to learn about Python and Python projects and DevOps is so specific and it's >> I feel like it's often a smaller team within an organization that sort of handles it. It's not necessarily quote unquote an IT department, but it's it's kind of off to the side often. And yes, they use Python all the time. And so I always kind of wonder about that. Is that something you struggle with on on your show too sometimes? >> Oh, 100%. 100%. I think if you get into the the true, you know, infrastructure code at scale and all that kind of stuff. >> Yeah. >> Then I think it gets pretty specialized, right? Like the people running like Yeah. We create a whole bunch of VMs doing this and then we just push this button and then it automatically right I had um Matthew [clears throat] Rocklin and Nat Tabri from coiled IO on and during the podcast Matthew Rocklin spun up a thousand machine cluster in EC2. >> Wow. >> And then he said well what if it was ARM? I asked what if it was ARM? He said all right well let's shut this one down. We'll fire up the ARM. We'll do it again but with ARM settings. And we fired up a thousand ARM machines in the data center. Wow. >> And those are amazing. Like I was Whoa. Okay. Very cool, Matt. Very cool. But >> that's not going to be fit for even your business, right? >> That's not what most people do. Like they don't they're not doing that kind of stuff. And so his service kind of obscures that like um packages that up. So that's kind of right, which is cool. >> I think those tools are amazing. It's just I don't know. It's it's hard. Yeah. Yeah, >> interesting to find those points because it's like, well, how do I even get people in to do this without them burning an entire credit card? [laughter] I know. Well, here here's I'll I'll to sort of wrap come around to answer your question directly. Here's what I would say is I I think that that kind of DevOps stuff we're talking about now is other than like wow, showcase cool, >> yeah, >> is is probably not really germanine to most people's dayto-day. However, almost everyone out there who is a software developer or data scientist has a thing or an idea like a little side thing and they're like, I want to get this out. How do I go from zero to like it's it's available, not it's, you know, running Netflix sort of thing. >> And I agree and that's kind of why I keep dabbling and and talking about these topics and just like kind of like where do I find that balance? I that's why I really like the book. I I'm also intrigued that you started with Python Anywhere, which is kind of weird. I didn't I did not know that was the the history of uh talk Python. >> Well, because I tried to answer that question for myself and when I started I'd only been doing Python for a year or two. Okay. >> So, I didn't know anything and I mostly was a Windows developer before that. So, I built like desktop apps which was fun >> but it doesn't teach you anything about deploying web apps on Linux. >> Yeah, the web I mean you're kind of there. I don't know. you can maybe talk about it a little bit, but like the idea of creating your own services and tools and those kinds of things on the web definitely you were deeper in those trenches. You you know I I find you to be like an expert at the web stuff. I would definitely, you know, reach out to you if I had questions about [laughter] web deployment and there's definitely areas of the book that go deep and hard into those areas which is really interesting too. Yeah. >> Yeah. Thanks. Yeah, I talked about web frameworks and what I I don't think we have a great name for them, but I'm calling them production app servers. Okay, which maybe like leans a little more from the enterprisy side, but >> we have all these different web servers. You know, if you run Flask, it'll say [snorts] >> don't use this thing in production. Get a real production web server, >> but a real production web server is like kind of the backend thing for another web server that is actually the front end that does SS, you know, like there's a lot going on. And so the thing that runs your Python code, >> I think there's a lot of interesting stuff going on there with like um we've got Unicorn, Uviaorns, kind of come out on its own a little more. Hyperorn, you've got um >> Yeah. Yeah. >> Graian, which is a new fun one, which is what >> Yeah. Yeah. And that's one you definitely have embraced in this case. Those are things that there's a sort of again very non-Python but if you're going to you know go down this road you're going to have to be touching some of these things and and and they're not necessarily like I've you know I haven't finished the book [laughter] playing with all the examples but I remember seeing more of this conversation maybe five years ago. >> Yeah. of like standing these things up and then >> I feel like maybe the conversation changed a little bit and it kind of became a little different. So I'm intrigued to see your approach here and maybe we just talk about like what I covered your blog post about is it stack specific? What was the term that you used? stack native is the term I'm trying to it's a riff on cloud native >> right >> which you'll hear people saying we're building a cloudnative application and that just makes me go you know like sort of sucking my breath like oh [laughter] I because it's it's both got potential for being awesome but you know that it's it's going to have like big time lock in >> right >> and for better or worse Right. So, so when someone says they're building cloud native, they're like, "Okay, I'm going to look at the the menu, the buffet of things that the AWS console or the Azure console of 150 200 services offers me." And any part of my application, if I see like, oh, we need login, well, we're going to bring in this service. Oh, we need stateless stuff. So, we're going to bring in this this whole part over here becomes all serverless over here. And then those hook back into and just it to me it just feels like that might be great but you know it's are you designing for something you actually need >> right >> or are you designing for the dream? >> Yeah. >> Yeah. The scaling thing is always kind of like wow like how much infrastructure if you're building a social network that's one thing. if you're building a a tool or in your case a hosting platform for video content and podcasts and so forth, like there's a there's a a boundary [laughter] potentially that you're going to scale from and and and maybe you could just describe, you know, what the current stack is. I I know it gets a little complex here, but and we'll provide links to a lot of the stuff to people can check out a little bit more in writing. >> Yeah, I'd love to. So, at its heart, it's I have quite a few web apps running. I've got little APIs and I'm not a big fan of microservices, but there's also just I need a thing like I'll give you an example before I get into the the stag. It's like I wrote a I wrote a course, recorded a video course, published it for people, >> and it was using some kind of open weather platform that had a free tier, >> okay, >> for its API. And so the course was teaching how to consume API. So, hey, let's put a little weather app. That'll be fun. And you can just point it at this thing like, okay, everybody, just get your API key here and then here's how you write the code. Well, guess what? [snorts] The free tier's gone. >> Yeah. >> And now the class is broken. I'm like, oh, great. [laughter] >> So, I got to either stop what I'm doing, go re-record a thing that was perfectly fine until it changed again. Right. So, there's a few things like that. There's probably like five or six classes that have things like that. So I'm like, you know what? Not again. I'm going to build an API and that API is going to call the API it would have told them to call, >> right? >> Would they call my API? >> But it's over here and I control it. >> Yes. And [laughter] it's not going to disappear >> and if that thing changes, I'll find a replacement or I'll put static fake data or what I will just find a way to make it go so that the students don't have a bad time, >> right? >> And it's predictable. So there's like some of those little things that are just I've got to have a place for them, right? >> Yeah. >> And so what I the current stack is I ended up getting like one big server. So I have a 8 CPU 16 gig RAM [snorts] machine running as a VM. >> Okay, >> just Linux just SSH into it. And on there it's running a core database server that doesn't share databases but shares the database server kind of like a managed data like like a lot of these places have hey we're going to have a managed database so you can go over there but in my world I have a database >> okay >> and my app can either use one of the existing databases or it wants to create a new one it'll just create a new one as if it was managed but instead of being managed by them I just have it running and I back it up frequently uh at my place. Right. So I've got a database MongoDB but it could be Postgress and then I've got an app for Python bytes and an app for talk Python an app for the courses and a whole bunch of other things that we can talk about but yeah >> in there I have a mix of Flask in the form of Quart which is the async the truly async version of Flask. >> That's one of the first like real world examples. I'm like oh hey this is actually using court that's great. Yeah, I find court to be totally stable. Um, court was created by PJ Jones. I'm sorry. But then has been brought into um into the pallets organization, the same group run by David Lord. >> So it was like an out an outgrowth that was like a almost like a bit of a fork to make it asynchronous version of Flask. >> Yes. Yeah. And now it's become kind of an official project of Flask even though it's technically uses the word court instead of flask. Like you could almost just do a find and replace quart and flask and they'll they're interchangeable which is cool. It's just the quart one runs a little faster a little more async let's say. >> Yeah. >> So we got that and pyramid and >> yeah just I have them all running there in on that one server but instead of running them just all together which is possible but not ideal cuz you know you want some isolation and you want to be able to bring other things in there. So I put all those behind Docker. >> I was going to ask you a lot. We're going to probably dive into Docker a little deeper here. Yeah, it's good. >> Docker is something I always kind of put my head in the sand like I don't need that kind of stuff. But really at its heart, Docker is just some isolation that you can run >> and reproducibility >> and the reproducibility is glorious. That's right. And that that's the big thing is the reproducibility. And then most of the commands that go in the Docker the Docker file to set them up is what you have to type in Linux anyway on your VM. If you're going to say, "Well, I'm not doing Docker." Well, you're typing the same commands. You've taken away [snorts] the word run. >> Yeah. You just sort of separated it in and Yeah. or contained it or whatever you want to call it. >> Yeah. So, I have um I have all that stuff managed with Docker Compose instead of something more complex like Kubernetes or some other EKS or something, right? Because to me, I'm always trying like biased towards simplicity and like keeping stuff straightforward. So I can easily go over there and look at the logs or I can shell into the Docker environment, right? So it's like docker compose exec the name of the thing like zsh or bash and then it's as if you're logged into that machine, right? >> Yeah. just using shell commands to look at everything inside of it, >> right? You kind of have to like shell twice. Once with SSH and once with Docker Compose, but then effectively you're like in the terminal of that thing. >> And so to me that that's something I really wanted to keep is the feel of like I just have an app in here. Here are the logs. Here's the code. I can even tweak the config in production if I absolutely have. You know what I mean? Like I don't do that. But you want to be able to sometimes like why is that not look looking? Let let me log in and do a ls and see what it sees. Oh, the file's not there from its persp like you know what I mean? There's just like this abstraction that you want to get away from. >> Does it help that it's divided up that way in the sense that they're not quote unquote microservices? I mean they're kind of their own thing. But if you have a problem I I I have a problem. I know it's about this particular project that somebody's like maybe sent a ticket or sent you a comment or whatever. You can say, "Okay, I want to go look at the courses area." >> Yeah. >> And look at that. Does it help that that it is in its own container? >> Yeah, I think so. I think it does. >> It's kind of like a directory structure of sorts then. >> Yeah. Yeah. Yeah. I mean, it's already its own web app and so in that sense, it's somewhat contained, but you can kind of restart the container, redeploy the container. >> Okay. without messing with the other stuff so much, you know. >> Yeah. You focus on downtime quite a bit, which I'm sure was like probably a complaint that somebody would look at your your solution and say, "Uh, yeah, but this could happen or that could happen or this whatever." >> Right. Right. Right. We don't have triple replication on this thing or that [laughter] thing. >> Right. Yeah. >> I again what how how important is this stuff for you? Right. So, I think the the advice in the book and the advice that we're kind of riffing on here applies to small teams of handfuls of of people, you know, five five to 10 people. If you have a DevOps engineer or if you have a sales representative for you at AWS, it's >> probably beyond although I've I've had sales calls with the AWS people as well and it >> yeah, >> like yeah, no thanks. But, you know, I mean, if you have a dedicated sales rep that's like takes you to lunch, you don't [laughter] >> it's you're probably beyond this might not be for you. But, but here's the thing. I think >> it is for like 90% of the people >> out there. They they don't need like that great of a scale and that great a complexity. So, what I really like about the how I'm running my infrastructure is I got one big Linux server running in the cloud. I SSH into it from that point on. It could be in my closet. It could be >> right >> in some other data center. It could be wherever. Like it's I just do whatever I want. I've just got world class power, cooling, networking, failover, all that kind of stuff for the machine. But then you get to pick, right? So then you get to pick. >> You get to pick who's going to host the machine for you. >> Yeah, pretty much. That's the whole thing about cloud that's so funny is it's like it's still somebody's machine. [laughter] >> Exactly. >> As they found out in uh Korea recently, unfortunately. >> Oh my gosh. Yeah. Seven years of work loss. That's really really >> Yeah. >> So I I think it's really interesting to be able to just take that and simplify down and go it doesn't have to be that complex. Like this this setup can handle an insane amount of traffic. I think the load testing I did for the courses with not much caching, I don't do hardly any caching there. It's like pure database calls. I think you can do 30 million data driven requests. Wow. >> A month or so >> for like $50. >> And where are you at >> right now? >> As far as the percentage of that? [laughter] >> Oh, it's I know it's way under It's way under that. Yeah, >> it's still a lot actually. The podcast gets quite a bit of traffic. I think I'd say probably around nine million >> data driven requests a month across all the apps. >> As a as a podcast note just it it surprises me but it also is really cool that people go to the beginning of the podcast and start from there >> and get them all. I know. >> Isn't that crazy? It's I mean it's awesome and it's really cool and it it's it's a testament to like both of our work in the sense that that's evergreen in a way you know a lot of the concepts are worth going back and digging into so I'm sure there's a lot of that traffic is from that you know just the whole back catalog >> to be honest I would say a lot of it is also you know podcast clients are a little bit like a distributed denial of service >> right because they're all like >> they have to refresh themselves >> you got a new one you got a new one not all of them like Spotify there's one thing that asks and then it shares it out to the Spotify group. >> Yeah. Yeah. >> And Overcast, there's one Overcast thing that asks is there an update and if there is it'll share it out, but other ones are just like update, is there an update? Is there an update? >> Like like a kid. >> So there's some that are a little more pestering you. [laughter] >> I Well, it's they put the checking for update into the client instead of the server. And so, okay, >> whoever subscribes to every one of them is checking for an update. You know what I mean? Wow. >> Pretty like every hour or something. >> Not efficient, but >> No, [laughter] but it's easier for them, right? that whoever wrote that doesn't need to run a service that checks all the podcasts. >> Okay. >> Yeah. >> Yeah. So, one of the things I wanted to dive into a little bit about the Docker thing generally, it sounds like that's a recent development for you. >> Yeah. I I resisted it cuz I'm like, I don't need this. It's, you know, it's not that big of a scale. And then then I started playing with it. I'm like, yeah, this this really lets me not worry about the isolation in other ways. So instead of having like well I need a small web server to handle the courses traffic and I need a small web server to handle the podcast traffic that's also overhead if you were looking for that sort of so for example if I got to restart the podcast one I'm not messing with the courses and so on and that turned out to be not the way >> okay >> it was just more way more complicated so then I put them all together into one big machine that costs about the same but is has way more capacity. >> Yeah. Yeah. Yeah, >> the eight CPUs and the the amount of gigabytes of RAM. >> And what's really interesting about that is in and I think this applies to the cloud native story as well that I think people don't really connect with that I think this is a very important lesson. Let's suppose I have eight small servers, >> okay, >> each with one CPU and 2 gigs of RAM or I have one big machine with eight CPUs and 16 gigs of RAM. I have the same CPUs. of the same RAM. >> Yeah. >> But here's the deal. The if you're running multiple apps, if you're running a single app, it doesn't really matter. But if you're running more than one, like podcast plus courses or whatever, >> they don't have the same needs for compute at the same time almost ever. >> Okay. >> Right. So on Black Friday, the courses traffic goes crazy. Right. >> The podcast traffic >> if you've done a promotion and you know >> Yeah. Exactly. and you send out as like as many emails as people were willing to receive from you because that's the world we have to live in, >> right? >> Then that's driving a crazy amount of traffic. >> Yeah. Yeah. >> To the to the courses bit. But the podcast bit, you know, you probably haven't released a a podcast exactly the same time you're sending all these emails. So when the training site, the courses site peaks, if it were all distributed across these little like serverless bits or other things, it gets the peak of whatever is allocated to that little thing. If you combine them and then isolate them with Docker, they can peak to the top of the machine. >> As a virtual machine, they can use the resources that are available of the eight CPUs, >> right? It's got eight CPUs, not one. and it can spike all the all eight of those as long as they're not being consumed by the other apps which are probably chill and doing like part of one CPU level work. >> Right. Okay. >> Right. And so these these ability to spike and like say, "Oh, this one really has to use more RAM and it has to like really hit a bunch of CPUs, it can kind of burst mode it." You know what I mean? Long as all your apps are not pinned all the time. >> Combining them gives them higher ceilings for what they need. >> Yeah. It's like a shared whatever. [laughter] >> Right. Right. But when when you fan it out >> room, you know. >> Yeah. Exactly. It's like you can use all the the equipment. Um but if you fan it out across say a bunch of containers at like some cloud container service and they guarantee to give you one CPU and one gig of RAM per container, you don't get the same. And so no, you don't. Yeah. >> It's there. There's this really interesting advantage. It's a premature limitation that it's kind of cool. You get this overall whatever threshold or whatever you want to call it this, you know, ceiling that any of them can have at at some point and who knows what that will be. You know, occasionally you said it's your, you know, it's the podcast and occasionally it's the courses and >> Right. Exactly. And you think about >> and it also is the database server. if the database right it also has the ability like if there's some huge database like analytics thing going on it can grab all the compute as well these little bursty modes so when you think about like >> oh you put on one server so you can't really scale it >> because you know we're not in like some kind of serverless thing where more requests come in they all fan out and so on there is a a component of of more scale for the same amount of compute uh when you just kind of go like I'm just going to k a Linux and it's going to be in the cloud somewhere. I don't care where it is. Let's just go and write write apps for you. >> Yeah, >> it's time to shine a spotlight on another real Python video course. It's all about concurrency in Python. Concurrency is the act of having your computer do multiple things at the same time. And with Python, there's several paths you can take. The course is titled Speed Up Python with Concurrency. And it's based on an article by previous guest Jim Anderson. And in the course, my frequent co-host Christopher Trudeau takes you through how IObound programs are affected by latency. What are concurrent programming patterns and where might you use them? What are the differences between Python concurrency libraries? and how to write code that uses the threading, async IO, and multipprocessing libraries. If you've heard lots of talk about async.io, but are curious about how it compares to the other concurrency methods, or are wondering what concurrency is and how it might speed up your programs, I think this course will be a good investment of your time. Real Python video courses are broken into easily consumable sections and where needed give you code examples for the techniques shown. All Real Python courses have a transcript including closed captions. Check out the video course. You can find a link in the show notes or you can find it using the search tool on realpython.com. This kind of leads to your uh phrase that you're or a concept that that's in there of minimal cloud lock in I guess. >> Yeah. Yeah. Absolutely. I think if if you're integrated with EKS, Dynamo DB, EC2 automation, uh you know, just on and on and on, right? You pick 20 services out of >> you know the other, you know, Azure versions of those things, right? >> Exactly. Same story for Azure. There's no difference. >> You're pretty much staying, you know what I mean? Like you can change, but it's like I know I wrote an app for Mac. I'm going to rewrite it and shut it down there and I'm going to rewrite it for Windows. Is it going to be over there? Now, you can do that, but it's not easy. But, right, all of these different places offer good here's a Linux VM for you, infrastructure as a service, like OGC cloud sort of stuff, >> right? And >> it does feel retro in a way. >> It's [laughter] it's retro and it's not retro all at the same time. And it's amazing, right? No, it's like the the Docker Compose stuff is amazing. So I have a script that you run that can take a docker compose configuration and turn it into a systemd damon, >> right? [clears throat] So like all all those those sites and stuff come up in like the right order and it's just if I reboot the machine they just come back because I have a script that says create a system damon that like re restarts the docker compose thing whatever that happens to be on boot. Okay. And the docker compose takes it from there you know. >> Yeah. Yeah. In this process of getting deeper into Docker and sort of building the containers, were you using other tools? Like in the book you mentioned Orbstack, which I I've heard a few people use. What was that exploration process like? And what tools worked for you? >> There's a handful of tools. Orbstack is really nice. You know, >> it replaces what? >> It replaces Docker Desktop. Okay. >> And so you need in development some way to like test out your doc. You can't I mean you can but you probably shouldn't just push your your container to the cloud. >> Should try it locally. You [laughter] should you should get it working locally and then try it. >> Yeah. Yeah. >> I just push to get and then it rebuilds the container on the machine and off it goes now. But when I was building it, I was, you know, I was iterating. I was I was checking out. One of the things that's super cool about Orbstack is it gives you tons of visibility and accessibility into it. So I can go to a running container and it has a little finder icon. So I click that and now I just have a finder open inside of the container and I can just navigate around and >> yeah, this is going to be quicker than sshing in and doing the stuff we talked about >> and you get a gooey if you want, right? Like I can like drag that thing and drop it on cursor and then ask AI like what's wrong inside of my container. You know what I Like that is not the easiest thing you would normally do, right? >> But it should it would be like trivial with Orbstack. Okay. >> Right. And it's got to click a button for a terminal, click a button to look at the logs. And some of those things you can do >> with just Docker compose logs or, you know, Docker exec bash, right? But I don't know, it's not a huge change, but it's it's it's just polish, you know what I mean? It just makes it feel a little bit nicer, I think. >> Yeah. I've heard of a handful of these tools and and I kind of wondered about them, like what what are some of the advantages? But that that makes a lot of sense what you're saying there because normally Docker Desktop is pretty similar. It's all very terminal [laughter] based. >> Yeah. >> Yeah. Yeah. You know, another tool that I'm not using, but I know some folks who are using it to good effect that is a little bit of an alternative view, a little more of um like a Heroku style. >> Okay. >> Is Koolifi. C O L I F Y. >> Okay. >> I think is it. And let me just double check for >> Yeah, sure. >> Yeah. Coolifi.io self-hosting with superpowers. And so it's an alternative to Versel, Heroku, Netlifi, Railway, etc. And you do the same thing. You set up one machine and you install Coolify on it. But instead of actually managing the Docker files directly and the Docker compost setup, you just ask it to create new apps and you get pushed to it sort of like you do Heroku, but it lives in exactly the same story, right? You could run a a database server there. You could run multiple apps there and so on. >> The thing with like something like Heroku that >> I feel like is a selling point is the idea that you can almost point it at a git repository and then when you make your commits >> I think I think >> is that cool if I doing something? >> I think it works the same way. I think so. >> Yeah. But to be to be clear, I I don't run it, so I'm not 100% sure. But I'm pretty sure >> That's okay. Yeah. But I I think that's that's one of those things that again, people are looking for solutions uh depending on the size of the thing that they're trying to set up. Um that is kind of a nice way to kind of approach it too potentially. >> Yeah. So, I've talked to some folks using Coolifi who have team members who need to like push stuff out to deployment, but they shouldn't really have access to the server, nor should they need to understand really what they're doing with the server. They should with their app, but not with the server. >> They don't have the uh DevOps uh badge yet. >> Yeah. Exactly. Even [laughter] Even if it's not like a a goldplated like serious one. It's like a little >> Yeah. Exactly. >> Like a more like a DevOps patch. Yeah, exactly. >> Yeah. But but yeah, so that it gives like a different way to sort of deploy, but it also has the same philosophy which is really interesting, right? Like I set up a machine, I carve it off for myself, I can install stuff and it has it has little push buttons, install other self-hosted things that I might need, right? >> Click here to add a Postgress server. Click here to add >> Yumami analytics. >> Yeah. Yeah. >> Or uptime monitoring. And then it runs. So that's what I have as well. Actually, I've I looked right before we got on the call, so I know the current number. I have 27 different apps and database servers running on my machine right now. >> Yeah. And some of them are very specific, right? The like you said, the the analytics uh tool that you're using and Yeah. Um you have a couple other kind of monitoring uh tools that kind of look at everything else. Yeah. >> Yeah. Exactly. Like if you want some kind of uptime status page, right, you could go buy a service like Pingdom or whatever. or there's a bunch of open source self-hosted ones. And I think this is actually a little a bit of an undershoulder side of this as well is when you build apps that run in production for your business or for a serious project, you usually want to bring in not just your code. >> Yeah. >> But other stuff, right? Like I want uptime monitoring. I want analytics. I want, you know, notifications if this happens or you know, one of my apps is like a Discord bot that then talks to Discord for the Talk Python Discord that I'm I'm working on right now. Right? So, that's one of the things. And once you kind of get this rolling, it's like, oh, all I got to do is throw one more Docker Compose thing up there, >> right? >> Link it in the script. And now it's it's managed by exactly the same story that it was before. And I don't have to buy new services, set up new serverless things and all these different things, you know, I just like it's just >> just expanding another little piece inside the virtual machine. Yeah. >> Yeah. You just click it into there. And you could do that with Docker Compose, you could do that with Coolify or whatever. >> Yeah. Yeah. >> Yeah. So, it's it's really neat. I If people look at the self-hosted world, like search for awesome self-hosted, the problem is not what will I include or how I run it. The problem is holding yourself back. you're like, "Oh, I [laughter] can have this and I can have this and oh, we can have this, too." Like, "No, no, no. >> Each one of those you're going to at least have to back up the database." You know what I mean? You're gonna have You still sort of got to do something. But it's just so cool like, >> right, >> the analytic system, >> it's like plugins and and other platforms like, you know, I'm a music guy and it's like, yeah, and it's like, oh, I could have these billions of plugins and, you know, easy to go crazy. >> Yeah. A code example is if you've got like 28 maybe that's probably way too small like 208 VS Code or PyCharm extensions or plugins you're >> like what is talking to me right now? [laughter] >> Who put this squiggly here? There's like at least 10 things that could have [laughter] done it. I need help. >> Yeah. >> So if you're prone to that, you got to like really show some restraint. But it's very cool because like I turned off Google Analytics years ago because I found so many developers were running ad blockers. >> Yeah. >> That it was blocking it. >> Right. >> And then there's the whole GDPR thing and cookie banners. You got to put a cookie banner like, "Hey, did you know we're reselling all your data? The EU made us like show you this thing that tell us we're reselling your data." Great. Okay. I want to Okay. I just wanted you out of my way. >> Yeah. >> I think the GDP, not the GP, the cookie side of thing was mishandled. Um, >> yeah. Not not elegant at all. [laughter] >> So, all right. I I I'll give you a rant, Christopher. I'll give you a rant. So, >> okay. >> I think what Europe said, which is okay. I think they said we don't want people reselling our data and taking it and doing things that we don't approve of it. Right. >> Fine. I'm I'm on board with that. >> So, what we're going to do is make them announce it if they do and publish it at the bottom of their website. And you have to know this. Yeah. >> Yes. And it will embarrass them so much that they will stop. And that is not what happened. They said, "Well, this is a hassle. >> We're going to We hate our users [laughter] so much." Exactly. There's like, "Yeah, we'll tell you how we're stealing your data. I mean, you could have looked at the terms of service, but we'll give you the dumb pop-up if you have to." >> Yeah. And what they should have done is they should have said users are permitted to use technology that blocks you from using tracking cookies and you cannot restrict their services if you do. Like how many sites do you go says turn off your ad blocker? >> Yeah. >> Like if they said you can't have that, you're good. >> I can't believe that publishing sites do this. It's like, you know, the actual like, oh, I'm supposed to read your article and like I got served this and I go there and I can't even read it. And it's like, well, now I know that [laughter] I should have like some other term for it, you know, like the whatever, you know, red sites. I do not w

Original Description

How do you deploy your Python application without getting locked into an expensive cloud-based service? This week on the show, Michael Kennedy from the Talk Python podcast returns to discuss his new book, "Talk Python in Production." 👉 Links from the show: https://realpython.com/podcasts/rpp/272/ Michael runs multiple Python applications online, including a training site, blog, and two podcasts. While searching for the best solution for hosting his business, he documented his findings in a book. We talk about containerizing Python applications, generating static sites, preparing for traffic spikes, and avoiding cloud service lock-in. Topics: - 00:00:00 -- Introduction - 00:01:28 -- Welcome back! - 00:03:05 -- Is this your first book? - 00:04:13 -- A book that reads like a blog - 00:06:15 -- Incentives to keep you locked in - 00:09:20 -- Following the journey of the Talk Python sites - 00:11:47 -- Audio reader briefs - 00:15:19 -- Discussing Dev Ops as a topic - 00:18:31 -- Background of developing for the web - 00:20:14 -- Stack-Native vs Cloud-Native - 00:24:40 -- Using Quart web framework - 00:25:50 -- Embracing Docker - 00:32:39 -- Sharing a single powerful machine allows for individual peaks - 00:37:04 -- Video Course Spotlight - 00:38:30 -- Minimal cloud lock-in - 00:40:04 -- Using OrbStack for local builds and testing - 00:42:07 -- Coolify as a Docker host - 00:47:14 -- Moving away from Google analytics and a GDPR rant - 00:50:43 -- Diving deep into web tech of ngnix, SSL, and CDNs - 00:54:33 -- Talking about the prices for hosting - 00:59:09 -- Creating static sites - 01:06:22 -- Invitation to come back to discuss AI and agents - 01:10:06 -- What are you excited about in the world of Python? - 01:16:19 -- What do you want to learn next? - 01:17:34 -- What's the best way to follow your work online? - 01:19:40 -- Thanks and goodbye 👉 Links from the show: https://realpython.com/podcasts/rpp/272/ Want to keep learning Python? Explore these free resources:
Watch on YouTube ↗ (saves to browser)
Sign in to unlock AI tutor explanation · ⚡30

Playlist

Uploads from Real Python · Real Python · 0 of 60

← Previous Next →
1 A better Python REPL – bpython vs python interpreter
A better Python REPL – bpython vs python interpreter
Real Python
2 Introducing large-type.com – A Utility Website
Introducing large-type.com – A Utility Website
Real Python
3 Reading Hacker News Without Wasting Tons of Time
Reading Hacker News Without Wasting Tons of Time
Real Python
4 Forward References and Python 3 Type Hints
Forward References and Python 3 Type Hints
Real Python
5 Using Sublime Text as your Git Editor
Using Sublime Text as your Git Editor
Real Python
6 Python Code Linting and Auto-Complete for Sublime Text
Python Code Linting and Auto-Complete for Sublime Text
Real Python
7 Make your Python Code More Readable with Custom Exceptions
Make your Python Code More Readable with Custom Exceptions
Real Python
8 Write Better Tests with Sublime Text's Split Layout Feature
Write Better Tests with Sublime Text's Split Layout Feature
Real Python
9 How to Use Sublime Text from the Command Line
How to Use Sublime Text from the Command Line
Real Python
10 Rename Variables with Multiple Selection in Sublime Text
Rename Variables with Multiple Selection in Sublime Text
Real Python
11 Sublime Text Settings for Writing PEP 8 Python
Sublime Text Settings for Writing PEP 8 Python
Real Python
12 Write Cleaner Python with Sublime Text's Indent Guides
Write Cleaner Python with Sublime Text's Indent Guides
Real Python
13 Sublime Text Whitespace Settings for Python Development
Sublime Text Whitespace Settings for Python Development
Real Python
14 Function Argument Unpacking in Python
Function Argument Unpacking in Python
Real Python
15 Python Code Review: Debugging and Refactoring "Conway's Game of Life" +  Automated Tests
Python Code Review: Debugging and Refactoring "Conway's Game of Life" + Automated Tests
Real Python
16 Using "get()" to Return a Default Value from a Python Dict
Using "get()" to Return a Default Value from a Python Dict
Real Python
17 A Python Shorthand for Swapping Two Variables
A Python Shorthand for Swapping Two Variables
Real Python
18 Python Code Review: Refactoring a Web Scraper, PEP 8 Style Guide Compliance, requirements.txt
Python Code Review: Refactoring a Web Scraper, PEP 8 Style Guide Compliance, requirements.txt
Real Python
19 Click & Jump to Test Failures from the Command Line (iTerm2)
Click & Jump to Test Failures from the Command Line (iTerm2)
Real Python
20 Setting up Sublime Text for Python Developers
Setting up Sublime Text for Python Developers
Real Python
21 Sublime Text + Python Guide Overview
Sublime Text + Python Guide Overview
Real Python
22 Python Code Review: Adding Pytest Tests to an Existing Python Web Scraper
Python Code Review: Adding Pytest Tests to an Existing Python Web Scraper
Real Python
23 Type-Checking Python Programs With Type Hints and mypy
Type-Checking Python Programs With Type Hints and mypy
Real Python
24 A Shorthand for Merging Dictionaries in Python 3.5+
A Shorthand for Merging Dictionaries in Python 3.5+
Real Python
25 Python Code Review Flask Web Security Tutorial + Virtualenvs, requirements.txt
Python Code Review Flask Web Security Tutorial + Virtualenvs, requirements.txt
Real Python
26 My Python Code Looks Ugly and Confusing – Help!
My Python Code Looks Ugly and Confusing – Help!
Real Python
27 Setting Up a Programmer Portfolio/Developer Blog – How To Get Started
Setting Up a Programmer Portfolio/Developer Blog – How To Get Started
Real Python
28 Do I Need a GitHub/GitLab/Bitbucket Profile as a Developer?
Do I Need a GitHub/GitLab/Bitbucket Profile as a Developer?
Real Python
29 Programmer Portfolio – Example and Walkthrough
Programmer Portfolio – Example and Walkthrough
Real Python
30 How to Get Your 1st Speaking Gig at a Tech Conference
How to Get Your 1st Speaking Gig at a Tech Conference
Real Python
31 How to Build Your Public Speaking Skills as a Developer
How to Build Your Public Speaking Skills as a Developer
Real Python
32 The Object-oriented Version of "Spaghetti Code" is "Lasagna Code" ?!
The Object-oriented Version of "Spaghetti Code" is "Lasagna Code" ?!
Real Python
33 Setting up Sublime Text for Python Developers – Lesson #1
Setting up Sublime Text for Python Developers – Lesson #1
Real Python
34 Cool New Features in Python 3.6
Cool New Features in Python 3.6
Real Python
35 "is" vs "==" in Python – What's the Difference? (And When to Use Each)
"is" vs "==" in Python – What's the Difference? (And When to Use Each)
Real Python
36 Emulating switch/case Statements in Python with Dictionaries
Emulating switch/case Statements in Python with Dictionaries
Real Python
37 Python Function Argument Unpacking Tutorial (* and ** Operators)
Python Function Argument Unpacking Tutorial (* and ** Operators)
Real Python
38 What Code Should I Put On My GitHub/GitLab/BitBucket Profile?
What Code Should I Put On My GitHub/GitLab/BitBucket Profile?
Real Python
39 A Crazy Python Dictionary Expression ?!
A Crazy Python Dictionary Expression ?!
Real Python
40 String Conversion in Python: When to Use __repr__ vs __str__
String Conversion in Python: When to Use __repr__ vs __str__
Real Python
41 Method Types in Python OOP: @classmethod, @staticmethod, and Instance Methods
Method Types in Python OOP: @classmethod, @staticmethod, and Instance Methods
Real Python
42 Optional Arguments in Python With *args and **kwargs
Optional Arguments in Python With *args and **kwargs
Real Python
43 Python Context Managers and the "with" Statement (__enter__ & __exit__)
Python Context Managers and the "with" Statement (__enter__ & __exit__)
Real Python
44 Installing Python Packages with pip and virtualenv / venv
Installing Python Packages with pip and virtualenv / venv
Real Python
45 "For Each" Loops in Python with enumerate() and range()
"For Each" Loops in Python with enumerate() and range()
Real Python
46 Python Code Review: LibreOffice Automation and the Python Standard Library
Python Code Review: LibreOffice Automation and the Python Standard Library
Real Python
47 Managing Python Dependencies With Pip and Virtual Environments – Lesson #1
Managing Python Dependencies With Pip and Virtual Environments – Lesson #1
Real Python
48 Python Tutorial: List Comprehensions Step-By-Step
Python Tutorial: List Comprehensions Step-By-Step
Real Python
49 Leveraging Python's Implicit "return None" Statements
Leveraging Python's Implicit "return None" Statements
Real Python
50 What's the meaning of underscores (_ & __) in Python variable names?
What's the meaning of underscores (_ & __) in Python variable names?
Real Python
51 Python Data Structures: Sets, Frozensets, and Multisets (Bags)
Python Data Structures: Sets, Frozensets, and Multisets (Bags)
Real Python
52 Writing automated tests for Python command-line apps and scripts
Writing automated tests for Python command-line apps and scripts
Real Python
53 How to find great Python packages on PyPI, the Python Package Repository
How to find great Python packages on PyPI, the Python Package Repository
Real Python
54 Immutable vs Mutable Objects in Python
Immutable vs Mutable Objects in Python
Real Python
55 PyPI vs Warehouse, the Next-Generation Python Package Repository
PyPI vs Warehouse, the Next-Generation Python Package Repository
Real Python
56 pep8.org — The Prettiest Way to View the PEP 8 Python Style Guide
pep8.org — The Prettiest Way to View the PEP 8 Python Style Guide
Real Python
57 My Experience at PyCon 2017 in Portland
My Experience at PyCon 2017 in Portland
Real Python
58 Pylint Tutorial – How to Write Clean Python
Pylint Tutorial – How to Write Clean Python
Real Python
59 "Reverse a List in Python" Tutorial: Three Methods & How-to Demos
"Reverse a List in Python" Tutorial: Three Methods & How-to Demos
Real Python
60 Python Refactoring: "while True" Infinite Loops & The "input" Function
Python Refactoring: "while True" Infinite Loops & The "input" Function
Real Python

This video teaches how to deploy Python applications without getting locked into expensive cloud-based services. Michael Kennedy shares his experiences and provides a cloud-agnostic guide to building, scaling, and managing Python infrastructure. The video covers various tools and technologies such as Docker, Docker Compose, Quart, and Flask.

Key Takeaways
  1. Build a custom book building publishing tool using markdown
  2. Spin up a thousand machine cluster in EC2
  3. Fire up a thousand ARM machines in the data center
  4. Use Docker and Docker Compose for containerization
  5. Deploy applications using Koolifi and Orbstack
  6. Use async IO for concurrent programming
💡 Using a cloud-agnostic approach to building and managing Python infrastructure can help avoid vendor lock-in and provide more flexibility and customization options.

Related Reads

Up next
AWS, Azure, GCP: The One Thing Every Business Gets Wrong
AI Daily
Watch →