to my channel. I look amiss. I'm starting this vlog off but I just woke up. It's 7.44 in the morning.  Obviously, if you can see by the title, I'm about to go to Davis yet again. For me, vacation, we're going to stay for two nights and then we're going to be there for like three days basically. So right now I'm just putting on some moisturizer. It is wintertime and I cannot leave the house without putting on moisturizer. So I'm using this one. This is from the APC subscription and then this is the one that I just started to use. I literally go through moisturizer like nobody's business through the wintertime. So my skincare in the winter is always top tier because I have to moisturize my face. Anyways, it's 7.45 in the morning. Bay is getting his hair cut and then after he's done, we're going to head out. I packed my stuff last night and his stuff is already in my car packed. So this morning, the only thing that I have to do is like make sure I got everything packed. And I do have a consultation this morning for my hair brand photo shoot. It's at 10. So that's going to be on the road. I think the consultation is like 45 minutes if I'm not mistaken. So yeah, I plan to do like three looks and I'm wearing a wig in Dallas because this this ain't okay. But I plan to do like three different looks for the photo shoot.  And I also need to go back over it and let this shampoo sit in my hair. And I also have to tone my hair again. So just to regard it right now, I may throw them a hat. But the past few days, like at work and stuff, I've just been kind of like fluttering the top. And then I'll like clamp it in the back like this. So I may do that. I'm excited. This is our this is basically like our second vacation. The first one was New Orleans. I didn't like post about that on YouTube. I may have recorded a little bit of stuff. But yeah, just wanted to create an intro. And I get back to y'all when we like got to load up the corn stuff for my stuff. So I'm touching up my eyebrows for when I get ready to do my makeup down there. My eyebrows need to be done for a flawless look. So Revlon had sent me this little thing like a year ago. So it's like to cut your hairs. Super cool. So easy. So literally the way I use it, I like brush up my hairs already did it. So I should have showed y'all at first.  And it makes it so much easier and faster. So I basically already did this brow on the top. I did put on oil before doing this in the bathroom. I normally like to pluck my hairs out. I used to go get them threaded, but I kind of just touched them up myself now that I know how to. So my suitcase, I brought my I'm bringing my little carry on suitcase because I'm going to be there two days, but it won't be able to fit all of this because that literally is housing all of my clothes accessories and stuff.  But this one is like huge by itself. So this is like taking up all of this. But that's the hygiene bag. And then I have this bag is my makeup. And then I was going to put my wig in there too just because I don't want it to be there. So the wig, I just use this bag, but this way isn't from this hair company. So I'm going to put that on the side. And then I want to take this flat iron already packed a flat iron, but this one, I just curled my real hair with this one. And it kind of gave me like a better curl. So I think I'm going to go ahead and pack this one also just in case. But I believe I have everything in these bags already. So that's that. And then I have a white purse that I'm going to take. And then I'm going to take this little bitty small black Michael course, because the places we're going, it requires valet.  So and I don't want to like keep this in the car because baby, you don't know who taking your car.  You know, you can't even trust people too much. And bae, he already opened up his Christmas gifts last night. So if you watched the other vlog where I was trying to figure out how I wanted to like put his suit up, I just wrapped the suit regular. I record it, but I don't know if I'm going to post it or not. But he loves it. Of course, the favorite gift is the suit, which I knew was going to be that. I'm trying to see. I think my air podcast in the car, I think it filled out last night. So I need to take this air pod and then I also put a little note right here on the door before we leave out to make sure we got everything. So I put snacks, I need my camera, my battery, my tripod, chargers, makeup, hygiene items, my purses. He takes his Christmas gifts because we're not coming back to my apartment.  And then I work Christmas Eve at the hospital. So Christmas Eve, I'm just going to head out from his house and go to work. So I need my work. I need to go pick my work clothes and see cars, jackets, shoes, house shoes. I don't like to walk bath. I don't like to walk barefoot in hotels. So I'm going to bring my house shoes and then gas and then the ebook for my consultation call. So yeah, I'm going to go ahead and get my work clothes. Let me see if I got any clean. So since I wear Christmas Eve, I'm just going to wear my scrub pants and then I'm going to wear a t-shirt. I'm going to wear a red t-shirt since it's Christmas Eve. And yeah. And then I'm going to bring the scrub cap just in case because my hair is going to be put under a wig. And I don't know exactly how my hair is going to be looking after I wear it under this wig. So here's my work clothes. I have socks and everything already. I'm just going to throw the clothes into this suitcase right here. Well, so I'm glad you called because I'm about to put the stuff in the lunch box, the cold stuff. And then I'll be ready. And I'm hungry. So we got stuff in McDonald's. Got work clothes. I need to bring some type of something to house my SD cards. Okay, so this is like a, I found this little pouch in the makeup section in Walmart like years ago. And I use this for like my camera accessories. So I literally put my camera in here like my battery and stuff. And then I got my SD cards. So we're good. I think I have everything about to pack the lunch box. We're going to have to stop at the gas station too probably because we don't have like any drinks. I forgot to buy water and stuff ahead of time. But as far as I mean Dallas is only four hours and 30 minutes. So it don't really call for all of that. Like New Orleans, when we went to New Orleans, that took us like six hours. So yeah, but the lunch box, I'm going to be, we should have a microwave in our hotel. So I cooked steak and roasted potatoes and macaroni stuff last night. So I'm bringing that just as like a little snack if we want it. And then just a lunch of snack on in the car. I got apples, two packs of those. And then I'm going to keep those kind of over ice. I don't have one of those technical like lunch box ice packs. So I just put ice in a Ziploc bag. And then I'm going to put the ice on top of these apples. And then I'm going to put these apples on top of the ice hopefully and I'm freezing. Yeah, like I said, I don't have any like bottled water because I drank them all. But we're probably going to stop, get us a drink. And then if we get anything else cold, I'm just going to put it in the lunch box. And I need some fruit snacks. I'm going to put these in the front. So I'm ready to go. But here's my dilemma. I got my little mini tripod. I know I'm going to want to take like some pictures with my camera and bae. He want me to like take pictures in here with my camera that one now. But should I bring my ray lighter? No, like, is that doing too much just for like two days? Because I mean, we I'm going to have us taking pictures with my camera, which the camera has flash, but like, I don't really know how to like really work the foot. Anyways, I don't know. I'm trying to see do I want to bring the light because that'd be like better lighting for like we're in the hotel. You know, like the way I would tell this up, I don't know if it's a couch or a chair. I don't know. Because the last time we went to we had like a little couch type you dig and I don't know. I'm going to ask when he come. Because it's going to give us like better lighting. Oh, I need some necklaces and stuff. I need silver necklaces. Alexa, turn on lights. Okay. This is my little stuff over here. So I need silver stuff. I don't even have a lot of silver. I got a lot of gold. I'll take these silver earrings. And I don't want too big of hoops. So I'm going to take these gold ones. I think I may have, I think I'm wearing gold the night of our dinner because I'm going to be wearing brown. And then the silver is for this black outfit that I have. So this is like rose gold though. I'm going to take this watch because when I go out to eat, I'm going to replace my Apple watch for this one to make it because we're going to this fancy as restaurant on the 49th floor.  So I'm going to switch out for this watch. I don't really have any more silver stuff. Like I thought I had a silver necklace, but this is rose gold and gold. So I guess I'm going to take this. Alexa, turn off lights. Okay. Thank you. And then I have this bracelet. If you guys remember, they got me this for my birthday this year. So I'm going to be wearing this cute bracelet. And yeah, this is all I'm going to take. And I also cleaned my apartment up. I just packed last night. So my room is a little messy, but the floors are clean. I mopped, swept and everything. I don't got the dogs here. They're going to stay with my parents until Sunday. But literally everything else is pretty much cleaned. I just got to throw away the food that we ate last night. And then the mess that's in here. That's his suit that I got him for Christmas and like the rest of his Christmas presents and stuff. So I just need to put that up. And these are jackets of mine. I just need to put up. So yeah. And the key to me having a like wonderful trip is when I clean my house before I come, you know, like before I leave. So when I come back, everything's clean, spotless and everything is looking extremely good. And you just come back feeling so relaxed, you ain't got to come back to no mess. Okay. So I don't see him yet. But I'm about to go ahead and put all of his Christmas stuff together in a bag so that we can just literally pack all of this in the car. It's 825. We'll probably make it to, we'll pack the car, make it to McDonald's by like nine o'clock. I live right up the street from McDonald's. And then yeah, we're going to head out so I get to y'all. In Texas Arcana, I am opening up my first snack of the road trip. We got two hours and 44 minutes left, 178 miles. So I brought fruit snacks. Oh, you're right. We got normal snacks. And then I also got y'all saw me bring some apples and then my bootleg ice pack for the apples to keep all the food cold. So I'm probably going to eat from snacks and then I'm going to do apples later. So yeah, we're in Texas Arcana. We just stopped to use the bathroom. We ain't getting none, do you? I got gas. What he got gas? He ain't getting no snacks. I guess he gonna be okay. So, see y'all when we get to the hotel, our arrival time is 159. So just say two o'clock. On my camera, that's good. You're too close. You got to send us all the way up. It's like 10 o'clock, right? Yeah, toss, keep, and let you go. This is cute. Oh, you did do corner. A little scary. What is this? Is that a, we can do a joint room? I like this. This is nice. Oh, this is cute. Okay. So obviously we made it safe and sound. I'm going to do a room tour. I'm going to do a room tour real quick. I'm going to lock this door too. This is the door. Super cute. Lights are right here. I don't even know the name of this hotel. So I can't even tell y'all what hotel we in. There's a mirror right here when you first walk in. We got the corner room. I do know that. So I think maybe this may be like bigger, right? So I'm going to call them. This is the bathroom. This is nice. You did y'all that anyway? This is the bathroom. Super cute vanity. Tall in right here. Walk in the shower. It's like the one at my house with no dang door. Then you got the view. We're on the 10th floor. Desk TV a little bit. And then you gotta put his stuff in the closet.  The fridge is under here. I don't have my mark away though. Anyway, we gotta put it. This is cute. I want this. What's over here? Nothing. I'm going to mess extra pillows. May a pit stop to Walgreens because I ran out of lash glue. And I didn't forget I ran out. I ran out. So I ran out of lash glue and we going to dinner tomorrow. So I gotta have me some lash glue. He said it's closed. So yeah. We're in Walgreens. We're looking for glue. Okay, it's usually in a white box. It's called Duo. Here. That's Bay. All right, Bay. It's in a white box. Right here. Of course. All right. I like the big duo right there. Fuck. It's what the kind I like though. I'm gonna have to use this one.  So this is a stick, but it go on white. Should I just get this one? I normally use black glue. What's the one that ain't gonna show white?  Well, I'm gonna do it. I'm gonna get more lashes except my own. He's been smart all day. I don't see the black. No other one. They don't get it, y'all. Because that's the best one. Did you just pick this up? That's white. But the thing is, this one is white, but it got the stick. But this one is black. Get both of them. See what's on you like. I want you to pay for both of these. Girl, come on. It's $6. Get $7.79. I'm gonna get this one because I like the black glue. All right, y'all. We're gonna get this one. This one green is kind of cute. I need some water. Not too much because I... These are my new... I put on these new frames. My makeup look cute, y'all. Okay, not the big one, baby. I'll get you two.  Yeah, yeah. I can take that back home. All right. That's it. I mean, I got a lunchable at the house for snacks. And then... Yeah, I got a lunchable because...  Oh, dang, you're coordinated. I snapped. And we're not cutting that out. Naive, you don't hear a blusher, y'all. He didn't got himself a camera in 4K. Okay. This is the liquor. Oh, I need to be on here. Okay, come on. We like chips and stuff down there, so it may be on the chip, y'all. Because... Oh, well, no. We got a fridge, baby. There you do. I like the tall. Oh, I get two of y'all. So you got me a little small card. What do you want, bro? She's out. Well, we did have... Oh, this is cool. I've never seen a library like that. Let you know what's in it. Can you touch it? I don't know. Yeah, look at you. What's cheaper? Niggas. He got to get him some snacks with his honky-ass. It chills out. Can I be on the vlog? Kinda sorta. He just need a pack of honey buns. He don't need. He want a pack of honey buns. We are back in our hotel. It is 12.48. We've been here for about, what, 30 minutes? You know what I'm saying? We've been here for like 30 minutes. I think so. We've been here for like 30 minutes and I've already switched into my PJs. I didn't even show y'all the fit and I'm sorry. But I will insert some like pictures and videos and stuff that I got or whatever. And if I have some good pictures then I will insert them too. But I am about to take off my makeup. I glued my wig down with the even New York lace glue. So I don't know if this may not even come off right now. So I'm gonna use my lace milk bin from AJB Beauty Collection. Okay, period. Get you one when I watch in a month. Spoiler alerts or a little, if you watch my YouTube video that I said I'm gonna be watching in a month. So these are gonna be on my website, AJB Beauty Collection. They have a good hold. So I'm gonna put this on if I take my makeup off. And then I think I'm gonna take my sleeping pills so I can be able to go to sleep. And then me and Bay, we plan to be up by like 10 o'clock in the morning. Are we going to brunch or are we gonna get something downstairs for tomorrow? Well, we do know we're gonna go to the mall in the morning. We just plan to be up and out of here by like 10 o'clock. The mall open at 9. And then we do got a dinner reservation for tomorrow at like 5-something. If you're from Dallas or if you've been here and traveled, it's called the Monarch, right? So this was already here. It's the Vanity Kitsit and usually a lot of hotels always have this. So it got like Q-tips and cotton pads. I'm gonna use the cotton pads to take out my makeup. They usually, some hotels have makeup removal wipes. Oh and it got a little foul. That's cute. But yeah, we're going to the Monarch. Got a dinner reservation. It's like really classy, upscale Italian place. We're gonna be on the 46th or 49th floor, one of them. Yeah, it's gonna be real nice. We gotta dress real cute. So I got a cute little brown dress. I do gotta earn my like trench coat to go with it. So I'm super excited for tomorrow. It's gonna be super cute. And then this is what I like to use to take out my makeup. I do use makeup wipes, but I ain't got none. So we just gonna use the cotton pads that the hotel provided us. And we about to get busy. What we watching baby? Oh we need more towels too. They should come tomorrow. They said whatever towels on the floor is what they don't take and replace. It's a little note in here. If they say if the towels are hanging up, they won't replace, well they won't take them. So I guess that mean they probably won't replace them either. You're in Dallas. The light look better this way. It's snowing here. It's snowing here in Dallas. And we just made it to the mall. We're gonna, I want to go to the Grand Looks Cafe. If y'all watched my last Dallas vlog, that's where I was at. Oh, I thought someone was talking. I was like damn, can I talk? Oh, you can see it right here. Okay, well this is cute. All right, so we're here. I want to eat at the Grand Looks Cafe. This is definitely not the one we came here last time. So I'll talk to y'all when we get there. Trying on spoons. These are a size small. I got these in a size medium. They both fit and they have this shirt. I got this in a size large. I mean this fits pretty good. Shirt is large. I like it. Be good. Be on the screen. I mean, no choice. It's small. Period. Ain't it seen me on your Instagram all that good stuff. Period. I'm gonna get a bowl. I'm gonna get a bowl of mine. To the 49th floor. This is a little blurry camera. Floor 49. This is great. Thank you. This is cute. I want to sit down.  No problem at all, man. Don't enjoy. You want to sit on the tall one or? This is cute. Oh, there's the army. That's for me, if you want to sit when I come to my 22nd birthday. This is so pretty. Oh, I had to live in this city. Oh, he said it's a circle. Dinner was amazing. The view is amazing. Everything is amazing. Bay is amazing. Period. Oh, it's a little chilly. I've had a wonderful time tonight. This has been beyond my expectations. Okay, period. So yeah, just want to check in with y'all. I'll check back in when we get to our hotel. Next fit. Pretty little thing and Reebok. And we're out to Pottery to go mini coffin inside. It is 945 and it is 12 degrees. Oh Lord. In this 12 degree weather, hit the hotel. You're not in it. I'm covering you. Can't even see you. All right, we're back in the hotel. I don't know why I got so much energy. I don't know you. Bay, we just started jerking. He jerked with me. He won't dug you with me, though. He won't dug you with me. It's one o'clock, bro. But what else did I do? I'm tired, baby. He'd be up late night with his friends. He could be up with me. Young. When it's home boys. But can't be up with me. Make it make sense. At home. We're at home. He said this on home until we leave. Period. So why can't you be up with you're at home? I'm up. I do it forever. Now he won't favors. But he won't dug you with me. Niggas, I wish I'd do something when they won't. So he got dug in over there. What? I know what you want. One more.  I mean, you over there. Yeah. And I'm going to let you be after I get my hershey's. Man, it's always so needed. What you tell me is the least you can do. I did the least I can do safely. It's snow today. Everything's good. My camera's about to die but I just want to let you guys know we're at home. I'm probably going to switch out my battery in the morning. So next time you see me, we'll probably either be on the road or like packing up all of our stuff in the morning because I may switch on my battery and record then. But if you like this vlog, open it now. Don't forget to like this video. It helps me out a lot. Like, comment, subscribe. Okay, period. You heard me. It's the follow button. Subscribe but you know and we will see y'all in the morning and then change your plans. I'm not staying with him but I think I'm just going to go back home and then I'm still not going to get the dogs into Sunday though because mommy need a break. Okay, period. So yeah, that's it. I'll see you guys in the morning.  If you're not following me, I already go. Follow me on the school here with three A's. I'll put it right here for you and yeah. See y'all in the morning. Bye. Here I'm trying to be me on the vlog. Turn this off. I'll get copyright. All right. Back to regular old me. The curtain is big. All right, we're about to go. It's 10. 39. I didn't even show y'all the view from our hotel. We're on the 10th floor. You can see a little bit. And yeah, make sure we got everything. Phone chargers, everything. We're good. The thing is packed. What's this called? Dolly. Dolly. It's packed. And here we want to head out. Gotta check out by 11. Let me get this food. Yo gummy worms. All right. Definitely got to take this food because even this, as soon as I get big, fire. I only got one glove to wear because my other one is in the car still. And this, this. You didn't put nothing in that drawer, right? Because I told you not to. All right. Play all day.  Everything got the bathroom.  So we got, we covered in towels in there. So they got to come get all the towels. Get out my good ones. All right. I'm not taking this. Oh no. They got water on it from the thing. Damn. Should put that in the fridge. Well, hell, it's probably frozen by the window. That's why that water coming right there. All right. What key? My purse. I'm going to tell you what. I'm going to check in our keys. I can't. Can't I? Because your name on the room. I mean, but they know you and me, too. We've been walking in and out the bits of the day straight. I don't know. Because I just, I don't know. Because when Nicky dad paid, he checked us all out. Like he did everything because he the one with the name on there. He Wally got a tracker anyway.  He cannot stop talking about it and looking at it and playing with it. You see, got the little air tag. They watched it. Y'all don't call me lame. I don't care. Just it didn't mean a little thing. But you know, it's just so cute. He is really amazing. Oh, I should put on. First off, I am covered. Hands to toe. Boots. Boots. All right. I'm going to get off this and I may do some montage footage just for the aesthetics of leaving out. I wish it was dirty. And the freaking thing over there is frozen. It can't even come out. So they got to clean the windshield with this raggedy all purpose spray. And then it's going to take us. Okay. So I just got home. I don't know if I updated y'all. I think I updated y'all when we was like just leaving out of Dallas. But you can see I'm home. Best friend is here. She's in the bathroom right now. But I just wanted to let you guys know I made it safely. I just went to the store and got this. This is some last Christmas gifts for the fam. This is the suit that I got back. I got to take it back and get a larger size because he actually then gained a lot of muscle in his arms. So he needed a bigger size. And then this is like some stuff that I got. So like this is my stuff. This is mine. I bought some skims and stuff from Dallas. When I get back to the house, maybe tomorrow I'll probably do a haul for y'all. Tomorrow is Christmas and today is Christmas Eve. So Merry Christmas Eve. Merry Christmas and happy holidays to all of you. But I got to work tonight on Christmas Eve. We do get paid time and a half and stuff. So that's good. But we don't got to meet up in my fam house until one o'clock in my hometown. So that means I have to be up in my house by at least 1130 to get to my parents house that's going to take 30 minutes. So from 1130 to 12, I'll be in my parents house. I got to pick up my mom and Nikki is going down to my hometown with me. And from my parents house, it's going to take about 40, 35, 40 minutes to get to my hometown. So then that should be about one o'clock. So I literally got to be like leaving my apartment at 1130. I'm literally going to go to sleep at eight o'clock. I'm gonna take my little sleeping pill and try to be sleep by eight. And then I got to literally wake up at 11. I probably wake up at 11 and then so I can be at the house by 1130 to like get dressed and stuff because I don't know. I really didn't want to wear my real hair, but it depends on how tired I am. And if I want to like put on a wig because I do have this cute outfit to wear tomorrow, but I don't know. I'm not really feeling like getting dressed up because I just been like head to toe dressed up in Dallas. So we'll see how I'm feeling tomorrow and how tired I am. If I am tired, I'll just put on something cute mediocre and literally open the gifts and get out of there after a while. So I didn't want to do a haul for y'all, but it is 503 and I got to be at work at 630. I usually leave the house at 6 and I got to package up my hair if you didn't know. I do have my own business. I do sell raw Vietnamese hair. So I just gave the hair to my first model.  So I just packaged that one. So now I got to package my other models and then my other model sister is actually buying hair from me also.  So if you want to head to my business TikTok or business Instagram, you can do that or my Instagram, whatever. I usually post them there. You can support. I was trying to get to like 250 followers on my Instagram by Christmas and Christmas is tomorrow and I think I'm at like 225 right now. So I don't know. Let me see. Yes. I'm at 225 right now. So y'all can go follow and let me hear my go. But I get what y'all probably tomorrow


