☸️ K8s Homelabbing - Let's Deploy Wallabag! - 📚 Read Later App
Read full transcript 67 segments
-
today doing a bit of the stream admin today doing a bit of the stream admin and looks like we are online on both and looks like we are online on both and looks like we are online on both platforms yes we are my my homepage is my my homepage is working working working see here so this is the homepage that I see here so this is the homepage that I see here so this is the homepage that I deployed yesterday it's working uh quite deployed yesterday it's working uh quite deployed yesterday it's working uh quite well and one app that I have had on my well and one app that I have had on my well and one app that I have had on my mind for a long time is wallabag mind for a long time is wallabag mind for a long time is wallabag so I I have my RSS feeds here that I am so I I have my RSS feeds here that I am so I I have my RSS feeds here that I am um subscribing to and um subscribing to and um subscribing to and then sometimes I come across articles then sometimes I come across articles then sometimes I come across articles that I want to read later but I store that I want to read later but I store that I want to read later but I store the I I I create the note in my obsidian the I I I create the note in my obsidian the I I I create the note in my obsidian Vault and then I will sort of fuing let Vault and then I will sort of fuing let Vault and then I will sort of fuing let me just let's see can I show that yes yes I can yes yes I can okay so when I open open here in my obsidian Vault I have this uh here in my obsidian Vault I have this uh here in my obsidian Vault I have this uh consume consume consume tag and that is basically my read later
-
tag and that is basically my read later tag and that is basically my read later list and these are all the articles that list and these are all the articles that list and these are all the articles that I still want to to I still want to to I still want to to read among which Argo CD versus flux read among which Argo CD versus flux read among which Argo CD versus flux CD and what wallabag does is that it CD and what wallabag does is that it CD and what wallabag does is that it takes this you can take an article like takes this you can take an article like takes this you can take an article like this and then save it in the application this and then save it in the application this and then save it in the application itself so you don't have to worry if itself so you don't have to worry if itself so you don't have to worry if this article were to go down at some this article were to go down at some this article were to go down at some point that you will lose the text that point that you will lose the text that point that you will lose the text that you want to read and I I kind of want to you want to read and I I kind of want to you want to read and I I kind of want to have one place where I will store all of have one place where I will store all of have one place where I will store all of the stuff that I'm going to that I want the stuff that I'm going to that I want the stuff that I'm going to that I want to read so Walla bag to read so Walla bag to read so Walla bag is this selfhosted is this selfhosted is this selfhosted option and I I had this I had this my option and I I had this I had this my option and I I had this I had this my eye on this for years but yeah I wasn't eye on this for years but yeah I wasn't eye on this for years but yeah I wasn't self-hosting and I didn't really want to self-hosting and I didn't really want to self-hosting and I didn't really want to purchase it purchase it purchase it either even though it is what n a year either even though it is what n a year either even though it is what n a year oh my God it's it's actually cheaper to oh my God it's it's actually cheaper to oh my God it's it's actually cheaper to have them hosted instead of doing it have them hosted instead of doing it have them hosted instead of doing it yourself but now I have this home lab yourself but now I have this home lab yourself but now I have this home lab running I might as well uh host it running I might as well uh host it running I might as well uh host it myself so here it says try it out what myself so here it says try it out what myself so here it says try it out what does that does that does that [Music] [Music] [Music] say so it's compatible with iOS you can say so it's compatible with iOS you can say so it's compatible with iOS you can probably connect it to your instance probably connect it to your instance probably connect it to your instance that's going to be cool so I will need that's going to be cool so I will need that's going to be cool so I will need to have a cloud flare tunnel for to have a cloud flare tunnel for to have a cloud flare tunnel for it yeah so let's just um get going with
-
it yeah so let's just um get going with it yeah so let's just um get going with it so here's their here's their docker it so here's their here's their docker it so here's their here's their docker toer composer for wabag and I'm like I toer composer for wabag and I'm like I toer composer for wabag and I'm like I prefer to create my own manifests anyway prefer to create my own manifests anyway prefer to create my own manifests anyway but let's just take a quick but let's just take a quick but let's just take a quick look wabag Helm this yeah it had commits three years ago this yeah it had commits three years ago no I those are two that's too no I those are two that's too no I those are two that's too old there is the day do old there is the day do old there is the day do [Music] [Music] [Music] three yeah no I'll just do it myself three yeah no I'll just do it myself three yeah no I'll just do it myself it's much more fun to write the Manifest it's much more fun to write the Manifest it's much more fun to write the Manifest myself so that's what I'm going to do myself so that's what I'm going to do myself so that's what I'm going to do today okay so here is the docker image today okay so here is the docker image today okay so here is the docker image and they just have it as a GitHub and they just have it as a GitHub and they just have it as a GitHub package here or as a release here post post Crest okay so it will it will support Crest okay so it will it will support Crest okay so it will it will support postgress that's postgress that's postgress that's great post for using postgress you have great post for using postgress you have great post for using postgress you have to Define some environment let's
-
let's see okay yeah so here they're running it see okay yeah so here they're running it see okay yeah so here they're running it with a Maria DB as a doer compos with a Maria DB as a doer compos with a Maria DB as a doer compos file file file okay so it's just a standard way of okay so it's just a standard way of okay so it's just a standard way of deploying it with deploying it with deploying it with a database and is the symphony also for database and is the symphony also for postgress or is the symphony for the postgress or is the symphony for the postgress or is the symphony for the internal stuff Symphony M database stuff Symphony M database driver this sets the database driver to driver this sets the database driver to driver this sets the database driver to use so does it so does it need it's saying red is here does it need it's saying red is here does it need it's saying red is here does it also need reddis or is it just one of also need reddis or is it just one of also need reddis or is it just one of the data databases that it okay yeah so here's the docker run okay yeah so here's the docker run Wallback DB so this is the post Crest Wallback DB so this is the post Crest Wallback DB so this is the post Crest container that they
-
run yeah okay and then they run wab run yeah okay and then they run wab bag and they link it to that container bag and they link it to that container bag and they link it to that container but then I have to figure out a way host and the port yeah okay so I just host and the port yeah okay so I just set these environment variables and then set these environment variables and then set these environment variables and then it should uh it should it should uh it should it should uh it should work complicated complicated so let's do something fun let's see if I so let's do something fun let's see if I so let's do something fun let's see if I can get it to um to um work from scratch let's just turn on key Caster so you can see just turn on key Caster so you can see my keys hello Donovan happy Sunday to you keys hello Donovan happy Sunday to you too hope you're doing
-
well oh do I have a flux upgrade that's well oh do I have a flux upgrade that's that would be fun let's see that would be fun let's see that would be fun let's see home lab I seem to lab I seem to have a branch with update PRS let's see did the bot make any PRS let's see did the bot make any commits to commits to commits to this no doesn't look like it no it's up to date with main okay so no it's up to date with main okay so it's just an Old it's just an Old it's just an Old Branch I got excited for nothing okay so Branch I got excited for nothing okay so Branch I got excited for nothing okay so I'll just delete this um I already have like a few um I already have like a few applications that basically use the same applications that basically use the same applications that basically use the same exact same template you could say the exact same template you could say the exact same template you could say the same method of deployment so I'm just same method of deployment so I'm just same method of deployment so I'm just going to use comma feed as going to use comma feed as going to use comma feed as my example so I'm going to my example so I'm going to my example so I'm going to uh copy all of the manifests in comma uh copy all of the manifests in comma uh copy all of the manifests in comma feed to a new directory called wallabag then in here I can just do a
-
wallabag then in here I can just do a search and replace for comma feed and search and replace for comma feed and search and replace for comma feed and replace it with Walla bag and that should bag and that should just basically set everything just basically set everything just basically set everything up uh we won't set the security context up uh we won't set the security context up uh we won't set the security context just though oh yeah though oh yeah here so this is the GitHub here so this is the GitHub here so this is the GitHub package 269 okay privileg escalation should be false
-
okay privileg escalation should be false follow back config map that's follow back config map that's follow back config map that's fine the port what port are we going to fine the port what port are we going to fine the port what port are we going to do the big do the big do the big question oh you just join joined School question oh you just join joined School question oh you just join joined School nice to have you man welcome to the nice to have you man welcome to the nice to have you man welcome to the crew I will I should write you a welcome crew I will I should write you a welcome crew I will I should write you a welcome message after I um finish the message after I um finish the message after I um finish the stream great to have you on board man man so I'm in my kubernetes cluster and then so I'm in my kubernetes cluster and then so I'm in my kubernetes cluster and then K get SVC K get SVC K get SVC all and then grab all and then grab all and then grab 8083 do I have anything with Port 8083 8083 do I have anything with Port 8083 8083 do I have anything with Port 8083 it seems like I it seems like I it seems like I don't so so let's do port 8083 and I should 8083 and I should check which check which check which Port this one is uh expecting though yeah so this the application is though yeah so this the application is running on Port running on Port running on Port 80 in the container so I will have to set that Port when I so I will have to set that Port when I configure configure configure it okay it okay it okay so we have the
-
secrets okay so I'm using secrets okay so I'm using a setup where I am using Azure key a setup where I am using Azure key a setup where I am using Azure key vaults for my external secret management vaults for my external secret management vaults for my external secret management so that's what I'm also going to be so that's what I'm also going to be so that's what I'm also going to be configuring configuring configuring today for the networking I'm going to do today for the networking I'm going to do today for the networking I'm going to do this same search and this same search and this same search and replace going to do it replace going to do it replace going to do it 883 and here I'm also going to do the 883 and here I'm also going to do the 883 and here I'm also going to do the same search and replace uh connection string storage replace uh connection string storage account name yep DB username password account name yep DB username password account name yep DB username password yep so the secret configuration will come so the secret configuration will come after so now I after so now I after so now I will this was the base layer of the will this was the base layer of the will this was the base layer of the application and now I can copy application and now I can copy application and now I can copy my um production layer all bag my um production layer all bag my um production layer all bag because that's how I have it because that's how I have it because that's how I have it currently CL flare here I can do a currently CL flare here I can do a currently CL flare here I can do a search and to let's see replace
-
to let's see replace this database this database this database replace I'm just replacing all of the replace I'm just replacing all of the replace I'm just replacing all of the words wab bag or com feed with wall bag everywhere okay so all of the names are everywhere okay so all of the names are the the the same same same now in my initial customization I'm not now in my initial customization I'm not now in my initial customization I'm not going to include the cloud flare or the going to include the cloud flare or the going to include the cloud flare or the network policy policy um where is the Ingress though oh that's um where is the Ingress though oh that's um where is the Ingress though oh that's here networking not yo hey that's interesting where is the hey that's interesting where is the Ingress configuration for comma huh wow what huh wow what Ingress comma feed I don't have an Ingress feed I don't have an Ingress configuration for comma configuration for comma configuration for comma feed I could swear that I have that oh wait that oh wait yeah uh I'm having it as a cloud flare
-
yeah uh I'm having it as a cloud flare yeah uh I'm having it as a cloud flare tunnel and then you don't need an Ingress I'm almost certain about that Ingress I'm almost certain about that comma feed comma feed comma feed [Music] [Music] [Music] SVC yeah I don't have an Ingress SVC yeah I don't have an Ingress SVC yeah I don't have an Ingress resource yeah I'm using a cloud flare resource yeah I'm using a cloud flare resource yeah I'm using a cloud flare tunnel so it doesn't need an Ingress tunnel so it doesn't need an Ingress tunnel so it doesn't need an Ingress resource I'm just being super stupid resource I'm just being super stupid resource I'm just being super stupid like like like always always always so and and again for my production layer I am going again for my production layer I am going again for my production layer I am going to skip the cloud flare tunnel and the to skip the cloud flare tunnel and the to skip the cloud flare tunnel and the network policy for now the scheduled network policy for now the scheduled network policy for now the scheduled backup can be backup can be backup can be run okay so now let's go configure my run okay so now let's go configure my run okay so now let's go configure my database stuff in azure community's home lab community's home lab production this contains all of the production this contains all of the production this contains all of the secrets for my my application application application so whilea so whilea so whilea bag
-
um how am I calling it in the secrets um how am I calling it in the secrets here wallabag DB password that's what it's wallabag DB password that's what it's going to be going to be going to be [Music] okay so I've now entered a secret in my okay so I've now entered a secret in my key key key Vault Vault Vault and I used to have the DB username as a and I used to have the DB username as a and I used to have the DB username as a secret but I don't think I actually need secret but I don't think I actually need secret but I don't think I actually need to have that as a secret to have that as a secret to have that as a secret um so that can be commented um so that can be commented um so that can be commented out the blob SAS I will need to configure storage account name where is configure storage account name where is that necessary for
-
oh yeah that's how the EDB operator oh yeah that's how the EDB operator works yeah that's works yeah that's works yeah that's right okay well that's no problem that right okay well that's no problem that right okay well that's no problem that one I one I one I can have so wall can have so wall can have so wall bag storage account name and that is just going to be the name and that is just going to be the name of the storage account hey Han hey Han Solo how are you doing today let's see my storage account name today let's see my storage account name is HL database production so we need the storage account so we need the storage account name connection string is going to be name connection string is going to be name connection string is going to be what I'm creating in what I'm creating in what I'm creating in the storage account so in my storage the storage account so in my storage the storage account so in my storage account I have a bunch of containers and account I have a bunch of containers and account I have a bunch of containers and each container has each container has each container has [Music] [Music] [Music] the backups of my database so every the backups of my database so every the backups of my database so every night at 3:00 a.m. I make backups of my night at 3:00 a.m. I make backups of my night at 3:00 a.m. I make backups of my database in my storage account so I can database in my storage account so I can database in my storage account so I can restore them later if I need it so I'm restore them later if I need it so I'm restore them later if I need it so I'm going to create a new container called
-
wallabag wallabag create and then I need to create a SS token well I can show you how I do it token well I can show you how I do it see access see access see access [Music] [Music] [Music] Keys um here shared access signature so Keys um here shared access signature so Keys um here shared access signature so here I have to configure a signature and here I have to configure a signature and here I have to configure a signature and I'm going to have that expired two years I'm going to have that expired two years I'm going to have that expired two years from from from now and very important it needs to have now and very important it needs to have now and very important it needs to have all of the all of the all of the permissions read and permissions read and permissions read and write and then I can generate it and write and then I can generate it and write and then I can generate it and then store it in my key okay okay okay okay and then the name is going to be wabag and then the name is going to be wabag and then the name is going to be wabag connection connection connection [Music] string
-
string okay so now I have created my connection okay so now I have created my connection okay so now I have created my connection string hey Larry how are you doing today I've got the connection string the today I've got the connection string the storage account name and the blob oh no that's it's the blob SAS I what I oh no that's it's the blob SAS I what I needed to create needed to create needed to create okay my apologies I need to create a new and my connection and my connection [Music] string okay string okay so now those are password okay those are the Azure
-
password okay those are the Azure Secrets configured v0 and let's see the storage let's start v0 and let's see the storage let's start with 2 with 2 with 2 gabes the bootstrap needs to be an init gabes the bootstrap needs to be an init gabes the bootstrap needs to be an init DB DB DB [Music] [Music] [Music] so this is the this is how you configure so this is the this is how you configure so this is the this is how you configure an init DB instead of recovering an init DB instead of recovering an init DB instead of recovering from a okay cluster backup needs to go to SL okay cluster backup needs to go to SL wallabag server name is blobs but we don't need that yet that's blobs but we don't need that yet that's for later this is for the backup that for later this is for the backup that for later this is for the backup that will be created as I create will be created as I create will be created as I create it here's it here's it here's the let's do a retention policy of 14
-
the let's do a retention policy of 14 the let's do a retention policy of 14 days for days for days for this and let's start with 300 me bytes this and let's start with 300 me bytes this and let's start with 300 me bytes of of of memory so that should be the memory so that should be the memory so that should be the configuration for the configuration for the configuration for the database and if I did it correctly then database and if I did it correctly then database and if I did it correctly then it should already create a backup from it should already create a backup from it should already create a backup from the the the GetGo GetGo GetGo here we just name it v02 and then it's just a matter of passing and then it's just a matter of passing the correct environment variables to our the correct environment variables to our the correct environment variables to our new new new application so for that so for that we go back to wallabag and let's deployment because I'm passing from the deployment because I'm passing from the config map and from the container NV so config map and from the container NV so config map and from the container NV so let's just open the config map and see
-
so this is for the postgress so this is for the postgress container but here is the one for thing so postgress thing so postgress password that's the name of the password that's the name of the password that's the name of the environment variable that it's environment variable that it's environment variable that it's expecting and I'm passing that in my expecting and I'm passing that in my expecting and I'm passing that in my secrets. secrets. secrets. yo here so I'm creating a yo here so I'm creating a yo here so I'm creating a secret that's called wallabag container secret that's called wallabag container secret that's called wallabag container EnV and the key of the secret is EnV and the key of the secret is EnV and the key of the secret is postgress password and I'm giving that postgress password and I'm giving that postgress password and I'm giving that the contents of baback DB password in my the contents of baback DB password in my the contents of baback DB password in my Azure Azure Azure key hey Rio you I owe you one for reminding me Rio you I owe you one for reminding me of the doden hering yesterday I had of the doden hering yesterday I had of the doden hering yesterday I had totally forgotten that so after you totally forgotten that so after you totally forgotten that so after you posted that I instantly ended the stream posted that I instantly ended the stream posted that I instantly ended the stream and did my duty as a Dutch citizen so this should make the citizen so this should make the postgress password available in the postgress password available in the postgress password available in the container container container um environment um environment um environment so we have that one so we have that one so we have that one done postgress done postgress done postgress user that's going to be a new
-
user that's going to be a new user that's going to be a new environment environment environment [Music] [Music] [Music] variable and let's see no I don't want to be and let's see no I don't want to be editing the LinkedIn database editing the LinkedIn database editing the LinkedIn database file I need my wallabag database file file I need my wallabag database file file I need my wallabag database file here we are saying that the database here we are saying that the database here we are saying that the database user is going to be user is going to be user is going to be wabag not wabag not wabag not surprisingly vaa bag then we have a bag then we have a variable database driver and that is and that is PDO PDO PDO [Music] pgsql now the database pgsql now the database host is going to be similar to what I host is going to be similar to what I host is going to be similar to what I have in comma feed have in comma feed have in comma feed [Music]
-
um question at Misha any specific reason um question at Misha any specific reason you're not using the config map you're not using the config map you're not using the config map generator in customize um I do use the config map customize um I do use the config map generator for merging uh grafana generator for merging uh grafana generator for merging uh grafana dashboards for dashboards for dashboards for example so I have I have a bunch of Json example so I have I have a bunch of Json example so I have I have a bunch of Json files and then I'm I'm generating a files and then I'm I'm generating a files and then I'm I'm generating a config map based on those files but do config map based on those files but do config map based on those files but do you mean that you would use a config map you mean that you would use a config map you mean that you would use a config map generator instead of hardcoding a config generator instead of hardcoding a config generator instead of hardcoding a config map file like how did I do that in comma feed do I how did I do that in comma feed do I have it in a config map well that's a bad example because map well that's a bad example because it's using this other type of connection example so for the database host we just example so for the database host we just use
-
a kubernetes a kubernetes DNS type DNS type DNS type URL and this is going to be the name of URL and this is going to be the name of URL and this is going to be the name of the service that the EDB operator is going to create that the EDB operator is going to create and that's going to correspond with the and that's going to correspond with the and that's going to correspond with the cluster name that I give so the service that it's going to create so the service that it's going to create is probably should be called bag DB is probably should be called bag DB is probably should be called bag DB production production production v0 v0 v0 RW and then the name Nam space is going RW and then the name Nam space is going RW and then the name Nam space is going to to to be be be wallabag SVC cluster local that's that's wallabag SVC cluster local that's that's wallabag SVC cluster local that's that's where the database is going to live where the database is going to live where the database is going to live that's how it will reach straightforward database name is also straightforward database name is also wabag okay so the it's probably creating a okay so the it's probably creating a symphony
-
itself I'm going to assume that at least itself I'm going to assume that at least okay so I need to change the equal sign okay so I need to change the equal sign okay so I need to change the equal sign to a colon and to a colon and to a colon and then space so I'm just going to select then space so I'm just going to select then space so I'm just going to select it it it s equal s equal s equal sign replace that with sign replace that with sign replace that with goldon okay thank you okay thank you Adia with C customize I never use plain Adia with C customize I never use plain Adia with C customize I never use plain config config config Maps main reason is customized will Maps main reason is customized will Maps main reason is customized will actually change the name of the config actually change the name of the config actually change the name of the config map depending on the map depending on the map depending on the contents contents contents oh okay so I've oh okay so I've oh okay so I've been been been like I always like to just have have the like I always like to just have have the like I always like to just have have the files like configured as files like configured as files like configured as I like I love customize but for my own I like I love customize but for my own I like I love customize but for my own management I like to be able to open the management I like to be able to open the management I like to be able to open the file and see how it's going to look like file and see how it's going to look like file and see how it's going to look like in my in my gitops repo and see how it's in my in my gitops repo and see how it's in my in my gitops repo and see how it's going to look like on my cluster but going to look like on my cluster but going to look like on my cluster but what you're saying what you're saying what you're saying is definitely a valid point because the is definitely a valid point because the is definitely a valid point because the changes the changes the changes the name so what would this look like with a name so what would this look like with a name so what would this look like with a config map generator
-
yeah to generate a config map from a yeah to generate a config map from a file add an entry to the files file add an entry to the files file add an entry to the files list so it would so it would be this would be a separate file file so let's call it oh and then I have oh and then I have to then I will have to then I will have to then I will have to okay well I'm not going to do it now to okay well I'm not going to do it now to okay well I'm not going to do it now but I am definitely going to try it um but I am definitely going to try it um but I am definitely going to try it um later I now I just want to get it up and need it looks need it looks like I will also need a database like I will also need a database like I will also need a database password for password for password for Symphony so that will also require
-
Symphony so that will also require Symphony so that will also require another secrets and let's call that Walla bag secrets and let's call that Walla bag follow bag Symphony Symphony [Music] password password [Music] syphony syphony password password password then in the container n then in the container n then in the container n secret we will have key that will take the wallabag symphony key that will take the wallabag symphony password and
-
password and password and then in there we are going to have variable Symphony n database password variable Symphony n database password Here We Go all right Rio thanks for tuning in Go all right Rio thanks for tuning in see you later so postgress password and symfony so postgress password and symfony password and I just need to enter my password and I just need to enter my password and I just need to enter my Symphony password okay that's okay that's [Music] [Music] [Music] done done done so getting
-
closer so we don't need this one in the closer so we don't need this one in the config map anymore we also don't need to have the name we also don't need to have the name space space space here all of that we are going to add in here all of that we are going to add in here all of that we are going to add in the customization file off and just going through it off and just going through it again wallabag but before we go through wallabag but before we go through everything I'm just going to start everything I'm just going to start everything I'm just going to start deploying the namespace and I'm doing deploying the namespace and I'm doing deploying the namespace and I'm doing that from a different that from a different that from a different repo um repo um repo um so so so here I will here I will here I will open Nam open Nam open Nam spaces spaces spaces and I bag and I need bag and I need to hide a few secrets here
-
first because what I'm doing here is first because what I'm doing here is that this actually creates the name space from a separate repo which I have space from a separate repo which I have private because that contains some private because that contains some private because that contains some private applications and some private private applications and some private private applications and some private secrets then here I can add VOA then here I can add VOA bag like this and actually I can remove the homar this and actually I can remove the homar name space because I'm not using that deleted delete deleted delete homar uh wall bag so that can just start churning in bag so that can just start churning in the background oh I didn't save that background oh I didn't save that apparently
-
okay now that can turn in the okay now that can turn in the [Music] see can someone who's been following see can someone who's been following along the H Lab videos tell me briefly along the H Lab videos tell me briefly along the H Lab videos tell me briefly what the playlist is actually about well what the playlist is actually about well what the playlist is actually about well I have a a home lab here I have a I have a a home lab here I have a I have a a home lab here I have a kubernetes cluster it's running on kubernetes cluster it's running on kubernetes cluster it's running on several nodes in my closet so on several several nodes in my closet so on several several nodes in my closet so on several machines and I use it to machines and I use it to machines and I use it to learn I'm I'm a professional kubernetes learn I'm I'm a professional kubernetes learn I'm I'm a professional kubernetes engineer but I I learn like in my free engineer but I I learn like in my free engineer but I I learn like in my free time like I'm doing now I'm always time like I'm doing now I'm always time like I'm doing now I'm always learning and discovering new learning and discovering new learning and discovering new things and in order to do that you need things and in order to do that you need things and in order to do that you need to have a cluster you can play around to have a cluster you can play around to have a cluster you can play around with and that is a home lab it's your with and that is a home lab it's your with and that is a home lab it's your own private kubernetes cluster where you own private kubernetes cluster where you own private kubernetes cluster where you can self host your applications you can can self host your applications you can can self host your applications you can test things test things test things out and you can yeah do what you want out and you can yeah do what you want out and you can yeah do what you want basically so going through it one more basically so going through it one more basically so going through it one more time before I commit it we time before I commit it we time before I commit it we have the containers have the containers have the containers here we have the config map in the here we have the config map in the here we have the config map in the secret that's all great then our customization yo has the name then our customization yo has the name space that's correct the service is the New Port correct the service is the New Port 8083 this one also
-
8083 this one also 8083 this one also looks good this one we won't need yet the cloud this one we won't need yet the cloud flare tunnel flare tunnel flare tunnel secret CU I'm configuring that later secret CU I'm configuring that later secret CU I'm configuring that later okay then in our production layer we have another customization file with no have another customization file with no network policy or Cloud flare so that's config config map with the service to the database map with the service to the database map with the service to the database that's that's that's correct the database looks
-
correct correct okay Network policy we don't need the okay Network policy we don't need the okay Network policy we don't need the scheduled backup is okay scheduled backup is okay scheduled backup is okay okay I think I'm ready okay I think I'm ready okay I think I'm ready to apply to apply to apply it so okay customize no I go to my apps bag and then K customize bag and then K customize all right so no problems with the yl dot okay so there's one problem with the dot okay so there's one problem with the config map one let's see config map inv version V1 one let's see config map inv version V1 cannot be handled as config map
-
um follow back config um follow back config map so what is the difference here it's the it's the same map error from server bad request when map error from server bad request when creating ports quotes around the port number is
-
ports quotes around the port number is that it you think let's let's try be yep that was it thank be yep that was it thank you like always an advantage of par par you like always an advantage of par par you like always an advantage of par par programming programming programming like instead of if it would just tell like instead of if it would just tell like instead of if it would just tell you you're you are entering a number and you you're you are entering a number and you you're you are entering a number and I I won't accept that it it it throws I I won't accept that it it it throws I I won't accept that it it it throws these like I know there was something these like I know there was something these like I know there was something wrong here I thought it was something wrong here I thought it was something wrong here I thought it was something with the indentation but that looked with the indentation but that looked with the indentation but that looked okay but yeah well anyway it has now been applied so if I anyway it has now been applied so if I go into go into go into my name space um wall bag we should see a bunch of um wall bag we should see a bunch of stuff so we see a database here running stuff so we see a database here running stuff so we see a database here running that went that went that went well but my wallet bag container has a well but my wallet bag container has a well but my wallet bag container has a crash loop back off that might be crash loop back off that might be crash loop back off that might be because it couldn't find the database because it couldn't find the database because it couldn't find the database when it was when it was when it was running uh let's see if the config map running uh let's see if the config map running uh let's see if the config map is properly available yes it is properly available yes it is properly available yes it is so that should all be okay password authentication failed so
-
okay password authentication failed so there's a problem with my provisioned a container n has provisioned a container n has been let's see just going to see what the let's see just going to see what the contents of the secret actually is is uh um me oh I think I might know what's me oh I think I might know what's wrong um yeah wall bag DB creds I'm not giving um yeah wall bag DB creds I'm not giving it a user
-
it a user it a user here that's the problem problem okay okay okay so I need to do a bit of tweaking on the so I need to do a bit of tweaking on the so I need to do a bit of tweaking on the secret database I tried something new it didn't database I tried something new it didn't work I thought I would leave out the the work I thought I would leave out the the work I thought I would leave out the the DB user thought would save me a secret user thought would save me a secret but AB but AB but AB user and that's just user and that's just user and that's just wallabag like it's literally in my wallabag like it's literally in my wallabag like it's literally in my config map so it doesn't matter but it config map so it doesn't matter but it config map so it doesn't matter but it needs to be exposed as a needs to be exposed as a needs to be exposed as a secret so DB user is follow back DB user follow back DB user okay so I will delete this
-
though so the the secrets of though so the the secrets of the the backup actually went well the the the backup actually went well the the the backup actually went well the secrets for the storage secrets for the storage secrets for the storage account backup so it already created a account backup so it already created a account backup so it already created a backup so that's but since I'm but since I'm using a different secret for the using a different secret for the using a different secret for the database I think I'll have to delete the cluster um let's cluster um let's see do I need see do I need see do I need to well let's try doing it and now I'm going to redeploy the and now I'm going to redeploy the application have yes now there's a new Secret and have yes now there's a new Secret and this this this one should contain a username yeah one should contain a username yeah one should contain a username yeah okay so that
-
worked then I can restart the cluster by worked then I can restart the cluster by doing K doing K doing K CNP K get cluster yeah reload the Clusters yeah reload the Clusters okay get okay get okay get [Music] cluster okay CNP cluster okay CNP reload this and now we see that the cluster this and now we see that the cluster should start to re load oh here we go wall bag came load oh here we go wall bag came up so it up so it up so it worked it actually read in it reloaded worked it actually read in it reloaded worked it actually read in it reloaded the cluster see there's still a small issue with the
-
see there's still a small issue with the password close so I'm going close so I'm going to uh re I'm going to I don't mind to uh re I'm going to I don't mind to uh re I'm going to I don't mind doxing the the database credits now doxing the the database credits now doxing the the database credits now because I'm just going to change it because I'm just going to change it because I'm just going to change it later so so let's see these are later so so let's see these are later so so let's see these are just some random things that I entered so that entered so that one corresponds with that one so yeah I think it's a matter of one so yeah I think it's a matter of actually completely restarting the cluster uh I thought I reloaded the cluster uh I thought I reloaded the cluster but it see reload cluster restart a cluster oh see reload cluster restart a cluster oh restart a cluster that's what I need to restart a cluster that's what I need to restart a cluster that's what I need to do reload
-
restart so this should restart the whole restart so this should restart the whole cluster and I think this will initiate cluster and I think this will initiate cluster and I think this will initiate the the the the the the new user and password and if not I'm new user and password and if not I'm new user and password and if not I'm just going to delete the whole cluster just going to delete the whole cluster just going to delete the whole cluster and try the last instance of the cluster is not the last instance of the cluster is not restarting yet why is that not okay not okay CNP status cluster is in healthy status cluster is in healthy State let's
-
still password authenication fielded for still password authenication fielded for user wall user wall user wall bag then I'm going to bag then I'm going to bag then I'm going to create I'm going to delete the okay and then in okay and then in my storage my storage my storage account I will also delete everything account I will also delete everything account I will also delete everything that's in here Source here Source browser browser browser CL H CL H CL H bag and delete hey why doesn't this show me delete hey why doesn't this show me delete storage browser Club delete storage browser Club delete storage browser Club container B bag container B bag container B bag here delete delete yes and then I'm going to apply
-
again so now a new cluster will be again so now a new cluster will be provisioned hopefully with the correct provisioned hopefully with the correct provisioned hopefully with the correct credits okay we have a new cluster being okay we have a new cluster being provision the first replica is let's
-
let's see it's still saying password see it's still saying password see it's still saying password authentication failed so is my service let's let's see follow back DB production v0 RW so that is RW so that is correct there's no doubt that this ser name is correct it is actually this ser name is correct it is actually the bag
-
bag database bag the secrets from the environment the secrets from the environment perhaps let's see deployment and from secret ref wall bag deployment and from secret ref wall bag container en wag container F that's there so that en wag container F that's there so that should
-
work so am I maybe passing the wrong work so am I maybe passing the wrong enir environment variable to The Container so you're saying the pul gross Container so you're saying the pul gross password is the same as that one the symphony and need to be different so the symphony and need to be different so that's not the let's try a different let's try a different tactic follow back DB password and just tactic follow back DB password and just tactic follow back DB password and just going to create a new going to create a new going to create a new secret and that's just going to be hello secret and that's just going to be hello secret and that's just going to be hello world it might be that the password is world it might be that the password is world it might be that the password is too long or that it contains some weird secret let
-
secret let see see see no then K Delite cluster wall cluster wall bag okay okay let's try okay let's try again with a different smaller well yes it is a type basic off but
-
well yes it is a type basic off but that's what the EDB operator that's what the EDB operator that's what the EDB operator expects so I can show expects so I can show expects so I can show you here when you do a bootstrap of a uh you here when you do a bootstrap of a uh you here when you do a bootstrap of a uh database with the Enterprise DB operator database with the Enterprise DB operator database with the Enterprise DB operator you point it to a secret which is of you point it to a secret which is of you point it to a secret which is of type basic type basic type basic off and that's the one that I have here off and that's the one that I have here off and that's the one that I have here wabag DB wabag DB wabag DB creds but I'm basing those off of The creds but I'm basing those off of The creds but I'm basing those off of The Secret Secret Secret object that I'm one so I've now changed the the secret one so I've now changed the the secret to a shorter name I had a special to a shorter name I had a special to a shorter name I had a special character in there and I've been bitten character in there and I've been bitten character in there and I've been bitten by that before that it would not read by that before that it would not read by that before that it would not read correctly so now the secret has been correctly so now the secret has been correctly so now the secret has been resynced and it now has the hello world as a and it now has the hello world as a postgress postgress postgress password the cluster should be res password the cluster should be res password the cluster should be res completely redeployed yes that is now up so now if redeployed yes that is now up so now if I delete the pod
-
there's still a failed password there's still a failed password authentication so I'm H wait let's kill H wait let's kill it and then it's running and then n end so here the postgress password is end so here the postgress password is hello hello hello world that went world that went world that went fine it's getting the environment fine it's getting the environment fine it's getting the environment variable properly so that is being pass properly so that is being pass fine fine fine postgress postgress postgress password is that what it needs to password is that what it needs to password is that what it needs to be postgress uncore password
-
wabag wabag and if I go into the database how do you do that again show database how do you do that again show users psql show users can do can do [Music] [Music] [Music] du there's the wallet bag which is the here and we have a user called wabag but here and we have a user called wabag but it's it is saying super user here in the postgress user needed for the postgress
-
postgress user needed for the postgress container to initialize for enter point and to create initialize for enter point and to create a database in user if not there there [Music] so is it maybe is this Symphony database so is it maybe is this Symphony database is that being placed into the postest is that being placed into the postest is that being placed into the postest database is that what it problem problem okay wait wait okay wait wait okay wait wait wait so maybe that's the maybe that's the problem so I'm going to make the syphony problem so I'm going to make the syphony problem so I'm going to make the syphony password
-
password password to hello world as world and then the symphony user what world and then the symphony user what did I set that to postgress to postgress [Music] [Music] [Music] user database name database user user database name database user user database name database user wallabag wallabag wallabag wallabag and then then yeah maybe that's the problem so Del so Del leete now the container n has been resynced
-
now the container n has been resynced now both passwords are the same oh it's running yes that was same oh it's running yes that was it ah nothing wrong with my my ah nothing wrong with my my configuration nothing wrong with my configuration nothing wrong with my configuration nothing wrong with my database I somehow assumed that they database I somehow assumed that they database I somehow assumed that they were two different databases or two were two different databases or two were two different databases or two different different different passwords so it's running running cool as we see let's port forward 8083 connection 8083 connection refused oh oh it's forwarding to Port zero so oh oh it's forwarding to Port zero so there still needs to there still needs to there still needs to be a a slight change on the service here here um so um so um so the docker file is let's is let's see exposing Port
-
80 and is there a way to change that 80 and is there a way to change that probably yeah so my service needs to point to yeah so my service needs to point to Port Port Port 80 so if I edit Port oh how was it again I always I Port oh how was it again I always I always struggle with this a always struggle with this a always struggle with this a bit Port protocol Target Port and then there's also Port and then there's also [Music] [Music] [Music] the community service port what is it what is it again container Port that's
-
B bag is B bag is ready well let's do a port forward ready well let's do a port forward ready well let's do a port forward straight to the container and then just straight to the container and then just straight to the container and then just to error error okay that's interesting because it was okay that's interesting because it was okay that's interesting because it was saying that while a bag is let's see is there let's see is there any indication nothing toall update or indication nothing toall update or remove just restart the container one remove just restart the container one remove just restart the container one more
-
more more time see what it does forward forward huh is there huh is there huh is there [Music] [Music] [Music] maybe local port maybe local port maybe local port 80 85 maybe something else was running there okay something is there okay something is broken well we are getting broken well we are getting broken well we are getting closer at least Walla bag is connecting closer at least Walla bag is connecting closer at least Walla bag is connecting to to to my broken wall broken wall bag error bag error bag error [Music] that's weird it just it doesn't say
-
that's weird it just it doesn't say anything about the database though it anything about the database though it anything about the database though it just says internal server error and error and my requests but it might have to do but it might have to do with here here's this n domain name with here here's this n domain name with here here's this n domain name maybe this is well it's set to Local maybe this is well it's set to Local maybe this is well it's set to Local Host so it should I'm approaching it from Local should I'm approaching it from Local Host so it should Host so it should Host so it should also also also H what is the symphony and domain maybe that's the problem I mean I'm I'm
-
maybe that's the problem I mean I'm I'm approaching it from Local Host but then I will just have to add Host but then I will just have to add my domain in there which is a problem but I do need there which is a problem but I do need to stretch my legs for a bit so I'm just to stretch my legs for a bit so I'm just to stretch my legs for a bit so I'm just going to take a quick um oh that's an interesting you can enable oh that's an interesting you can enable PHP debug mode how do I do PHP debug mode how do I do PHP debug mode how do I do that see that see that see [Music] anything about it anything about it here H bag debug mode this is maybe like this is maybe like this this this no you can able enable PHP debug
-
mode mode configuration settings no configuration settings no configuration settings no common parameters is this maybe parameters is this maybe debug no doesn't say anything about debug here doesn't say anything about debug here yet but I'm just going to stretch my yet but I'm just going to stretch my yet but I'm just going to stretch my legs for a bit and take a short break legs for a bit and take a short break legs for a bit and take a short break I'll be back in h a few moments so I'm I I'll be back in h a few moments so I'm I I'll be back in h a few moments so I'm I feel I'm almost there so uh I'll just feel I'm almost there so uh I'll just feel I'm almost there so uh I'll just stretch my legs and I'll be right so let's
-
so let's see start break what is this command see start break what is this command see start break what is this command that's a script that I wrote for myself that's a script that I wrote for myself that's a script that I wrote for myself just starts a Pomo timer and it and it some text to the some text to the some text to the screen I write these little scripts for screen I write these little scripts for screen I write these little scripts for almost everything that I do the server returned a 500 internal do the server returned a 500 internal server error so is there anything that I can error so is there anything that I can see in the container see in the container see in the container itself for here here there is more than just the here here there is more than just the container logs seeing undefined table relation wallabag seeing undefined table relation wallabag internal settings does not exist in line
-
one okay so now there is a one okay so now there is a problem where problem where problem where the probably it's not initializing the the probably it's not initializing the the probably it's not initializing the database properly so properly so let's delete the Pod again let's see let's delete the Pod again let's see let's delete the Pod again let's see what what does it what what does it what what does it say postest database is already say postest database is already say postest database is already configured remove the environment configured remove the environment configured remove the environment variable with the root password whereas I would would be expect password whereas I would would be expect it to somehow initialize the database it to somehow initialize the database it to somehow initialize the database somehow right wall bag is right wall bag is [Music] ready it's saying wall bag is ready and ready it's saying wall bag is ready and if I then go to VAR anything and if anything and if I do a port forward it will still throw
-
it will still throw in ER occurred and if I now go to CD VAR yeah undefined table relation wallack yeah undefined table relation wallack internal set setting does not exist so internal set setting does not exist so internal set setting does not exist so now there's a problem that is not now there's a problem that is not now there's a problem that is not initializing the postr database initializing the postr database initializing the postr database correctly you can find correctly you can find correctly you can find it but it's not setting it up so what's it but it's not setting it up so what's it but it's not setting it up so what's that about um
-
um [Music] migration oh so a few have been migration oh so a few have been skipped so skipped so skipped so [Music] [Music] [Music] maybe aha maybe aha maybe aha look so I had to run migrate look so I had to run migrate look so I had to run migrate command interesting so then let's take a note of interesting so then let's take a note of that uh Z wall here I'm saving that for myself for next
-
here I'm saving that for myself for next time so that is now migrated and then it said so that is now migrated and then it said the standard name was the standard name was the standard name was wallabag wab because I think it said because I think it said here here here here default login is wabag wallabag
-
working is it but is this throwing any working is it but is this throwing any useful useful useful errors logs authentication request authentication request failed bad failed bad failed bad credentials username wallabag does not that the default login is wabag wabag that the default login is wabag wabag but the user has evidently not been but the user has evidently not been but the user has evidently not been created so I did the migrate command but created so I did the migrate command but created so I did the migrate command but apparently there needs to be more stuff apparently there needs to be more stuff apparently there needs to be more stuff happening when you're doing it see we need to initialize is see we need to initialize is the database probably or maybe we just use we have to probably or maybe we just use we have to do the well maybe we just have to do this the well maybe we just have to do this false user create
-
and BR I have to add that apparently ah and BR I have to add that apparently ah okay please use a new okay please use a new okay please use a new username username username Misha email is test msha.com Misha email is test msha.com Misha email is test msha.com [Music] uh hello world created user uh hello world created user Misha and now yes now it did now yes now it did work ugly or old school HTML that doesn't ugly or old school HTML that doesn't look looks like the CSS or something is looks like the CSS or something is not loading like I I can see that wabag not loading like I I can see that wabag not loading like I I can see that wabag is intentionally making it difficult for is intentionally making it difficult for is intentionally making it difficult for you to self Host
-
you to self Host you to self Host this because they want you to use their this because they want you to use their this because they want you to use their own own own thing thing thing [Music] [Music] [Music] um but at least I have it running now I use engine X to make wabag public I use engine X to make wabag public available like I'm almost there but like I'm almost there but how why is it not showing up so installation installation with Docker we
-
installation installation with Docker we provide you a Docker image to provide you a Docker image to provide you a Docker image to [Music] install yes so this I've all been doing install yes so this I've all been doing this so let's see wab bag so let's see wab bag Docker guide MH uh see there is a ball bag MH uh see there is a ball bag install connect command as well it's working but the web client has well it's working but the web client has formatting issues seems to be missing
-
images when this happened to me was images when this happened to me was because the domain name didn't match the because the domain name didn't match the because the domain name didn't match the Sid okay when I changed it to the 1 192 okay when I changed it to the 1 192 address it work with the okay so I'm going to try one more thing okay so I'm going to try one more thing I'm going to try the install I'm going to try the install I'm going to try the install thing and then I'm going to call it a knight but I can see that they are knight but I can see that they are actually in making it intentionally actually in making it intentionally actually in making it intentionally difficult here no it is still going showing me
-
here no it is still going showing me this ugly this ugly this ugly CSS but it did say that but I when you CSS but it did say that but I when you CSS but it did say that but I when you put the thing correctly the domain then put the thing correctly the domain then put the thing correctly the domain then it will it will it will work so I am planning to run this on a a work so I am planning to run this on a a work so I am planning to run this on a a domain but I've been doxing the domain but I've been doxing the domain but I've been doxing the passwords during this uh stream so I'll passwords during this uh stream so I'll passwords during this uh stream so I'll need need need to um redo it anyway but what I'm going to um redo it anyway but what I'm going to um redo it anyway but what I'm going to do is I now I'm going to wind down to do is I now I'm going to wind down to do is I now I'm going to wind down for tonight because it's getting close for tonight because it's getting close for tonight because it's getting close to my to my to my bedtime but in the next stream before bedtime but in the next stream before bedtime but in the next stream before the next stream I'm going the next stream I'm going the next stream I'm going to to to first um change the password and first um change the password and first um change the password and redeploy my redeploy my redeploy my cluster and then I'm going to configure cluster and then I'm going to configure cluster and then I'm going to configure a cloud flare tunnel and then we're a cloud flare tunnel and then we're a cloud flare tunnel and then we're going to see if it works with the going to see if it works with the going to see if it works with the correct domain correct domain correct domain so at least I got it to run I came that so at least I got it to run I came that so at least I got it to run I came that far I'm happy about far I'm happy about far I'm happy about that and uh thank you so much for tuning that and uh thank you so much for tuning that and uh thank you so much for tuning in in in guys and check out the next stream when guys and check out the next stream when guys and check out the next stream when I'll be I'll be I'll be fixing this so that it will work have a fixing this so that it will work have a fixing this so that it will work have a great evening everybody and see you in great evening everybody and see you in great evening everybody and see you in the next
Summary
The main theme is self-hosting the Wallabag read-it-later application. Key subjects include RSS feeds, Obsidian, Argo CD vs. Flux, Docker compose, and Kubernetes manifests. The practical takeaway is that self-hosting Wallabag provides a centralized place to store articles for later reading and can be cost-effective with a home lab setup.