Hello everyone. So today me and my colleague Francisco, so we're going to talk about managing a fleet of Drupal sites at CERN. So my colleague is Francisco and I'm Rajula. So we work as infrastructure engineers at CERN. So we manage all the Drupal infrastructure, all the clusters and manage upgrades, all the other operations. So before I start, like, how many of you know what CERN is? Okay, quite a good number. So we are the world's largest physics research laboratory. So we're not like, we're a non-profit. So we work with the largest physics equipments and stuff. And just to give an overview. So this is our, this is called the large hydrant collider. This is the biggest ring. This is a, yeah. So we have a couple of experiments on this ring. So this is one of them. This is called Atlas. Just to give a new slight view of this, the weight of this experiment is 7,000 tons, which is equal to the Eiffel Tower weight of the Eiffel Tower. So given all this, yeah. So what are we going to talk about today? We're going to start with how we use Drupal at CERN, give a bit of overview. And then we're going to have a demo. It's going to be more of a half of the presentation, half the demo, and then we'll have a Q&A. So given all the physics, where does Drupal fit in? So every public website that runs is on Drupal. So we have almost 1000 plus websites. Of those, we have 600 plus official websites and 400 are on clones and test websites. We have a community of more than 100 plus creators and site builders that we support. And most all of this is hosted on-premise in our data center. We run it, we create the machines using OpenStack and then we run OpenShift on top of it and then we manage all of it. So just to give an idea of the scale at which Drupal runs at CERN. So these are the recent achievements. These are like blog posts that were posted on home.CERN, which is the official CERN homepage. So we had the start of the RUN3, which is the experiment started after the shutdown. And then one of the experiments also discovered three new particles. So these were posted in a span of three to four days. And all of this generated a traffic of almost one million unique visitors in less than a week. And we were able to handle all of this without any performance degradation. This was the record for us this year. So talking about a fleet of Drupal sites, like I said, we have 1000 and we have a mix of things. We have the simplest of simplest websites and to the complex of all. So there are also something similar among these sites. So let's say each of our website is like a vehicle. So each of it has its own features and stuff. They have their own modules, own themes, but there's something common among all of them. So we try to jot down the common stuff and then we call it the CERN Drupal distribution. So like an engine, which is common among all the cars. So we bring down all the common libraries, common modules, and then we package it into our own distribution, which is on top of the official Drupal version. So we have three parts on it. One is composite adjacent. That is the Docker images that we build to deploy. And then we have CI and testing for each of this version that we build. So going through each of this. So this is our repo. And now composite JSON is quite simple. So we just take the official Drupal one. On top of it, we add all our CERN. We have our own custom modules and themes that we add on it. And then all the other libraries that are used by most of these sites. And then images. We build a couple of images. So we try to copy all this composite, the Drupal code that we built along with Nginx and PHP in the same image. And we use the single image to deploy as a PHP server and also an Nginx server. So all of this lies in the same repo where we do the build. Yeah. Coming to CI and testing. So every time, every commit that's pushed to this repo, we first build. So we have two builds here. One is a composite builder and the other side builder. To make build faster, whenever we change something in the composite adjacent, only then we trigger a composite builder. For other smaller stuff that doesn't relate to composite, we just do side builder. So these two build an image that has Drupal code with a specific version, PHP and Nginx. And then we also test it. So how do we test it? We create a test project on the production cluster. So every time the pipeline runs, a new website is created on the production. And there are a couple of tests that we run. See if the website is working, if SSO is working. And then if it's working, then we use this version image and then we update the website. So yeah. So what if the module is not installed? Let's say the user wants a specific module that he wants. There are two options. One is they would have to install it by themselves. The other is if it's a module that can be used by every other website, we just add it to the common distribution that we just showed. The second part would be demonstrated in the demo. So I'll go to the first one. How do we do the first one? So for the first one, we use something called source to image. This is an OpenShift workflow. We provide a Git repo with a Composer.json. And then we just take this and then we build a Docker image on the fly with this Composer.json, merging it into our original Composer.json, and then run and get a new Composer.log with both the modules in it. Yeah. So it would be a Drupal distribution Composer and then the custom one. So we use the Composer merge plugin, and then we merge the new module into it. And then we this thing runs on the fly, builds a new image, and this image would be used to deploy. So this is an example of how a custom Composer.json would look like. There's just one line here, line number 12, where we just add the new module that we new module that we want to install in it. Yeah, always that infrastructure. Now my colleague is going to talk about Intra and then the demo. Okay, so my colleague just showed how we build images, how we develop and add new modules to our images. But the question now is, how do we deploy all this? So our deployment, like my colleague said, okay, no, you can sit. It's fine. We run OpenShift, which is basically Kubernetes with some extra features like security and multi-tenancy. And on our Kubernetes cluster, we have two major components that make everything run really smooth. The first is an operator. It's called, it's known as operator in the Kubernetes world. It's a Kubernetes operator that works with the Kubernetes API. And we have a second thing, which is called the Drupal site resource. So this is a custom resource that works with the Kubernetes API and basically allows our operator to understand what we are requesting and create all the necessary stuff in order to make our Drupal website run. So here we have basically this example of the structure. The Drupal site is a YAML file. I'm going to show an example of this Drupal YAML site in a little bit. And after we have this YAML site, we push it to our cluster. And then our operator will interpret this and will do the creation of a new deployment, of a new storage, of the grown jobs if necessary, ingress, secrets, all the necessary stuff. So here's the next example. So imagine I want to create and I'm going to do this in a little bit. I want to create a new website and I want the URL to be Drupalcon. And I want a specific version. And then I have a few configuration values. All I have to do is give this to our Kubernetes cluster. And the Kubernetes cluster will be able to create a new deployment running nginx, php, and some extra stuff. So without further ado, let's go to a demo. Hopefully this is readable. How readable is this? Readable? Okay, good. Okay, so like I said before, let's go here to my temp folder, make here Drupalcon. And I'm going to call it Drupal site, but YAML, right? And here I'm going to basically add on. I don't know by heart a Drupal site resource, but I'm going to get one actually. So here I have one. I'm going to use this as an example. As you can see, this has a lot of stuff.  I'm going to explain all of this in a bit. Okay, so our name of the website is going to be called Drupalcon. And this is how Kubernetes will understand our website. We don't specify the namespace. And on the configuration, we can say that we just need, well, one gigabyte should be sufficient. And then we have a few extra configurations that allow the cluster and the Kubernetes to understand how many resources this website will need. So for our use case, we can just use a standard database and the standard quality of service. And we don't need any of this. And for the URL, we can say Drupalcon 2022. Sounds good. And this is the specification of the version. So whenever in our GitLab repository, we want to deploy a new version of Drupal, say Drupal.9.5, all we have to do is create a new branch, call it v9.5, and basically the cluster will be able to fetch it from the container registry and make it run. So this is our specification. And let's say we want to create Drupalcon. Do I have any project with the name Drupalcon? Or do I need to create one? Okay, I have one here. So here, this is a really cool Kubernetes specific, but basically these projects are what allows multiple websites to live alongside in the same cluster with full separation. So within a project, you are basically isolated from all the other projects. So this Kubernetes, this website will live alone and you will not be able to interact with any other project. So like I said here, let's create the website. So website has been created and we can do a few things here. So I'm going to, yes, sorry. So what I just did is the classic operation. So if you ever interacted with Kubernetes before, you just do Ctl, apply in your resource name. And basically what I did here was I requested the cluster to create this resource, which like I said is a resource that the cluster understands because we have created this resource into the cluster and we explain the configuration that the operator reads. So like I said, hopefully we still see some action, otherwise we'll just be looking at all logs. But if we check to the pods, we should see now that our operator has read this configuration here and it will create a bunch of stuff. So we can see here that we already have a pod running. Actually it should be more than one. Okay, so we actually have two pods running here. So this first pod running is let's say a startup and what it's doing is basically it detected that this website is a new website. So what it's going to do and we can actually see what it's doing by checking its logs. What we can see that it's doing is basically enabling themes, certain themes. It's enabling a bunch of models, all the stuff that came from the Git repository. It's basically enabling it and installing it. And well, in a little bit it should have been done with the job. So it's now completed. We have now the serving pod where actually Drupal is actually running. And we actually should have something called the route, which is something similar to Ingress, which will enable us to access the website. And this should be available to all of you in a bit, hopefully if the NS is not too slow. So this is a URL and if I go here and open Firefox URL here. Voila. Okay, so the website has been created. And as we can see, well, if any of you tried to access the website before, you would have seen that it was not created at that point. We can see that it has already all the look and feel of a classic CERN website. This is basically the vanilla thing. You see on top the CERN bar. You see on bottom the contact, etc. So basically this is what we provide out of the box to any experiment at CERN. And even more, we configure some of these modules out of the box. So if I log in, probably I have cookies. So I'll automatically be logged in and be shown as an admin. Well, that's it. But if I were to copy this and open in private, you'll see that I should get redirected into CERN's SSO. So this is the CERN's login system. And with this, we can see here on the extent that we have a bunch of modules that we can enable if you can enable out of the box. And that's it. So for our infrastructure, let's say to create a new website, all we have to do like I showed was to provide a specification of the Drupal site. The operator reads it. The operator creates a deployment. The operator creates a site URL. Actually, I mean, if you want to test it out, we can, for example, come here and we say we want to edit our Drupal site, which was called DrupalCon. And we can go here into the specification site URL. And we can call it something.  So we see that basically the operator will take care of everything for me. No, no suggestions. So no suggestions. Web.CERN.CH. So if I now do a watch on the routes, the operator again will read this description of what I want from the Drupal site.  I'm going to create the route. I'm going to publish it and I'm going to make it available for everyone. So without further ado, I can copy again, go to the browser, open the URL, and well, it's the same site. It's empty, but it's the same site. Yeah, so like my friend showed you before and I'm showing again, this is what we have with our out-of-the-box package. So what if I want to add a new module into our package? So we had a discussion with our users and we see that the community could really use another module. To do that, we just go to our GitLab repository, which hopefully I have it here. We should have here, like my friend showed you, the composer.json. And now I would like to request a quick help from my audience and get a suggestion of a new module to add quickly to our Drupal distribution.  No? Workspaces, okay. Let me just confirm that I don't have workspaces on composer. So workspaces, just like this? No, I don't have workspaces, so it's a good example. Okay, so I'm going to run Podman. So basically, when we want to add to our certain Drupal distribution anything, I don't rely on my machine. Actually, this machine has been freshly installed, so I'm sorry for all the hiccups. We rely on using Docker or Composer and we run our own machine locally so we can actually build everything consistently. So certain Drupal distribution, hopefully I have it in the chat here. Okay, so Podman, IT, okay, so hopefully this will run, but I don't have Docker. And well, so what I'm doing here quickly is just I'm wanting my folder, work folder, where I have the repository into the image and I have this image here, which hopefully still exists. Okay, so I'm inside the image. This doesn't look good. Yep. Okay, so actually, maybe I should do it manually because I can just edit manually, I guess, because my machine is not working properly. So does anyone know what is the latest version? Actually, we can put any version, right? So workspaces and we can define, sorry, so sorry, could you repeat that? WSE? WSE, like this. Well, I need to give, sorry, and the version we, thanks. And which version should we require to be in? We can just say three. I don't know which version this runs on. Okay, I can put 1.0. Okay, so this is enough. Sorry for the e-cup and hopefully you're still with me. So, well, in the Git repository, we see the difference here of Composer. So we have the new module. We can add this and call it new feature. Now I'm going to create a new branch and call it Drupalcon. Git checkout, sorry, checkout B, Drupalcon, because it doesn't exist. Okay, so now I'm a feature branch and I'm going to push these changes with the new Composer. And well, GitLab will say that this is possibly a merge. So I'm going to go quickly to GitLab where we host all this Drupal distribution. So we can create the merge request. I don't know if you noticed already on the pipeline, there's something already running. So like my colleague has said, every time we create a new change, the pipeline is run, it is executed. A new image is created. This image will be a feature image and we can then push this feature image to our production cluster, dev cluster, or even in our machine to see if everything works as we expect. So we can say new feature workspaces. I'm not going to push too much here, just doing this. And I create a merge request. And well, before merging it, I want to be sure that it doesn't destroy what I already have. So after creating the image, we still have a few extra steps where we would see the same website being created into a specific place. The same way that I just created our website, it will create automatically. It will check a few things. And if everything is all right, then it will say, okay, the test has passed. This means that it's deployable not only on staging or dev, but it will also run on production correctly. So our pipeline is currently still building the image in a bit a little bit. Hopefully it will as finished. Like I said here, I have a Drupal site. I'm going to edit this Drupal site. Also, I don't know how familiar you are with Kubernetes overall, but in the Kubernetes resources usually have two important fields in any resource, not only the custom ones, which are the specification and the status. So this specification is where I can change things and where basically I define how I want the world to be in. And the status will say basically how it's currently in. So we can see here that it's already using that image for debugging purpose. We can always export further. The image has still not been done. So in a bit, I will just change this version here. And instead of being a version V9.4, it will be the branch name. And then we will use the commit from the release. So the branch name was Drupal corn, right? I mean, I can just wait for the pipeline to finish because it should be finalizing hopefully in a minute. And just to export it later. So basically, if this was to be merged and then the new version release has been finalized, then I can just go to all websites in all production versions and just update it with the latest one. So if I ever want to just update, for example, Drupal core to a new version, all I have to do is make these changes on GitLab, run the CI, the image is run. I know that the image will not break anything. Then I just go to all the cluster and say, now this is the new release. And basically, the cluster will take care of everything for me. So as you can see here, the image has been pushed. So the image is this feature one. When it fits a production one, it will take it as a release. I say here, this is the version that I want. So the version name is always the branch name. And the release spec will basically be the tag. So I changed the Drupal site. And again, my operator has noticed that the specification that I gave is different and that it has to do some things. So what it's doing now is it's ramping up. I can do actually a watch. You see that it's trying to ramp up a new pod. This new pod is with a new specification, which is the image that we just created. It will try, really try, but maybe not succeed to actually have zero downtime. So if I get the route here, Drupalcon, if I do a curl and I try to get the status code, HTTP, it's 200, 200. Well, it's already running the new one. So we saw that a new pod got created. So this one is brand new. And this one should theoretically be running the new image. So we can actually test that by going to the website. So if we go again to the website and refresh, sessions should remind the same because Drupal stores the session and it's not within the pod. And now we work for workspaces, right? Workspaces. So there it is. So now, just with this simple change, workspaces. Okay. So which one is it? Is it any? Is it this one? Okay. Sorry. Yeah. So basically it's this one and became available to anyone. So basically now, if you wanted to use this new feature that we just deployed to everyone, you just have to check it and install it. And that's it. I don't know if, by the way, if you have any questions at any point, feel free to interject. But imagine that if we want to go back, I can easily go back into the old version. And we see that if we put the old version, which is this release with this release spec, v9.4-1. And with the release, sorry, with this release spec. And we watch again. We see that the new pod is again rolling because like I said before, the operator again detected, oh, there's a change in the image. I have to update again the deployment. The other one is already terminating. I actually saw a 1503. So you can actually see that it was barely out of and available. It's almost zero seconds. This is one thing that we have to improve. But basically with this, I have just deployed the same website with minimal downtime. And again, with the new version, this is basically a change in the module, but it could be a change in anything. And now I should not be able to find workspaces. Workspaces. Well, now I just find this. Yes. Are these all models, for example, or you always rely on fetching them from there? So basically, you're questioning if we cache our images? No, no. When you're building something new library that has been used already before in another place, but is being added. So if there's a library that you want to add? Yeah. Then, or a model, a contributed model, anything. Do you always rely on the original source? Yes. So basically, each image once created, it's immutable. So it will remain with all the packaging that has been created on. But if at some point you want to update to a module, like you said, from upstream, we push it to the git repository. And only then you are basically fetching from upstream. So we always rely on upstream for fetching the stuff. But once we create the images and we deploy them, then we basically hold these images and we can always redeploy them. Well, basically, the goal of the demo was this, was basically to show that I can easily change our distribution into adding a new theme, a new module, anything based on the community request. And the second point which I find interesting to show is that this is basically Kubernetes native. So none of this is particularly specific, let's say, to CERN. This could be deployed in any Kubernetes cluster. Obviously, there's a few extra features that were added for the CERN specific requirements, but overall the idea is the same. And now I suppose we can go to the questions, which should be on. So feel free to throw questions. So like my colleagues showed, I don't think we have time in terms of the demo to do this. But if you were to, and this I can show you again in the terminal. So the question was what about custom modules? So if you have, you mean personal custom modules, modules that you can create. Okay. So all of this, like as persistent storage, so our pods are, so if I get the pod here, this pod here that is running our website can be, we can get into the pod. Let's go to the PHP FPM container. Did I lose? Okay, I lost the character there. Okay. So once I'm here on one of our containers, this is the one running PHP FPM. We can see that we have something which is the Drupal data, which is actually the one on top. So basically, we can see that our persistent storage is currently empty. At any point, you can go to the Drupal data and here on under modules folder, you can add any custom module. And basically here you just dump the folder like any other module. And there's a link between this and the PHP code. So actually, we can even try that we can actually go to upstream. What will any module that you want to dump directly there? But basically what I would do is you would tell me the link and I would download the zip into this folder here. I would do a Drush Cache Reset basically, and then it would be available to enable to the website. Yes. So we also have web doc so we can also mount the file system of the website into your local machine or have it in the browser for convenience basically. Any other questions? What was the business need that justified this entire infrastructure? How many websites are we talking about? Okay, so okay, you missed the presentation because it's actually one of our first points. So this is the simple graph that was extracted a few days ago. And basically at CERN, CERN has a lot of experiments happening, even though we have like the large idran collider as our main point. There's a lot of small experiments, a lot of different things that are being tested. And all these experiments might be interested in having their own website that they have a full control over to expose to their communities, as well as maybe you can or want to create an internal website within the CERN community to show a few things. Basically, you can rely on the CMS Drupal to create your own websites and have it mostly maintained by us.  Drupal gets automatically updated to the new core version. The modules also get automatically updated. You as a user, don't worry about anything. You're just a content management provider. Yeah, you said that you're merging the comporter JSON, if you have a custom one. Where I was thinking normally what I would do is to make this share this version of dependency instead of... Okay, there's a reason behind this. So this is the approach that we support. So at CERN, this is an engineering perspective, any custom module as its costs. And in the CERN community, the focus is on physics. We do IT for supporting their experiments, both on providing websites for public hosting, but also for computing needs. So we try as much as possible to demotivate users from creating custom custom modules that you put into a folder and you forget about it. And in five years, they have to be maintained. But if you have a composer, usually it's a package manager. So it will automatically update or at least it will be able to update easier than if you just dump a folder with static content. I'm not sure if that answers the question. Maybe. Yeah, because the way I would think about it would be that if each website has its own repository, but I think maybe it doesn't. No, it doesn't. By default, you just use our repository. So most of maybe some websites have their own repository. Yes. And then they have this composer JSON that is being merged with the other one. But it's not... But I would think if I have my own composer JSON, then I would just add this other thing as a dependency. And then I don't... There's no... You don't need to worry.  And basically you create a webbook, basically. So basically there's a trigger. So every time the GitLab changes, it will tell the cluster, look, this repository has changed and I have a new module. And the operator will fetch that repo. It will merge it with our composer. And this guarantees that you also get the modules that we provide, the themes that we provide. Because like I said, if you look at the website... Sorry, on site five. On this website, it's also of, let's say, your interest as a user to not worry a lot about themes and looks. So like I said, this is one of the themes that we provide out of the box. And it's just simple because you already have the CERN look and feel, and all you have to do is have extra stuff. So it's usually you don't want your full composer. How do you handle configuration? Is the configuration shared across outsides? No, each instance has its own configuration. It's on database. They live completely isolated. Conductions and so on. Do you have some kind of starter kit to get the basic context or something? So like I showed you, this is basically the superstar kit. So like I showed you in YAML, we have a portal that is more fancy. And you just have...  So basically here, this is our web services portal. And if we at some point want to create a Drupal site, which we just come here and just say create a Drupal site, we say if it's official, so it's for the organization, if it's personal, because you might want to have your personal website where you show your paper submissions, your presentation, et cetera, or a test website where you're testing something. And then you just give it a site description, a site name, the type of profile. So the CERN or Easy Start, this is the two basic themes that we provide. And once you click on this in two minutes, you have the website up and running very similar to this one. And this has content types and fields already or not? This doesn't have a lot of content. This has mostly just integration. So if you go here to the extensions, we'll see that CERN, we have quite a few modules that are here and you can enable.  We also have something called Indico where we... Sorry, Indico, where we polarize our events internally. And basically, this is integration with your website. This comes out of the box. But I'm not sure if I'm answering your question. You can say no if it's... So I assume this events module then has some conflict tools for the content type or something. Sorry? The events module might then have a content type configuration. This is a better question. Actually, I have the web team with me. So basically, I'm infrastructure. To be honest, I'm not really a Drupal... No, wait, hold on. I'm not the Drupal expert whatsoever. I'm an infrastructure engineer and I try as much as possible to automate Drupal. But once we reach this point of actually handling... Sorry, managing modules, etc., actually, I have my two colleagues here that they're from the web team. They're in the first row and they probably can reply to that question better than me. We can also talk later if you want to. Or if you want to, yeah, you can have a discussion later. I don't know. Feel free if you want to reply. Okay, I guess you can discuss later unless anyone else is interested, but they can also ask them. Any other questions? Curiosities. Project browser initiative gonna affect your workflows? Well, we haven't given it too much of a thought. So at least for now, we accepted the fact that we have to basically update the core, update everything. So at least until further notice, we will continue with this workflow where basically we just have to update the composer and the operator does everything for you on updating. If at some point they make improvements on the life cycle, we just integrated to our use case simply without much of a fuss. So is this updating and offering new features the main things that this test that you guys do?  So this, as you said, automatics is one very good improvement from our infrastructure. But the second is the deployment itself. So this is basically a deployment that it's easily easy to duplicate through tests. So basically, if at some point you want to test something out, creating a clone with this infrastructure is automatic. I can create a clone within two, three clicks again. And basically Kubernetes will create a separate instance that is fully integrated with CERN ecosystem. So basically, it automatically integrated with our single sign on, but also it will also create for you a database. So you don't have to worry on anything about the Drupal and everything is hosted in-house, all self-hosted. Okay. Any other questions? Hi. In your CI CD pipeline, you mentioned you had automated tests.  That's a good question. It's a very good question. So, well, we first and foremost, we rely a lot on Kubernetes itself on OpenShift and all its features. So the pipeline is finalized, as you can see, and the tests have passed. We actually do two tests. So I'm not sure how visible it is. I'm sorry. The tests are really simple. So what the tests actually do is they create a new website out of the box with the version you just created. And the tests that are made are basically you can run the website and the website as SSO integration. And the other one clones an already existing site, which already has a few modules and basically updates them and see that they run. There's no security tests. So on the application layer, if Drupal is not really secure, we could be exposed. Our advantage here is that since we don't use things like multi-sites, even if a website gets exposed, it's minimal because you cannot get access to any other website or anything else. Basically, you just get access to the website itself and to what that means could have access to. One thing that we try, and it's the advantage of the way that we have with automatic updates is we try to be as possible as soon as possible up to date. So whenever Drupal itself publishes a new patch security, etc., we basically are able to put it to production if we want within the day. We usually don't do it within the day because we want to guarantee as much as possible that nothing will break. If it's usually just a patch upgrade, we can do it within the day. It's a matter of just like I did now, doing a Composer update with the new Drupal version, run the CI. Once the version is released on the CI, I just update all websites in the YAML file that I initially showed with the latest release, and that's it. Within minutes, everyone is up to date again. Any question? Okay, so if there's no more questions, thank you so much for attending.