From 6facc032065871bd4b68d13f410714dd998b4cf6 Mon Sep 17 00:00:00 2001 From: David Date: Mon, 11 Nov 2024 19:50:04 +0530 Subject: [PATCH 01/43] CICD guide --- .env | 2 ++ Jenkinsfile | 30 +++++++++++++++++ README.md | 4 ++- cicd.md | 44 +++++++++++++++++++++++++ docker-compose.yml | 7 ++-- images/agent.png | Bin 0 -> 61745 bytes images/credentials.png | Bin 0 -> 59166 bytes images/flow.png | Bin 0 -> 38452 bytes images/login_https.png | Bin 0 -> 295929 bytes images/pipeline.png | Bin 0 -> 52851 bytes images/shared_library.png | Bin 0 -> 46474 bytes nginx.md | 67 ++++++++++++++++++++++++++++++++++++++ vars/buildImage.groovy | 3 ++ vars/codeCheckout.groovy | 3 ++ vars/deploy.groovy | 4 +++ vars/greet.groovy | 3 ++ vars/pushImage.groovy | 7 ++++ 17 files changed, 171 insertions(+), 3 deletions(-) create mode 100644 .env create mode 100644 Jenkinsfile create mode 100644 cicd.md create mode 100644 images/agent.png create mode 100644 images/credentials.png create mode 100644 images/flow.png create mode 100644 images/login_https.png create mode 100644 images/pipeline.png create mode 100644 images/shared_library.png create mode 100644 nginx.md create mode 100644 vars/buildImage.groovy create mode 100644 vars/codeCheckout.groovy create mode 100644 vars/deploy.groovy create mode 100644 vars/greet.groovy create mode 100644 vars/pushImage.groovy diff --git a/.env b/.env new file mode 100644 index 00000000..2713429f --- /dev/null +++ b/.env @@ -0,0 +1,2 @@ +DUSER=joakim077 +IMAGE=springboot-application diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 00000000..aea12103 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,30 @@ +@Library("shared-library@DevOps") _ + +pipeline { + agent {label 'runner_1'} + + stages { + stage('Checkout code') { + steps { + codeCheckout('DevOps', 'https://github.com/joakim077/Springboot-BankApp.git') + } + } + stage('build') { + steps { + buildImage("springboot-application") + } + } + stage('Push Image') { + steps { + pushImage("springboot-application") + } + } + stage('Deploy'){ + steps{ + deploy() + } + } + + } +} + diff --git a/README.md b/README.md index 3ddfdaac..b21647fd 100644 --- a/README.md +++ b/README.md @@ -91,4 +91,6 @@ docker compose up -d ``` > [!Important] > If you face issues with exiting docker container while running docker compose, run ``` docker compose down``` and then ``` docker compose up -d ```. -# + + +#### CICD pipeline [guide](cicd.md) diff --git a/cicd.md b/cicd.md new file mode 100644 index 00000000..2cc5d743 --- /dev/null +++ b/cicd.md @@ -0,0 +1,44 @@ +#### CICD Workflow +- Cloning the Project code from GitHub. +- Build docker image and push it to docker hub. +- Pull image from docker hub and deploy application using docker compose . + + ![Login diagram](images/flow.png) +#### Creating CICD pipeline + +1. #### Install Jenkins and and acess on port 8080. Login and install Suggested Plugins. + ```bash + http://:8080 + ``` +2. #### Jenkins Configuration. + - SetUp Agent + - Agents are used for distribute the builds in parallel execution + ![Agent](images/agent.png) + + + - Configure Shared Library + - Configure the task effectively in centralized manner. + - Configure shared library for your Jenkins Server Navigate through Dashboard > Manage Jenkins > System, and add Global Trusted Pipeline Libraries. (Modern SCM) + + ![Shared-library](images/shared_library.png) + + + - Configure Crendentials. + - Credentials that are requied during job execution. + - e.g. DockerHub credentials for push and pull images. + + ![Shared-library](images/credentials.png) + +3. #### Create a Pipeline, execute Job and Cofigure Weebhook.. + - Configure Pipeline. + - Configure job to get pipeline from SCM. + ![pipeline](images/pipeline.png) + - Build Job and Check + - Build the Job + - Configure WebHook and poll SCM. + - Webhook: Automatically built when a change is made to the Source code. + - Poll: periodically monitor the repository and if any changes are detected, build Job. + + + +#### Nginx and HTTPS [guide](nginx.md) \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index f3977b3c..34642a09 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,7 +7,7 @@ services: - MYSQL_ROOT_PASSWORD=Test@123 - MYSQL_DATABASE=BankDB volumes: - - ./mysql-data:/var/lib/mysql + - bankapp-volume:/var/lib/mysql networks: - bankapp healthcheck: @@ -18,7 +18,7 @@ services: start_period: 30s mainapp: - build: . + image: ${DUSER}/${IMAGE} container_name: Bankapp environment: - SPRING_DATASOURCE_USERNAME=root @@ -41,3 +41,6 @@ services: networks: bankapp: + +volumes: + bankapp-volume: \ No newline at end of file diff --git a/images/agent.png b/images/agent.png new file mode 100644 index 0000000000000000000000000000000000000000..fb992a6f6caafb6fa68147df0ae9ccc1f0340ec6 GIT binary patch literal 61745 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

$EpW_+2^J;uC`b!sZ=6Ny}{a< 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 OMKj~GMui4fAN&(;#k6Sv literal 0 HcmV?d00001 diff --git a/images/credentials.png b/images/credentials.png new file mode 100644 index 0000000000000000000000000000000000000000..252f848c5cffd6fa7df9c45091f5077e5395247e GIT binary patch literal 59166 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 P0zhBKM7u)M>GA&n96~sa literal 0 HcmV?d00001 diff --git a/images/login_https.png b/images/login_https.png new file mode 100644 index 0000000000000000000000000000000000000000..c390ab1f3952db834ad474edbce7a951ecd493d0 GIT binary patch literal 295929 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

)fpFTxx58c=9isyPKmf;$M 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 CqV*~O literal 0 HcmV?d00001 diff --git a/images/pipeline.png b/images/pipeline.png new file mode 100644 index 0000000000000000000000000000000000000000..9a80ab151d3359ce4dd9b3c90f4afcd85c32b81b GIT binary patch literal 52851 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 literal 0 HcmV?d00001 diff --git a/images/shared_library.png b/images/shared_library.png new file mode 100644 index 0000000000000000000000000000000000000000..5731ced16ad886d00455df741f3777c150549427 GIT binary patch literal 46474 zcmeFZXH-*bv^I*m6$O>;Rzy+2j)H&pbGuMkd zCWbpCWF^GJ#CF`garK^<*k(&Hv5il*ZUMdtSUHLY{%r8QXLwl*-Fk2e`0$78CF4tC zV#TqNtM@kppSL}_VdE<%wzGEa--decoCjiJScRKcFPR5A%nWY(XyGiVpQkr}+1_0A zq9pgwK8dX-%QKD~7Y#6_UcP%PnYL{VeP1=x++9gYFlhYvFuvxT%)JZPvOQg=?_O%Z z{pW3iJ@*}->~~qAv(8TtJ`x6C;|}i$i$Q$tp;CRv7mM<F-NO(h0Lz-%0HI zpVjWl)Q?^SZxh=3Sj3K9DUxut6HodhZ+)AGH@8|Q=k7>I4y!7Rd{pY(x0iZDe|UMr z+OJQtzPlIkY9x`x`fz{mb~*oEO(vI&9MJF@*w;+C$g0wzZ`t14G+RD0>v;PL3XbdC zsr%@yU@kK84<}r-Iqd_wUbOnI@*KC;@ube`N}qG$2F^kgQnJn~3#xGO5$5~SAoH7y z=&x5Tm7ZIOecHk|(@DXz1euxT5weE@yzJz@QrOr}+1%XRVnx(yI?Y=oFYLjal&O*J z<(lI_K95&_U4sE5E?zd@HC3x)wqkKFNyvj(Q_*1X8TH3M`*8lue#e~|=X?T@b|sz` zCSfQdQ9EQhH+#^dcd?E9@PLNr)@Re3+Wd%h?$Zmj{(1$qVk!M)d?AFq@*ZkTD8G(a zOg3azES{kKs1BdO(GYI<0iSdx(F2r^M(-T|{&C}EdW?46cuR=dzAoL-1--SEA||!~ zF$tpxI5cY2O3P8E4t)hD;NYctof8G$g*>X2z4672Y|}QhmLy`!4p~PepO%mFn^LUa zSDK&(mLJX4v87!nDqDQKHZXzzhaP9YWeQjfHIgHKK84yrGbzu*K zior*z311}R__HCz{zvzfkae%b2QMUuN>PF%w(0GrG;ea8S5V=|1c-mQ)f66_88=fk$|&eCuq~>ZzQpM zbOtmgi9vJKhCiP@@tvr0y7FvhcOSKBP$P%1fk}=D&vC&uhRhTzrZLQzrVuke6Hk9^ z?DVjr2Ufd7lQ3@_$Mnc>s^95_T#9@>ceY)Ba^Ry+BR8!jc+#SFT1iQ1AjGKNke^M} z9184`i)Wxo9bh~9>Ui%Y0Zj18Oo8>Rboe5LD>Bz&<3Taxl@``O$gMGO2y@4*?Gp9! zvbLv0&H93Fx3(J_wqW)r^m1qcSd09svb;Q{07>@Ta7f=rEo3pDMQ(~X&E7B(%ongw zMLMhs8iG^W#Kck^O44KXYc@X`!XRL=`HxrTYPojY*+KjEET2k{U~03Kj#p0sog^E< z9prk*ET24O{9hlML6{bsPFi62bKut{ozY7ns`6C zj9};U`MBg`JGB+k5d5>f%jqAKG#9XdHMh!kz|AC8!~ z-by=-my-yr6bZRz$!G4rVTcw{u7<6Hdjf>OBBB!>PrcXUo2r&|X^Cibhezr@Y87*T zhlm77ao_H?bl;VFkg%H5>-0%d*P`j%ZCcuEzsdH)af`?oShubd?>k?QcRhyxcp7qq zTF0Gvq3CiA{ULjBetB3*4cpmy53iP#s?t|+9WfXFVm4ISQ=d2K!~|?>xYeRQMvnO- zoV-^HVla;j|W$9lL*=?7v4 zVN~d>E-GN?8mCof@ksqd$M=vqE3`4)t;_4hGlF)E?|6lal%5|(z!J%iweoK&rnmsX zrbMuiXa@csJdx4`wlTg|z8(%_o$~+4FRtQX!)I0(+lo{C`#W}OjUs2}YNcTKOpKk? zuI9Vmk#ab^k?Mz;Fmu!4fq%ATm!GS9wUPy2Xh4Fuj^yqSQxGj1YB+wG^>5X3?N1Ha z`50e`TxiJV%+->yfE{(Jmj5`YDFBX-Gc(cZpact+x}4ph)cJY^5B@9(&p=M31Te#; z^!*q*3*T$OqJEW-9k*tfe>f$@I#dP|$925Qhh^<>p4Ud-qxNVC&A?A`$Mr^m z6&QdChOj3)^n8Y-9@VDCRNJ^3m&6@4EJs8%WnlrU`ie0a;wn?1 zVuu?*6Q{KUbTFxxMSMC)zS+%x;BkHVp|O|Bh*__u9_ZI(4X8v`5`0XVM0|Z++i&uR zLv8oo4EOq*G#u1ECtWcmKP%IHN8a@`DSeC97#&UtjM3AVq&{{N-^A!hH*9xRJ=9I) zu^BS2?lK4byU5~;UwO0EhqhA zGM$!|M@$KkC8r!su776u)1VVP=`DHjXfWRQQX0pw#qOcbcw1X*?Z*;$^rUspGZtMW ze3KF~YlF_h*O*sw&AV)@=N2G27W^OADi zFB?o;9TaduldbufVp;tdq23ssm6^!|i+xlf1jnvpsnvIjju!VDfb}!pUutfhUc>+l zj_QCE>>!QAB+mdA;*X{1Mw|fg`%FEn!wCMf1XrTn6Ick6=odvK>y@WnhH4>Z8)y1T zNs@T;D_y2m&(o9gWa(9KQU*;rHtg@s5fTb|l%gf*9SsZBO$re&@&w#3o1{o~E3p@U z7OA-Zt+cOc>HR-?f+bI##pXr(-J42X^jwh3wchqcs$inuiY!;{d z=QZh}>itvxJ`j@v(dqStnB?o>2)h@WVj5)2y+1u>KQo*PbBESjPahT*upRWi5b%&Px&seOfDo;Zd+d~%&&)~+&5Otqw~bI(zTi8~V#Xpr zGB@_l4wA&3y13b(%7=KmP#FjiQZtRpn8#9}d&^zKZz_^jK6lIrkAzo;N6G$Vhj+et^RwWO=Y3Vz{SLAnFUlEJB2j@qPmz{7l?%$tp-cWq>{%MY*OkQS zKLGC9miPFycAdl|76kw|c-fYs98Qt2_fw=zE~lu*OTFn)moc6w`;9jeRhQ2MLuvy& z4w_%0rOg@bSOAaV7pHNB=3FztI_lT7-kS`Rr zQ@+BmEGyUjv~Vdqk>I-+1+iy&Ndi8bJU)(*qDpvvf2}u@8Zzq#os@t4_5F9E;kDMO zs9Ae;^B?jh87CzDhk_KX(kbGJ*(iN|AB5V=x4vXMVKQB}Rj=BCNp`u64Wd-#^>4E% zm-V7*%1OAg_k_^5KS6&G@yU#M95v|{4zo)xAR;SZ5EdIEn%-dc?c4DWrdw4;+!?+9f31`l3KQB0Z1+|Sk6yiF1@GT*G z)#HQCY&lK+RI&Q5^|bOy)=6t})wv+2gx(VxmR=?P$NN0;vB&Q)zd6Oqxkf4=o`aDB zwXotF5A5uZy5sKmmnDOD`~W=ME^d9qyFB%(`d`t*pwc)wY3S{QWl*5>IjZbNl%f0w zH!fXdu(ZJ}?|80;A(>rRTz&9{iwEQ=1VQLmXMF~YBdfT7pI5_Hi(jtI!0e8bG_AS7 zrmfuHf)bOzU0(M)y8P!k>VQG{4hzo^cO*qFl8!Zdq zm0usk#B8OLekZA7PoPi!`!xLb#s<%}TK*b`nAo8!|8cO_hyTYc_;+gje=58GuMWEz zw(An;_b^8*7Zw(NrQ++5>wnJ<{8#(`KQyfW?;iF@URqjBjF!vC9SZt2mIceF_a!Hd zQ_k61I$yBFHM-3Lt8X)-rw{}9zm)3tbwQlIi9#!kkkbSil6}<>)4TX-mPXhA#u?%t zvLh~$tLC#gG_}4WyHV!;em6n#a z0dV|L3_We5qy(DgH$72B0 z?2x%IUQ-do>f2>_&{)*@@fII+zI12gZm7p=zGxdnd2pLzXs<>J8TWzES!tXUJGocn|3be zRkC~XIRLd%3=uBaQuX*VyHzjHWU=ze?tni`qX}viQW@@&G5d;)cT=7_aC zi%%sF4Na?u)W6c|XVRc}<5FM|rvq4aP#zJORp?N8;{B%ewL#lh?Vf6fbx#-!U6jK$ zslsPsbP#FyrCN)GA;c;7H$N7dFlB58l{95MM%$vd@ZE{|GfFLhmT%WMGU$Ll zvFUGGJbWZtlbMrVcip>EL37sJt~6^vC19b!wLAz-bk9p3r!B1lc?x=OE=VKY5alRZ zX*;563{Y7QH3uHWvuE|%jYX{iCwdpgrtpvhJ(VGvR<+BEZJ>Y+-k$ulVccC22d}lQ zEqwB$yPZ0ihK4WClqOVnKl>@CTxiy$R3>ULMf*AD04Z|r4s?`xy`mYSvY%Vj-)|dW z%o{0KoTQH6k!^ZXMILBEN6ScZ^m`DpdN0*~*?NU-oWeuS22N{tviErF++%vAF(iLY zXxZ&Q@`GkaViSob_yz`U<@TwQ0)Q>SQz4>AuunsTf0wZtbS;}}Qsw6grmeUawlcai zo@{LCGSSgG2QRU(u;>E_yVT0n1!XVZo8v}Il<1=e0GDECW=Y=Ia4BID2`j|WX8pTL zuQ77+`uFs)xc0_vey8o1pQiXU9<#%vYnbWU*z{b-rLr!QV&68w(`452NNh2X=+(yP zE}Y>W$}V;?^}9sdp=l58$^!4+kH2uQb-(I^u42M;9)rnac$WwT0oViH6?HgzmB;8s zhvCM?w;P+-49)WXZ&2C^uZ2UDpt%Y2;hB_xp$7mP;mldXWv(be?JHVN<z zFrpwT3m94<>8*_34mb$A-H-S71^}NC9`1gHGgGSO*A!`tLLeW|(XsZmlJ<++i-FlM z`5$NB1pBA-(9$&J=)TgG4VS9MKVl+ejF@O8-NB;!;ea8+XF2?M6Is_-eclr$j%GC@ zux~N#o*CF82!fw;%lHpozNxghXuZbS} zs?1U;h1!Xa)Q$(E28H=QdO zG*T1XAMJ&0t9x&pU$lily0Vut?{oVgz%7@eB7s~vZM8{V) zR5XoXa9iryEz2ki{A|Ae$lP!(0N<*stxLTI{fmHP(glUA%ByCMgo{g+=)*M&``Q;lP3b$G=+LIBa@;kf*p!e)OSQ1W z0o16awe_gi0T81=aNJNJa@uZ*Und(t;v)|+9pUoj-vRgBzyn0@FT zP1I>r3LUD@l=aIyJ5~F$rlyYE;zuKFoXa)Cl*l-|A9LRsFx`FjeNyUNP&;!%U7ezO zGIS(55!X9=H@#}_Y08DEgDCrZj!L|v21g`x>th6HfEf%&zlaQBRUTz#9j)o?qu$1- z{ko3!)m;VSS`j%!7#L4eZf?jhHryOY922Dkj1y>idYjAgwv_`6kVfFXcktoTYgBYt$y2i(Gf&iU5H{nKe`jfwDF3LP1aN6wV$pOvN0Ij$B*r}?YOH$@PI0shI;s?tnE9sC!b8#63)f7R=EVj z*9n60SV#4?DNCn8ZM5BY1t79AiHtu3l!a2rzz+aXwl7(0vDmRy<WPsmryM(L!?R3L z_oZ~_o*SpGjuhYulb*XvPWuO9P4gnP1w3kOxni}N!|LNRk$u3*rRWulfZ$OhA2M^3 z-{Os6xhLh>Y`A+SUqhQkVr}44FtgZt1(dU5>M~SD9|h~#?1gk~39cKwhpgV5SRQFG zwM}^R`oSMz=7lUg8Q!dSb-E2{0wM zE=eUf#`K(fqB%8()qU)8$)65V&D!&T57lR|bF))%M`Lvdp6#HWfA3^e_2Cs=$l=by z=b|73j^|x;_uOu|od-9D{hrZxkw9te&X07v?<~TE2EWnDAKO=o!iy`cM#JZ-BRL?^ zB8$+AenewT z9lneTU4T$kv$UD%F;U)1_gR&Zv_4l;Kde2H*9Eb5c23wKr+x9>khi_@JthlaC7l68 zh+>u)dCNGuSBkhuYTx^_bU&=6^do;pPm7+xsl+l!KPV!uUlodyPt9CBl&7A{xO6|i zH5X?m)pyUh$MY5}^o;D1qP{r@v5pxFF>c@p|1%+1Yv&(^;J zA|{WB29g>MhsGkhwdrxglCy$*R47CsL2JGqt*u0aekdP%r^Ec{d%}<}2wtu77$l@I z<@H0ano#3*MC+*%biGv~Kn_B^4As!vHTAgMntHo>zuuxvzCNC8#60VRx$S~h>o}or z@4ZTqEl;TaF2-nCuy6JP)DBXrt)Q*ezjqrdyRaBaTL?MT7Z9CwoHx*+TR3HF;(t0R zy%28v%|WN|QXXq{d=6XyZHFB|4BD2_`;mp`6RDAn@*qT-9g0(|Wgl+5f~M-1Wwa#) z+V)R4%> z+;|!}(+E_2zm~H-YxKJIgw|l2MI~}czmwnKp+e>^#ECZ502Q_XviDxKRByGa<$K{p zkO|v_ES&$G#HYhy6y0nE{S=)5ueo#sQ14p2aolR)bh0@vRCp9v(oZx!dOQ#4@lJ-U zj9C>}VN$DmSJURKFZJ|e8J@9vTgIIOU%eY%1AWq3dkUh$U>5H>`FHjd$p=q9Ox73l zOe!R@4WB+L+UdwRWZmMc7s4r0_vpDQs`>c6MU%c?U}Uw7$>KF-dkGf0YVe;YYwc@^ z;Oku%K6)ZpeXg4Hnh!I$y&@}ZkT(&D<cF*PL9IW z%|OY-Dt+;rszS)>-x0A`Z6rEW3y2Q~2l0<=Y#}ocn7V2Qr>;{$rKjLjfMD1u-zm3$ zqpXZ~<(t{F3(hOf*h<6!LCG-u2Ht+&IjERwu-rdi*7kyPbL_aC+#1;uy z-kx`jPE|mK`zCeWKlCmLimg5%1j7Oe)B&>aD)pb7fw>DU2T1Vy#r3-O4%&>x)r#}3 z`Yr&k3yWI$3w}M4Yuc$Lm3D45)K*y9W=XV4m{@_{`!GC`W-@ZYTbnf;NMp1m(oLgd zHIZgO{;uOCr=-aV{D-GBf(dK6{Z9kD`m#Emi!+Wy_WQ`TB=s+FWo&4>atqN_oht3bX6;u5KleCfB1sp|Q#Y;U6VQ+4fN>f)6YJ4I(#n9ZP z!bz#=-Era2O}}P~)H)Ah_G6`bNNuXx(N&?_H20qM36>lL{jP)fH|D-t-$arcT_JvM z>Cs9m$WnOzXh*>7?4;N{Y{94cNWC;Bn_;fikLg|9?QQo)?g~4SI|hV8$t=%zGu+C5 zFqdFLURPB_GI);B=|@K9J@;W^K>=M(D@-Y5>hkRL{aQxbY|mgH2OZYEqkM;;s_oQxfNbo$w7t{Fmvw`S>(%{(z;=j`Rqcv7o)f;sEJzBZ+jYX^ z1r@i$P|nL?)-E}MjH+il`Q^$HAG)rx{cJd)@;VZ+d+nhBjDKQT4{ z<39=;wVmp~aZ+QxyAhAtJ}eSplXu32jqDo9(is5syg)osdR;k7R30n~S{y1mZuE{w zP7SixaaDS7aee-5C=hx}=n6&Rlj)UkSh^hQi5X#2%Fdg?(( zG80W+sA9-ROg{KvX^O^Oh=<4vYwXMRckYw5QlOGzr~0ehN>kL(tYM zmpqHZahNo5r`=sd1?1`}{3|k=EwxLn&(&J@1$rCu;A+SvMprOa7`S@Y6jph{7V>_G zrY%p*1cTlPT;noG$f;Cul>>Y&b4yF&H`geA)1~@N(D)cUS-)&RpTFIdCvV~}_l!G{ z7S-x266+3DFIaF0ayAKXo2a|xKlm`@FSv=Kc1$rfGRvc?&eNlW8!v-EP4aHAZK#ig zoxrpUj+&qXgdZ99Jf~f(fx2lr(uy%aFk6Z(3l@yVo2FBvFa&zHol88N`oL!urt&QL z`J8C7`>_b1xV-GO@pUc?Vr=Em5@}{QQUTW08P^bUq7SPQEognE*ujna>foEC*1?Jk ztnW4|(`$$!ps&FFr_MKb&36)RoAb}m=td4sbe#tD@KpwzwF}vjXNFuR>F$EN9OLc0 zb*)~PqjT+^;DoU&WR(x@g2j~Gwl1M_iCbWBJ_C%A?cuo7vrH-W4t-KQ(SNIvU^hT;uqswmSm;HNVPf zzQG7(>b!lu-YWc)(|BUErrZ~oKk^HoAap0i-&9RHd2Iatd>5a_tpmUQu`+EC=NJ zr09k&eg2eBpL2XVsEX}m)p9DwKTbvmX+0AgAg3V6;XqzXs0gIo)EoZfryH8%gg;Lv zq1AYRD6M@5L-ImsbD6#|HMHTKQ5NB&Cb zdC`-IzRgh^T>O*edt<_$3_KK%l^ly*j+pS^piU-dFZc7U`$Q!}V#?SKk` zS<}2w0h`==*HCVJ_Ih-tkA;qfNdHA)Lf(QvVf&J}DpD0|%+sIy30L?hk>b|@+v#Wo z*!6Qn_cX?dXRt%$eD1@XIF>jEIWW@Thk$EMiX%_MbNF^Op*9lO8pw?CXL8l?bhTqh z{xjTgdhA|tvo~Ehw*%}%L-HV;zY_;!)B*eq-%kobO6NIIYL?4AQFD-U>`hl73%tL( z5{r7W)%4Xmd>Sq!E@q8cpoK4)Q<0Ivj$!1-ukJI11yI?llxO8LOMV+e0&gKjKo zWhnIVJm*Cx;fpQEYohxTn1F=*wwG6_=2_Iw`bK*szVRb3qs`3=0%-A*zSWG4<{VKVW5lALDCNT#c7w z+j*54Z5ow$d_*C8$gMdbNaGkEN_$Vwcr(Q*s-9LNUAM;LYb=LfaXQX_ z)i};NmeSNqm!FzLNfiTb@4CMA?c)bTF*i?iXt>lMQ74qI)YH9_XT|2!KgR=R@(*q} z&T!V36;fDh<$j9|KWIcP#a-J_+1MR4P4Q@IvoJQ>;Y@i2XwGTjG3zrevfdod|_4R3SGbK(BIi(jG=rdHF`cEN9c?M$o?DouFD z&w(pwwz5b2gbc%)l?ljj;pG-y|1(8VWA{~>IhaY_o9@`h0;fxiMbH*A6&X`sZSMxez&HNW?zg_jg$fR=it}xP*Ne#L77fvr zyFM_eX6C>g=t9j>EqJVM_mE--NY?zk!-N4|0^9vaopZ4p!kACq_V`miNS@WX*bmi zWQF!jDO>?GwJ}4yDbieF)zn8jxc+po)s5_IXBMFNr3KI{!KBDMc;aMf+Nm14Izd<1 zaDh!^4OJ$ShV~Hu89VZ)3Hv}sF8#xY_6e7ZCvU)_U6m-V(fXt%xh(okf`qUOiyhL5 zUQum(2l$id731k|w8RJW`cx$3xa3>5{5;(-k5bV8hA6E&6r!^`S3kXkt#fnYT!(k; zgVl*EGp=zDKBm!KL#x%eAt(B|=p%otKDUNqAlknZjt+<*{wzRXW+J6d?f?{?>k zK4Y;3BZH^k&dy?}Qc=eZjII?WO)NQQ z*H!2V9=0b&RL$IbArPZL`q>*k-q2oTs1bxc9?+}CH(pkbciE(SOLS|5XhYgacczgHRUwPn9eYz?uvn|@dY>1E z4l08P6(pxl|GNJ|h0DWaPyV8`+LGrqp)+=$z?nDTtL7tm=;aRGYzkTxs677}8|fw0 z#KAJvGwtQ<1e^6L3V0T&jR_9`|1&Cj`pGx00a6AV%=Jvs>EK_1Izc5R`Yk*Tg%5_FOn1=62zy$;lFGyDNdQa=4v6fvg*OET5Es6r{q}N!bo;r}=!9nTBU?Zw@^pwejWz|6&I# zBn2rzOOj<)g*5Dh|m(&gx{onosbg<$d^Z|CY;>pwa~+i z-YH*8`Yvsk+y@N$*@g^Wg{RWycf*gsEb&TuWgt2H=S_~_^JA(5X(bjRqz@`7cW@sU z^s+wkn5P3+l2cR+#$)zSsQ&p(MmrL48@D*{Po(`Ydq062d^nQ40U!iIc%5doqN*ga zmuZJow4baiRqB!;{5t-|LmTytsWXuV+Kc(dDUk}P`v>>Ji@(wK!siFz+``!?iZ_WE z2(s)f776)%pDyu<=ei$;ltW3@!g@S8!4TAcF1O<|d2~8TH8dniBp&ZYpQ|_Qf-&yS zKu%&=y!t0(ywsM)Q8v2$GtZ&u4!sCEz4A6jvr zCj2G%ZeKR(#Et#v*#W5v7$~;#Q}EOEvoAw_kWcsfWoL3Db0xf81-_qsj`!(L`Cex! zM{`kUtHvQpws$6?!(orpn zivN5@i2NJ)PB+w2Is|(t^kTu|;OEbfC^rQGA(kuO`i-3eZP3r&EoYcw1`k+vo0j!W zJ=VuRm70aVTKCF*F@A#g}sY*dOy?OS{L9#47DR5zR zeels2L^RKMdMfx%^bHZhbP4`(h6|tJn_#pt!LgHp?jQklDDQ6W$U84HxA|lISGPEV zk5fTCL9YbN`7fJd%b(n){Xllr^PQr5a_L&a&=u$lZnA!=r$Fb#2Xj=Sv9$isv>yq% zOzh;;3wOR$?BhnZeghOt*Zt&z6?kn|nUD(BNT9i$1xijr51W!Ej$2_^I!Cl+2~Dph|e~Qqn*4(A(HDR8`+$g_C2p zMl1ST+AA(Z(l1GjQv8~lKag7)tSz6k+7+~uU&`i-*{TTAjj*qmq$+!sWUQG1d5XuJ z7TIxyNe@(>BEHiD=$ktF{}l5vLaFfTL#jlzHu#1-fAbPq$G$9EhrG>3ITDA!En@+% z_3=w9(q0RP2li}wG9KY5ZIGWKn@n`Rjz0h`>_1OS3ac5eH7pnO6#l*HRC*X0x(YQF z@*eKM23sWG#_yQ+F9C{oKl{bnkLAsefs80q8jP$9@o%;bx_yF8Te>0nDq_dF4kE>; z7L^A^Ye!;130RE}8y?6Q|CUyXJ+yfEuii-vx8eUzan=8uDyBP^z*pO2E%Qq9`u7UB zi;g*;p9+Gvz}b6MZRMBLzlJs|HrI#N{8xY8FjkZ_%x!J>ZydMYD5$8=o%GOk2imth zdZ0zlD9pBJ8#h-g|Eg#jNLrYgc^D-k-9$FT&M^f8^j#;cw9WiA0^Fu*h|MA{?z9}h zMKjh_L=UI@3}+YAdU~HlClAc|r`#&6=cL$!{*02%zhQULoJqK%czL~Q^4jXwOIojL zB`$yvc~bnY{KioUpuOwUG)v!{Iq0jy=q&DLuM2TT4~)q-g02RA=S5qf6~1dEZG5=7 z8}~hHT9zww;P=tmWpmPO?%#h3I}Me2wLzolx|!HozT3aghJ;9Gwr5^Bv);)h_OSAQ z(AVi!{A&dNX#=Cj2eSmjoe7-kdgWisN6ro z2iUHGwNd?6487L-_wM&9O>00)h%a|ol3WTYfYQ*Nyj)UchJ5fb%T4~%@k75G@C-~S z(1Nml%9y29m1-yXE_Wh1!n@6CeKSq(2m3#19sPGxuN=6U)oxg&jj{2Wb35XKu&>@( z>^JcJx2^9hc%&!X( zBV-*a^MYPG^Hy%NTvNfP_o18m?m9RCW+Sf-P#hm&;&s^H-M9aoc`w#y+ zn4a!DJ<7ob=RSk1f9LbH^z2Qcv74EC!i_#Jx&7AV4+)GXo<{*b-RNDR&$^Dw0PQRr ztWnovE&h7v8mS*?wIXi4z9vU+4Q3g;sM~$s(fwU}fcOOZ%28V7-nDBHa=y(M*Ti*t z+yTkz-e6_RP?y@s*dl%SmOen`OZs-^*Y$jVnzxiBW*s2F6fCTeH(yD%5KehpJ{Ewh z??||zCBGjJv&dMJ@AzDDane><7bGoMfs>&5I5~}8OH?2t{E@}y>FM2Vr5d%|t#!u| zXNgbjf4SGV$k37IO?4ORgxTzy zamU&*f(F~Raw%#kSJjp(8X2GNMYF$@U^9 z?OUsH9q6vuk+|QXO`SS0nMDsAY3Vp2QC1KDlt1zNel1J`hnwfk6W-L4UBL2$Z=9*Hy7^z3z1M1?*BnrX7VtTFK? zQW);!VA%jb?zZz;v;Ojr+E19&#`kB2`5gw97iL95mIf7KZ|~`vqTazKFaI<`d$#bW z^D%uund;$4og6D`{a$}^UNehK=1Xv7u)BuiSmQSizzr9``5d5Qj@1juefQihoS3+~ zxDh|7(ZbG8)@1FFiOIXUffBld^z)_BfG*IJleOajE<3p`Q7>RtN3}?A^3$e5!`RvC zzkW^i=!crHPm0(_W@1(2?iJ#;$KO^1xAU;|wf;2)dTQWLeDrkE6;hVOJ)i+*n8zjp z-Him{naybu*Y%K+Wa8l~RkDRl*(@KRr|H3&2dcVy%rY~3;~qeY^v$IuiCGsb4}Tl- ztD1aBO?vNUy#~S^cE(~lUKE+U`G$_Yu`k#_73i%!8XRchL>xD`l#Owl_J~umXW#cY ztqz&%Hft-Vaci;mU7wxzbPfS=6a8w}Q4T)tsMPkXUq#Z_NQwTkZM-+M3jtNIpwaOy z&^+EFEU%CocD5mtq}oxNzq+a5iRW(%UGq>5r5&x)Y%2W$AOSQx^Y(*+U~(gA`KM&q z=PWZ?=5I?4K9iMN(=4t~QE#F(wmqOpSYQ)N{IT@?Xl%3{&3r?S7uV{!cJR_R)rW9S zpQ3%C8OY?R=ldGUBLYIN80%v}gN--W+mn+d?wtRpI!<_CER>XfL?;b9$t_?7G~=kw;!)0@*Y2j-$47Mf9xq-e8m zQ59mtIsw+)UtoJ3icu;zrha{~d%(x`S>(DNdLczpI|^5$!i$4t9LU>9xEf8-t%o?{ zdW;zL0|Kx#Fy;qJ6?OUFLUb5@!m1v7k`xm4t?&ajk=I0T9Iei0< z9~;}Y_k&ujGiGjIwm6iy)$-}VyE(EL=6ZZuu(@yJ)}9C_oIdb}#my2gqrwk=ax3ZBBL>Jt7p2fj(0XyHUq;v)T(TeiSKblYzb>*p z)PibVDDPqcmV5R6PO=6YFT$UaxGvUr>9=O!i3`TdDU(r9QVE~Eea zT{i#pEr(XtP>|O@Z61!ro#@>iI{0M78q5TX}~u1;=$UgxDdSf5-RVO3oMF$=iMl&wnlXOG3Wz z8u`e=jr8~LGl-S>1Jvau$jE<``5#)8>?-Ko^J_AI|NgTZJ;-A?Z4AAsBpMJ2so3Be zVZS#iiCj|+4O<8|0FC;;UM1m<(!byS&mHX7@=HFKG+JW7-pW=OtTf~;$wVNV?Y6$H zfwsi-kub#QVNo{;fJ8)U&#li>#2pDParu>ia7sc_qTo>Hi=mC!Y4@YMkEUyvsTFgM zfAf-E-+RF{C@83%8VI<>R#16f8JMv{f@A~(bEpmxx0;6OY&@ z65x)yZoA^2=MSh)=cv?q8=!=i%nak2AZxTeG60qz3-oKK9Bdz z*zR7quE9987dT?qFE3K^8A1ko0;Q?yJBt=J7R*#3>N~*|;)um!{pqhl)+*@z*W%T7 zWL?NOXTEp+V*k8e^zzlKeZ}N8@&)MVQ3IHhY-4rxZ65iJ4M4*?i0uB7iTr}FH1Do+ z_wWciwIg?X!f%87XU#EI2D8h6?%__=O23yL8xN(vd?}$b{{C@Kp&f(@$n1}3V>a3t zlg5({3|^p@J*nfbP(}@`18pm^w*Jg5%q^ zhZ8=RtdH@@nJ|k7Gk}r~8@^M!9nej?pUL_x1zP=H7bEASY^93(7BvCPWF-`EX<@l8 zKxe9#oc3G7lnmG}Rc=ihpzeV?fEbRj;WR4yrVZy_wumTS9IqS(bZ3ZsW1xU2>7DF8 zL}K-O#6dr>n@9YAJQsu)ubIZHFEKh=|N7@(=^ zGy1fL;HxMzbi&Nq+z|$A@JM?1?wyTjuihjU3c zXlY0CjdvC7+*eL&L3ml7*@FTg)M|!kKZiBRHbo6P=tbm_SVQzdBE|%3 zci;*Z90F)f0DVR3Lz^ly-#;4O?qNJNZwRN@nCd|lLm9{HR{9zpo8Or~Yy2$Pw0acaqpS(I%bN>S6p|4o|!SkwxkyfyWkiRJuETG{%VWK@auJ)0U^v83Q1-!{J>&p(ByZqju@N-BSSS`CzdEiLvW z`A=C-Z|s(*1^56P#2EZ`sZ;+x2*hBh^Gbf;BWa({pHv5Wk1fQkId&a)r{DMH-Z~up z_pu^RERP?kR{D=z`afHiUgLqxb5{Eh5bzcU-Z4k5n&+CLgTtU+I}=*3x1UQ$ zOcaMl8%A4Pc)5`xl^E)RLfb<JQI^(75g{N{$0`BlsH7=AB5Hy7JzOtF-n>M5Z8n0=PO)K0Kz zlhY<34q27lbxHsN*1w6B@z@ng*mtCkC$*aBuPT|fzE~~{<*7?^RuUNnstXFkNGhN?Q^+=%O&v;YnZ?&P{`kN(op$R(+i&T}{_PaT) z=ahGEm614=<-7G0;fVD$TYxXxaVv2TV^a)G^b3#~c+IqDh9{Ik89vWFb(?Rsq2}8@ zZ76y1Z=^NG`U|deiQw#ezr*%xWpLPP^~A2VR1%=f=afWZ`B`(O<6T|r2Nd(kEr-U1 zu!H_+KL|K(6$(XtmVzw$H*33jr?_c-=a*&On=#iS?9ctW?nC&OFQ*s9QHEkIyH4$2 zpNjtp0RZ>?g0u4$Sez-#?1gr(PCxkevTf!7{bK(Rf)CbQU(!!{)@G%UZat=b zVW<#q;`{rYKmG&2teJM)dE#J|VJreo3t@#1K$nI}oSOzO8Z&4Cv0Lyxk%?v#-VI#* zBqW4+0sjhEePg_m?r%fm3aX|}Zxb;)vN8;t_*r5VbK12u)WZW^gV|@Ds^q3j9=4l@ zp%nee>oZft1kjn{o(uZIWi#Nx2^iW-=_t>-SER60Y_F=7oq$h%tO-0JAbrLa#E+2t zlTv7BbzcE~fo=?l#f@fKb+SqGLqG>Z?RXpV{5_%f(M5D=dW@_G6&#S63<1O+@b=s@ z3vEcmDchkBt|n!!DEN@EM*$_D+Pfx*@e%=wcK7TQPWTPc_>YSf(Qjt;_1N94nWEaN z`+(SR_wBR%xmr;#&@vA^illzC)9*nS0`}kvJY@jdl!$pG2$|LT8oV?)%e!_dM?rt& z)i%|O<~M9DE!`8r8hw?GKm)=ZzohI(-KJJgh)t@M%unGv{c4qbXL`?asN|~YFr$dP z;T0e}zdj-U7HHtc@mW?ox_L}05xZm97C#JgA)5AAtt`r1ZR)B5x-xUB=htbMsr|i} z?B7%aJQxNW>{-jXnL<9R#3^RK>#!ZY>vNDmWie7gzmD>!@u+|+g097S(yaDHVl&0c z6ub6}97$Da#}ksrU{PdE+b0o{Dq=jC&Kicn0Lxx!BJ$~f76`M2qehXbaw zW~YO=Pmf^pKe+?U6(USO<&nkWT_y5CArA|sZMJl0lS`jLt$kIlIs4@06 zWF4}vg9s;uHiRsx1~bM!Gj^d6S;rV=EJ@Zeb|ZuFe7=Try3g;v@8|hn&;Nh@yRPHP zX_oK)dB0!VTgE$px}40Kdx`lyz78T>4<^OSc8`j%1m)avniA!&h06A&W~a;m@1MZV zjEq3rR;vOmWk~%~%mFbX@;NZVc;FCy{!4&7@m z9@arE9Tmj@BL(mRDir{)55MtxMc25wQq<)#Azw4zEvsbSm@pbJAn?{`36+t~$OyU< zKrM9)*3>D1(Qf;u`5TW_5#}%|=*t>?+JQn`(GfB_K;}?8!knmBy#%!MjyLxEgVU9o z#{iC=>!z39+O@9Txq&`A_{BX1pCZ_g{1&iAblbzI`o>eOXBXsBBqJ1@#32JBStql~ zeC;ALNLb(}hrJ2*pbwe|G=!lqe&8}^cNw=W*6-bdQ)p+%^FGxgy7rd9d*Nn$HY)A= z#yfNSa;tfSEx>KS*T}wRInDt=t+G@q9uA~Z1pM7ksRfjG?7H*=exnWh$prh?%J=}B z@3jY&27Gs^4!M0RlKp{2{p%08jgkmuM?}??>F6L_HjuV&8?O*;YXggyZ;u|FZo+#9QA#=uNe@(ft*2zD32rYhK^`f)x6wq$T>s|UKdYb)QXNaJgBQKh<#i$yO@s3Y& zo({t5wy#4T$CT(&^sni8dl&fvg>05@TWTB;;k*gWNqeddn&39jj(ef*!rx|6^%B{JBD!&f;bqytNyu@D)5qzAJW*{jrK&cEKVK zEq*X8^C-jc8Nv(&zOaw@QzH!xYy()9{YuAoEG;+SB%HJ+QkH+Qneg(0CpEw~H~PGa z4kBrgq}NNSz#3Qrx_Cv2Dh&q??{EG6@XmX4zmqF8Jr~@{BdzG&VWyW(bFXdpVZOgt z{HKqpt9&5A><@lu*o9h`29G3hWb3{TFc zzt>UryE*2g+RASjPTQqwivWs4`=4JlcGK)_Q|>+ZuaDB77GXAC_ftW){&j!5)awk_Z*I^x zJATgl7gU@L0R6p%@WW9K>6v*Xdos12WRLj7KbQrpsIgsdz@etUZZnq#UrLstsjV~) z*MZ7u0dzs(T8kea7Rat&Q%2Xj{J!(EAN&=1#Acc);oSH)c@#>4NI_LlkeP!Y?isFM01s};(u9cyLUl+jj6yX zCHj;9Cyq5uZ#q5c=Bf%Eyq6kV%*1c6DTpooKXl#g`0Yz&Zt4u)r3!OaYJ-2SFCne5ajy1sFh!J6Ls@S33g; zRJ%HJExL2!w~Y|f2s>1z__D`yAkQ#Z_`AA`Cbw98A>}Dd6rO=Pdj3Dl0ZQ&DP_S&9 zmiR5mz^UmqnGST&*BUy`H4YGblaZm@Tpfp^LXw+f&Z{@?%s7MH{kU8n% zw*ibgYU0H(0oHKHt>u?2r7yydCy`Emr%~nI()RVnDdQp!JDi_C+IymKl-6;KM`y=l zuFNb6Zw+Ew+gVx#RX5XfvbXY;_+MC1;FsN*sh_oBaBWvOA|35v-B%v`mQaE5u+GcT zCNzZ&H%8yrL$|mBPrp$PX16N{_wxWQ_^Skqx~JI`L#ML6Jp?`0FYtI>!fY+Z{9v|1 z*Dk?&qsFeQgD4E*_A?Tor?&0v?zyKVE4Dvea|0dWunaZh)7V%3-v2{jPby&`tmLX@ zy>5E((!|PJ5EaBSYGsIwXs4s&F#vKHtPvYO1S&U>(v`WDT59=u6MyOPRAieUdb{tp zM`=#KWsT{btcwuLHY3Rx9@^rk0G{pSuPb519oQlql&!ISKt`w6@5#=)1mY(0u4`Londz7v- zzU(~<0>vaj0z{G35v#&=loo%YKJeFDt~N%>`* zzZJDE?ok*uX|VAQ*ujFNER@$tLVMf+5mro{kv1lbW3a@l+Ay6zKpO;W7VtSuTKzAyZ42`MDBld)ZFPya2*t@Hj{U zJtJ{^ZM&XE23;qkG@jwaZ0!ZrsQSZ^blM3^{jB`o3e*d7!x1VE#=_JT^EGv|@HjpJ z#9sD6<){mE*)q7jp6{jPNo%cMjso6x!1fjWzAj%FC?goSi_dToYJre6Phj%3!1;~I@o@wx(VImKF#~-Wi)U3Dk zHVnpnRL>6Zh#T+-<>ir+np#;oYT0ySfb(1`3ZB`PQgmed6^gcCA6c7D1n;054Kdk= zF#hI+;F+zrSx>R|e$j?SQ_yvs(2B%!boEWUwpfJ`&BSx0tyTIIyP$lkQ7?d>Y^$7K zI<(0q3j(yz?HGH}mFVm108Bi3?Vuf&^%!ZZyh*{kU)aKvf7ulP6|H5CmK?M$8_n_^IPkeQ60x0P~hKuiYvipYxT||x zEDl-&OvfmY`89Z<6D+%Xo=Af*zmmqJmBPm4io;_4>{up_-8>L=QjuHl-uM|{5Kng~ z@6a+v&E zR%^V?%KHBNu?5pP<^z~xlUM-JUv6B-TCCnxuyk0p!U6T1X<*?%fOtQ(RvCTiTMx#! zpEzVaS+VLw&Q#Xd&q&y3ztH2E4{!(1)0T{pw*mLF4Qf?|8wr|tY&?N4qocVqhBZ+l_G2#YCxLcd9$Nvej@J9;|)I`n)Ba zgE^G2nkUut>T8VPX){?}TKl%Qxdo+m*yE{r^6q2bnWPDfO%H(DPMF8Bw<}OJCmef= zC+m(G`abNJ47(T1H0DxMSfX7N{J|KIXbgldfplKq2yEj))DUO8WnhfP)!CN-vAr_i zkM3BCaC(yWLK7e-YY(!(i)YxP6%_zRGUvv|0C{fy-tHk9H9DFW<}_9%FZ#@s2iUw^*tn*4l3-sm0^O=Zxg853 zdBXP>Qg18Mh0eMIynzB`Pbf>D^3Z=|92TRC)g@`c^EbOJ4#r-k8gV-f-;$^A_f%Lr zMrJghfN7TnIUBOc1YaF$D)CFiHSkzCcU%u4!JCP0g!h%Qk0q3Y@l37jR~_4pmEpfq zr4V*m+@X%hXk*{?92}rQU0)FX(cxV)0NLSV@st!cu6`V`M)c+hfxy>L1fz`as>bB#JRf&d$z0xQPAE=K%Y6_YQIiiHb#8kSBhqBx?n?o9d-RZ~z@-MA4LMKiN#;{pUs?&h z6Z_cxl>M;cGFQ+#Wu0+SRVyjQ=+a`4%T~u#Rkh1(eZ$)4Dch^a1bL9kvO3q76%MSij9uoQ4VV4D7dd_xS17Gl`oL9p9Ks3y2^{<^$>ONn6$EGR z5EQ;Hy8hR{Y5c!0vB1**rZrQx*Zn`sAZ^I*eu77S+TxiGaGH#_SsJd%B`<#e=P}!0 z``7o+AR4G7&aI<0{{jUXur+OOMFQ6j99v!y&n;W3XD&7DnB%F0#iQfrB$B_SZW1WA z5D<{fEL$0QnrC*3eHIC%W zA}1P>L%7q#uqb>7g?C@^VK|!-j2dF^Q5`=(@E$v^HmjtMWt@tB6a%X0(CfOk*Fr)% z@EXs2#ZR966%|k8(Il1{u6zj`hT1mQiz ztnDECg+5wv{9vm3_aw*BJ}rH^UFyA?4L17m>~D7vw=;}p{3JQEN4q7ngfWI;m#IZ+ z%N$u}tdd-tEK7iy{YL%hIfmKezo zB;9#@IWv%#*GL1B)&vb_#nlLf=g<92ER9SZwj2m=Pg(Wy+jHuC(p7BlsUcO_Y!i_bZ$HTv!1J4k&LVOn>- zB$R_z;#8x6uNB%%PyHOb6?V|2L8U&WgMEwGe1=#fp4Z)<7?cdG@lsW>*-nFEa4yA8 zJ?TS@{abm2;hh7bZ0b7YJ$NMF`f@(^vEZ4UkM~M*EB%*iah09jZHS4U;`s;2QXX?b`lx`zqLQ9v-h*_BW~_s0Xfvt=+f+yWjcz8d#n8X8q$@Cc=OURrNi zNrckkIp3ktE}6l!*lj@ExFG;3!ryOo0oqb%nTEt?#aP?1kw}j*T`F~UQkSw|owdDY zD5eT%xSDYwWXWn>Zb5B(pL}(*24@tl170{C?+-GuJ3$np=K$YnA@A?GAU;f2B^J3d z9{{+fQKzLZaZz0(t*S+XJaQw-{5IjC!agHHC9AA$0$buB3MXK(!L-NCz07ygA=c>Z zu~+f0f|_BPiI#w~8jFEcgH+oz!QhPf_CtY@)sSm@4no1yGsqRIS&)z-L4G08>`7OH zWX0Vhs*yQBqjB)bqij5?iEGam%-P8vPdcuyywPXKS^oY7_*@+)EODHZq&t7j; z*;^njh!~CYTjY{Gbwp*{iEYr;czwPS=uEON{W#b>H!3wgN32y{fFUqK0n2Byl#E%O zKg{$KBVXW4GH$9hWUe}z=JuBPZd<4EX7*N!#((#8m8B5EaIXDhH{ z^3>nkKm~XG#f^gGh&MU9wL`#L?~>R-4<5AST7!g~^%Tv%PRJ}3=~rsq{R?s{&<2p( z^S$@{4sh!V%e{XrAlu(hVo<(e7e0DI+DyKuHDg3;YySJ9+Hh`-KHk8!ujkVi&C$L; zn&Dx4T;rE>@D*l#@S7jc>DDN1qB{f}?d2GQc&LJ)LHxCAItfSh66f2A9#w=}dC|$( zoi!iRHZE$&H5Pt+wjaGb^~hyug*v}t_`=bmV!FmKmB;kXbvdhgQtOA)cpWrg;a;Qh zBLIK00D_fxfsQ;bbJrV)%usR~0>btrrqqvnD3RO(0T#dC&R@BK)z71OEkXSH`*(Vp zOPYr=MGq$_IhA7#=B-X2SKNSxI1EGqlp9h-sw86zR()+7PEf6>a9xdv-nPl)@N9-g znq~#5=UcWjwp!cf;CjB?8ju6?=v21lwIY+=As!l=TDzhSiVWz%1t2yrPJQT zq#bq^^ZjAgDg^kO?7j}my9+R$&*9|nfs7l{ccfPUB)!c-pzTU#vD@hQkQ(2J4_z(1 zk!#HUb&ZsB+o()HzY+PU@*j>}*AHZ|S27m|HhGUtkM{-BQ@%YrXaH`CN4hyXz-I1FK zx|_9C#6fCs@NLH-iJ?oeD+zn?&A2-)Y z8fq;yP-$TI0|jp9I0Fml@^sgw;Wmv*E#f$_1Y35&JIw4?@#uI?J;Ix|Q!^rW^ng^G zlT&B+=v85HF72M`tUrK&aF`JQZT*K10(dSi+?2=s`c{NvO@v9ds{R5axIVCf0n{@j zM)Q&_K|&CF#r6>&-#!C(1QxCXXG<63!`4xz?|bdQ!^LPBJ`~C?<}lRF&6r3d*($Z% zT(_M#|ltaC|HaZH2%^QW*e+HERta*#gm93pkj;Def z@8Nj*CaCyNV6Cnr{C*ZRc?|zZ-zpkT!e^jr?1GiLdH3<@0Y#gbh@%C#x_iz;8+RQrecymi z>}J>URHr9pSYsDlAq3-etM~W)n_4I$TE=T9JVN{L6K)FoTQT}OTR(g5hD;Eg0st;Z zdSDD2Wvn`cpi}d-k8=Q7*zQqLEC2^7c+g)dYV*y9rP-Q@uc;P3;32gQ#6xCfw4>~x ziitz~@uoI54^>CHqj3#L!o;tzCt-BPfXjNHLb@naf(6E0A*?#3XL?BAmU?ehkXgTW zpv?>qgHEmu$qdMJ6y!n-OH5yRQ4=HLRI!pZKPpuRB8o%6qkCOt**Xp8{-h;>N{d_} zjRo=U5eMC0Qk&dK{>~=zur*np$}athqo&P)F=gS{ky9`?C6o_rOaA;;NC0Igr0m(8YNnHzB;2y z1uc2-8S&Vv778h-$?x;0bw-?)ksoS8)`tS}%`Z`2qvz8pQAtd9!!o;<;f~onJYkE5Q^+Eaujva!y3zb4CLvXz z^34G-)`wjRZf*t3Q>A0e*cF504E+36>icO?m=zC@E*9eCEEe>u2DC%_Lhnm)`Uhke z4XMcXW}7xJ7gq{95sZc!G2H^k=)DqR9s&xDt|T}NlDc;L^$)xpxp*SaZ!vu2Y%Z0z zq|w0XZ0>NgQ$_s~?4?8U5~U7aB`e-gKv@FHyb)s_u|Umq?x*iaz7kDv(66SN-i;!G zK_vX@8L9>Uf66MvLE>Lw9ru|Zla%J{_`6HOImvu{xLgV)-mLyFou`@o5xr|2 z8iGBow^r8lXc!klNWRYxcIIIlx48Zh!j1n)9SPFR@5{4Q;vUMVIuJxN)Br`{SP~7CAQn3kV zP_Y6_c-5v67~D`1>~#KP`Y=yAYA{^{%MH9ieH zoo4U>V)riRLl9C7$s;{uleGTs-bg65SX^%kMV-(!@opp?Wl(|RhkvUpVkjy)$hmQ# zAraVOxT{n+-&15X0!H5Wj@Jk{+3t4pp_~vDMr03>6w~CIr@_5YL#KiHC%KhL z-KDgZ_UT8e!%UF8`$R~#%ua81VX^|_KGFSo#rXp)e_ySjYz^p9lBVRQhrW3C+>*0> zoq$3{L-9vhr86^yjn_XWRUeR=$OA5#bFYdQ6`Y}(dO>4YyY@<3mnQ-S1{66KXA!{A zo#Xwv+cA)qddq*%Qd_BQRAxE2-!fBgj5&^3McwL@*nf7ZKmBaUkEgrv_pjkJ;)_r> zc+$gbw*^#((nmw*(bN&-kGLmQnTkjsC}T!(zlFrp*@mUFe0FHq4_UkR>$)#)|3XY~ zVl_b3Z^8+6AhL}f6d4ClWODFeAuq@y+3(1wY8J4DXo5?RTUTP;p< zk0ch|QhCzZhcJ9aIe4qxA2EKR-4EiuY5W11esKobmkk7YZdmu>G+25VKSUJk*H-P> zUL@HhVYYa!aX6jFR&~S+1i{aJo*Z&4aN@Bat|Gl)*g6p->6UzOcMqmhN9Q+qSA~LZ zWpV}1m>@`lSEJ`+!>fcs-YXXDAr-*%(pzq=q~_e{fl~5toB94&RK6v>%K|jC{jpK+ zQ*J*P_G?s`Q#dLUpIZsO`UK}?Q1Lje|YjZ;TA_6LvT`}bBI0fg+U z_-xO=OWecHAU6hEvqA>m6!KvGcB%3wp%|XTwoefWQ&V=n2xo@ytM`XhrI~K_g^u!! zL`NkZY=sw2sk*9P=hY@zPIInUKSWim2{Qq6E&X7kfl9wl+O5QITeS>y%nb@vGB#y^ zxStaL5Fe0z;XysnJK;ree0&++!<=;5Ms_LRYA#`;#FyTbXej(p^dh73?s%@wu>JFz zx3=-t9hs{1cGwBTZ&@|+IwpA>r}t(wxyt#S6fqb|f4l2(5>H>oVsIzzcl|)xX7!M+ zG2L{ueWR@Xvr+fw;Ywk-59WcUfB)PkB^`=~@OSIH$v8VhZA%=G8vL@^lhD=N$Q8N= zw%+CkVj=GfBp@`FSiBGS|8ccwg+*tw9A*i}mJAtXUUZ$Bw}aY8rh0vaf30~%(~T=X zj=o&u*_Y@9g8I@NUtd105WS2_aD2SgEO)HBN;=C}OH`(#q>EEiG?25et?s;sHtu}46l8s7RyXg_>zpd zU-E|QIZzPd#GC9b-n%AQjQ$9Ptjw=Kc zoNZ{kx^Ty1(;F{dzeR>pwcjiFYGB$t=)P?)D7?OY=|u%rU)l`fifvw{AI?yVZQ|Zk z15K;i_WdXq>svHt5GjCJBc6eRfVkwnM?t|D%)GIgo6V5P0OM;AcLZMfyn2Bet-Lav z9Dq;Q7iA|m_G(mT;wo+SLDD9xz8DlxJW_^t_HE5N@!Ugtg&M5Nzdct8*+CE*WS>1{HMyy>{jOAP(JNFkwim5{)7lYc~s?m%;$3J zROF3Z{Y%IQqL-1>mf0aH8g9DP0{=ZG;$=VEH(@3wmaf)OC%F6M&#hO1^QHnF0a1(t z;@W#Y0-_tc3{SAjw9wza)&>N=gH-w^w$^+T^}%tmjwF&CIvYHPslv-)?kE9LiwO%Jt8X(@T)hv`!6O z{+pVwSIMcbW+R;c%B%aZo&;>={#z2omLqdOF7W@{1O5KrA$4#2zgp`*MpT7nAU`2c zow1v-z>X}oXbti;{nQ)kz+dzZ!i==du6R0F420qc!h(19Jy}Pv@rprk2l(n@X-&-v zQ*EuYeO1$y=4qJVJ?6oP77PcZMN2WH#@j%fD}~b`kOs(SqIn6x7}ssJb|#Ci0-n#V z&o){1f;PyzFJEhnISjUOq5>OndhAkjMMqM~Y6o0RQy@prGh!xW@eU53b^GNu;1T{sEl zjoS%*e~R}Xpvzj5p}}G48YG8?YjGScheQqoIW6K7;<1r9N&6=>y5%BdR#*q4Icyx= zmR3XS?R57_!$7~!_Vg&vUIq-)yQR5Ry&gGUN|W)ouZa?=0 zV_bvI#1Um|4CAYuRDpi)t?`BfZ>Uq9iuT5-zZwz*{nE(UuFfp%oA(aZe^6Ln!$$;j zhfhVv_-7tG(#Oz8pz*eQS80ru5aG^uQcZc4n-}t0`wrRf=r!E0-le|LN^vxD0VOud zH|(-6>q{1X&blY~%oOiS23@{$*9FU$AOZM11RMzgH^?h<;xVYkKbDu{mX`L@qXFrjl`V$tG2wnHm^(YD_r#x9}2 zDAnp(wSRoF>_yEVel;=`yCq~jd=3Bi#_let-dzy+tpXwE z6t7#o$3&6gXKVPaOmn$>ak_t=Id23qb`90Z1y^_k5wpXRIlx~Y@8(-wEALTKMXahl z+BN?S%pvWx$dE89ub(1XG+X5j>~Ci4C=UjViGT?%o&o_gwu~>td_=vbB+uVo%#=ka zvlued6QuuVW7Vyfe=kA-xJsa)P`uZ)9}TDyjonGwvKr=f8ELoj^z((>L2Z(-5DE?T zaWpv2n`h)R%1bD%k2^CU0a@_?e*Swilt&6=^j2;PV8kBGIapel^+dq4l$LyMw0pz_ zpwN6>$u6>G0jtJXU@pKr_Qbp~5e4bMLnd%kLQu^<*n#)TXtK=&BSr|o6)`-d^zF|pg!9McOfz~wkMC`diW(#w^ zmqGMjp_K%`-?P?g9j!!vVT&~z{}OBB|FWz$g3;aa?dVtzcJ(za8yP4;Z@X)*p5G>HS8n+f$y))3t>x^^aS_L?@x3)|J$! zst+dWo^2~OZ-gQ!#|L9govY2cZsL%s_w!tbZ?z6W0v3v%gL+A#ITr%CcQfnN$?G$} zCtt3(zm&vP+5QN>0xUWOP$Yyv%+#`fpPR$AH#5+HCm_~!t2S30VM60kbmLC`8<<@fhliDFruhfsE9tn)|ZYM+lWuNQ!vOhsTy66}doSU9vNFkpQJn)|&pFaQRkGdD6HC%i%^rS#fVcBBj?09F^19E9TQs zo7ZDa?}Mm^$NP}4rhdi}$CvSRu@TNIu&|AuCS(^idAtkl>+?$vmg zlm20B?D^^g+YcXl5DeFRU~F3V-aak*htlld^kma`fNlca(vJBytU~Ocmn*#nA6|il z+(A#H41=pdbYe2RL}O6osdnMO=9`>yp512@USU`=Ha$U!5tRE}4|$J&dOJVn;Y9j6 zOBKv2PrdVj(u+6(VCHt4Il7~TV=)N+mUQe(F z=HE8=24YyGR%hHJ1QL1Dh?EO+<*++@7+y%hr`Op58&H0d59QX6jvM$HF#GCnQL>HV zhRCzwm~d7-Px47ZUxjgB1y*Eg2caRIV-}46c3Uy$;($z6vc?l-3%}@YCQ*?KtgJ>g zCF8-2Mir;d9EF~l(RP!)h}caBIMs@=CeoX>0X_ydoDrxh-Ot<2G^~(%kJvGp-@#Wt zf8i8AX7Pvhky5D z<$c~ZSB}+f^%+Qv%|Uo0M-(RdhPg6HTds?O_N*;n#teRG@-Lb2Uz~J{A5Z{@@n-ER zcYMFnrxr(2Y&b?bO$@f4b8`ua<~lvlI-d1RASi3nE&ChKQXMwBchsvbzvQA4_MYn0=K8pd z9f*7QtSI#Z7+5WdkCO_ZU%u>MXgI*^1aybJm?+R?3^)#EQ?!BG<>p$fN1#f*4oDPA zEx8W`xLt2(5zG(RVJA`VaDx|`q4#<#{XE)!;thI)LBGm_wR3b6D~Ug& zV+gcOFpl-?4WhmLzh&e=;~~8x$MMR0{qG3`cBY4s@2Avk3r_Tex$d*uf)v-KHBIgJ zn;l`@Tw1 z{38LA%$zt^+0K$=owOBYF@^M-2=o|ZRao%(az@`;f5ZVL{;ao;H~ww6vreh4Ikf(- z39VXf;yN7{FzUoCA#A*_nO>7!qa{@~qis z)jPX+*1#S2>=AT5#Oi^YR2C9*+eD`4h66oaIQAaaah2yX$=Jsox9j~e+c0!0J68?r zM>*nSfvWuvTr{OeBgFunVIu_I@#`9&S|9_7uPCZ~J*+g}56+kt{8tv+~2gKD% zAfUk}vV99jBgbKWun?^YvB|u-gg_a%O#S)c*PlT|N}o+yKMD%|N-$FCbZsvCinsqU z^&4=rT7xm=4GfQa0CKbKp}MSKFRiz*o*Lm`EuHTA+CZMqqGepTzEDi*Ag=;>u6=c= z;E0Lqu@^{fHmPU*AjX}Z2VKa@VwcuQN(s}G@3i$qfQl#5159tX(AoS2)#70UJnz0x zK1zq7YbF%F_3{Vay)a)K%-%ak{#}vN@vVv=$svpG1+9@ZFwT8J@#18uRB$d;$F(r4 z&D(SmN7e!w9O;E(Y*9Q4H0wc1er5kwyOjW0Rny9aylp1;93qVXVuxCiJk zsF^$pZUqoa7rJxNuAl~*37czW&jgYUT%44!>%a<~Qbf7cclALs-k}TfmQCB;tcg?u z6)a})$MoKwbKEB=0cD}~^PigdCCI`r4oC?_HWAaBQ??RrpP(+}SkhWC4B)t4%&6ak z2u{{b?5pUU-S6a!Tb*vQF17z0>)9wRTb#G-{>&lZ&LiWFY}5Aa+4T93jwOBjj7y3` ztBJVRl9Ko@US!qG&H;}uD<${gkFnVnzey02^QV~AWVnO(7`gDYl4hQ5Mr29fajZN8 zNhjR4vUxr9sK>EF$TX>Mn+Dl0zHdj=Kff23s_?C0oX^SdRiuDnHvu5q3P?(&$hAvj0 z^F%I?=4p|)d;oeb2Qb&qsL>!q2;vHX6g=8dKVlV3esuw7flt@yTh(0+;tV(iA@Y#t z2y05b_oc7_%xk|bE3UK3Dk-*r!s9CU=R?%Ab8UpPbTCXXYNG{2*(RUUn6=Ss7|(B> zGHYsFcAlACbb+f~IJ5^$gr$Rto0^5A7BzP&z{^BV{zwPhztd`S}8q zwtAlm3C$5b#o+~!h8I6)X-vM4HOU2ia(B!r{g$sW^FT>P@Q2RuikqOaj zPpxBGRtcERr%wtr)0z2+&b z`YnXF7_RTvGF3Ji;hCN4jr=op_s4CAkEjaSKrCF95vLH>Z_RS{cZ0q8d>(GjyUOcx z@)ayD_3+gPbwG^wE!1MrPTm^i>}`_mvkZzPUE@z2W?Fz!*Xn8mfGUy%{if;)B5T16 z3)Kbk?C_<(+=yvY{um?D9UZd?5#^bs)6U(Xtvl^^!ksm{P?LV;|v+}6ZW&psR(=o!}_fhVu8Kexz$)k8x?JA*}X?V99x0CPO$&1^!iH^1~wKtDLV?SarhWULyw8WRcys{}nzabMQ zziy=t2G{5nbv9jltmsks6+}>Qx~8E5Ys21iJqz90Rn6%TaY0Bir>*pnBP^28hfd6l z_ZdB8jYzP|h!jEw8ETdqetDlk+fMX9DwicHh7ZMcWVqW4VJdTS+BBm-;3y;-nv zSgMj!d=xaQHyvpR`zWtyjy{u#NRXSa2gzr7$nk={@~&;BNxc@V!ec&4;i#~L-BY+Z zsoVbuuG(`UsSE_RY{*{?HV45A_D?&8MZDL7^R%^!=Z;n3IHk6GR`E{l6qM`iiJ>>Z z`F-u({s7eLv#GqXJ*3EnPaZ-bz1ewlndR?K?aFNr2s)8o66s@Yoda)HNPcMVG{Yo| z1<6)_+UvBX!>6&P)Hl>Or149o_oW4B)6Y5Ie`f7YLDa>d#-m~yzf;tY>8B)|>fZU- zvs*jK?ue{P>cD{QDh@H7_1SW5zf=X?^$NVX`xa5#_mm0a8Yvzm$N2`ElCz}s#&Yx4 z3CH~81iqc0Hl&3GTY<3g46nq=i(29mt55fX%&@es)N7B81HWAn5?(7f%lE(DML>ejss}_LC4Qdr$ z{_5*!@Q32dJ9;Sk%-IV<6i0=e+GfmCI+z#Tb2k7Sp{jgUp(05vQa9&&RBp$61cQDn zRN7r3w_umT%bS{0y83eETpsY4dhK6_$ZwJ4;_BM72S^`C;(el0t<#8lmQ9x>`JTl` z6KfDmjhSw`c5#}adda^q0^VnWu0Y*Q3;QG{*}L>vmNTU}!i}Ls$^{d%(o*TIOMjFm z<~G#$DviMrB}|$oPy5X|)euWcEN=o|JFt*`l-51Ht`9~14#oEALXPg1Cp*X2LfwD^ z)=nEVlWX~lHLF*2W9zD}H5ji>l+4}NL^^UsFI3jf6S#ONxL9A#z^mFjT-V!3P0S+q zxu(#1QA5Mqwx19Jo?-#)5Cb;fm2&OmUy+@+9@xPy!vTPz@+p*=f*0{SP_EAL0iUK^ zfV?3<)i&Pybul z8#iTAwGJ#!$%vggl~Yw`UA9_E9xmDhU&z7KrSGB_tq6l{YD{qIed?j}TTBFs144Ax z!e)T2vBw^kUe?j9gT--QD#1p)Kh9C?Nq-f6oQs2_=xrblxOinq?Rp4}mFAGD)J^t= z+TW8{nknF417iY#-vU4(?;QfX(ueH4KdBfJ{NEzN=X6zBxrvc7&jKD25Qdh5H>vt* zc^>WSX>Ep_>oP+>FX&Kl1a>@e*fMQ-L~pQvjcWn_>+e*LpKU8K@f;}!IKFQ}fRVxq zpH00svHL9!t*HMa>dgO5%;efWa&Ta80$pVMdOQ5zvb%l`J-NWPCb2(4*<&O4^e2xh zh$vml4vH_Tc`dq;`?2dZ*NvfBn%NA9ked2C6n~)CQRHX0PLKZBE;}_H~DG z4k2$JW{ShWZVH*KbFCb}$Bo#E&$L3@jWF$1S4=N{gI^|{?a%TzS~0y5bjief5D5GK zSTI?gwg)>tGN*H^ z=f}cU@+Ku&U$~ui=?pYi=zr_qAyN3zf1%_=YBiloASf;O|3-Cfu5>Ik8E6O?PW1Mu zIbcl%nOQ<2u73)UU(Sq4AM$4{R&;{i!X8ZBGlu4@9(d6+^MX5o(REXP^qrIgrNGn@ zu?m6?$~BVw;uMyr$^cnMsC$Kqu7$3p(gXkeA#PQus0SCo^z__EavTg`HTK(#-&asN z)Z}zAh!hh7cI3}qzj@=+e?&GCX~Wn6tT1DbhLfKEK-%i}6Z~BPt4mHxbHo5DG%E~5 zawC$F3~x6dFV@t|WVw9bE~VxDhD9z`-J=J40W-{q3RorqIjT+f=zPym|BxaGx=vG# zY(2I;EzKYaTrNLdD(t_?B8w?Hf}Po{N;r3#FZVEyWb$<{{{oXOn8xb}`cTEohxQnB zMY;X?*Xc^#^zOHhL8QTqMOs*iHqoNQ2}#qVwP)mu8{)gU(@YduGR&+DYV5>ZosPp9 z4P%K8VUt+Y2|3NNgC+i^_bg%;1c?Jt|G$3pbiAHe)exK@yGdTu*famu9o&KY##W1e zTa7w&P`__+lzUY)ZxL5coNF8ax49k|c`$Nc!W6*FPGH=&NJq(nGVr56U{nj6jMY?3 zff->VZ!4^J>??Khom`QYEl<5$mUzEP#A9V%mO4?wKe1#ex;C^^~UCmGwO}|VZEMEnN_PJU8YKQ^8sXAKcucw zuO7ziY;pZ8&(gdZ_R zV&!8}0E-jq&lz8&Dx$uWl&s7q2jFapSrIV{H3F+S0V^~o;A7{}TVl}v7$irL=K!+Q z07lKnA}TjU<37|xt!5coSNNCcrQH&Ql8ZfNZG9)e;B}Ds`xa|Rpd%)_3G^|Hq-TQ- zQaGTr9cWt{8!OwzDi-pmHcPfB&A|lgDp#A0>#Kb7s^kDbhl5JlW+;1Ix0> z;ziv|J@dD!0SzGNceWVFdt(w<4W=gcvBr!mOC5wr=h}gmE2>3S9hv$F&5LImdVOe4 z6Z_{U%3iE|JA8P|)qQBAm zQM18VTFC6KjAmU{MVaq|=c#gg&$AkX!*-tC&AD?|@N?3UO^)4%r^QwF?rpuk=f#&t zzXcDC)bzYA+{@o_b)a}C*Jr1*?8g_iXv|SLXZK^)n`ucAk8blEcGgumeD(I*y@ww} z@N88%@ah1*!qB}0gT@Gx;622s)ydc2I?4zW*a^Ghv2G_v-3!!C`l&Q5%A;o}kvAgv zgB`qXA(ned_t_Vj%8FN=73t^I#!O9nO|xmvWA6LzSr4CzQ$)s`GV)6D8H2>%_vocCN8S(YGmiMZN}kkSNFcmm)4>87CS50soC=N~V8nOm?aF zTkIZ|I76fK71&P3h-K+H%t%=aiA&vctIslKDxXgDE*5b=gi2sZXD=BPj9m7f`Rsn& ziQj2;?+JWEgsh2mWR!vmGih$cE+8?HNL(Uc>zf6hv@g@Rd5-`J%igr4Y0j1)Imb!| zBIhyCB>nZHymf58vbXpLLASS*P*!b;r2e=tFIuuI;=u>I=xLVw5eH+UAFcBJ0*}+H zPeX6Jt&bL_TQw9n?)*|RQG6w(|IE_YjvU(TFrM`nP(eX&+x4ryv2ILF7>!PoekUwN^Xu!$r8Sak#aGSaKa zIGsn5uw%Y|(Bq9_X}3gsSS&S!IptFFA6|4LPjNm8&cV(!ia`L$4eh?2_A~hMvK1{?zv?mRoNh8Xw&}(5fBCcT zR`B#*tJ>w>ACJZJE&S3FP46v7sa!F`aXmze&|?i2X~BbWFD|`@C6*QYufT>X)upVP zp7xY1eed<16e~uSYi|YvL4KGlGRdp0Ure~E6Gwy>pDvH6dd9_JPP{%%eQ9qtk0mhb z+B4)Dw7)bn=F2n8=>sU&;ielEt9S8|FYN;4)E0nMM>Cc--9CV>)pe3i$#*4Zx%Wm1 z@grA5n8*J0kGKr(Y@E?xOodRyLvYLAFMq(Y{mvYY{9>wlHbC5Y>~-man$zmVZ}0Hk zJr`d@JsZo^bTYAy=yfB`&wP?J5d&dhXupM$zL;pS$=J7%@!%f(B9pP#jW=Hw&-292xDG%!Cd1jSyXT4`E zVOgWs_{CrDkofVk%fB^MB2KaFNRF^|U%hEohN~u@Q|}F!xVrc8?8()ozE$g47M(_< zZgS}UQJO)f@@1M}4IFMn+1G`LH89E!Umn^y+hBJ$63zb-|w3e{1G;!^gG;VQ(J zOwA8zN|%GedJ~#6<-~3!&W3n&y1dwLzEbvsax33|{7J@fc1>?{w72t5SImcf!kC-A7f*Sz0}32|A|)rF2w{rgp?G+Fw8Jh0fTw#X8&P|7q&0@5$pE(3KTO-GqcIz6d?vlM_x=-#URo{*p+ z=2#C?2#4Gc?qs=cI)G>fV3_--w`B3YYpnfWu1PuuU7})aUiG#t?p>7|P;o>}qeq%l zn{;`lgX?tu-6V2>C+I=e8D(EXfpQ-`?i^2tPFsCfhMF_Wn9-EK<6j%vU>~H`X(s3o zq+#W=aUr8QAro6(c|ApJJO2t6QdEC85$0Q3mZ=%i&+_?F_R6d&G=6pvon_;(>l5dp z?EvpojK>@;PQJgn?>-S>QH>G_aq7)AH4nV`|MO$#o#P6*05$4E`eI|NKc80^AO%3H zg$)ICu_&t_DrOsMzyD^OoY1i?_ug~=O_zI8RDyXMhMSdJv&R8Fj18L`SC93Yb;NOH zA>+BxWq>j*75sMg{$0EfytD*k8*o~LDKt~uz%PKU!$XkB--q?e0@11y%CLK~mt05? zRSv=q@O`fLseyqi_F2|8`Tdr2_4_~&Mk*-fe+H=sJ)WD7laeWZO>OEu(@t$pBBzOP z_VJ6AcIAb~T2qcG?0jal{>3tBO*Qd}@ONV$zoZiS&)Ja8c5pz^{-6Ko@Nu|IO$YeO z4rnGQQIg>Wj(zA&67IeMKT2dgOdL^`v5^TLeLU*(%;L`GEupi{?Woby>Nnny!$I26 z)MVkEVxgOc7$EQgq$wx+g>ooBjwW=^$Afuqd3Nl-<(|eeoo;iTQ$ydwoWPM6el2Y! z=zD$~2=(myr5-RDU|!fXW)i(%s~yD6!SQrlw<{5)wDeb!F6t{1&`r8%v_ES1$j!fG zm=;@Efah5XdRlq@oRd^ERs1I|qF2%2&{Rgu$BV>z1ukG4?EME(&HqaIt>V|}sD_Uf zQ055n*h(nY_Mh9%&l3x7XOg;P;ook=ZRYrGxTSL5k2X%h&mZ<5#`m#giOm5~#rjvWsiku-`8cOdo%t4ac`f=^Y zvjNW|&3>&*=dFfb`zOTJAUTQNn?XSkkRk|Mue zlb66&o22~$82drZfpy_YZc_n3yhZD~cu?Gv%omy)qThMRvLv4@Ci)80Idde5K6HRT z2KUiae`^VZ9c0K~uh+bWR`n8j@F53D>$O!TG2>gO@-Ks%pA&eQG`(Y#bMaXukNlR6 z`IG6zL*Eq)KdjinUZAiC7|?BR8?ki3x|juXOYa&`cm4cclEUbwAVd0fZhK*r@owDc zVrMB;{hld_DHI2`xBt{=rsPsCpQ|9;a_k)m4+WrfGFvrPpX711^g9^X}ou0SYh z6ZoizqLl1p;($^gyp+$KDCL~vZuZylZ5|qL0%#MM&~Lxxl-FOIHc#)aYHjP(Ib@|& zCx?;LDsj&SS_FA71GKd`p);I*ExEpjivA#hP({FTfOtbKKp~PzwW=}4G-;Q zDVtkyE&lYTsU`ze4ER^!DN zxCjoPEF@3z`W|(}p4lqM|EF>S_ncM7`#%rr4_H{|7;(nT1Pj4xE7yn{E@_%GkorQ*52Gf~pb7NP0cq(p;abJLSFaDLh_{ru{Zh(L9VCPFm-zJ0`z^JF%P5l){HI8!2j%*&GxoD( zaX@^b7#5o<-q`fPqxs6E%td$pr%#^_Spv>7UgtyK^MQm`&lj(olahXU(&t-_fHAfU zFot;;j35bu(;s}qR2R<;tfZ_JBt!SmSFc``B7Mz`kz;f{Zxu7e6yiW{dNmfMRAP9x zrVd`&uLWNG`k4@ub0=@GbXj;~MMhS(znr|z818yXTulv#vA9x>M#e(~O09etRRHsq z>F+qxSGuIg8}vC$EhYP^bP}xck7~c^>dD+u>akEPXL`3c=D^I7P^9A{p$~zXLUla} zJ2%oEa}xppcekh5CVErFDApKv)i0J*#vZ4q*(5eNLAjfF3i}Q1m)!<&e2K>uG{N3;l9<7jVo#L&B#Pd3*Fv;%xyYP7*>y z_>KF~5(tZ~iRP!^kp3#w%F1>!yFxx2(}LC(e>E*Xql6o&6@^h`U^$x&PQAH_QI_@s zjKY8ZIT;=N3;JStqPlVTmGXje2^B08wsGZ(;Je7wZWB;1H&j?$95S)K6pDE>W<=v?DBTc7B1`|Qf2ILmFTvwEHY z1w$8riFusAEmOi)$ZP|H&}_YTJpw3n}VD%*tx1KJ9l)HOENX2F})p zpY8}XTBDMc&Epi<6K;D4y@C#!lFF6T=SH8#uhew$5l+0$-rbAhpPkhMPECd;TFUxP zej-*8C!-5D0!|L*4ws6YF{kIMPzVT5S=4>KIoP|+aGNg{oR&1GA32{Dvixel)0IjW z~2-7hU{1wf(cUvs=JAH>-*e6Ra!cEVcDNl-!x9J~eNpj`9E3yeFmGT?M- z^Y`~p6+#!^z{_lkYtJ2Un@Bv^rMaR4SlNW5wU0SiPF?F80L;0e)2Vgk9Jre7H$;S6 z=L$E__nk+Qa^!nn(8TxlXKCjspN~4f$hFI_?LOpmPMBLUM=qNTwoqPxl_m%5Jp0*i zfU+zL4lYxj@tB|1{`hHsF1$xGOHw}INBBB2(*NLbg-bn@+Tzo6RNEyRd`m?s!$X%lLXiMJqm zk6KgH!rzcyAQB0YB*RGl=5s37-fYzSk4?o~g(&}XMb$=rJcMW^%+$4?uuK^*k1w#o zq>N-qx^gfio}LceRK(ee3zZUIj&>Ef)_DxUedp9e^mOk3#(fFs%%&j47^#*cC?iQn5!^goWGd-z9?1u%q{!mO6pk zW|P6&Q-X~l1SHa{(F7l+7c1$S>zAE1(BMA0KiF)$*6-(et|P_DHAi~RGIwc5RGr1F z;IUPVGHEq<1-d{9n3AxwF>I>UG79jjzaMmhJv&6a(x0{5;oQopfvS(pHLKocALR7h zlOKX&Kbn20ig?=8W8OSwEvn2dmz5e-)4cxcPxQ&e5_XzGAzQjucU+-X7xgRp^pVmK zRL0Wx+o{l;KB&11dJ@`t7`{I+m-0R;@G}ywHZ+3_=-;AlXw1wydEreyH8>P^AC?$f zvA23l3%KO}Q!%)V8nk72h+q3ll)RHy6gGFJKzM}uTj`Ofn%jHN5sVc>y?ZmT2dlV< zoh;3^BkZfJW?ZPZw}oymfWuY|#b4f~FqXJ>bGkvxILs2^6L)+{nC`y_P?=S9T!vs42mphWY5jQ_Uc4ap$gof_gOBw7Yv>(V@~+|-Lnl}l7@$Dz!_ z2cpP>is}NiBuY=nCb%cNa#!q`YGYK49{;ap)+>89aAStP7u)7NxY=j2lddE=KZE0M zO&$bk?MlcZtv5!`?8C6mmMzC-i1wXf?P!tvf4=AW6K3y=5$(!~>U2gXY6dS3pUcYk zOJh6i@c?hH8#_F+B3dBS^bCWrf7MjhH~J!BKc7fBvObDI#(NCAI?YOEjfOPYrGzqc zj9AmyM4tftSsBTkYBA7ExhG<4OwvOk&e||F?3MBhtY0!;ElV&CyL7!P-`+05TGQk% zA=Am|^23tat7R~%o^JVx4Q&+^xU?f9(3yUNPYKD^^6E9>+j7iV!Ta)Tul`_Bs40OG z7FYL5f{`9 z4ws*9rm=-EtoZjY+t>@7uiJ zjI%qcBmz+ONajgtYgaU{DX2_Z?pNPnLY3{y#DZYlK2~I%4LRf zGZ266l%1h?^^MK0od}Sb_srUAa^c(6#1HWq`hfwJZCS{P>-gA$)PO5lXsiI}9)Jf-$-N7sc_`1`h zT7}62lX5iL#nsFs-#ATmPp`7Xs-VmCJ-NPY8!V&ib&_I>7XIec5QPiSJ3ag^O+QrA z>x`HctSAxWg%5!>kF9Pb}uq7kT`;#WOkkMBNt zD=Zx#M;S)H(^zNQV8D~}TM?;am7U`>cAMdnP-Kg56D*!jLnT98Jc)ogcf#_Y!DU?% zcC9$M3g~s|%2k^mG&D5KIKNchV#}N!8ZtsZUyLNSYb;N;=83&seHWz1l#T)6vpg9M zdHWQ)jDD>?eyedY*72dIn&g|-@IQZjSi&|R<~U9~+aXgw6u@5AfD*^MhnSq1Rs3rm z)5V&B%To|O?67layqC-eREe|JxQQkFrx&aG?iTUy-$=RwQZ(oI?@FrEtXzB#+!fKI zllP@CQtWzWz_8<&uJt~;&YmexOuAC=bx>DzntN*)8$vGz(Q5{f)7dCx+y5_|fmt2^ z$m0Astm$J^doZysHR4#*rGLY;;}@Baia)`FPov|RH$8*#L-JwpDc5jed=knS*u7`X z-Xn|X{!BS?xzO>b;%m3Pv6|o30bb0mX=31w{wG!2si~>LqL*{^Ybp5e52NPon}jbB zt=Kn3F)dK@Sea){xC`I@`L6}g`rXj}8gIyIVm7xm*~)BK2eGc@iIorzySG|Iin(~2 zfsiyiEOtAkl67!^5@Pq*mpxe|px##Wj+t1{#@Fc;5>XUeZNAB3Jbpy)du4>Rr+QMt zZ`DOGJ5!b1`L4+~29G{VsS$@-A8^7tuUf+Eti!^z3|i~8Ps1P?E2Q_i6#>tyn{E46 z%xWLE1alI@NSTjUWI#crD~x^%@dxP3ITJVX7DHIJ;DU!g^jMZO`P{4^dJnQBWNli> z0*FZm$%>{EZ$+2*M}v9&5cJ{P))R@SK8ePD+rD5@q2O zl6&C+x+hDvUje24%n`hw^`4C$nD9x3U2SQrCT};R zdp|mZUS=eet`8=d(#2UvR(MDFVQH$2PMPl)`MIb>b6eq0fO8T2>Tp#vr}DSgNa2j(b)Ax1 z!jOcm+s!4n_3(PX!Cn7Y?Mnl`e|DWnNxL1%IwjvTPL=kWJ`*ap(@$y_BTk?>dk z*O^iO{s~dE&YQXF@*|2^umWzOMf6+*$>w^w9Qh0kC(-M4yyX!Vw{}Q>?d{G?+~0?87U8Nm|&Rw<0dPeRYHl( Date: Mon, 11 Nov 2024 20:10:02 +0530 Subject: [PATCH 02/43] Update cicd.md --- cicd.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cicd.md b/cicd.md index 2cc5d743..58cc5c92 100644 --- a/cicd.md +++ b/cicd.md @@ -15,6 +15,7 @@ - Agents are used for distribute the builds in parallel execution ![Agent](images/agent.png) + - Install Docker and docker-compose:V2 on worker node and add the user who is executing the Jenkins job into the docker group. because we are going to deploy application in worker node itself. - Configure Shared Library - Configure the task effectively in centralized manner. @@ -41,4 +42,4 @@ -#### Nginx and HTTPS [guide](nginx.md) \ No newline at end of file +#### Nginx and HTTPS [guide](nginx.md) From 769050a1c7847bd2f2d4fdc223c64d97a04c1ab9 Mon Sep 17 00:00:00 2001 From: David Date: Tue, 12 Nov 2024 21:58:30 +0530 Subject: [PATCH 03/43] incorporated suggestions from CodeRabbit --- cicd.md | 7 +++++-- nginx.md | 12 +++++++++--- vars/buildImage.groovy | 11 ++++++++++- vars/codeCheckout.groovy | 23 ++++++++++++++++++++--- vars/deploy.groovy | 34 +++++++++++++++++++++++++++++++--- vars/greet.groovy | 2 +- 6 files changed, 76 insertions(+), 13 deletions(-) diff --git a/cicd.md b/cicd.md index 58cc5c92..e92446ae 100644 --- a/cicd.md +++ b/cicd.md @@ -6,10 +6,12 @@ ![Login diagram](images/flow.png) #### Creating CICD pipeline -1. #### Install Jenkins and and acess on port 8080. Login and install Suggested Plugins. +1. #### Install Jenkins and access on port 8080 ```bash http://:8080 ``` + Login and install Suggested Plugins. + 2. #### Jenkins Configuration. - SetUp Agent - Agents are used for distribute the builds in parallel execution @@ -30,7 +32,8 @@ ![Shared-library](images/credentials.png) -3. #### Create a Pipeline, execute Job and Cofigure Weebhook.. +3. #### Create a Pipeline, Execute Job and Configure Webhook + - Configure Pipeline. - Configure job to get pipeline from SCM. ![pipeline](images/pipeline.png) diff --git a/nginx.md b/nginx.md index a33855b8..8d44e2e5 100644 --- a/nginx.md +++ b/nginx.md @@ -10,13 +10,13 @@ sudo apt update ``` - Start nginx - ```bahs + ```bash sudo systemctl start nginx ``` - enable nginx ```bash - sudo systemctl eanble nginx + sudo systemctl enable nginx ``` - Create a new Nginx server block configuration file for our bank-app application @@ -61,7 +61,13 @@ certbot --version ``` ```bash - certbot --nginx -d bank.joakim.online.com + certbot --nginx -d bank.joakim.online ``` +- Verify SSL setup: + 1. Check SSL certificate: `curl -vI https://bank.joakim.online` + + 2. Verify automatic renewal: `sudo certbot renew --dry-run` + + 3. Test HTTPS redirect: `curl -I http://bank.joakim.online` diff --git a/vars/buildImage.groovy b/vars/buildImage.groovy index 848e14e7..5cdae742 100644 --- a/vars/buildImage.groovy +++ b/vars/buildImage.groovy @@ -1,3 +1,12 @@ def call(String imageName){ - sh "docker build -t $imageName ." + if (!imageName.matches('^[a-zA-Z0-9][a-zA-Z0-9_.-]*$')) { + error('Invalid image name. Must contain only alphanumeric characters, dots, dashes, and underscores') + } + + try { + sh "docker info > /dev/null 2>&1" + sh "docker build -t $imageName ." + } catch (Exception e) { + error "Docker daemon is not accessible. Please ensure Docker is running: ${e.message}" + } } diff --git a/vars/codeCheckout.groovy b/vars/codeCheckout.groovy index 866b4944..f99a01c4 100644 --- a/vars/codeCheckout.groovy +++ b/vars/codeCheckout.groovy @@ -1,3 +1,20 @@ -def call(String branch, String url){ - git branch: "$branch", url: "$url" -} +def call(String branch, String url) { + // Validate branch name format + if (!branch.matches('^[\\w.-]+$')) { + error("Invalid branch name format") + } + + // Validate URL format + if (!url.matches('^https?://[\\w.-]+(/[\\w.-]+)*(\\.git)?$')) { + error("Invalid git URL format") + } + + try { + git( + branch: branch, + url: url + ) + } catch (Exception e) { + error("Failed to checkout code: ${e.message}") + } +} \ No newline at end of file diff --git a/vars/deploy.groovy b/vars/deploy.groovy index f96eda9f..8f4f4c6a 100644 --- a/vars/deploy.groovy +++ b/vars/deploy.groovy @@ -1,4 +1,32 @@ -def call(){ - sh "docker compose down" - sh "docker compose up -d" +def call() { + try { + // Validate environment + sh 'docker compose config -q' + + // Graceful shutdown + sh 'docker compose down --timeout 30' + + // Start services + sh 'docker compose up -d' + + // Verify deployment + sh ''' + max_attempts=30 + attempt=1 + while [ $attempt -le $max_attempts ]; do + if docker compose ps | grep -q "healthy"; then + echo "Deployment successful and services are healthy" + exit 0 + fi + echo "Waiting for services to be healthy (attempt $attempt/$max_attempts)..." + sleep 10 + attempt=$((attempt + 1)) + done + echo "Services failed to become healthy within timeout" + exit 1 + ''' + } catch (Exception e) { + echo "Deployment failed: ${e.message}" + throw e + } } diff --git a/vars/greet.groovy b/vars/greet.groovy index cb7074d0..b646b396 100644 --- a/vars/greet.groovy +++ b/vars/greet.groovy @@ -1,3 +1,3 @@ def call(String name){ - echo "hello $name" + echo "hello ${name.replaceAll('[^a-zA-Z0-9\\s-]', '')}" } From a33a762fbd6337ed4ea65cc141410aac0292cdff Mon Sep 17 00:00:00 2001 From: David Date: Sun, 17 Nov 2024 12:57:39 +0530 Subject: [PATCH 04/43] imroved docs --- cicd.md | 82 +++++++++++++++++++++++++++++++++++++--- nginx.md | 78 +++++++++++++++++++++++++++++++++++--- vars/codeCheckout.groovy | 34 ++++++++++++----- vars/deploy.groovy | 51 +++++++++++++++---------- 4 files changed, 205 insertions(+), 40 deletions(-) diff --git a/cicd.md b/cicd.md index e92446ae..140e1696 100644 --- a/cicd.md +++ b/cicd.md @@ -6,10 +6,16 @@ ![Login diagram](images/flow.png) #### Creating CICD pipeline -1. #### Install Jenkins and access on port 8080 + 1. #### Install Jenkins and access on port 8080 ```bash - http://:8080 - ``` + http://:8080 + # Development environment only + http://:8080 + + # Production environment (recommended) + # Access through reverse proxy with HTTPS + https:///jenkins + ``` Login and install Suggested Plugins. 2. #### Jenkins Configuration. @@ -19,6 +25,17 @@ - Install Docker and docker-compose:V2 on worker node and add the user who is executing the Jenkins job into the docker group. because we are going to deploy application in worker node itself. + **Note** Security Considerations for Docker Setup. When configuring Docker for Jenkins: + + - Avoid adding the Jenkins user to the Docker group, as it grants root-level access. + - Use Rootless Docker to run Docker daemons and containers without root privileges. [Official Guide](https://docs.docker.com/engine/security/rootless/). + - Configure sudo for Docker commands: + - Grant specific permissions in the sudoers file. + - Use sudo in your pipeline scripts to execute Docker commands. + - Implement access control mechanisms using Docker authorization plugins or socket proxies. + + + - Configure Shared Library - Configure the task effectively in centralized manner. - Configure shared library for your Jenkins Server Navigate through Dashboard > Manage Jenkins > System, and add Global Trusted Pipeline Libraries. (Modern SCM) @@ -40,9 +57,62 @@ - Build Job and Check - Build the Job - Configure WebHook and poll SCM. - - Webhook: Automatically built when a change is made to the Source code. - - Poll: periodically monitor the repository and if any changes are detected, build Job. + - Webhook Configuration + + 1. **Install GitHub Plugin** + - Go to `Manage Jenkins > Manage Plugins > Available`. + - Search for **GitHub Integration Plugin**, install, and restart Jenkins if needed. + + 2. **Configure Jenkins Job** + - In job configuration, enable **GitHub hook trigger for GITScm polling** under **Build Triggers**. + + 3. **Set Up Webhook in GitHub** + - Go to `Repository > Settings > Webhooks > Add webhook`. + - Configure: + - **Payload URL**: `http://:8080/github-webhook/` + - **Content type**: `application/json` + - **Events**: Select **push** or others as needed. + - (Optional) Add a secret token for security. + + 4. **Test Webhook** + - Push changes to the repo and verify the job is triggered. + - Check webhook status under **Recent Deliveries** in GitHub. + + - SCM Polling Configuration + + 1. **Enable SCM Polling** + - In job configuration, select **Poll SCM** under **Build Triggers**. + - Add a cron expression in **Schedule**: + - Every 5 minutes: `H/5 * * * *` + - Every 15 minutes: `H/15 * * * *` + + 2. **Test Polling** + - Push changes to the repo and wait for the next polling interval. + - Verify in **Polling Log** under the Jenkins job dashboard. + + + - Key Notes + + - **Webhooks vs Polling**: + - Webhooks are immediate and resource-efficient. + - Polling introduces delays and higher resource usage. + + - **Security**: + - Use SSL/TLS for GitHub-Jenkins communication. + - Ensure Jenkins is accessible via the firewall. + + - **Jenkins Pipeline**: + - Ensure `Jenkinsfile` is correctly configured to check out the repo and branch. + + + + + + + + + -#### Nginx and HTTPS [guide](nginx.md) +#### Nginx and HTTPS [guide](nginx.md) \ No newline at end of file diff --git a/nginx.md b/nginx.md index 8d44e2e5..a1da61de 100644 --- a/nginx.md +++ b/nginx.md @@ -26,21 +26,52 @@ - Configure server: add the following code ```bash - server { + server { listen 80; - server_name bank.joakim.online; # Replace with your domain + server_name bank.joakim.online; + + # Security headers + add_header X-Content-Type-Options nosniff; + add_header X-Frame-Options "SAMEORIGIN"; + add_header X-XSS-Protection "1; mode=block"; + add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; + + # Buffer size optimizations + client_body_buffer_size 10K; + client_header_buffer_size 1k; + client_max_body_size 8m; + + # Timeouts + client_body_timeout 12; + client_header_timeout 12; + + # Rate limiting + limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; location / { - proxy_pass http://localhost:8080; # Since Bankapp is running on port 8080 + proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; + + # Apply rate limiting + limit_req zone=one burst=5 nodelay; + + # Error handling + proxy_intercept_errors on; + error_page 500 502 503 504 /50x.html; } location ~ /\. { deny all; } + + # Error page + location = /50x.html { + root /usr/share/nginx/html; + internal; + } } ``` @@ -64,10 +95,45 @@ certbot --nginx -d bank.joakim.online ``` - Verify SSL setup: - 1. Check SSL certificate: `curl -vI https://bank.joakim.online` + 1. Check SSL certificate: + ```bash + curl -vI https://bank.joakim.online + # Success: Look for "SSL certificate verify ok" and "HTTP/2 200" + # If failed: Check certificate path and permissions + ``` + 2. Verify automatic renewal: + ```bash + sudo certbot renew --dry-run + # Success: Look for "Congratulations, all renewals succeeded" + # If failed: Check certbot logs at /var/log/letsencrypt/letsencrypt.log + ``` - 2. Verify automatic renewal: `sudo certbot renew --dry-run` - 3. Test HTTPS redirect: `curl -I http://bank.joakim.online` + 3. Test HTTPS redirect: + ```bash + curl -I http://bank.joakim.online + # Success: Look for "301 Moved Permanently" and "Location: https://" + # If failed: Check Nginx configuration for proper redirect rules + ``` + +- Configure SSL parameters + ```bash + # Add to server block + ssl_protocols TLSv1.2 TLSv1.3; + ssl_prefer_server_ciphers on; + ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; + ssl_session_cache shared:SSL:10m; + ssl_session_timeout 10m; + ``` +- Backup SSL certificates + ```bash + sudo cp -r /etc/letsencrypt/live/bank.joakim.online /ssl/backup + sudo cp -r /etc/letsencrypt/archive/bank.joakim.online /ssl/backup + ``` +- Set up automatic certificate renewal + ```bash + # Add to crontab + echo "0 0 1 * * certbot renew --quiet" | sudo tee -a /etc/crontab + ``` diff --git a/vars/codeCheckout.groovy b/vars/codeCheckout.groovy index f99a01c4..e7cb58f5 100644 --- a/vars/codeCheckout.groovy +++ b/vars/codeCheckout.groovy @@ -1,4 +1,4 @@ -def call(String branch, String url) { +def call(String branch, String url, String credId) { // Validate branch name format if (!branch.matches('^[\\w.-]+$')) { error("Invalid branch name format") @@ -9,12 +9,28 @@ def call(String branch, String url) { error("Invalid git URL format") } - try { - git( - branch: branch, - url: url - ) - } catch (Exception e) { - error("Failed to checkout code: ${e.message}") - } + try { + timeout(time: 5, unit: 'MINUTES') { + def gitConfig = [ + branch: branch, + url: url, + changelog: true, + poll: false + ] + + if (credentialsId) { + gitConfig.credentialsId = credentialsId + } + + git(gitConfig) + } + } catch (Exception e) { + def errorMsg = "Git checkout failed:\n" + + "Branch: ${branch}\n" + + "URL: ${url}\n" + + "Error: ${e.message}" + error(errorMsg) + } + + } \ No newline at end of file diff --git a/vars/deploy.groovy b/vars/deploy.groovy index 8f4f4c6a..7c176a47 100644 --- a/vars/deploy.groovy +++ b/vars/deploy.groovy @@ -3,28 +3,41 @@ def call() { // Validate environment sh 'docker compose config -q' - // Graceful shutdown - sh 'docker compose down --timeout 30' + // Graceful shutdown + sh 'docker compose down --timeout 30' - // Start services - sh 'docker compose up -d' - - // Verify deployment + // Verify cleanup sh ''' - max_attempts=30 - attempt=1 - while [ $attempt -le $max_attempts ]; do - if docker compose ps | grep -q "healthy"; then - echo "Deployment successful and services are healthy" - exit 0 - fi - echo "Waiting for services to be healthy (attempt $attempt/$max_attempts)..." - sleep 10 - attempt=$((attempt + 1)) - done - echo "Services failed to become healthy within timeout" - exit 1 + if docker compose ps -q | grep -q .; then + echo "Failed to stop all containers" + exit 1 + fi ''' + + // Start services + sh 'docker compose up -d' + +// Verify deployment + sh ''' + max_attempts=30 + attempt=1 + while [ $attempt -le $max_attempts ]; do + unhealthy_services=$(docker compose ps --format '{{.Name}}: {{.Status}}' | grep -v "(healthy)") + if [ -z "$unhealthy_services" ]; then + echo "All services are healthy" + exit 0 + else + echo "Unhealthy services detected:" + echo "$unhealthy_services" + fi + echo "Waiting for services to be healthy (attempt $attempt/$max_attempts)..." + sleep 10 + attempt=$((attempt + 1)) + done + echo "Health check timeout after $max_attempts attempts" + docker compose ps + exit 1 + ''' } catch (Exception e) { echo "Deployment failed: ${e.message}" throw e From b5b2c7bd47a6187a1e3450e2d0dee617e578c3c1 Mon Sep 17 00:00:00 2001 From: LondheShubham153 Date: Tue, 19 Nov 2024 20:39:24 +0530 Subject: [PATCH 05/43] added k8s --- k8s/deployment.yml | 46 ++++++++++++++++++++++++++ k8s/ingress.yml | 20 ++++++++++++ k8s/mysqlService.yml | 16 +++++++++ k8s/mysqlStatefulSet.yml | 61 +++++++++++++++++++++++++++++++++++ k8s/namespace.yml | 7 ++++ k8s/persistentVolume.yml | 17 ++++++++++ k8s/persistentVolumeClaim.yml | 15 +++++++++ k8s/service.yml | 17 ++++++++++ 8 files changed, 199 insertions(+) create mode 100644 k8s/deployment.yml create mode 100644 k8s/ingress.yml create mode 100644 k8s/mysqlService.yml create mode 100644 k8s/mysqlStatefulSet.yml create mode 100644 k8s/namespace.yml create mode 100644 k8s/persistentVolume.yml create mode 100644 k8s/persistentVolumeClaim.yml create mode 100644 k8s/service.yml diff --git a/k8s/deployment.yml b/k8s/deployment.yml new file mode 100644 index 00000000..5c2a96ba --- /dev/null +++ b/k8s/deployment.yml @@ -0,0 +1,46 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: bankapp-deployment + namespace: bankapp-namespace + labels: + app: bankapp +spec: + replicas: 1 + selector: + matchLabels: + app: bankapp + template: + metadata: + labels: + app: bankapp + spec: + initContainers: + - name: wait-for-mysql + image: busybox:1.28 + command: ['sh', '-c', 'until nc -z mysql-0.mysql-headless 3306; do echo waiting for mysql; sleep 5; done;'] + containers: + - name: bankapp + image: trainwithshubham/springboot-bankapp:latest + ports: + - containerPort: 8080 + env: + - name: SPRING_DATASOURCE_USERNAME + value: "root" + - name: SPRING_DATASOURCE_URL + value: "jdbc:mysql://mysql-0.mysql-headless.bankapp-namespace.svc.cluster.local:3306/BankDB?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC" + - name: SPRING_DATASOURCE_PASSWORD + value: "Test@123" + livenessProbe: + httpGet: + path: /actuator/health + port: 8080 + initialDelaySeconds: 30 + periodSeconds: 10 + readinessProbe: + httpGet: + path: /actuator/health + port: 8080 + initialDelaySeconds: 10 + periodSeconds: 5 + diff --git a/k8s/ingress.yml b/k8s/ingress.yml new file mode 100644 index 00000000..ae8dca04 --- /dev/null +++ b/k8s/ingress.yml @@ -0,0 +1,20 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: bankapp-ingress + namespace: bankapp-namespace + annotations: + nginx.ingress.kubernetes.io/rewrite-target: / +spec: + rules: + - host: bankapp.local + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: bankapp-service + port: + number: 8080 + diff --git a/k8s/mysqlService.yml b/k8s/mysqlService.yml new file mode 100644 index 00000000..8acf7b63 --- /dev/null +++ b/k8s/mysqlService.yml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Service +metadata: + name: mysql-headless + namespace: bankapp-namespace + labels: + app: mysql +spec: + clusterIP: None + selector: + app: mysql + ports: + - protocol: TCP + port: 3306 + targetPort: 3306 + diff --git a/k8s/mysqlStatefulSet.yml b/k8s/mysqlStatefulSet.yml new file mode 100644 index 00000000..7ec82633 --- /dev/null +++ b/k8s/mysqlStatefulSet.yml @@ -0,0 +1,61 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: mysql + namespace: bankapp-namespace + labels: + app: mysql +spec: + serviceName: mysql-headless + replicas: 1 + selector: + matchLabels: + app: mysql + template: + metadata: + labels: + app: mysql + spec: + containers: + - name: mysql + image: mysql:latest + ports: + - containerPort: 3306 + env: + - name: MYSQL_ROOT_PASSWORD + value: "Test@123" + - name: MYSQL_DATABASE + value: "BankDB" + volumeMounts: + - name: mysql-data + mountPath: /var/lib/mysql + livenessProbe: + exec: + command: + - mysqladmin + - ping + - -h + - localhost + initialDelaySeconds: 30 + periodSeconds: 10 + readinessProbe: + exec: + command: + - mysqladmin + - ping + - -h + - localhost + initialDelaySeconds: 10 + periodSeconds: 5 + volumeClaimTemplates: + - metadata: + name: mysql-data + labels: + app: mysql + spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 5Gi + diff --git a/k8s/namespace.yml b/k8s/namespace.yml new file mode 100644 index 00000000..a1ebb8f9 --- /dev/null +++ b/k8s/namespace.yml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: bankapp-namespace + labels: + name: bankapp-namespace + diff --git a/k8s/persistentVolume.yml b/k8s/persistentVolume.yml new file mode 100644 index 00000000..f147c6b3 --- /dev/null +++ b/k8s/persistentVolume.yml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: bankapp-pv + namespace: bankapp-namespace + labels: + app: bankapp +spec: + capacity: + storage: 5Gi + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + storageClassName: manual + hostPath: + path: "/tmp/bankapp-mysql" # This will be stored on the host machine running KIND + diff --git a/k8s/persistentVolumeClaim.yml b/k8s/persistentVolumeClaim.yml new file mode 100644 index 00000000..0ac8b0a3 --- /dev/null +++ b/k8s/persistentVolumeClaim.yml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: bankapp-pvc + namespace: bankapp-namespace + labels: + app: bankapp +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 5Gi + storageClassName: manual + diff --git a/k8s/service.yml b/k8s/service.yml new file mode 100644 index 00000000..a46714da --- /dev/null +++ b/k8s/service.yml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Service +metadata: + name: bankapp-service + namespace: bankapp-namespace + labels: + app: bankapp +spec: + type: NodePort + selector: + app: bankapp + ports: + - protocol: TCP + port: 8080 + targetPort: 8080 + nodePort: 30080 # Exposes the app on this port of the host + From e04841b354946d50721445e8e150ecd016e24af8 Mon Sep 17 00:00:00 2001 From: LondheShubham153 Date: Tue, 19 Nov 2024 21:03:48 +0530 Subject: [PATCH 06/43] Added secrets and configmaps --- k8s/configMap.yml | 10 ++++++++++ k8s/deployment.yml | 17 +++++++++++++---- k8s/mysqlStatefulSet.yml | 10 ++++++++-- k8s/secrets.yml | 10 ++++++++++ 4 files changed, 41 insertions(+), 6 deletions(-) create mode 100644 k8s/configMap.yml create mode 100644 k8s/secrets.yml diff --git a/k8s/configMap.yml b/k8s/configMap.yml new file mode 100644 index 00000000..653155ca --- /dev/null +++ b/k8s/configMap.yml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: bankapp-config + namespace: bankapp-namespace +data: + MYSQL_DATABASE: BankDB + SPRING_DATASOURCE_URL: jdbc:mysql://mysql-0.mysql-headless.bankapp-namespace.svc.cluster.local:3306/BankDB?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC + SPRING_DATASOURCE_USERNAME: root + diff --git a/k8s/deployment.yml b/k8s/deployment.yml index 5c2a96ba..0e2ab968 100644 --- a/k8s/deployment.yml +++ b/k8s/deployment.yml @@ -25,12 +25,21 @@ spec: ports: - containerPort: 8080 env: - - name: SPRING_DATASOURCE_USERNAME - value: "root" - name: SPRING_DATASOURCE_URL - value: "jdbc:mysql://mysql-0.mysql-headless.bankapp-namespace.svc.cluster.local:3306/BankDB?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC" + valueFrom: + configMapKeyRef: + name: bankapp-config + key: SPRING_DATASOURCE_URL + - name: SPRING_DATASOURCE_USERNAME + valueFrom: + configMapKeyRef: + name: bankapp-config + key: SPRING_DATASOURCE_USERNAME - name: SPRING_DATASOURCE_PASSWORD - value: "Test@123" + valueFrom: + secretKeyRef: + name: mysql-secret + key: SPRING_DATASOURCE_PASSWORD livenessProbe: httpGet: path: /actuator/health diff --git a/k8s/mysqlStatefulSet.yml b/k8s/mysqlStatefulSet.yml index 7ec82633..3b1c80e3 100644 --- a/k8s/mysqlStatefulSet.yml +++ b/k8s/mysqlStatefulSet.yml @@ -23,9 +23,15 @@ spec: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD - value: "Test@123" + valueFrom: + secretKeyRef: + name: mysql-secret + key: MYSQL_ROOT_PASSWORD - name: MYSQL_DATABASE - value: "BankDB" + valueFrom: + configMapKeyRef: + name: bankapp-config + key: MYSQL_DATABASE volumeMounts: - name: mysql-data mountPath: /var/lib/mysql diff --git a/k8s/secrets.yml b/k8s/secrets.yml new file mode 100644 index 00000000..466f15ad --- /dev/null +++ b/k8s/secrets.yml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Secret +metadata: + name: mysql-secret + namespace: bankapp-namespace +type: Opaque +data: + MYSQL_ROOT_PASSWORD: VGVzdEAxMjM= # Base64 for "Test@123" + SPRING_DATASOURCE_PASSWORD: VGVzdEAxMjM= # Base64 for "Test@123" + From bca188970a68a04050eafef2b5a8cb49dff2b1ee Mon Sep 17 00:00:00 2001 From: Shubham Londhe Date: Wed, 20 Nov 2024 00:34:05 +0530 Subject: [PATCH 07/43] Create README.md --- k8s/README.md | 167 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 k8s/README.md diff --git a/k8s/README.md b/k8s/README.md new file mode 100644 index 00000000..f234e547 --- /dev/null +++ b/k8s/README.md @@ -0,0 +1,167 @@ +# SpringBoot-BankApp Deployment on Kubernetes + +This guide explains how to deploy the SpringBoot-BankApp application on a Kubernetes cluster using the provided manifests and configure the NGINX Ingress Controller for routing. + +### Prerequisites + +- Kubernetes Cluster: Ensure you have a running Kubernetes cluster. KIND, Minikube, or any cloud provider will work. +- kubectl: Installed and configured to interact with your cluster. +- Docker Image: Ensure the SpringBoot-BankApp Docker image is available. + +Update the deployment.yml file to reference the correct image and tag. +Deployment Steps + +## 1. Install and Configure the NGINX Ingress Controller + +Deploy the NGINX Ingress Controller: + +```bash + +kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml +``` +Verify that the Ingress Controller pods are running: + +```bash + +kubectl get pods -n ingress-nginx +``` +Edit the ValidatingWebhookConfiguration to ignore validation errors temporarily: + +```bash + +kubectl edit ValidatingWebhookConfiguration ingress-nginx-admission +``` +Update the failurePolicy to Ignore: + +```yaml + +failurePolicy: Ignore +``` + +## 2. Create a Namespace + +Create a dedicated namespace for the application: + +```bash + +kubectl apply -f namespace.yml +``` +## 3. Create ConfigMap + +Store non-sensitive configuration like database names and other environment variables: + +```bash + +kubectl apply -f configMap.yml +``` + +## 4. Create Secrets +Store sensitive data like database credentials securely: + +```bash + +kubectl apply -f secrets.yml +``` + +## 5. Set Up Persistent Storage +Create a PersistentVolume (PV) for MySQL: + +```bash + +kubectl apply -f persistentVolume.yml +``` +Create a PersistentVolumeClaim (PVC) to bind the PV: + +```bash + +kubectl apply -f persistentVolumeClaim.yml +``` + +## 6. Deploy MySQL + +Deploy MySQL as a StatefulSet for persistent database management: + +```bash + +kubectl apply -f mysqlStatefulSet.yml +``` +Expose MySQL via a Kubernetes Service: + +```bash + +kubectl apply -f mysqlService.yml +``` + +## 7. Deploy SpringBoot-BankApp +Deploy the SpringBoot-BankApp using a Deployment: + +```bash + +kubectl apply -f deployment.yml +``` +Expose the application via a Service: + +```bash + +kubectl apply -f service.yml +``` + +## 8. Configure Ingress +Deploy the Ingress resource to route traffic to the SpringBoot-BankApp: + +```bash + +kubectl apply -f ingress.yml +``` + +Forward port 80 from the Ingress Controller to your localhost: + +```bash + +kubectl port-forward --namespace ingress-nginx service/ingress-nginx-controller 80:80 +``` + +Update your /etc/hosts file to point bankapp.local to your localhost: + +```lua + +127.0.0.1 bankapp.local +``` +Access the application in your browser at: + +```arduino + +http://bankapp.local +``` +Verification +Check the status of all resources: + +```bash + +kubectl get all -n bankapp-namespace +``` +Verify the logs of the MySQL and SpringBoot-BankApp pods: + +```bash + +kubectl logs -n bankapp-namespace +``` +Cleaning Up +To remove all resources related to the SpringBoot-BankApp: + +```bash + +kubectl delete namespace bankapp-namespace +kubectl delete -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml +``` +Notes + +Ingress Tweaks: The failurePolicy: Ignore setting in the ValidatingWebhookConfiguration ensures smooth ingress creation in local environments like KIND. + +Scaling: Scale the BankApp deployment if needed: + +```bash + +kubectl scale deployment bankapp-deployment --replicas=3 -n bankapp-namespace +``` +Monitoring: Use tools like Prometheus or kubectl top to monitor resource usage. From d51f97cf0a2928891d3d58a897f165902e81caae Mon Sep 17 00:00:00 2001 From: Shubham Londhe Date: Sat, 23 Nov 2024 00:59:18 +0530 Subject: [PATCH 08/43] Update README.md --- k8s/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/k8s/README.md b/k8s/README.md index f234e547..1005acd5 100644 --- a/k8s/README.md +++ b/k8s/README.md @@ -17,7 +17,7 @@ Deploy the NGINX Ingress Controller: ```bash -kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml +kubectl apply -f https://kind.sigs.k8s.io/examples/ingress/deploy-ingress-nginx.yaml ``` Verify that the Ingress Controller pods are running: From 3b4cc093413667074a72bd5e053e58882bc5adfd Mon Sep 17 00:00:00 2001 From: David Date: Thu, 28 Nov 2024 12:52:53 +0530 Subject: [PATCH 09/43] Created helm chart --- helm/README.md | 49 ++++++++++++++ helm/bankapp/Chart.yaml | 24 +++++++ helm/bankapp/templates/NOTES.txt | 6 ++ helm/bankapp/templates/configMap.yml | 10 +++ helm/bankapp/templates/deployment.yml | 61 +++++++++++++++++ helm/bankapp/templates/hpa.yaml | 19 ++++++ helm/bankapp/templates/ingress.yml | 20 ++++++ helm/bankapp/templates/mysqlService.yml | 15 +++++ helm/bankapp/templates/mysqlStatefulSet.yml | 67 +++++++++++++++++++ helm/bankapp/templates/namespace.yml | 8 +++ helm/bankapp/templates/persistentVolume.yml | 16 +++++ .../templates/persistentVolumeClaim.yml | 15 +++++ helm/bankapp/templates/secrets.yml | 9 +++ helm/bankapp/templates/service.yml | 16 +++++ helm/bankapp/templates/vpa.yaml | 12 ++++ helm/bankapp/values.yaml | 54 +++++++++++++++ 16 files changed, 401 insertions(+) create mode 100644 helm/README.md create mode 100644 helm/bankapp/Chart.yaml create mode 100644 helm/bankapp/templates/NOTES.txt create mode 100644 helm/bankapp/templates/configMap.yml create mode 100644 helm/bankapp/templates/deployment.yml create mode 100644 helm/bankapp/templates/hpa.yaml create mode 100644 helm/bankapp/templates/ingress.yml create mode 100644 helm/bankapp/templates/mysqlService.yml create mode 100644 helm/bankapp/templates/mysqlStatefulSet.yml create mode 100644 helm/bankapp/templates/namespace.yml create mode 100644 helm/bankapp/templates/persistentVolume.yml create mode 100644 helm/bankapp/templates/persistentVolumeClaim.yml create mode 100644 helm/bankapp/templates/secrets.yml create mode 100644 helm/bankapp/templates/service.yml create mode 100644 helm/bankapp/templates/vpa.yaml create mode 100644 helm/bankapp/values.yaml diff --git a/helm/README.md b/helm/README.md new file mode 100644 index 00000000..22814095 --- /dev/null +++ b/helm/README.md @@ -0,0 +1,49 @@ +# HELM + +## Installing Helm +```bash +curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 +chmod 700 get_helm.sh +./get_helm.sh +``` +**NOTE** This Helm chart assumes that you already have installed Ingress Cotroller, Metrics Server and VPA CRD + + +- Ingress Controller + ```bash + helm upgrade --install ingress-nginx ingress-nginx \ + --repo https://kubernetes.github.io/ingress-nginx \ + --namespace ingress-nginx --create-namespace + ``` +- Metrics Server for HPA + ```bash + helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/ + helm upgrade --install metrics-server metrics-server/metrics-server + ``` + ```bash + kubectl edit deployments.apps metrics-server + ## add these two enteries at: spec.template.spec.containers[0].args + # - --kubelet-insecure-tls + # - --kubelet-preferred-address-types=InternalIP,Hostname,ExternalIP + ``` +- VPA Custom Resource definition (CRD). + ```bash + kubectl apply -f https://raw.githubusercontent.com/kubernetes/autoscaler/vpa-release-1.0/vertical-pod-autoscaler/deploy/vpa-v1-crd-gen.yaml + + kubectl apply -f https://raw.githubusercontent.com/kubernetes/autoscaler/vpa-release-1.0/vertical-pod-autoscaler/deploy/vpa-rbac.yaml + ``` + +## Run the SpringBoot Bankapp using helm +Install Bankapp from helm chart. +```bash +helm install bankapp bankapp/ +``` + +You can install it for multiple environments by changing values in `values.yaml` file +```bash +helm install bankapp-dev bankapp/ --set namespace=dev-namespace --set bankapp_svc.nodePort=30081 +``` + +Happy Helming! + + diff --git a/helm/bankapp/Chart.yaml b/helm/bankapp/Chart.yaml new file mode 100644 index 00000000..d8c225e2 --- /dev/null +++ b/helm/bankapp/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v2 +name: bankapp +description: A Helm chart for Kubernetes + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "1.16.0" \ No newline at end of file diff --git a/helm/bankapp/templates/NOTES.txt b/helm/bankapp/templates/NOTES.txt new file mode 100644 index 00000000..664d510d --- /dev/null +++ b/helm/bankapp/templates/NOTES.txt @@ -0,0 +1,6 @@ + +Now you can access Bankapp using NodePort service. + +open browser and hit the URL: HTTP://:{{ default "30080" .Values.bankapp_svc.nodePort}} + +Additionally, you can configure Ingress for better traffic routing diff --git a/helm/bankapp/templates/configMap.yml b/helm/bankapp/templates/configMap.yml new file mode 100644 index 00000000..095e4de5 --- /dev/null +++ b/helm/bankapp/templates/configMap.yml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Values.configmap.name }} + namespace: {{ default "bankapp-namespace" .Values.namespace }} +data: + MYSQL_DATABASE: {{ .Values.configmap.data.MYSQL_DATABASE }} + SPRING_DATASOURCE_URL: jdbc:mysql://{{ .Values.db_statefulset.name }}-0.{{ .Values.db_statefulset.name }}-headless.{{ default "bankapp-namespace" .Values.namespace }}.svc.cluster.local:3306/{{ .Values.configmap.data.MYSQL_DATABASE }}?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC + SPRING_DATASOURCE_USERNAME: {{ .Values.configmap.data.SPRING_DATASOURCE_USERNAME }} + diff --git a/helm/bankapp/templates/deployment.yml b/helm/bankapp/templates/deployment.yml new file mode 100644 index 00000000..9501ac23 --- /dev/null +++ b/helm/bankapp/templates/deployment.yml @@ -0,0 +1,61 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ .Values.app_deployment.name }} + namespace: {{ default "bankapp-namespace" .Values.namespace }} + labels: + app: {{ .Values.app_deployment.name }} +spec: + replicas: 1 + selector: + matchLabels: + app: {{ .Values.app_deployment.name }} + template: + metadata: + labels: + app: {{ .Values.app_deployment.name }} + spec: + initContainers: + - name: "wait-for-{{ .Values.db_statefulset.name }}" + image: busybox:1.28 + command: ['sh', '-c', 'until nc -z {{ .Values.db_statefulset.name }}-0.{{ .Values.db_statefulset.name }}-headless 3306; do echo waiting for mysql; sleep 5; done;'] + containers: + - name: {{ .Values.app_deployment.name }} + image: {{ .Values.image.app }} + ports: + - containerPort: 8080 + env: + - name: SPRING_DATASOURCE_URL + valueFrom: + configMapKeyRef: + name: {{ .Values.configmap.name }} + key: SPRING_DATASOURCE_URL + - name: SPRING_DATASOURCE_USERNAME + valueFrom: + configMapKeyRef: + name: {{ .Values.configmap.name }} + key: SPRING_DATASOURCE_USERNAME + - name: SPRING_DATASOURCE_PASSWORD + valueFrom: + secretKeyRef: + name: mysql-secret + key: SPRING_DATASOURCE_PASSWORD + livenessProbe: + httpGet: + path: /actuator/health + port: 8080 + initialDelaySeconds: 30 + periodSeconds: 10 + readinessProbe: + httpGet: + path: /actuator/health + port: 8080 + initialDelaySeconds: 10 + periodSeconds: 5 + resources: + requests: + memory: {{ .Values.app_deployment.mem_req}} + cpu: {{ .Values.app_deployment.cpu_req}} + limits: + memory: {{ .Values.app_deployment.mem_limit}} + cpu: {{ .Values.app_deployment.cpu_limit}} diff --git a/helm/bankapp/templates/hpa.yaml b/helm/bankapp/templates/hpa.yaml new file mode 100644 index 00000000..44eebe9c --- /dev/null +++ b/helm/bankapp/templates/hpa.yaml @@ -0,0 +1,19 @@ +apiVersion: autoscaling/v2 +kind: HorizontalPodAutoscaler +metadata: + name: "{{ .Values.app_deployment.name }}-hpa" + namespace: {{ default "bankapp-namespace" .Values.namespace }} +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: {{ .Values.app_deployment.name }} + minReplicas: {{ .Values.hpa.min_replica }} + maxReplicas: {{ .Values.hpa.max_replica }} + metrics: + - type: Resource + resource: + name: cpu + target: + type: Utilization + averageUtilization: {{ .Values.hpa.cpu_utilizatoion }} # Average % of CPU utilization diff --git a/helm/bankapp/templates/ingress.yml b/helm/bankapp/templates/ingress.yml new file mode 100644 index 00000000..305f0c22 --- /dev/null +++ b/helm/bankapp/templates/ingress.yml @@ -0,0 +1,20 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: "{{ .Values.app_deployment.name }}-ingress" + namespace: {{ default "bankapp-namespace" .Values.namespace }} + annotations: + nginx.ingress.kubernetes.io/rewrite-target: / +spec: + rules: + - host: bankapp.local # add + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: "{{ .Values.app_deployment.name }}-service" + port: + number: {{ default "8080" .Values.bankapp_svc.port}} + diff --git a/helm/bankapp/templates/mysqlService.yml b/helm/bankapp/templates/mysqlService.yml new file mode 100644 index 00000000..ddb566b6 --- /dev/null +++ b/helm/bankapp/templates/mysqlService.yml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: "{{ .Values.db_statefulset.name }}-headless" + namespace: {{ default "bankapp-namespace" .Values.namespace }} + labels: + app: {{ .Values.db_statefulset.name }} +spec: + clusterIP: None + selector: + app: {{ .Values.db_statefulset.name }} + ports: + - protocol: TCP + port: {{ default "3306" .Values.mysql_svc.port}} + targetPort: {{ default "3306" .Values.mysql_svc.targetPort}} \ No newline at end of file diff --git a/helm/bankapp/templates/mysqlStatefulSet.yml b/helm/bankapp/templates/mysqlStatefulSet.yml new file mode 100644 index 00000000..ad094aa3 --- /dev/null +++ b/helm/bankapp/templates/mysqlStatefulSet.yml @@ -0,0 +1,67 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: {{ .Values.db_statefulset.name }} + namespace: {{ default "bankapp-namespace" .Values.namespace }} + labels: + app: {{ .Values.db_statefulset.name }} +spec: + serviceName: "{{ .Values.db_statefulset.name }}-headless" + replicas: 1 + selector: + matchLabels: + app: {{ .Values.db_statefulset.name }} + template: + metadata: + labels: + app: {{ .Values.db_statefulset.name }} + spec: + containers: + - name: {{ .Values.db_statefulset.name }} + image: {{ .Values.image.db }} + ports: + - containerPort: 3306 + env: + - name: MYSQL_ROOT_PASSWORD + valueFrom: + secretKeyRef: ### CRITICAL + name: mysql-secret ### CRITICAL + key: MYSQL_ROOT_PASSWORD ### CRITICAL + - name: MYSQL_DATABASE + valueFrom: + configMapKeyRef: + name: {{ .Values.configmap.name }} + key: MYSQL_DATABASE + volumeMounts: + - name: "{{ .Values.db_statefulset.name }}-data" + mountPath: /var/lib/mysql + livenessProbe: + exec: + command: + - mysqladmin + - ping + - -h + - localhost + initialDelaySeconds: 30 + periodSeconds: 10 + readinessProbe: + exec: + command: + - mysqladmin + - ping + - -h + - localhost + initialDelaySeconds: 10 + periodSeconds: 5 + volumeClaimTemplates: + - metadata: + name: "{{ .Values.db_statefulset.name }}-data" + labels: + app: {{ .Values.db_statefulset.name }} + spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: {{ .Values.db_statefulset.storage }} + diff --git a/helm/bankapp/templates/namespace.yml b/helm/bankapp/templates/namespace.yml new file mode 100644 index 00000000..fb9e98c3 --- /dev/null +++ b/helm/bankapp/templates/namespace.yml @@ -0,0 +1,8 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: {{ default "bankapp-namespace" .Values.namespace }} + labels: + name: {{ default "bankapp-namespace" .Values.namespace }} + + \ No newline at end of file diff --git a/helm/bankapp/templates/persistentVolume.yml b/helm/bankapp/templates/persistentVolume.yml new file mode 100644 index 00000000..6bd04068 --- /dev/null +++ b/helm/bankapp/templates/persistentVolume.yml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: "{{ .Values.app_deployment.name }}-{{ default "bankapp-namespace" .Values.namespace }}-pv" + namespace: {{ default "bankapp-namespace" .Values.namespace }} + labels: + app: {{ .Values.app_deployment.name }} +spec: + capacity: + storage: {{ .Values.db_statefulset.storage }} + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + storageClassName: manual + hostPath: + path: "/tmp/bankapp-mysql" # This will be stored on the host machine running KIND diff --git a/helm/bankapp/templates/persistentVolumeClaim.yml b/helm/bankapp/templates/persistentVolumeClaim.yml new file mode 100644 index 00000000..758c1e43 --- /dev/null +++ b/helm/bankapp/templates/persistentVolumeClaim.yml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: "{{ .Values.app_deployment.name }}-pvc" + namespace: {{ default "bankapp-namespace" .Values.namespace }} + labels: + app: {{ .Values.app_deployment.name }} +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: {{ .Values.db_statefulset.storage }} + storageClassName: manual + diff --git a/helm/bankapp/templates/secrets.yml b/helm/bankapp/templates/secrets.yml new file mode 100644 index 00000000..bfec7735 --- /dev/null +++ b/helm/bankapp/templates/secrets.yml @@ -0,0 +1,9 @@ +apiVersion: v1 +kind: Secret +metadata: + name: {{ .Values.secret.name }} + namespace: {{ default "bankapp-namespace" .Values.namespace }} +type: Opaque +data: + MYSQL_ROOT_PASSWORD: {{ .Values.secret.data.MYSQL_ROOT_PASSWORD | b64enc | quote }} + SPRING_DATASOURCE_PASSWORD: {{ .Values.secret.data.SPRING_DATASOURCE_PASSWORD | b64enc | quote }} diff --git a/helm/bankapp/templates/service.yml b/helm/bankapp/templates/service.yml new file mode 100644 index 00000000..c1017852 --- /dev/null +++ b/helm/bankapp/templates/service.yml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Service +metadata: + name: "{{ .Values.app_deployment.name }}-service" + namespace: {{ default "bankapp-namespace" .Values.namespace }} + labels: + app: {{ .Values.app_deployment.name }} +spec: + type: NodePort + selector: + app: {{ .Values.app_deployment.name }} + ports: + - protocol: TCP + port: {{ default "8080" .Values.bankapp_svc.port}} + targetPort: {{ default "8080" .Values.bankapp_svc.targetPort}} + nodePort: {{ default "30080" .Values.bankapp_svc.nodePort}} # Exposes the app on this port of the host \ No newline at end of file diff --git a/helm/bankapp/templates/vpa.yaml b/helm/bankapp/templates/vpa.yaml new file mode 100644 index 00000000..e838ba38 --- /dev/null +++ b/helm/bankapp/templates/vpa.yaml @@ -0,0 +1,12 @@ +apiVersion: autoscaling.k8s.io/v1 +kind: VerticalPodAutoscaler +metadata: + name: "{{ .Values.app_deployment.name }}-vpa" + namespace: {{ default "bankapp-namespace" .Values.namespace }} +spec: + targetRef: + apiVersion: apps/v1 + kind: Deployment + name: {{ .Values.app_deployment.name }} + updatePolicy: + updateMode: "Auto" # Options: "Off", "Initial", "Auto" \ No newline at end of file diff --git a/helm/bankapp/values.yaml b/helm/bankapp/values.yaml new file mode 100644 index 00000000..58cf8483 --- /dev/null +++ b/helm/bankapp/values.yaml @@ -0,0 +1,54 @@ +# namespace +namespace: bankapp-namespace + +# name of configmap, database and db user. +configmap: + name: bankapp-config + data: + MYSQL_DATABASE: BankDB + SPRING_DATASOURCE_USERNAME: root + +## name, label and storage size for database +db_statefulset: + name: mysql + storage: 5Gi + +## name and label of app deployment +app_deployment: + name: bankapp + cpu_req: 80m + cpu_limit: 800m + mem_req: 150Mi + mem_limit: 700Mi + +## image repository and tag of app and db. +image: + app: trainwithshubham/springboot-bankapp:latest + db: mysql:latest + +# NodePort svc for bankapp +bankapp_svc: + port: 8080 + targetPort: 8080 + nodePort: 30080 + + +# headless svc configuration for db +mysql_svc: + port: 3306 + targetPort: 3306 + +# HPA minimun and maximum pods and average cpu utilization +hpa: + min_replica: 1 + max_replica: 5 + cpu_utilizatoion: 40 + +# Secret for Database connectivity + +secret: + name: mysql-secret + data: + MYSQL_ROOT_PASSWORD: Test@123 # (Base64 encoded 'Test@123') + SPRING_DATASOURCE_PASSWORD: Test@123 # (Base64 encoded 'Test@123') + From 80d1e82f99f1c269a9e909320015a46276d9e400 Mon Sep 17 00:00:00 2001 From: David Date: Thu, 28 Nov 2024 15:03:01 +0530 Subject: [PATCH 10/43] Added Autoscaling HPA and VPA --- k8s/README.md | 2 ++ k8s/hpa.yaml | 19 ++++++++++++ k8s/hpa_vpa.md | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++ k8s/vpa.yaml | 12 ++++++++ 4 files changed, 115 insertions(+) create mode 100644 k8s/hpa.yaml create mode 100644 k8s/hpa_vpa.md create mode 100644 k8s/vpa.yaml diff --git a/k8s/README.md b/k8s/README.md index 1005acd5..8ded7955 100644 --- a/k8s/README.md +++ b/k8s/README.md @@ -165,3 +165,5 @@ Scaling: Scale the BankApp deployment if needed: kubectl scale deployment bankapp-deployment --replicas=3 -n bankapp-namespace ``` Monitoring: Use tools like Prometheus or kubectl top to monitor resource usage. + +### Configure application to AutoScale [vpa_and_hpa](hpa_vpa.md) diff --git a/k8s/hpa.yaml b/k8s/hpa.yaml new file mode 100644 index 00000000..c8295b1f --- /dev/null +++ b/k8s/hpa.yaml @@ -0,0 +1,19 @@ +apiVersion: autoscaling/v2 +kind: HorizontalPodAutoscaler +metadata: + name: bankapp-hpa + namespace: bankapp-namespace +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: bankapp + minReplicas: 1 + maxReplicas: 5 + metrics: + - type: Resource + resource: + name: cpu + target: + type: Utilization + averageUtilization: 40 # 40% avg cpu utilization diff --git a/k8s/hpa_vpa.md b/k8s/hpa_vpa.md new file mode 100644 index 00000000..07cffde1 --- /dev/null +++ b/k8s/hpa_vpa.md @@ -0,0 +1,82 @@ +## 1. Horizontal Pod Autoscaler + +- Horizontal Pod Autoscaling helps manage traffic coming to your application, by launching new identical pods. +- The Kubernetes Metrics Server collects resource metrics from the kubelet in nodes and exposes those metrics through the Kubernetes API. +- Based on Resource utilization metrics and configuration defined on HPA spec it scale-out (increases the number of identical pods ) and scale-in (decreases the number of identical pods ) your application. + +- To work with HPA you need Metrics Server deployed and configured into your cluster. + +#### Install the Metrics server using following command + +```bash +kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml +``` +#### Edit deployment metrics-server to work without TLS. + +```bash +kubectl edit deployments.apps -n kube-system metrics-server + +# add these two enteries at: spec.template.spec.containers[0].args +# - --kubelet-insecure-tls +# - --kubelet-preferred-address-types=InternalIP,Hostname,ExternalIP + +``` +#### Verify Installation and apply HPA manifest +```bash +kubectl get pods -n kube-system +kubectl top nodes +``` + +```bash +kubectl apply -f hpa.yaml +``` +#### Create HPA, Generate Load and check newly created Pods. + +- Create a pod for generating load and testing + ```bash + kubectl run -i --tty load-generator --image=busybox /bin/sh + + while true; do wget -q -O- http://bankapp-service.default.svc.cluster.local; done + ``` + +#### When utilization of resources exceeds the defined value, hpa will create new pods. +```bash +watch -n2 kubectl get pods -n bankapp-namespace +``` + + + +## 2. Vertical Pod Autoscaler +- It scale-up and scale down the request of resources (CPU, memory) depending on the workload. +- It will set the resource request automatically based on usage for proper scheduling. +- In the case of limits defined in the template of containers, it also manages a ratio between request and limit. +- VPA is installed in k8s using Custom Resource Definition object (CRD). + +#### Install CRD and apply vpa manifest. + +```bash +kubectl apply -f https://raw.githubusercontent.com/kubernetes/autoscaler/vpa-release-1.0/vertical-pod-autoscaler/deploy/vpa-v1-crd-gen.yaml + +kubectl apply -f https://raw.githubusercontent.com/kubernetes/autoscaler/vpa-release-1.0/vertical-pod-autoscaler/deploy/vpa-rbac.yaml +``` + +Apply VPA configution +```bash +kubectl apply -f vpa.yaml +``` + +Generate load to application +```bash +kubectl run -i --tty load-generator --image=busybox /bin/sh + +while true; do wget -q -O- http://bankapp-service.default.svc.cluster.local; done +``` + +Check resource utilization. +```bash +kubectl top nodes + +kubectl describe deployment bankapp-deployment -n bankapp-namespace +``` + +**Note**: To configure Autoscaling resources request, limit must be set diff --git a/k8s/vpa.yaml b/k8s/vpa.yaml new file mode 100644 index 00000000..eff17fbd --- /dev/null +++ b/k8s/vpa.yaml @@ -0,0 +1,12 @@ +apiVersion: autoscaling.k8s.io/v1 +kind: VerticalPodAutoscaler +metadata: + name: bankapp-vpa + namespace: bankapp-namespace +spec: + targetRef: + apiVersion: apps/v1 + kind: Deployment + name: bankapp-deployment + updatePolicy: + updateMode: "Auto" # Options: "Off", "Initial", "Auto" \ No newline at end of file From 07d90f2caf8589a09a32d9737e1e6a5ede7a9455 Mon Sep 17 00:00:00 2001 From: joakim077 <122166749+joakim077@users.noreply.github.com> Date: Fri, 29 Nov 2024 01:22:42 +0530 Subject: [PATCH 11/43] Update hpa_vpa.md --- k8s/hpa_vpa.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/k8s/hpa_vpa.md b/k8s/hpa_vpa.md index 07cffde1..aa665e37 100644 --- a/k8s/hpa_vpa.md +++ b/k8s/hpa_vpa.md @@ -36,7 +36,7 @@ kubectl apply -f hpa.yaml ```bash kubectl run -i --tty load-generator --image=busybox /bin/sh - while true; do wget -q -O- http://bankapp-service.default.svc.cluster.local; done + while true; do wget -q -O- http://bankapp-service.bankapp-namespace.svc.cluster.local; done ``` #### When utilization of resources exceeds the defined value, hpa will create new pods. @@ -69,7 +69,7 @@ Generate load to application ```bash kubectl run -i --tty load-generator --image=busybox /bin/sh -while true; do wget -q -O- http://bankapp-service.default.svc.cluster.local; done +while true; do wget -q -O- http://bankapp-service.bankapp-namespace.svc.cluster.local; done ``` Check resource utilization. From 21fb585f2278c4df0c5abc9422a0f7cd7b0da4a3 Mon Sep 17 00:00:00 2001 From: Madhup Pandey <121779953+DevMadhup@users.noreply.github.com> Date: Wed, 18 Dec 2024 23:36:23 +0530 Subject: [PATCH 12/43] Create README.md --- kubernetes/README.md | 441 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 441 insertions(+) create mode 100644 kubernetes/README.md diff --git a/kubernetes/README.md b/kubernetes/README.md new file mode 100644 index 00000000..7554262f --- /dev/null +++ b/kubernetes/README.md @@ -0,0 +1,441 @@ +# Bank Application - Deployment on Kubernetes + +## Tech stack used in this project: +- GitHub (Code) +- Docker (Containerization) +- Jenkins (CI) +- OWASP (Dependency check) +- SonarQube (Quality) +- Trivy (Filesystem Scan) +- ArgoCD (CD) +- AWS EKS (Kubernetes) +- Helm (Monitoring using grafana and prometheus) + +### Steps to deploy: + +### Pre-requisites: +- root user access +```bash +sudo su +``` +# +> [!Note] +> This project will be implemented on North California region (us-west-1). + +- Create 1 Master machine on AWS (t2.medium) and 29 GB of storage. +# +- Open the below ports in security group +![image](https://github.com/user-attachments/assets/4e5ecd37-fe2e-4e4b-a6ba-14c7b62715a3) + +- Create EKS Cluster on AWS +- IAM user with **access keys and secret access keys** +- AWSCLI should be configured (Setup AWSCLI) + ```bash + curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" + sudo apt install unzip + unzip awscliv2.zip + sudo ./aws/install + aws configure + ``` + +- Install **kubectl**(Setup kubectl ) + ```bash + curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.19.6/2021-01-05/bin/linux/amd64/kubectl + chmod +x ./kubectl + sudo mv ./kubectl /usr/local/bin + kubectl version --short --client + ``` + +- Install **eksctl**(Setup eksctl) + ```bash + curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp + sudo mv /tmp/eksctl /usr/local/bin + eksctl version + ``` + +- Create EKS Cluster + ```bash + eksctl create cluster --name=bankapp \ + --region=us-west-1 \ + --version=1.30 \ + --without-nodegroup + ``` +- Associate IAM OIDC Provider + ```bash + eksctl utils associate-iam-oidc-provider \ + --region us-west-1 \ + --cluster bankapp \ + --approve + ``` +- Create Nodegroup + ```bash + eksctl create nodegroup --cluster=bankapp \ + --region=us-west-1 \ + --name=bankapp \ + --node-type=t2.medium \ + --nodes=2 \ + --nodes-min=2 \ + --nodes-max=2 \ + --node-volume-size=29 \ + --ssh-access \ + --ssh-public-key=eks-nodegroup-key + ``` +> [!Note] +> Make sure the ssh-public-key "eks-nodegroup-key is available in your aws account" +- Install Jenkins +```bash +sudo apt update -y +sudo apt install fontconfig openjdk-17-jre -y + +sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \ + https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key + +echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]" \ + https://pkg.jenkins.io/debian-stable binary/ | sudo tee \ + /etc/apt/sources.list.d/jenkins.list > /dev/null + +sudo apt-get update -y +sudo apt-get install jenkins -y +``` + +- After installing Jenkins, change the default port of jenkins from 8080 to 8081. Because our bankapp application will be running on 8080. + - Open /usr/lib/systemd/system/jenkins.service file and change JENKINS_PORT environment variable +![image](https://github.com/user-attachments/assets/6320ae49-82d4-4ae3-9811-bd6f06778483) + - Reload daemon + ```bash + sudo systemctl daemon-reload + ``` + - Restart Jenkins + ```bash + sudo systemctl restart jenkins + ``` +# + +- Install docker + +```bash +sudo apt install docker.io -y +sudo usermod -aG docker ubuntu && newgrp docker +``` +# +- Install and configure SonarQube +```bash +docker run -itd --name SonarQube-Server -p 9000:9000 sonarqube:lts-community +``` +# +- Install Trivy +```bash +sudo apt-get install wget apt-transport-https gnupg lsb-release -y +wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add - +echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list.d/trivy.list +sudo apt-get update -y +sudo apt-get install trivy -y +``` +# +- Install and Configure ArgoCD + - Create argocd namespace + ```bash + kubectl create namespace argocd + ``` + - Apply argocd manifest + ```bash + kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml + ``` + - Make sure all pods are running in argocd namespace + ```bash + watch kubectl get pods -n argocd + ``` + - Install argocd CLI + ```bash + curl --silent --location -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/v2.4.7/argocd-linux-amd64 + ``` + - Provide executable permission + ```bash + chmod +x /usr/local/bin/argocd + ``` + - Check argocd services + ```bash + kubectl get svc -n argocd + ``` + - Change argocd server's service from ClusterIP to NodePort + ```bash + kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}' + ``` + - Confirm service is patched or not + ```bash + kubectl get svc -n argocd + ``` + - Check the port where ArgoCD server is running and expose it on security groups of a k8s worker node + ![image](https://github.com/user-attachments/assets/a2932e03-ebc7-42a6-9132-82638152197f) + - Access it on browser, click on advance and proceed with + ```bash + : + ``` + ![image](https://github.com/user-attachments/assets/29d9cdbd-5b7c-44b3-bb9b-1d091d042ce3) + ![image](https://github.com/user-attachments/assets/08f4e047-e21c-4241-ba68-f9b719a4a39a) + ![image](https://github.com/user-attachments/assets/1ffa85c3-9055-49b4-aab0-0947b95f0dd2) + - Fetch the initial password of argocd server + ```bash + kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo + ``` + - Username: admin + - Now, go to User Info and update your argocd password +# +## Steps to add email notification +- Go to your Jenkins Master EC2 instance and allow 465 port number for SMTPS +# +- Now, we need to generate an application password from our gmail account to authenticate with jenkins + - Open gmail and go to Manage your Google Account --> Security +> [!Important] +> Make sure 2 step verification must be on + + ![image](https://github.com/user-attachments/assets/5ab9dc9d-dcce-4f9d-9908-01095f1253cb) + + - Search for App password and create a app password for jenkins + ![image](https://github.com/user-attachments/assets/701752da-7703-4685-8f06-fe1f65dd1b9c) + ![image](https://github.com/user-attachments/assets/adc8d8c0-8be4-4319-9042-4115abb5c6fc) + +# +- Once, app password is create and go back to jenkins Manage Jenkins --> Credentials to add username and password for email notification +![image](https://github.com/user-attachments/assets/2a42ec62-87c8-43c8-a034-7be0beb8824e) + +# +- Go back to Manage Jenkins --> System and search for Extended E-mail Notification +![image](https://github.com/user-attachments/assets/bac81e24-bb07-4659-a251-955966feded8) +# +- Scroll down and search for E-mail Notification and setup email notification +> [!Important] +> Enter your gmail password which we copied recently in password field E-mail Notification --> Advance + +![image](https://github.com/user-attachments/assets/14e254fc-1400-457e-b3f4-046404b66950) +![image](https://github.com/user-attachments/assets/7be70b3a-b0dc-415c-838a-b1c6fd87c182) +![image](https://github.com/user-attachments/assets/cffb6e1d-4838-483e-97e0-6851c204ab21) + +# +- Go to Jenkins and click on Manage Jenkins --> Plugins --> Available plugins install the below plugins: + - OWASP + - SonarQube Scanner + - Docker + - Pipeline: Stage View +# +- Configure OWASP, move to Manage Jenkins --> Plugins --> Available pluginsb> +![image](https://github.com/user-attachments/assets/da6a26d3-f742-4ea8-86b7-107b1650a7c2) + +- After OWASP plugin is installed, Now move to Manage jenkins --> Tools +![image](https://github.com/user-attachments/assets/3b8c3f20-202e-4864-b3b6-b48d7a604ee8) +# +- Login to SonarQube server and create the credentials for jenkins to integrate with SonarQube + - Navigate to Administration --> Security --> Users --> Token + ![image](https://github.com/user-attachments/assets/86ad8284-5da6-4048-91fe-ac20c8e4514a) + ![image](https://github.com/user-attachments/assets/6bc671a5-c122-45c0-b1f0-f29999bbf751) + ![image](https://github.com/user-attachments/assets/e748643a-e037-4d4c-a9be-944995979c60) + +# +- Now, go to Manage Jenkins --> credentials and add Sonarqube credentials: +![image](https://github.com/user-attachments/assets/0688e105-2170-4c3f-87a3-128c1a05a0b8) +# +- Go to Manage Jenkins --> Tools and search for SonarQube Scanner installations: +![image](https://github.com/user-attachments/assets/2fdc1e56-f78c-43d2-914a-104ec2c8ea86) +# +- Go to Manage Jenkins --> credentials and add Docker credentials to push updated the updated docker image to dockerhub. +![image](https://github.com/user-attachments/assets/77402c9c-fc2f-4df7-9a06-09f3f4c38751) + +# +- Again, add Github credentials to push updated code from the pipeline: +![image](https://github.com/user-attachments/assets/4d0c1a47-621e-4aa2-a0b1-71927fcdaef4) +> [!Note] +> While adding github credentials add Personal Access Token in the password field. +# +- Go to Manage Jenkins --> System and search for SonarQube installations: +![image](https://github.com/user-attachments/assets/ae866185-cb2b-4e83-825b-a125ec97243a) +# +- Now again, Go to Manage Jenkins --> System and search for Global Trusted Pipeline Libraries:Login to SonarQube server, go to Administration --> Webhook and click on create +![image](https://github.com/user-attachments/assets/16527e72-6691-4fdf-a8d2-83dd27a085cb) +![image](https://github.com/user-attachments/assets/a8b45948-766a-49a4-b779-91ac3ce0443c) +# + +# +- Go to Master Machine and add our own eks cluster to argocd for application deployment using cli + - Login to argoCD from CLI + ```bash + argocd login 52.53.156.187:32738 --username admin + ``` +> [!Tip] +> 52.53.156.187:32738 --> This should be your argocd url + + ![image](https://github.com/user-attachments/assets/7d05e5ca-1a16-4054-a321-b99270ca0bf9) + + - Check how many clusters are available in argocd + ```bash + argocd cluster list + ``` + ![image](https://github.com/user-attachments/assets/76fe7a45-e05c-422d-9652-bdaee02d630f) + - Get your cluster name + ```bash + kubectl config get-contexts + ``` + ![image](https://github.com/user-attachments/assets/c9afca1f-b5a3-4685-ae24-cc206a3e3ef1) + + - Add your cluster to argocd + ```bash + argocd cluster add Madhup@bankapp.us-west-1.eksctl.io --name bankapp-eks-cluster + ``` + > [!Tip] + > Madhup@bankapp.us-west-1.eksctl.io --> This should be your EKS Cluster Name. + + ![image](https://github.com/user-attachments/assets/1061fe66-17ec-47b7-9d2e-371f58d3fd90) + + - Once your cluster is added to argocd, go to argocd console Settings --> Clusters and verify it + ![image](https://github.com/user-attachments/assets/6aebb871-4dea-4e09-955a-a4aa43b8f4ef) + + +# +- Go to Settings --> Repositories and click on Connect repo +![image](https://github.com/user-attachments/assets/cc8728e5-546b-4c46-bd4c-538f4cd6a63d) +![image](https://github.com/user-attachments/assets/e665203d-0ebe-4839-af9e-f5866dce5e1b) +![image](https://github.com/user-attachments/assets/b9b869c3-698b-4303-83cc-9ccec66542a3) + +> [!Note] +> Connection should be successful + +- Create BankApp-CI job +![image](https://github.com/user-attachments/assets/17467b79-3110-470a-87a2-2bbfe197551b) +![image](https://github.com/user-attachments/assets/51d79ab0-e1f4-4c4d-a778-0c28119f5da9) + +- Create BankApp-CD job, same as CI job. +# +- Provide permission to docker socket so that docker build and push command do not fail +```bash +chmod 777 /var/run/docker.sock +``` +![image](https://github.com/user-attachments/assets/e231c62a-7adb-4335-b67e-480758713dbf) + +- Now, go to Applications and click on New App + +![image](https://github.com/user-attachments/assets/d5b08e06-6256-4f46-afdc-fc43a9e44562) + +> [!Important] +> Make sure to click on the Auto-Create Namespace option while creating argocd application + +![image](https://github.com/user-attachments/assets/6a828910-41ba-4f0c-af05-19297321a41b) +![image](https://github.com/user-attachments/assets/a3aa1d22-50ef-4eb1-97fe-9c3ffb504fc3) + +- Congratulations, your application is deployed on AWS EKS Cluster +![image](https://github.com/user-attachments/assets/03f3b69a-d6e0-42ad-992e-11124e7d0898) + +- Open port 30080 on worker node and Access it on browser +```bash +:30080 +``` +- Email Notification +![image](https://github.com/user-attachments/assets/407f94ed-bf67-441a-bd28-881b6b8739b2) + +# +## How to monitor EKS cluster, kubernetes components and workloads using prometheus and grafana via HELM (On Master machine) +-

Install Helm Chart

+```bash +curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 +``` +```bash +chmod 700 get_helm.sh +``` +```bash +./get_helm.sh +``` + +# +- Add Helm Stable Charts for Your Local Client +```bash +helm repo add stable https://charts.helm.sh/stable +``` + +# +- Add Prometheus Helm Repository +```bash +helm repo add prometheus-community https://prometheus-community.github.io/helm-charts +``` + +# +- Create Prometheus Namespace +```bash +kubectl create namespace prometheus +``` +```bash +kubectl get ns +``` + +# +- Install Prometheus using Helm +```bash +helm install stable prometheus-community/kube-prometheus-stack -n prometheus +``` + +# +- Verify prometheus installation +```bash +kubectl get pods -n prometheus +``` + +# +- Check the services file (svc) of the Prometheus +```bash +kubectl get svc -n prometheus +``` + +# +- Expose Prometheus and Grafana to the external world through Node Port +> [!Important] +> change it from Cluster IP to NodePort after changing make sure you save the file and open the assigned nodeport to the service. + +```bash +kubectl edit svc stable-kube-prometheus-sta-prometheus -n prometheus +``` +![image](https://github.com/user-attachments/assets/90f5dc11-23de-457d-bbcb-944da350152e) +![image](https://github.com/user-attachments/assets/ed94f40f-c1f9-4f50-a340-a68594856cc7) + +# +- Verify service +```bash +kubectl get svc -n prometheus +``` + +# +- Now,let’s change the SVC file of the Grafana and expose it to the outer world +```bash +kubectl edit svc stable-grafana -n prometheus +``` +![image](https://github.com/user-attachments/assets/4a2afc1f-deba-48da-831e-49a63e1a8fb6) + +# +- Check grafana service +```bash +kubectl get svc -n prometheus +``` + +# +- Get a password for grafana +```bash +kubectl get secret --namespace prometheus stable-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo +``` +> [!Note] +> Username: admin + +# +- Now, view the Dashboard in Grafana +![image](https://github.com/user-attachments/assets/d2e7ff2f-059d-48c4-92bb-9711943819c4) +![image](https://github.com/user-attachments/assets/647b2b22-cd83-41c3-855d-7c60ae32195f) +![image](https://github.com/user-attachments/assets/cb98a281-a4f5-46af-98eb-afdb7da6b35a) + + +# +## Clean Up +- Delete eks cluster +```bash +eksctl delete cluster --name=bankapp --region=us-west-1 +``` + +# From 31436f9139072ff7249b81e092d484472de3c404 Mon Sep 17 00:00:00 2001 From: Madhup Pandey <121779953+DevMadhup@users.noreply.github.com> Date: Wed, 18 Dec 2024 23:37:00 +0530 Subject: [PATCH 13/43] Delete kubernetes directory --- kubernetes/README.md | 441 ------------------------------------------- 1 file changed, 441 deletions(-) delete mode 100644 kubernetes/README.md diff --git a/kubernetes/README.md b/kubernetes/README.md deleted file mode 100644 index 7554262f..00000000 --- a/kubernetes/README.md +++ /dev/null @@ -1,441 +0,0 @@ -# Bank Application - Deployment on Kubernetes - -## Tech stack used in this project: -- GitHub (Code) -- Docker (Containerization) -- Jenkins (CI) -- OWASP (Dependency check) -- SonarQube (Quality) -- Trivy (Filesystem Scan) -- ArgoCD (CD) -- AWS EKS (Kubernetes) -- Helm (Monitoring using grafana and prometheus) - -### Steps to deploy: - -### Pre-requisites: -- root user access -```bash -sudo su -``` -# -> [!Note] -> This project will be implemented on North California region (us-west-1). - -- Create 1 Master machine on AWS (t2.medium) and 29 GB of storage. -# -- Open the below ports in security group -![image](https://github.com/user-attachments/assets/4e5ecd37-fe2e-4e4b-a6ba-14c7b62715a3) - -- Create EKS Cluster on AWS -- IAM user with **access keys and secret access keys** -- AWSCLI should be configured (Setup AWSCLI) - ```bash - curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" - sudo apt install unzip - unzip awscliv2.zip - sudo ./aws/install - aws configure - ``` - -- Install **kubectl**(Setup kubectl ) - ```bash - curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.19.6/2021-01-05/bin/linux/amd64/kubectl - chmod +x ./kubectl - sudo mv ./kubectl /usr/local/bin - kubectl version --short --client - ``` - -- Install **eksctl**(Setup eksctl) - ```bash - curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp - sudo mv /tmp/eksctl /usr/local/bin - eksctl version - ``` - -- Create EKS Cluster - ```bash - eksctl create cluster --name=bankapp \ - --region=us-west-1 \ - --version=1.30 \ - --without-nodegroup - ``` -- Associate IAM OIDC Provider - ```bash - eksctl utils associate-iam-oidc-provider \ - --region us-west-1 \ - --cluster bankapp \ - --approve - ``` -- Create Nodegroup - ```bash - eksctl create nodegroup --cluster=bankapp \ - --region=us-west-1 \ - --name=bankapp \ - --node-type=t2.medium \ - --nodes=2 \ - --nodes-min=2 \ - --nodes-max=2 \ - --node-volume-size=29 \ - --ssh-access \ - --ssh-public-key=eks-nodegroup-key - ``` -> [!Note] -> Make sure the ssh-public-key "eks-nodegroup-key is available in your aws account" -- Install Jenkins -```bash -sudo apt update -y -sudo apt install fontconfig openjdk-17-jre -y - -sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \ - https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key - -echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]" \ - https://pkg.jenkins.io/debian-stable binary/ | sudo tee \ - /etc/apt/sources.list.d/jenkins.list > /dev/null - -sudo apt-get update -y -sudo apt-get install jenkins -y -``` - -- After installing Jenkins, change the default port of jenkins from 8080 to 8081. Because our bankapp application will be running on 8080. - - Open /usr/lib/systemd/system/jenkins.service file and change JENKINS_PORT environment variable -![image](https://github.com/user-attachments/assets/6320ae49-82d4-4ae3-9811-bd6f06778483) - - Reload daemon - ```bash - sudo systemctl daemon-reload - ``` - - Restart Jenkins - ```bash - sudo systemctl restart jenkins - ``` -# - -- Install docker - -```bash -sudo apt install docker.io -y -sudo usermod -aG docker ubuntu && newgrp docker -``` -# -- Install and configure SonarQube -```bash -docker run -itd --name SonarQube-Server -p 9000:9000 sonarqube:lts-community -``` -# -- Install Trivy -```bash -sudo apt-get install wget apt-transport-https gnupg lsb-release -y -wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add - -echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list.d/trivy.list -sudo apt-get update -y -sudo apt-get install trivy -y -``` -# -- Install and Configure ArgoCD - - Create argocd namespace - ```bash - kubectl create namespace argocd - ``` - - Apply argocd manifest - ```bash - kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml - ``` - - Make sure all pods are running in argocd namespace - ```bash - watch kubectl get pods -n argocd - ``` - - Install argocd CLI - ```bash - curl --silent --location -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/v2.4.7/argocd-linux-amd64 - ``` - - Provide executable permission - ```bash - chmod +x /usr/local/bin/argocd - ``` - - Check argocd services - ```bash - kubectl get svc -n argocd - ``` - - Change argocd server's service from ClusterIP to NodePort - ```bash - kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}' - ``` - - Confirm service is patched or not - ```bash - kubectl get svc -n argocd - ``` - - Check the port where ArgoCD server is running and expose it on security groups of a k8s worker node - ![image](https://github.com/user-attachments/assets/a2932e03-ebc7-42a6-9132-82638152197f) - - Access it on browser, click on advance and proceed with - ```bash - : - ``` - ![image](https://github.com/user-attachments/assets/29d9cdbd-5b7c-44b3-bb9b-1d091d042ce3) - ![image](https://github.com/user-attachments/assets/08f4e047-e21c-4241-ba68-f9b719a4a39a) - ![image](https://github.com/user-attachments/assets/1ffa85c3-9055-49b4-aab0-0947b95f0dd2) - - Fetch the initial password of argocd server - ```bash - kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo - ``` - - Username: admin - - Now, go to User Info and update your argocd password -# -## Steps to add email notification -- Go to your Jenkins Master EC2 instance and allow 465 port number for SMTPS -# -- Now, we need to generate an application password from our gmail account to authenticate with jenkins - - Open gmail and go to Manage your Google Account --> Security -> [!Important] -> Make sure 2 step verification must be on - - ![image](https://github.com/user-attachments/assets/5ab9dc9d-dcce-4f9d-9908-01095f1253cb) - - - Search for App password and create a app password for jenkins - ![image](https://github.com/user-attachments/assets/701752da-7703-4685-8f06-fe1f65dd1b9c) - ![image](https://github.com/user-attachments/assets/adc8d8c0-8be4-4319-9042-4115abb5c6fc) - -# -- Once, app password is create and go back to jenkins Manage Jenkins --> Credentials to add username and password for email notification -![image](https://github.com/user-attachments/assets/2a42ec62-87c8-43c8-a034-7be0beb8824e) - -# -- Go back to Manage Jenkins --> System and search for Extended E-mail Notification -![image](https://github.com/user-attachments/assets/bac81e24-bb07-4659-a251-955966feded8) -# -- Scroll down and search for E-mail Notification and setup email notification -> [!Important] -> Enter your gmail password which we copied recently in password field E-mail Notification --> Advance - -![image](https://github.com/user-attachments/assets/14e254fc-1400-457e-b3f4-046404b66950) -![image](https://github.com/user-attachments/assets/7be70b3a-b0dc-415c-838a-b1c6fd87c182) -![image](https://github.com/user-attachments/assets/cffb6e1d-4838-483e-97e0-6851c204ab21) - -# -- Go to Jenkins and click on Manage Jenkins --> Plugins --> Available plugins install the below plugins: - - OWASP - - SonarQube Scanner - - Docker - - Pipeline: Stage View -# -- Configure OWASP, move to Manage Jenkins --> Plugins --> Available pluginsb> -![image](https://github.com/user-attachments/assets/da6a26d3-f742-4ea8-86b7-107b1650a7c2) - -- After OWASP plugin is installed, Now move to Manage jenkins --> Tools -![image](https://github.com/user-attachments/assets/3b8c3f20-202e-4864-b3b6-b48d7a604ee8) -# -- Login to SonarQube server and create the credentials for jenkins to integrate with SonarQube - - Navigate to Administration --> Security --> Users --> Token - ![image](https://github.com/user-attachments/assets/86ad8284-5da6-4048-91fe-ac20c8e4514a) - ![image](https://github.com/user-attachments/assets/6bc671a5-c122-45c0-b1f0-f29999bbf751) - ![image](https://github.com/user-attachments/assets/e748643a-e037-4d4c-a9be-944995979c60) - -# -- Now, go to Manage Jenkins --> credentials and add Sonarqube credentials: -![image](https://github.com/user-attachments/assets/0688e105-2170-4c3f-87a3-128c1a05a0b8) -# -- Go to Manage Jenkins --> Tools and search for SonarQube Scanner installations: -![image](https://github.com/user-attachments/assets/2fdc1e56-f78c-43d2-914a-104ec2c8ea86) -# -- Go to Manage Jenkins --> credentials and add Docker credentials to push updated the updated docker image to dockerhub. -![image](https://github.com/user-attachments/assets/77402c9c-fc2f-4df7-9a06-09f3f4c38751) - -# -- Again, add Github credentials to push updated code from the pipeline: -![image](https://github.com/user-attachments/assets/4d0c1a47-621e-4aa2-a0b1-71927fcdaef4) -> [!Note] -> While adding github credentials add Personal Access Token in the password field. -# -- Go to Manage Jenkins --> System and search for SonarQube installations: -![image](https://github.com/user-attachments/assets/ae866185-cb2b-4e83-825b-a125ec97243a) -# -- Now again, Go to Manage Jenkins --> System and search for Global Trusted Pipeline Libraries:Login to SonarQube server, go to Administration --> Webhook and click on create -![image](https://github.com/user-attachments/assets/16527e72-6691-4fdf-a8d2-83dd27a085cb) -![image](https://github.com/user-attachments/assets/a8b45948-766a-49a4-b779-91ac3ce0443c) -# - -# -- Go to Master Machine and add our own eks cluster to argocd for application deployment using cli - - Login to argoCD from CLI - ```bash - argocd login 52.53.156.187:32738 --username admin - ``` -> [!Tip] -> 52.53.156.187:32738 --> This should be your argocd url - - ![image](https://github.com/user-attachments/assets/7d05e5ca-1a16-4054-a321-b99270ca0bf9) - - - Check how many clusters are available in argocd - ```bash - argocd cluster list - ``` - ![image](https://github.com/user-attachments/assets/76fe7a45-e05c-422d-9652-bdaee02d630f) - - Get your cluster name - ```bash - kubectl config get-contexts - ``` - ![image](https://github.com/user-attachments/assets/c9afca1f-b5a3-4685-ae24-cc206a3e3ef1) - - - Add your cluster to argocd - ```bash - argocd cluster add Madhup@bankapp.us-west-1.eksctl.io --name bankapp-eks-cluster - ``` - > [!Tip] - > Madhup@bankapp.us-west-1.eksctl.io --> This should be your EKS Cluster Name. - - ![image](https://github.com/user-attachments/assets/1061fe66-17ec-47b7-9d2e-371f58d3fd90) - - - Once your cluster is added to argocd, go to argocd console Settings --> Clusters and verify it - ![image](https://github.com/user-attachments/assets/6aebb871-4dea-4e09-955a-a4aa43b8f4ef) - - -# -- Go to Settings --> Repositories and click on Connect repo -![image](https://github.com/user-attachments/assets/cc8728e5-546b-4c46-bd4c-538f4cd6a63d) -![image](https://github.com/user-attachments/assets/e665203d-0ebe-4839-af9e-f5866dce5e1b) -![image](https://github.com/user-attachments/assets/b9b869c3-698b-4303-83cc-9ccec66542a3) - -> [!Note] -> Connection should be successful - -- Create BankApp-CI job -![image](https://github.com/user-attachments/assets/17467b79-3110-470a-87a2-2bbfe197551b) -![image](https://github.com/user-attachments/assets/51d79ab0-e1f4-4c4d-a778-0c28119f5da9) - -- Create BankApp-CD job, same as CI job. -# -- Provide permission to docker socket so that docker build and push command do not fail -```bash -chmod 777 /var/run/docker.sock -``` -![image](https://github.com/user-attachments/assets/e231c62a-7adb-4335-b67e-480758713dbf) - -- Now, go to Applications and click on New App - -![image](https://github.com/user-attachments/assets/d5b08e06-6256-4f46-afdc-fc43a9e44562) - -> [!Important] -> Make sure to click on the Auto-Create Namespace option while creating argocd application - -![image](https://github.com/user-attachments/assets/6a828910-41ba-4f0c-af05-19297321a41b) -![image](https://github.com/user-attachments/assets/a3aa1d22-50ef-4eb1-97fe-9c3ffb504fc3) - -- Congratulations, your application is deployed on AWS EKS Cluster -![image](https://github.com/user-attachments/assets/03f3b69a-d6e0-42ad-992e-11124e7d0898) - -- Open port 30080 on worker node and Access it on browser -```bash -:30080 -``` -- Email Notification -![image](https://github.com/user-attachments/assets/407f94ed-bf67-441a-bd28-881b6b8739b2) - -# -## How to monitor EKS cluster, kubernetes components and workloads using prometheus and grafana via HELM (On Master machine) --

Install Helm Chart

-```bash -curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 -``` -```bash -chmod 700 get_helm.sh -``` -```bash -./get_helm.sh -``` - -# -- Add Helm Stable Charts for Your Local Client -```bash -helm repo add stable https://charts.helm.sh/stable -``` - -# -- Add Prometheus Helm Repository -```bash -helm repo add prometheus-community https://prometheus-community.github.io/helm-charts -``` - -# -- Create Prometheus Namespace -```bash -kubectl create namespace prometheus -``` -```bash -kubectl get ns -``` - -# -- Install Prometheus using Helm -```bash -helm install stable prometheus-community/kube-prometheus-stack -n prometheus -``` - -# -- Verify prometheus installation -```bash -kubectl get pods -n prometheus -``` - -# -- Check the services file (svc) of the Prometheus -```bash -kubectl get svc -n prometheus -``` - -# -- Expose Prometheus and Grafana to the external world through Node Port -> [!Important] -> change it from Cluster IP to NodePort after changing make sure you save the file and open the assigned nodeport to the service. - -```bash -kubectl edit svc stable-kube-prometheus-sta-prometheus -n prometheus -``` -![image](https://github.com/user-attachments/assets/90f5dc11-23de-457d-bbcb-944da350152e) -![image](https://github.com/user-attachments/assets/ed94f40f-c1f9-4f50-a340-a68594856cc7) - -# -- Verify service -```bash -kubectl get svc -n prometheus -``` - -# -- Now,let’s change the SVC file of the Grafana and expose it to the outer world -```bash -kubectl edit svc stable-grafana -n prometheus -``` -![image](https://github.com/user-attachments/assets/4a2afc1f-deba-48da-831e-49a63e1a8fb6) - -# -- Check grafana service -```bash -kubectl get svc -n prometheus -``` - -# -- Get a password for grafana -```bash -kubectl get secret --namespace prometheus stable-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo -``` -> [!Note] -> Username: admin - -# -- Now, view the Dashboard in Grafana -![image](https://github.com/user-attachments/assets/d2e7ff2f-059d-48c4-92bb-9711943819c4) -![image](https://github.com/user-attachments/assets/647b2b22-cd83-41c3-855d-7c60ae32195f) -![image](https://github.com/user-attachments/assets/cb98a281-a4f5-46af-98eb-afdb7da6b35a) - - -# -## Clean Up -- Delete eks cluster -```bash -eksctl delete cluster --name=bankapp --region=us-west-1 -``` - -# From 8fdab90f0ad24a3e8afca26797bf15b93d726f6e Mon Sep 17 00:00:00 2001 From: Madhup Pandey <121779953+DevMadhup@users.noreply.github.com> Date: Wed, 18 Dec 2024 23:38:12 +0530 Subject: [PATCH 14/43] Create README-K8S.md --- README-K8S.md | 441 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 441 insertions(+) create mode 100644 README-K8S.md diff --git a/README-K8S.md b/README-K8S.md new file mode 100644 index 00000000..7554262f --- /dev/null +++ b/README-K8S.md @@ -0,0 +1,441 @@ +# Bank Application - Deployment on Kubernetes + +## Tech stack used in this project: +- GitHub (Code) +- Docker (Containerization) +- Jenkins (CI) +- OWASP (Dependency check) +- SonarQube (Quality) +- Trivy (Filesystem Scan) +- ArgoCD (CD) +- AWS EKS (Kubernetes) +- Helm (Monitoring using grafana and prometheus) + +### Steps to deploy: + +### Pre-requisites: +- root user access +```bash +sudo su +``` +# +> [!Note] +> This project will be implemented on North California region (us-west-1). + +- Create 1 Master machine on AWS (t2.medium) and 29 GB of storage. +# +- Open the below ports in security group +![image](https://github.com/user-attachments/assets/4e5ecd37-fe2e-4e4b-a6ba-14c7b62715a3) + +- Create EKS Cluster on AWS +- IAM user with **access keys and secret access keys** +- AWSCLI should be configured (Setup AWSCLI) + ```bash + curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" + sudo apt install unzip + unzip awscliv2.zip + sudo ./aws/install + aws configure + ``` + +- Install **kubectl**(Setup kubectl ) + ```bash + curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.19.6/2021-01-05/bin/linux/amd64/kubectl + chmod +x ./kubectl + sudo mv ./kubectl /usr/local/bin + kubectl version --short --client + ``` + +- Install **eksctl**(Setup eksctl) + ```bash + curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp + sudo mv /tmp/eksctl /usr/local/bin + eksctl version + ``` + +- Create EKS Cluster + ```bash + eksctl create cluster --name=bankapp \ + --region=us-west-1 \ + --version=1.30 \ + --without-nodegroup + ``` +- Associate IAM OIDC Provider + ```bash + eksctl utils associate-iam-oidc-provider \ + --region us-west-1 \ + --cluster bankapp \ + --approve + ``` +- Create Nodegroup + ```bash + eksctl create nodegroup --cluster=bankapp \ + --region=us-west-1 \ + --name=bankapp \ + --node-type=t2.medium \ + --nodes=2 \ + --nodes-min=2 \ + --nodes-max=2 \ + --node-volume-size=29 \ + --ssh-access \ + --ssh-public-key=eks-nodegroup-key + ``` +> [!Note] +> Make sure the ssh-public-key "eks-nodegroup-key is available in your aws account" +- Install Jenkins +```bash +sudo apt update -y +sudo apt install fontconfig openjdk-17-jre -y + +sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \ + https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key + +echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]" \ + https://pkg.jenkins.io/debian-stable binary/ | sudo tee \ + /etc/apt/sources.list.d/jenkins.list > /dev/null + +sudo apt-get update -y +sudo apt-get install jenkins -y +``` + +- After installing Jenkins, change the default port of jenkins from 8080 to 8081. Because our bankapp application will be running on 8080. + - Open /usr/lib/systemd/system/jenkins.service file and change JENKINS_PORT environment variable +![image](https://github.com/user-attachments/assets/6320ae49-82d4-4ae3-9811-bd6f06778483) + - Reload daemon + ```bash + sudo systemctl daemon-reload + ``` + - Restart Jenkins + ```bash + sudo systemctl restart jenkins + ``` +# + +- Install docker + +```bash +sudo apt install docker.io -y +sudo usermod -aG docker ubuntu && newgrp docker +``` +# +- Install and configure SonarQube +```bash +docker run -itd --name SonarQube-Server -p 9000:9000 sonarqube:lts-community +``` +# +- Install Trivy +```bash +sudo apt-get install wget apt-transport-https gnupg lsb-release -y +wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add - +echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list.d/trivy.list +sudo apt-get update -y +sudo apt-get install trivy -y +``` +# +- Install and Configure ArgoCD + - Create argocd namespace + ```bash + kubectl create namespace argocd + ``` + - Apply argocd manifest + ```bash + kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml + ``` + - Make sure all pods are running in argocd namespace + ```bash + watch kubectl get pods -n argocd + ``` + - Install argocd CLI + ```bash + curl --silent --location -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/v2.4.7/argocd-linux-amd64 + ``` + - Provide executable permission + ```bash + chmod +x /usr/local/bin/argocd + ``` + - Check argocd services + ```bash + kubectl get svc -n argocd + ``` + - Change argocd server's service from ClusterIP to NodePort + ```bash + kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}' + ``` + - Confirm service is patched or not + ```bash + kubectl get svc -n argocd + ``` + - Check the port where ArgoCD server is running and expose it on security groups of a k8s worker node + ![image](https://github.com/user-attachments/assets/a2932e03-ebc7-42a6-9132-82638152197f) + - Access it on browser, click on advance and proceed with + ```bash + : + ``` + ![image](https://github.com/user-attachments/assets/29d9cdbd-5b7c-44b3-bb9b-1d091d042ce3) + ![image](https://github.com/user-attachments/assets/08f4e047-e21c-4241-ba68-f9b719a4a39a) + ![image](https://github.com/user-attachments/assets/1ffa85c3-9055-49b4-aab0-0947b95f0dd2) + - Fetch the initial password of argocd server + ```bash + kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo + ``` + - Username: admin + - Now, go to User Info and update your argocd password +# +## Steps to add email notification +- Go to your Jenkins Master EC2 instance and allow 465 port number for SMTPS +# +- Now, we need to generate an application password from our gmail account to authenticate with jenkins + - Open gmail and go to Manage your Google Account --> Security +> [!Important] +> Make sure 2 step verification must be on + + ![image](https://github.com/user-attachments/assets/5ab9dc9d-dcce-4f9d-9908-01095f1253cb) + + - Search for App password and create a app password for jenkins + ![image](https://github.com/user-attachments/assets/701752da-7703-4685-8f06-fe1f65dd1b9c) + ![image](https://github.com/user-attachments/assets/adc8d8c0-8be4-4319-9042-4115abb5c6fc) + +# +- Once, app password is create and go back to jenkins Manage Jenkins --> Credentials to add username and password for email notification +![image](https://github.com/user-attachments/assets/2a42ec62-87c8-43c8-a034-7be0beb8824e) + +# +- Go back to Manage Jenkins --> System and search for Extended E-mail Notification +![image](https://github.com/user-attachments/assets/bac81e24-bb07-4659-a251-955966feded8) +# +- Scroll down and search for E-mail Notification and setup email notification +> [!Important] +> Enter your gmail password which we copied recently in password field E-mail Notification --> Advance + +![image](https://github.com/user-attachments/assets/14e254fc-1400-457e-b3f4-046404b66950) +![image](https://github.com/user-attachments/assets/7be70b3a-b0dc-415c-838a-b1c6fd87c182) +![image](https://github.com/user-attachments/assets/cffb6e1d-4838-483e-97e0-6851c204ab21) + +# +- Go to Jenkins and click on Manage Jenkins --> Plugins --> Available plugins install the below plugins: + - OWASP + - SonarQube Scanner + - Docker + - Pipeline: Stage View +# +- Configure OWASP, move to Manage Jenkins --> Plugins --> Available pluginsb> +![image](https://github.com/user-attachments/assets/da6a26d3-f742-4ea8-86b7-107b1650a7c2) + +- After OWASP plugin is installed, Now move to Manage jenkins --> Tools +![image](https://github.com/user-attachments/assets/3b8c3f20-202e-4864-b3b6-b48d7a604ee8) +# +- Login to SonarQube server and create the credentials for jenkins to integrate with SonarQube + - Navigate to Administration --> Security --> Users --> Token + ![image](https://github.com/user-attachments/assets/86ad8284-5da6-4048-91fe-ac20c8e4514a) + ![image](https://github.com/user-attachments/assets/6bc671a5-c122-45c0-b1f0-f29999bbf751) + ![image](https://github.com/user-attachments/assets/e748643a-e037-4d4c-a9be-944995979c60) + +# +- Now, go to Manage Jenkins --> credentials and add Sonarqube credentials: +![image](https://github.com/user-attachments/assets/0688e105-2170-4c3f-87a3-128c1a05a0b8) +# +- Go to Manage Jenkins --> Tools and search for SonarQube Scanner installations: +![image](https://github.com/user-attachments/assets/2fdc1e56-f78c-43d2-914a-104ec2c8ea86) +# +- Go to Manage Jenkins --> credentials and add Docker credentials to push updated the updated docker image to dockerhub. +![image](https://github.com/user-attachments/assets/77402c9c-fc2f-4df7-9a06-09f3f4c38751) + +# +- Again, add Github credentials to push updated code from the pipeline: +![image](https://github.com/user-attachments/assets/4d0c1a47-621e-4aa2-a0b1-71927fcdaef4) +> [!Note] +> While adding github credentials add Personal Access Token in the password field. +# +- Go to Manage Jenkins --> System and search for SonarQube installations: +![image](https://github.com/user-attachments/assets/ae866185-cb2b-4e83-825b-a125ec97243a) +# +- Now again, Go to Manage Jenkins --> System and search for Global Trusted Pipeline Libraries:Login to SonarQube server, go to Administration --> Webhook and click on create +![image](https://github.com/user-attachments/assets/16527e72-6691-4fdf-a8d2-83dd27a085cb) +![image](https://github.com/user-attachments/assets/a8b45948-766a-49a4-b779-91ac3ce0443c) +# + +# +- Go to Master Machine and add our own eks cluster to argocd for application deployment using cli + - Login to argoCD from CLI + ```bash + argocd login 52.53.156.187:32738 --username admin + ``` +> [!Tip] +> 52.53.156.187:32738 --> This should be your argocd url + + ![image](https://github.com/user-attachments/assets/7d05e5ca-1a16-4054-a321-b99270ca0bf9) + + - Check how many clusters are available in argocd + ```bash + argocd cluster list + ``` + ![image](https://github.com/user-attachments/assets/76fe7a45-e05c-422d-9652-bdaee02d630f) + - Get your cluster name + ```bash + kubectl config get-contexts + ``` + ![image](https://github.com/user-attachments/assets/c9afca1f-b5a3-4685-ae24-cc206a3e3ef1) + + - Add your cluster to argocd + ```bash + argocd cluster add Madhup@bankapp.us-west-1.eksctl.io --name bankapp-eks-cluster + ``` + > [!Tip] + > Madhup@bankapp.us-west-1.eksctl.io --> This should be your EKS Cluster Name. + + ![image](https://github.com/user-attachments/assets/1061fe66-17ec-47b7-9d2e-371f58d3fd90) + + - Once your cluster is added to argocd, go to argocd console Settings --> Clusters and verify it + ![image](https://github.com/user-attachments/assets/6aebb871-4dea-4e09-955a-a4aa43b8f4ef) + + +# +- Go to Settings --> Repositories and click on Connect repo +![image](https://github.com/user-attachments/assets/cc8728e5-546b-4c46-bd4c-538f4cd6a63d) +![image](https://github.com/user-attachments/assets/e665203d-0ebe-4839-af9e-f5866dce5e1b) +![image](https://github.com/user-attachments/assets/b9b869c3-698b-4303-83cc-9ccec66542a3) + +> [!Note] +> Connection should be successful + +- Create BankApp-CI job +![image](https://github.com/user-attachments/assets/17467b79-3110-470a-87a2-2bbfe197551b) +![image](https://github.com/user-attachments/assets/51d79ab0-e1f4-4c4d-a778-0c28119f5da9) + +- Create BankApp-CD job, same as CI job. +# +- Provide permission to docker socket so that docker build and push command do not fail +```bash +chmod 777 /var/run/docker.sock +``` +![image](https://github.com/user-attachments/assets/e231c62a-7adb-4335-b67e-480758713dbf) + +- Now, go to Applications and click on New App + +![image](https://github.com/user-attachments/assets/d5b08e06-6256-4f46-afdc-fc43a9e44562) + +> [!Important] +> Make sure to click on the Auto-Create Namespace option while creating argocd application + +![image](https://github.com/user-attachments/assets/6a828910-41ba-4f0c-af05-19297321a41b) +![image](https://github.com/user-attachments/assets/a3aa1d22-50ef-4eb1-97fe-9c3ffb504fc3) + +- Congratulations, your application is deployed on AWS EKS Cluster +![image](https://github.com/user-attachments/assets/03f3b69a-d6e0-42ad-992e-11124e7d0898) + +- Open port 30080 on worker node and Access it on browser +```bash +:30080 +``` +- Email Notification +![image](https://github.com/user-attachments/assets/407f94ed-bf67-441a-bd28-881b6b8739b2) + +# +## How to monitor EKS cluster, kubernetes components and workloads using prometheus and grafana via HELM (On Master machine) +-

Install Helm Chart

+```bash +curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 +``` +```bash +chmod 700 get_helm.sh +``` +```bash +./get_helm.sh +``` + +# +- Add Helm Stable Charts for Your Local Client +```bash +helm repo add stable https://charts.helm.sh/stable +``` + +# +- Add Prometheus Helm Repository +```bash +helm repo add prometheus-community https://prometheus-community.github.io/helm-charts +``` + +# +- Create Prometheus Namespace +```bash +kubectl create namespace prometheus +``` +```bash +kubectl get ns +``` + +# +- Install Prometheus using Helm +```bash +helm install stable prometheus-community/kube-prometheus-stack -n prometheus +``` + +# +- Verify prometheus installation +```bash +kubectl get pods -n prometheus +``` + +# +- Check the services file (svc) of the Prometheus +```bash +kubectl get svc -n prometheus +``` + +# +- Expose Prometheus and Grafana to the external world through Node Port +> [!Important] +> change it from Cluster IP to NodePort after changing make sure you save the file and open the assigned nodeport to the service. + +```bash +kubectl edit svc stable-kube-prometheus-sta-prometheus -n prometheus +``` +![image](https://github.com/user-attachments/assets/90f5dc11-23de-457d-bbcb-944da350152e) +![image](https://github.com/user-attachments/assets/ed94f40f-c1f9-4f50-a340-a68594856cc7) + +# +- Verify service +```bash +kubectl get svc -n prometheus +``` + +# +- Now,let’s change the SVC file of the Grafana and expose it to the outer world +```bash +kubectl edit svc stable-grafana -n prometheus +``` +![image](https://github.com/user-attachments/assets/4a2afc1f-deba-48da-831e-49a63e1a8fb6) + +# +- Check grafana service +```bash +kubectl get svc -n prometheus +``` + +# +- Get a password for grafana +```bash +kubectl get secret --namespace prometheus stable-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo +``` +> [!Note] +> Username: admin + +# +- Now, view the Dashboard in Grafana +![image](https://github.com/user-attachments/assets/d2e7ff2f-059d-48c4-92bb-9711943819c4) +![image](https://github.com/user-attachments/assets/647b2b22-cd83-41c3-855d-7c60ae32195f) +![image](https://github.com/user-attachments/assets/cb98a281-a4f5-46af-98eb-afdb7da6b35a) + + +# +## Clean Up +- Delete eks cluster +```bash +eksctl delete cluster --name=bankapp --region=us-west-1 +``` + +# From f8833a5a0bb20a04e4be89f29c33da1256ea23cd Mon Sep 17 00:00:00 2001 From: Madhup Pandey <121779953+DevMadhup@users.noreply.github.com> Date: Thu, 19 Dec 2024 13:08:13 +0530 Subject: [PATCH 15/43] Create bankapp-deployment.yaml --- kubernetes/bankapp-deployment.yaml | 43 ++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 kubernetes/bankapp-deployment.yaml diff --git a/kubernetes/bankapp-deployment.yaml b/kubernetes/bankapp-deployment.yaml new file mode 100644 index 00000000..e8333dd2 --- /dev/null +++ b/kubernetes/bankapp-deployment.yaml @@ -0,0 +1,43 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: bankapp-deploy + name: bankapp-deploy + namespace: bankapp-namespace +spec: + replicas: 2 + selector: + matchLabels: + app: bankapp-deploy + template: + metadata: + labels: + app: bankapp-deploy + spec: + containers: + - image: madhupdevops/bankapp:v8 + name: bankapp + ports: + - containerPort: 8080 + env: + - name: SPRING_DATASOURCE_URL + valueFrom: + configMapKeyRef: + name: bankapp-config + key: SPRING_DATASOURCE_URL + - name: SPRING_DATASOURCE_USERNAME + valueFrom: + configMapKeyRef: + name: bankapp-config + key: SPRING_DATASOURCE_USERNAME + - name: MYSQL_DATABASE + valueFrom: + configMapKeyRef: + name: bankapp-config + key: MYSQL_DATABASE + - name: SPRING_DATASOURCE_PASSWORD + valueFrom: + secretKeyRef: + name: mysql-secret + key: SPRING_DATASOURCE_PASSWORD From 6d1921ce3b299094f2e0378808dbd637b5d512f1 Mon Sep 17 00:00:00 2001 From: Madhup Pandey <121779953+DevMadhup@users.noreply.github.com> Date: Thu, 19 Dec 2024 13:08:42 +0530 Subject: [PATCH 16/43] Create bankapp-service.yaml --- kubernetes/bankapp-service.yaml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 kubernetes/bankapp-service.yaml diff --git a/kubernetes/bankapp-service.yaml b/kubernetes/bankapp-service.yaml new file mode 100644 index 00000000..c63175da --- /dev/null +++ b/kubernetes/bankapp-service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: bankapp-service + namespace: bankapp-namespace + labels: + app: bankapp +spec: + selector: + app: bankapp-deploy + ports: + - protocol: TCP + port: 8080 + targetPort: 8080 + From b6e2fca9360281f94cbba56e94c33592d4fd4e47 Mon Sep 17 00:00:00 2001 From: Madhup Pandey <121779953+DevMadhup@users.noreply.github.com> Date: Thu, 19 Dec 2024 13:09:13 +0530 Subject: [PATCH 17/43] Create bankapp-namespace.yaml --- kubernetes/bankapp-namespace.yaml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 kubernetes/bankapp-namespace.yaml diff --git a/kubernetes/bankapp-namespace.yaml b/kubernetes/bankapp-namespace.yaml new file mode 100644 index 00000000..3a4a5170 --- /dev/null +++ b/kubernetes/bankapp-namespace.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: bankapp-namespace + labels: + name: bankapp-namespace From fc58e35199d777786757130d5619d13e05df871a Mon Sep 17 00:00:00 2001 From: Madhup Pandey <121779953+DevMadhup@users.noreply.github.com> Date: Thu, 19 Dec 2024 13:09:42 +0530 Subject: [PATCH 18/43] Create configmap.yaml --- kubernetes/configmap.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 kubernetes/configmap.yaml diff --git a/kubernetes/configmap.yaml b/kubernetes/configmap.yaml new file mode 100644 index 00000000..f2acc025 --- /dev/null +++ b/kubernetes/configmap.yaml @@ -0,0 +1,9 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: bankapp-config + namespace: bankapp-namespace +data: + MYSQL_DATABASE: BankDB + SPRING_DATASOURCE_URL: jdbc:mysql://mysql-svc.bankapp-namespace.svc.cluster.local:3306/BankDB?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC + SPRING_DATASOURCE_USERNAME: root From 9bc856f3f63a7b3646d2bff86ebc20150ee02ba9 Mon Sep 17 00:00:00 2001 From: Madhup Pandey <121779953+DevMadhup@users.noreply.github.com> Date: Thu, 19 Dec 2024 13:10:09 +0530 Subject: [PATCH 19/43] Create mysql-deployment.yaml --- kubernetes/mysql-deployment.yaml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 kubernetes/mysql-deployment.yaml diff --git a/kubernetes/mysql-deployment.yaml b/kubernetes/mysql-deployment.yaml new file mode 100644 index 00000000..876e0c06 --- /dev/null +++ b/kubernetes/mysql-deployment.yaml @@ -0,0 +1,27 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: mysql + namespace: bankapp-namespace + labels: + app: mysql +spec: + replicas: 1 + selector: + matchLabels: + app: mysql + template: + metadata: + labels: + app: mysql + spec: + containers: + - name: mysql + image: mysql:latest + ports: + - containerPort: 3306 + env: + - name: MYSQL_ROOT_PASSWORD + value: Test@123 + - name: MYSQL_DATABASE + value: BankDB From b5795d0c73c718ae9dfb6b3f337040312e27f002 Mon Sep 17 00:00:00 2001 From: Madhup Pandey <121779953+DevMadhup@users.noreply.github.com> Date: Thu, 19 Dec 2024 13:10:41 +0530 Subject: [PATCH 20/43] Create mysql-service.yaml --- kubernetes/mysql-service.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 kubernetes/mysql-service.yaml diff --git a/kubernetes/mysql-service.yaml b/kubernetes/mysql-service.yaml new file mode 100644 index 00000000..607a8ef2 --- /dev/null +++ b/kubernetes/mysql-service.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Service +metadata: + name: mysql-svc + namespace: bankapp-namespace + labels: + app: mysql +spec: + selector: + app: mysql + ports: + - protocol: TCP + port: 3306 + targetPort: 3306 From eebfc2746c463621d6b06103b8582dd6a97be8b4 Mon Sep 17 00:00:00 2001 From: Madhup Pandey <121779953+DevMadhup@users.noreply.github.com> Date: Thu, 19 Dec 2024 13:11:11 +0530 Subject: [PATCH 21/43] Create secrets.yaml --- kubernetes/secrets.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 kubernetes/secrets.yaml diff --git a/kubernetes/secrets.yaml b/kubernetes/secrets.yaml new file mode 100644 index 00000000..c6596fdb --- /dev/null +++ b/kubernetes/secrets.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Secret +metadata: + name: mysql-secret + namespace: bankapp-namespace +type: Opaque +data: + MYSQL_ROOT_PASSWORD: VGVzdEAxMjM= # Base64 for "Test@123" + SPRING_DATASOURCE_PASSWORD: VGVzdEAxMjM= # Base64 for "Test@123" + From 0cdfa03f31cf32afa41688008d7809d4b0917f83 Mon Sep 17 00:00:00 2001 From: Madhup Pandey <121779953+DevMadhup@users.noreply.github.com> Date: Thu, 19 Dec 2024 13:11:42 +0530 Subject: [PATCH 22/43] Create ingress.yaml --- kubernetes/ingress.yaml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 kubernetes/ingress.yaml diff --git a/kubernetes/ingress.yaml b/kubernetes/ingress.yaml new file mode 100644 index 00000000..f5db6066 --- /dev/null +++ b/kubernetes/ingress.yaml @@ -0,0 +1,20 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: bankapp-ingress + namespace: bankapp-namespace + annotations: + nginx.ingress.kubernetes.io/rewrite-target: / +spec: + ingressClassName: nginx + rules: + - host: "junoon.trainwithshubham.com" + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: bankapp-service + port: + number: 8080 From 2e43b74d688bcc0fd356eaa5dcc1feb404023306 Mon Sep 17 00:00:00 2001 From: Madhup Pandey <121779953+DevMadhup@users.noreply.github.com> Date: Thu, 19 Dec 2024 13:13:59 +0530 Subject: [PATCH 23/43] Create Ingress.md --- Ingress.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Ingress.md diff --git a/Ingress.md b/Ingress.md new file mode 100644 index 00000000..87bfa2f9 --- /dev/null +++ b/Ingress.md @@ -0,0 +1,34 @@ +# Nginx Ingress Controller + +1) Apply the Required RBAC (Role-Based Access Control) and Service Account + + - Create a service account for the NGINX Ingress Controller and assign it the necessary permissions. + ```bash + kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml + ``` +This will create all the necessary resources for the NGINX Ingress Controller, including: +- Service accounts +- ClusterRoles and ClusterRoleBindings +- Deployments +- Services +- ConfigMaps +- Ingress Class +--- + +2) Verify Ingress Controller Installation + - After applying the YAML file, verify that the NGINX Ingress Controller is installed and running. + ```bash + kubectl get pods -n ingress-nginx + ``` +This should show the ingress-nginx-controller pods running. + +--- + +3) Expose the NGINX Ingress Controller (Optional) + - If you want to access the Ingress controller externally (e.g., via LoadBalancer), the ingress-nginx-controller service should be of type LoadBalancer. + +To modify the service type, you can run: +```bash +kubectl patch svc ingress-nginx-controller -n ingress-nginx -p '{"spec": {"type": "LoadBalancer"}}' +``` +This will expose the NGINX Ingress Controller via a LoadBalancer, allowing you to access your applications from outside the cluster. From 8f995fde1774473fdcadf8cf1a20b9103c5f4be0 Mon Sep 17 00:00:00 2001 From: Madhup Pandey <121779953+DevMadhup@users.noreply.github.com> Date: Thu, 19 Dec 2024 13:14:57 +0530 Subject: [PATCH 24/43] Create README.md --- SSL-Encryption/README.md | 81 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 SSL-Encryption/README.md diff --git a/SSL-Encryption/README.md b/SSL-Encryption/README.md new file mode 100644 index 00000000..632eea2e --- /dev/null +++ b/SSL-Encryption/README.md @@ -0,0 +1,81 @@ +## How to convert an application from HTTP to HTTPS + +### Steps: +- Update the system +```bash +sudo apt update +``` +# +- Install Nginx using the following command: +```bash +sudo apt install nginx +``` +# +- Once the installation is complete, start the Nginx service: +```bash +sudo service nginx start +``` +# +- Enable Nginx to Start on Boot +```bash +sudo systemctl enable nginx +``` +# +- Create an application Server Block: + - Create a new Nginx server block configuration file for our bankapp application. You can do this by creating a new file in the /etc/nginx/sites-available/ directory. Let's name it bankapp: +```bash +cd /etc/nginx/sites-available/ +sudo touch bankapp +``` +# +- Add the following code in the /etc/nginx/sites-available/bankapp file: +```bash +sudo vim /etc/nginx/sites-available/bankapp +``` +```bash +server { + listen 80; + server_name junoon.trainwithshubham.com; # Replace with your domain + + location / { + proxy_pass http://localhost:8080; # Replace port with your application port + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location ~ /\. { + deny all; + } +} +``` +# +- Create a symbolic link to the configuration file in the sites-enabled directory: +```bash +sudo ln -s /etc/nginx/sites-available/bankapp /etc/nginx/sites-enabled/ +``` +# +- Test Nginx Configuration: +```bash +sudo nginx -t +``` +Note: If the test is successful, you should see: nginx: configuration file /etc/nginx/nginx.conf test is successful. +# +- Restart Nginx to apply the changes: +```bash +sudo systemctl restart nginx +``` +# +- Open your web browser and navigate to http://junoon.trainwithshubham.com. Replace junoon.trainwithshubham.com with your actual domain. You should now be able to access an application through Nginx. +# +- Now, apply SSL certificate to the Domain. +```bash +sudo apt install python3-certbot-nginx +``` +```bash +certbot --version +``` +```bash +certbot --nginx -d junoon.trainwithshubham.com +``` From c5179d57eea197d7d9fba86b76f966f81b11c9f6 Mon Sep 17 00:00:00 2001 From: Madhup Pandey <121779953+DevMadhup@users.noreply.github.com> Date: Thu, 19 Dec 2024 13:15:47 +0530 Subject: [PATCH 25/43] Update Jenkinsfile --- GitOps/Jenkinsfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/GitOps/Jenkinsfile b/GitOps/Jenkinsfile index 3760609d..24adc56f 100644 --- a/GitOps/Jenkinsfile +++ b/GitOps/Jenkinsfile @@ -35,9 +35,9 @@ pipeline { stage("Update: Kubernetes manifest"){ steps{ script{ - dir('k8s'){ + dir('kubernetes'){ sh """ - sed -i -e s/springboot-bankapp.*/springboot-bankapp:${params.BACKEND_DOCKER_TAG}/g deployment.yml + sed -i -e 's|madhupdevops/bankapp:.*|madhupdevops/bankapp:${params.DOCKER_TAG}|g' bankapp-deployment.yaml """ } } @@ -92,4 +92,4 @@ pipeline { } } } -} \ No newline at end of file +} From 15c969781403e13c2da527a519b3928f0c74b550 Mon Sep 17 00:00:00 2001 From: Madhup Pandey <121779953+DevMadhup@users.noreply.github.com> Date: Thu, 19 Dec 2024 13:23:54 +0530 Subject: [PATCH 26/43] Update Jenkinsfile --- Jenkinsfile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 3ddaedc9..a6997335 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -47,7 +47,7 @@ pipeline { stage("SonarQube: Code Analysis"){ steps{ script{ - sonarqube_analysis("Sonar","BankApp","BankApp") + sonarqube_analysis("Sonar","bankapp","bankapp") } } } @@ -59,11 +59,11 @@ pipeline { } } } - + stage("Docker: Build Images"){ steps{ script{ - docker_build("BankApp","${params.DOCKER_TAG}","madhupdevops") + docker_build("bankapp","${params.DOCKER_TAG}","madhupdevops") } } } @@ -71,7 +71,7 @@ pipeline { stage("Docker: Push to DockerHub"){ steps{ script{ - docker_push("BankApp","${params.DOCKER_TAG}","madhupdevops") + docker_push("bankapp","${params.DOCKER_TAG}","madhupdevops") } } } From 7ee83b1954dc9e72d5e5413a72e4b508bd502333 Mon Sep 17 00:00:00 2001 From: Madhup Pandey <121779953+DevMadhup@users.noreply.github.com> Date: Fri, 20 Dec 2024 18:05:03 +0530 Subject: [PATCH 27/43] Create README.md --- kubernetes/README.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 kubernetes/README.md diff --git a/kubernetes/README.md b/kubernetes/README.md new file mode 100644 index 00000000..87bfa2f9 --- /dev/null +++ b/kubernetes/README.md @@ -0,0 +1,34 @@ +# Nginx Ingress Controller + +1) Apply the Required RBAC (Role-Based Access Control) and Service Account + + - Create a service account for the NGINX Ingress Controller and assign it the necessary permissions. + ```bash + kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml + ``` +This will create all the necessary resources for the NGINX Ingress Controller, including: +- Service accounts +- ClusterRoles and ClusterRoleBindings +- Deployments +- Services +- ConfigMaps +- Ingress Class +--- + +2) Verify Ingress Controller Installation + - After applying the YAML file, verify that the NGINX Ingress Controller is installed and running. + ```bash + kubectl get pods -n ingress-nginx + ``` +This should show the ingress-nginx-controller pods running. + +--- + +3) Expose the NGINX Ingress Controller (Optional) + - If you want to access the Ingress controller externally (e.g., via LoadBalancer), the ingress-nginx-controller service should be of type LoadBalancer. + +To modify the service type, you can run: +```bash +kubectl patch svc ingress-nginx-controller -n ingress-nginx -p '{"spec": {"type": "LoadBalancer"}}' +``` +This will expose the NGINX Ingress Controller via a LoadBalancer, allowing you to access your applications from outside the cluster. From 993b7c365f7319ac7a4fc4da456f043b1940099a Mon Sep 17 00:00:00 2001 From: Madhup Pandey <121779953+DevMadhup@users.noreply.github.com> Date: Fri, 20 Dec 2024 18:14:48 +0530 Subject: [PATCH 28/43] Create persistent-volume-claim.yaml --- kubernetes/persistent-volume-claim.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 kubernetes/persistent-volume-claim.yaml diff --git a/kubernetes/persistent-volume-claim.yaml b/kubernetes/persistent-volume-claim.yaml new file mode 100644 index 00000000..ff23dbd1 --- /dev/null +++ b/kubernetes/persistent-volume-claim.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: mysql-pvc + namespace: bankapp-namespace +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10Gi + storageClassName: standard From 642b7c69185af37924025a354d3c1d512d89966b Mon Sep 17 00:00:00 2001 From: Madhup Pandey <121779953+DevMadhup@users.noreply.github.com> Date: Fri, 20 Dec 2024 18:16:31 +0530 Subject: [PATCH 29/43] Create persistent-volume.yaml --- kubernetes/persistent-volume.yaml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 kubernetes/persistent-volume.yaml diff --git a/kubernetes/persistent-volume.yaml b/kubernetes/persistent-volume.yaml new file mode 100644 index 00000000..efbda4d3 --- /dev/null +++ b/kubernetes/persistent-volume.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: mysql-pv + namespace: bankapp-namespace +spec: + capacity: + storage: 10Gi + volumeMode: Filesystem + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain # Keeps the PV after the PVC is deleted + storageClassName: standard # Make sure this matches your cluster's default storage class + hostPath: + path: /mnt/data/mysql + type: DirectoryOrCreate From 85fa15e07f7550945dda6e224d718260394fda25 Mon Sep 17 00:00:00 2001 From: Madhup Pandey <121779953+DevMadhup@users.noreply.github.com> Date: Fri, 20 Dec 2024 18:17:12 +0530 Subject: [PATCH 30/43] Update mysql-deployment.yaml --- kubernetes/mysql-deployment.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/kubernetes/mysql-deployment.yaml b/kubernetes/mysql-deployment.yaml index 876e0c06..7a91d627 100644 --- a/kubernetes/mysql-deployment.yaml +++ b/kubernetes/mysql-deployment.yaml @@ -25,3 +25,10 @@ spec: value: Test@123 - name: MYSQL_DATABASE value: BankDB + volumeMounts: + - name: mysql-pv-storage + mountPath: /var/lib/mysql + volumes: + - name: mysql-pv-storage + persistentVolumeClaim: + claimName: mysql-pvc From fbcea8a81c3b6a4ba2f933c7c41fd4302928e35d Mon Sep 17 00:00:00 2001 From: Shubham Londhe Date: Sat, 21 Dec 2024 15:45:45 +0530 Subject: [PATCH 31/43] Update README.md --- README.md | 463 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 406 insertions(+), 57 deletions(-) diff --git a/README.md b/README.md index b21647fd..2f49958e 100644 --- a/README.md +++ b/README.md @@ -4,93 +4,442 @@ ![Login diagram](images/login.png) ![Transactions diagram](images/transactions.png) -### PRE-REQUISITES FOR THIS PROJECT: -- AWS Account -- AWS Ubuntu EC2 instance (t2.medium) -- Install Docker -- Install docker compose +## Tech stack used in this project: +- GitHub (Code) +- Docker (Containerization) +- Jenkins (CI) +- OWASP (Dependency check) +- SonarQube (Quality) +- Trivy (Filesystem Scan) +- ArgoCD (CD) +- AWS EKS (Kubernetes) +- Helm (Monitoring using grafana and prometheus) + +### Steps to deploy: + +### Pre-requisites: +- root user access +```bash +sudo su +``` # -### DEPLOYMENT: -| Deployments | Paths | -| -------- | ------- | -| Deployment using Docker and Networking | Click me | -| Deployment using Docker Compose | Click me | -| Deployment using Jenkins on EKS | Click me | -| Deployment using Argocd on EKS| Click me | +> [!Note] +> This project will be implemented on North California region (us-west-1). +- Create 1 Master machine on AWS (t2.medium) and 29 GB of storage. # -### STEPS TO IMPLEMENT THE PROJECT -- **

Deployment using Docker

** - - Clone the repository +- Open the below ports in security group +![image](https://github.com/user-attachments/assets/4e5ecd37-fe2e-4e4b-a6ba-14c7b62715a3) + +- Create EKS Cluster on AWS +- IAM user with **access keys and secret access keys** +- AWSCLI should be configured (Setup AWSCLI) ```bash - git clone -b DevOps https://github.com/DevMadhup/Springboot-BankApp.git + curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" + sudo apt install unzip + unzip awscliv2.zip + sudo ./aws/install + aws configure ``` - # - - Install docker, docker compose and provide neccessary permission + +- Install **kubectl**(Setup kubectl ) ```bash - sudo apt update -y + curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.19.6/2021-01-05/bin/linux/amd64/kubectl + chmod +x ./kubectl + sudo mv ./kubectl /usr/local/bin + kubectl version --short --client + ``` - sudo apt install docker.io docker-compose-v2 -y +- Install **eksctl**(Setup eksctl) + ```bash + curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp + sudo mv /tmp/eksctl /usr/local/bin + eksctl version + ``` + +- Create EKS Cluster + ```bash + eksctl create cluster --name=bankapp \ + --region=us-west-1 \ + --version=1.30 \ + --without-nodegroup + ``` +- Associate IAM OIDC Provider + ```bash + eksctl utils associate-iam-oidc-provider \ + --region us-west-1 \ + --cluster bankapp \ + --approve + ``` +- Create Nodegroup + ```bash + eksctl create nodegroup --cluster=bankapp \ + --region=us-west-1 \ + --name=bankapp \ + --node-type=t2.medium \ + --nodes=2 \ + --nodes-min=2 \ + --nodes-max=2 \ + --node-volume-size=29 \ + --ssh-access \ + --ssh-public-key=eks-nodegroup-key + ``` +> [!Note] +> Make sure the ssh-public-key "eks-nodegroup-key is available in your aws account" +- Install Jenkins +```bash +sudo apt update -y +sudo apt install fontconfig openjdk-17-jre -y - sudo usermod -aG docker $USER && newgrp docker - ``` - # - - Move to the cloned repository +sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \ + https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key + +echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]" \ + https://pkg.jenkins.io/debian-stable binary/ | sudo tee \ + /etc/apt/sources.list.d/jenkins.list > /dev/null + +sudo apt-get update -y +sudo apt-get install jenkins -y +``` + +- After installing Jenkins, change the default port of jenkins from 8080 to 8081. Because our bankapp application will be running on 8080. + - Open /usr/lib/systemd/system/jenkins.service file and change JENKINS_PORT environment variable +![image](https://github.com/user-attachments/assets/6320ae49-82d4-4ae3-9811-bd6f06778483) + - Reload daemon ```bash - cd Springboot-BankApp + sudo systemctl daemon-reload ``` - # - - Build the Dockerfile + - Restart Jenkins ```bash - docker build -t madhupdevops/springboot-bankapp . + sudo systemctl restart jenkins ``` -> [!Important] -> Make sure to change docker build command with your DockerHub username. - # - - Create a docker network +# + +- Install docker + +```bash +sudo apt install docker.io -y +sudo usermod -aG docker ubuntu && newgrp docker +``` +# +- Install and configure SonarQube +```bash +docker run -itd --name SonarQube-Server -p 9000:9000 sonarqube:lts-community +``` +# +- Install Trivy +```bash +sudo apt-get install wget apt-transport-https gnupg lsb-release -y +wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add - +echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list.d/trivy.list +sudo apt-get update -y +sudo apt-get install trivy -y +``` +# +- Install and Configure ArgoCD + - Create argocd namespace + ```bash + kubectl create namespace argocd + ``` + - Apply argocd manifest + ```bash + kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml + ``` + - Make sure all pods are running in argocd namespace + ```bash + watch kubectl get pods -n argocd + ``` + - Install argocd CLI + ```bash + curl --silent --location -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/v2.4.7/argocd-linux-amd64 + ``` + - Provide executable permission ```bash - docker network create bankapp + chmod +x /usr/local/bin/argocd ``` - # - - Run MYSQL container + - Check argocd services ```bash - docker run -itd --name mysql -e MYSQL_ROOT_PASSWORD=Test@123 -e MYSQL_DATABASE=BankDB --network=bankapp mysql + kubectl get svc -n argocd ``` - # - - Run Application container + - Change argocd server's service from ClusterIP to NodePort + ```bash + kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}' + ``` + - Confirm service is patched or not + ```bash + kubectl get svc -n argocd + ``` + - Check the port where ArgoCD server is running and expose it on security groups of a k8s worker node + ![image](https://github.com/user-attachments/assets/a2932e03-ebc7-42a6-9132-82638152197f) + - Access it on browser, click on advance and proceed with + ```bash + : + ``` + ![image](https://github.com/user-attachments/assets/29d9cdbd-5b7c-44b3-bb9b-1d091d042ce3) + ![image](https://github.com/user-attachments/assets/08f4e047-e21c-4241-ba68-f9b719a4a39a) + ![image](https://github.com/user-attachments/assets/1ffa85c3-9055-49b4-aab0-0947b95f0dd2) + - Fetch the initial password of argocd server + ```bash + kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo + ``` + - Username: admin + - Now, go to User Info and update your argocd password +# +## Steps to add email notification +- Go to your Jenkins Master EC2 instance and allow 465 port number for SMTPS +# +- Now, we need to generate an application password from our gmail account to authenticate with jenkins + - Open gmail and go to Manage your Google Account --> Security +> [!Important] +> Make sure 2 step verification must be on + + ![image](https://github.com/user-attachments/assets/5ab9dc9d-dcce-4f9d-9908-01095f1253cb) + + - Search for App password and create a app password for jenkins + ![image](https://github.com/user-attachments/assets/701752da-7703-4685-8f06-fe1f65dd1b9c) + ![image](https://github.com/user-attachments/assets/adc8d8c0-8be4-4319-9042-4115abb5c6fc) + +# +- Once, app password is create and go back to jenkins Manage Jenkins --> Credentials to add username and password for email notification +![image](https://github.com/user-attachments/assets/2a42ec62-87c8-43c8-a034-7be0beb8824e) + +# +- Go back to Manage Jenkins --> System and search for Extended E-mail Notification +![image](https://github.com/user-attachments/assets/bac81e24-bb07-4659-a251-955966feded8) +# +- Scroll down and search for E-mail Notification and setup email notification +> [!Important] +> Enter your gmail password which we copied recently in password field E-mail Notification --> Advance + +![image](https://github.com/user-attachments/assets/14e254fc-1400-457e-b3f4-046404b66950) +![image](https://github.com/user-attachments/assets/7be70b3a-b0dc-415c-838a-b1c6fd87c182) +![image](https://github.com/user-attachments/assets/cffb6e1d-4838-483e-97e0-6851c204ab21) + +# +- Go to Jenkins and click on Manage Jenkins --> Plugins --> Available plugins install the below plugins: + - OWASP + - SonarQube Scanner + - Docker + - Pipeline: Stage View +# +- Configure OWASP, move to Manage Jenkins --> Plugins --> Available pluginsb> +![image](https://github.com/user-attachments/assets/da6a26d3-f742-4ea8-86b7-107b1650a7c2) + +- After OWASP plugin is installed, Now move to Manage jenkins --> Tools +![image](https://github.com/user-attachments/assets/3b8c3f20-202e-4864-b3b6-b48d7a604ee8) +# +- Login to SonarQube server and create the credentials for jenkins to integrate with SonarQube + - Navigate to Administration --> Security --> Users --> Token + ![image](https://github.com/user-attachments/assets/86ad8284-5da6-4048-91fe-ac20c8e4514a) + ![image](https://github.com/user-attachments/assets/6bc671a5-c122-45c0-b1f0-f29999bbf751) + ![image](https://github.com/user-attachments/assets/e748643a-e037-4d4c-a9be-944995979c60) + +# +- Now, go to Manage Jenkins --> credentials and add Sonarqube credentials: +![image](https://github.com/user-attachments/assets/0688e105-2170-4c3f-87a3-128c1a05a0b8) +# +- Go to Manage Jenkins --> Tools and search for SonarQube Scanner installations: +![image](https://github.com/user-attachments/assets/2fdc1e56-f78c-43d2-914a-104ec2c8ea86) +# +- Go to Manage Jenkins --> credentials and add Docker credentials to push updated the updated docker image to dockerhub. +![image](https://github.com/user-attachments/assets/77402c9c-fc2f-4df7-9a06-09f3f4c38751) + +# +- Again, add Github credentials to push updated code from the pipeline: +![image](https://github.com/user-attachments/assets/4d0c1a47-621e-4aa2-a0b1-71927fcdaef4) +> [!Note] +> While adding github credentials add Personal Access Token in the password field. +# +- Go to Manage Jenkins --> System and search for SonarQube installations: +![image](https://github.com/user-attachments/assets/ae866185-cb2b-4e83-825b-a125ec97243a) +# +- Now again, Go to Manage Jenkins --> System and search for Global Trusted Pipeline Libraries:Login to SonarQube server, go to Administration --> Webhook and click on create +![image](https://github.com/user-attachments/assets/16527e72-6691-4fdf-a8d2-83dd27a085cb) +![image](https://github.com/user-attachments/assets/a8b45948-766a-49a4-b779-91ac3ce0443c) +# + +# +- Go to Master Machine and add our own eks cluster to argocd for application deployment using cli + - Login to argoCD from CLI + ```bash + argocd login 52.53.156.187:32738 --username admin + ``` +> [!Tip] +> 52.53.156.187:32738 --> This should be your argocd url + + ![image](https://github.com/user-attachments/assets/7d05e5ca-1a16-4054-a321-b99270ca0bf9) + + - Check how many clusters are available in argocd ```bash - docker run -itd --name BankApp -e SPRING_DATASOURCE_USERNAME="root" -e SPRING_DATASOURCE_URL="jdbc:mysql://mysql:3306/BankDB?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC" -e SPRING_DATASOURCE_PASSWORD="Test@123" --network=bankapp -p 8080:8080 madhupdevops/springboot-bankapp + argocd cluster list ``` - # - - Verify deployment + ![image](https://github.com/user-attachments/assets/76fe7a45-e05c-422d-9652-bdaee02d630f) + - Get your cluster name ```bash - docker ps + kubectl config get-contexts ``` - # - - Open port 8080 of your AWS instance and access your application + ![image](https://github.com/user-attachments/assets/c9afca1f-b5a3-4685-ae24-cc206a3e3ef1) + + - Add your cluster to argocd ```bash - http://:8080 + argocd cluster add Madhup@bankapp.us-west-1.eksctl.io --name bankapp-eks-cluster ``` - ### Congratulations, you have deployed the application using Docker - # -- **

Deployment using Docker compose

** -- Install docker compose + > [!Tip] + > Madhup@bankapp.us-west-1.eksctl.io --> This should be your EKS Cluster Name. + + ![image](https://github.com/user-attachments/assets/1061fe66-17ec-47b7-9d2e-371f58d3fd90) + + - Once your cluster is added to argocd, go to argocd console Settings --> Clusters and verify it + ![image](https://github.com/user-attachments/assets/6aebb871-4dea-4e09-955a-a4aa43b8f4ef) + + +# +- Go to Settings --> Repositories and click on Connect repo +![image](https://github.com/user-attachments/assets/cc8728e5-546b-4c46-bd4c-538f4cd6a63d) +![image](https://github.com/user-attachments/assets/e665203d-0ebe-4839-af9e-f5866dce5e1b) +![image](https://github.com/user-attachments/assets/b9b869c3-698b-4303-83cc-9ccec66542a3) + +> [!Note] +> Connection should be successful + +- Create BankApp-CI job +![image](https://github.com/user-attachments/assets/17467b79-3110-470a-87a2-2bbfe197551b) +![image](https://github.com/user-attachments/assets/51d79ab0-e1f4-4c4d-a778-0c28119f5da9) + +- Create BankApp-CD job, same as CI job. +# +- Provide permission to docker socket so that docker build and push command do not fail +```bash +chmod 777 /var/run/docker.sock +``` +![image](https://github.com/user-attachments/assets/e231c62a-7adb-4335-b67e-480758713dbf) + +- Now, go to Applications and click on New App + +![image](https://github.com/user-attachments/assets/d5b08e06-6256-4f46-afdc-fc43a9e44562) + +> [!Important] +> Make sure to click on the Auto-Create Namespace option while creating argocd application + +![image](https://github.com/user-attachments/assets/6a828910-41ba-4f0c-af05-19297321a41b) +![image](https://github.com/user-attachments/assets/a3aa1d22-50ef-4eb1-97fe-9c3ffb504fc3) + +- Congratulations, your application is deployed on AWS EKS Cluster +![image](https://github.com/user-attachments/assets/03f3b69a-d6e0-42ad-992e-11124e7d0898) + +- Open port 30080 on worker node and Access it on browser +```bash +:30080 +``` +- Email Notification +![image](https://github.com/user-attachments/assets/407f94ed-bf67-441a-bd28-881b6b8739b2) + +# +## How to monitor EKS cluster, kubernetes components and workloads using prometheus and grafana via HELM (On Master machine) +-

Install Helm Chart

+```bash +curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 +``` +```bash +chmod 700 get_helm.sh +``` +```bash +./get_helm.sh +``` + +# +- Add Helm Stable Charts for Your Local Client +```bash +helm repo add stable https://charts.helm.sh/stable +``` + +# +- Add Prometheus Helm Repository +```bash +helm repo add prometheus-community https://prometheus-community.github.io/helm-charts +``` + +# +- Create Prometheus Namespace +```bash +kubectl create namespace prometheus +``` +```bash +kubectl get ns +``` + +# +- Install Prometheus using Helm ```bash -sudo apt update -sudo apt install docker-compose-v2 -y +helm install stable prometheus-community/kube-prometheus-stack -n prometheus ``` + # -- Run docker-compose file present in the root directory of a project +- Verify prometheus installation ```bash -docker compose up -d +kubectl get pods -n prometheus ``` + # -- Access it on port 8080 +- Check the services file (svc) of the Prometheus ```bash - http://:8080 +kubectl get svc -n prometheus ``` + +# +- Expose Prometheus and Grafana to the external world through Node Port > [!Important] -> If you face issues with exiting docker container while running docker compose, run ``` docker compose down``` and then ``` docker compose up -d ```. +> change it from Cluster IP to NodePort after changing make sure you save the file and open the assigned nodeport to the service. + +```bash +kubectl edit svc stable-kube-prometheus-sta-prometheus -n prometheus +``` +![image](https://github.com/user-attachments/assets/90f5dc11-23de-457d-bbcb-944da350152e) +![image](https://github.com/user-attachments/assets/ed94f40f-c1f9-4f50-a340-a68594856cc7) + +# +- Verify service +```bash +kubectl get svc -n prometheus +``` +# +- Now,let’s change the SVC file of the Grafana and expose it to the outer world +```bash +kubectl edit svc stable-grafana -n prometheus +``` +![image](https://github.com/user-attachments/assets/4a2afc1f-deba-48da-831e-49a63e1a8fb6) + +# +- Check grafana service +```bash +kubectl get svc -n prometheus +``` -#### CICD pipeline [guide](cicd.md) +# +- Get a password for grafana +```bash +kubectl get secret --namespace prometheus stable-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo +``` +> [!Note] +> Username: admin + +# +- Now, view the Dashboard in Grafana +![image](https://github.com/user-attachments/assets/d2e7ff2f-059d-48c4-92bb-9711943819c4) +![image](https://github.com/user-attachments/assets/647b2b22-cd83-41c3-855d-7c60ae32195f) +![image](https://github.com/user-attachments/assets/cb98a281-a4f5-46af-98eb-afdb7da6b35a) + + +# +## Clean Up +- Delete eks cluster +```bash +eksctl delete cluster --name=bankapp --region=us-west-1 +``` + +# From 3d4357b6e79812f48636465c932475c9edf6ea2d Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Sat, 21 Dec 2024 11:45:04 +0000 Subject: [PATCH 32/43] Added k8s manifests --- ...deployment.yaml => bankapp-deployment.yml} | 26 ++++++++++++++++--- .../{ingress.yaml => bankapp-ingress.yml} | 10 ++++++- kubernetes/letsencrypt-clusterissuer.yaml | 15 +++++++++++ ...l-deployment.yaml => mysql-deployment.yml} | 14 +++++++--- 4 files changed, 58 insertions(+), 7 deletions(-) rename kubernetes/{bankapp-deployment.yaml => bankapp-deployment.yml} (58%) rename kubernetes/{ingress.yaml => bankapp-ingress.yml} (52%) create mode 100644 kubernetes/letsencrypt-clusterissuer.yaml rename kubernetes/{mysql-deployment.yaml => mysql-deployment.yml} (59%) diff --git a/kubernetes/bankapp-deployment.yaml b/kubernetes/bankapp-deployment.yml similarity index 58% rename from kubernetes/bankapp-deployment.yaml rename to kubernetes/bankapp-deployment.yml index e8333dd2..c2f7cb12 100644 --- a/kubernetes/bankapp-deployment.yaml +++ b/kubernetes/bankapp-deployment.yml @@ -6,7 +6,7 @@ metadata: name: bankapp-deploy namespace: bankapp-namespace spec: - replicas: 2 + replicas: 2 # Keep replicas >= 2 for high availability selector: matchLabels: app: bankapp-deploy @@ -16,8 +16,8 @@ spec: app: bankapp-deploy spec: containers: - - image: madhupdevops/bankapp:v8 - name: bankapp + - name: bankapp + image: trainwithshubham/bankapp-eks:v1 ports: - containerPort: 8080 env: @@ -41,3 +41,23 @@ spec: secretKeyRef: name: mysql-secret key: SPRING_DATASOURCE_PASSWORD + readinessProbe: + httpGet: + path: /actuator/health # Update this based on your app's health endpoint + port: 8080 + initialDelaySeconds: 10 + periodSeconds: 5 + livenessProbe: + httpGet: + path: /actuator/health # Update this based on your app's health endpoint + port: 8080 + initialDelaySeconds: 30 + periodSeconds: 10 + resources: + requests: + memory: "512Mi" + cpu: "250m" + limits: + memory: "1Gi" + cpu: "500m" + diff --git a/kubernetes/ingress.yaml b/kubernetes/bankapp-ingress.yml similarity index 52% rename from kubernetes/ingress.yaml rename to kubernetes/bankapp-ingress.yml index f5db6066..d409c28d 100644 --- a/kubernetes/ingress.yaml +++ b/kubernetes/bankapp-ingress.yml @@ -5,10 +5,17 @@ metadata: namespace: bankapp-namespace annotations: nginx.ingress.kubernetes.io/rewrite-target: / + nginx.ingress.kubernetes.io/proxy-body-size: "50m" + nginx.ingress.kubernetes.io/ssl-redirect: "true" # Force HTTPS + cert-manager.io/cluster-issuer: letsencrypt-prod # Use Let's Encrypt spec: ingressClassName: nginx + tls: + - hosts: + - junoon.trainwithshubham.com + secretName: bankapp-tls-secret # Cert-Manager will manage this rules: - - host: "junoon.trainwithshubham.com" + - host: junoon.trainwithshubham.com http: paths: - path: / @@ -18,3 +25,4 @@ spec: name: bankapp-service port: number: 8080 + diff --git a/kubernetes/letsencrypt-clusterissuer.yaml b/kubernetes/letsencrypt-clusterissuer.yaml new file mode 100644 index 00000000..959db1b9 --- /dev/null +++ b/kubernetes/letsencrypt-clusterissuer.yaml @@ -0,0 +1,15 @@ +apiVersion: cert-manager.io/v1 +kind: ClusterIssuer +metadata: + name: letsencrypt-prod +spec: + acme: + server: https://acme-v02.api.letsencrypt.org/directory + email: trainwithshubham@gmail.com + privateKeySecretRef: + name: letsencrypt-prod-key + solvers: + - http01: + ingress: + class: nginx + diff --git a/kubernetes/mysql-deployment.yaml b/kubernetes/mysql-deployment.yml similarity index 59% rename from kubernetes/mysql-deployment.yaml rename to kubernetes/mysql-deployment.yml index 7a91d627..c9baa53a 100644 --- a/kubernetes/mysql-deployment.yaml +++ b/kubernetes/mysql-deployment.yml @@ -17,18 +17,26 @@ spec: spec: containers: - name: mysql - image: mysql:latest + image: mysql:8.0 # Use a specific, stable version for production ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD - value: Test@123 + valueFrom: + secretKeyRef: + name: mysql-secret + key: MYSQL_ROOT_PASSWORD - name: MYSQL_DATABASE - value: BankDB + valueFrom: + configMapKeyRef: + name: bankapp-config + key: MYSQL_DATABASE volumeMounts: - name: mysql-pv-storage mountPath: /var/lib/mysql + subPath: mysql-data # Optional: Ensure a subdirectory is used for better volume organization volumes: - name: mysql-pv-storage persistentVolumeClaim: claimName: mysql-pvc + From 78b6a39b91c37cc4b43f37e7e9227e2f4927f598 Mon Sep 17 00:00:00 2001 From: Shubham Londhe Date: Sat, 21 Dec 2024 17:34:36 +0530 Subject: [PATCH 33/43] Update README.md --- kubernetes/README.md | 242 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 217 insertions(+), 25 deletions(-) diff --git a/kubernetes/README.md b/kubernetes/README.md index 87bfa2f9..cd8bca39 100644 --- a/kubernetes/README.md +++ b/kubernetes/README.md @@ -1,34 +1,226 @@ -# Nginx Ingress Controller +# End-to-End Setup for Deploying Applications with ArgoCD and EKS -1) Apply the Required RBAC (Role-Based Access Control) and Service Account - - - Create a service account for the NGINX Ingress Controller and assign it the necessary permissions. - ```bash - kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml +This README provides a complete step-by-step guide with all the commands required to set up ArgoCD on an AWS EKS cluster, deploy your applications, and configure GitOps. + +--- + +## **1. Create an EKS Cluster** + +### **Create the Cluster Without a Node Group** +```bash +eksctl create cluster --name=bankapp \ + --region=ap-south-1 \ + --version=1.31 \ + --without-nodegroup +``` + +### **Associate IAM OIDC Provider** +```bash +eksctl utils associate-iam-oidc-provider \ + --region ap-south-1 \ + --cluster bankapp \ + --approve +``` + +### **Create a Node Group** +```bash +eksctl create nodegroup --cluster=bankapp \ + --region=ap-south-1 \ + --name=bankapp \ + --node-type=t2.medium \ + --nodes=2 \ + --nodes-min=2 \ + --nodes-max=2 \ + --node-volume-size=29 \ + --ssh-access \ + --ssh-public-key=k8s-in-one-shot +``` + +--- + +## **2. Deploy ArgoCD** + +### **Create the ArgoCD Namespace** +```bash +kubectl create namespace argocd +``` + +### **Install ArgoCD Using Official Manifests** +```bash +kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml +``` + +### **Verify ArgoCD Pods** +```bash +watch kubectl get pods -n argocd +``` + +### **Install ArgoCD CLI** +```bash +curl --silent --location -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/v2.4.7/argocd-linux-amd64 +chmod +x /usr/local/bin/argocd +argocd version +``` + +### **Change ArgoCD Server Service Type to NodePort** +```bash +kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}' +``` + +### **Verify the NodePort Service** +```bash +kubectl get svc -n argocd +``` + +### **Expose the Port on Security Groups** +- In the AWS Console, update the security group for your EKS worker nodes to allow inbound traffic on the NodePort assigned to the `argocd-server` service. + +### **Access the ArgoCD Web UI** +- Open your browser and navigate to: ``` -This will create all the necessary resources for the NGINX Ingress Controller, including: -- Service accounts -- ClusterRoles and ClusterRoleBindings -- Deployments -- Services -- ConfigMaps -- Ingress Class ---- - -2) Verify Ingress Controller Installation - - After applying the YAML file, verify that the NGINX Ingress Controller is installed and running. - ```bash - kubectl get pods -n ingress-nginx + http://: ``` -This should show the ingress-nginx-controller pods running. --- -3) Expose the NGINX Ingress Controller (Optional) - - If you want to access the Ingress controller externally (e.g., via LoadBalancer), the ingress-nginx-controller service should be of type LoadBalancer. +## **3. Configure ArgoCD for EKS** + +### **Login to ArgoCD Using CLI** +```bash +argocd login : --username admin +``` + +### **Retrieve the Default Admin Password** +```bash +kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 -d +``` + +### **Check Available Clusters in ArgoCD** +```bash +argocd cluster list +``` + +### **Get the EKS Cluster Context** +```bash +kubectl config get-contexts +``` + +### **Add EKS Cluster to ArgoCD** +```bash +argocd cluster add --name bankapp-eks-cluster +``` +- Replace `` with your EKS cluster context name (e.g., `Madhup@bankapp.us-west-1.eksctl.io`). + +--- + +## **4. Deploy Applications Using ArgoCD** + +### **Prepare Kubernetes Manifests in a Git Repository** +- Organize your manifests (e.g., `namespace.yaml`, `deployment.yaml`, `service.yaml`) in a Git repository. + +### **Create an Application in ArgoCD** +```bash +argocd app create bankapp \ + --repo \ + --path \ + --dest-server https://kubernetes.default.svc \ + --dest-namespace bankapp-namespace +``` + +### **Sync the Application** +```bash +argocd app sync bankapp +``` + +### **Monitor Application Status** +```bash +argocd app list +``` + +--- + +## **5. Deploy NGINX Ingress Controller** + +### **Install NGINX Ingress Controller Using Helm** +```bash +helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx +helm repo update +helm install ingress-nginx ingress-nginx/ingress-nginx \ + --namespace ingress-nginx --create-namespace +``` + +### **Verify Installation** +Check if the NGINX Ingress Controller pods are running: +```bash +kubectl get pods -n ingress-nginx +``` + +### **Retrieve the Load Balancer IP** +Get the external IP assigned to the NGINX Ingress Controller: +```bash +kubectl get svc -n ingress-nginx +``` + +### **Update DNS** +Point your domain (`junoon.trainwithshubham.com`) to the external IP of the NGINX Load Balancer. + +--- + +## **6. Enable HTTPS for the Application** -To modify the service type, you can run: +### **Install Cert-Manager** ```bash -kubectl patch svc ingress-nginx-controller -n ingress-nginx -p '{"spec": {"type": "LoadBalancer"}}' +kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.1/cert-manager.yaml ``` -This will expose the NGINX Ingress Controller via a LoadBalancer, allowing you to access your applications from outside the cluster. + +### **Create Let's Encrypt ClusterIssuer** +Save the following as `letsencrypt-clusterissuer.yaml`: +```yaml +apiVersion: cert-manager.io/v1 +kind: ClusterIssuer +metadata: + name: letsencrypt-prod +spec: + acme: + server: https://acme-v02.api.letsencrypt.org/directory + email: your-email@example.com + privateKeySecretRef: + name: letsencrypt-prod-key + solvers: + - http01: + ingress: + class: nginx +``` +Apply the ClusterIssuer: +```bash +kubectl apply -f letsencrypt-clusterissuer.yaml +``` + +### **Update Ingress with TLS Configuration** +- Modify your Ingress to include TLS and reference the `letsencrypt-prod` ClusterIssuer. +- Apply the updated Ingress: +```bash +kubectl apply -f +``` + +### **Verify Certificate Issuance** +```bash +kubectl get certificate -n bankapp-namespace +``` + +--- + +## **7. Verify Deployment** + +### **Check Deployed Resources** +```bash +kubectl get all -n bankapp-namespace +``` + +### **Access the Application** +- Open your browser and navigate to: + ``` + https://junoon.trainwithshubham.com + ``` + +--- From 90fa99aa4644d53b4a23b9507a2420de9ba74687 Mon Sep 17 00:00:00 2001 From: Shubham Londhe Date: Sat, 21 Dec 2024 17:41:22 +0530 Subject: [PATCH 34/43] Update README.md --- kubernetes/README.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/kubernetes/README.md b/kubernetes/README.md index cd8bca39..4db1d8b8 100644 --- a/kubernetes/README.md +++ b/kubernetes/README.md @@ -224,3 +224,22 @@ kubectl get all -n bankapp-namespace ``` --- + +## **8. Add Autoscaling** + +### **Install the Metrics Server** +```bash +kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml +``` + +### **Get the Top Nodes and Pods** +```bash + kubectl top nodes + kubectl top pods -n bankapp-namespace +``` +### **Apply HPA** +```bash + kubectl apply -f bankapp-hpa.yml +``` +--- + From 17b0e8febb44349340491d6bae4e34bbc5975a0b Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Sat, 21 Dec 2024 12:12:41 +0000 Subject: [PATCH 35/43] Added HPA --- kubernetes/bankapp-hpa.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 kubernetes/bankapp-hpa.yml diff --git a/kubernetes/bankapp-hpa.yml b/kubernetes/bankapp-hpa.yml new file mode 100644 index 00000000..ddcb3859 --- /dev/null +++ b/kubernetes/bankapp-hpa.yml @@ -0,0 +1,19 @@ +apiVersion: autoscaling/v2 +kind: HorizontalPodAutoscaler +metadata: + name: bankapp-hpa + namespace: bankapp-namespace +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: bankapp + minReplicas: 1 + maxReplicas: 5 + metrics: + - type: Resource + resource: + name: cpu + target: + type: Utilization + averageUtilization: 40 From 76b33cfff3b3c34c7a266f6f1a130ff5003ac483 Mon Sep 17 00:00:00 2001 From: Shubham Londhe Date: Sat, 21 Dec 2024 17:43:12 +0530 Subject: [PATCH 36/43] Delete SSL-Encryption directory --- SSL-Encryption/README.md | 81 ---------------------------------------- 1 file changed, 81 deletions(-) delete mode 100644 SSL-Encryption/README.md diff --git a/SSL-Encryption/README.md b/SSL-Encryption/README.md deleted file mode 100644 index 632eea2e..00000000 --- a/SSL-Encryption/README.md +++ /dev/null @@ -1,81 +0,0 @@ -## How to convert an application from HTTP to HTTPS - -### Steps: -- Update the system -```bash -sudo apt update -``` -# -- Install Nginx using the following command: -```bash -sudo apt install nginx -``` -# -- Once the installation is complete, start the Nginx service: -```bash -sudo service nginx start -``` -# -- Enable Nginx to Start on Boot -```bash -sudo systemctl enable nginx -``` -# -- Create an application Server Block: - - Create a new Nginx server block configuration file for our bankapp application. You can do this by creating a new file in the /etc/nginx/sites-available/ directory. Let's name it bankapp: -```bash -cd /etc/nginx/sites-available/ -sudo touch bankapp -``` -# -- Add the following code in the /etc/nginx/sites-available/bankapp file: -```bash -sudo vim /etc/nginx/sites-available/bankapp -``` -```bash -server { - listen 80; - server_name junoon.trainwithshubham.com; # Replace with your domain - - location / { - proxy_pass http://localhost:8080; # Replace port with your application port - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } - - location ~ /\. { - deny all; - } -} -``` -# -- Create a symbolic link to the configuration file in the sites-enabled directory: -```bash -sudo ln -s /etc/nginx/sites-available/bankapp /etc/nginx/sites-enabled/ -``` -# -- Test Nginx Configuration: -```bash -sudo nginx -t -``` -Note: If the test is successful, you should see: nginx: configuration file /etc/nginx/nginx.conf test is successful. -# -- Restart Nginx to apply the changes: -```bash -sudo systemctl restart nginx -``` -# -- Open your web browser and navigate to http://junoon.trainwithshubham.com. Replace junoon.trainwithshubham.com with your actual domain. You should now be able to access an application through Nginx. -# -- Now, apply SSL certificate to the Domain. -```bash -sudo apt install python3-certbot-nginx -``` -```bash -certbot --version -``` -```bash -certbot --nginx -d junoon.trainwithshubham.com -``` From f066911de2e2806297df8d3d20251624681741bb Mon Sep 17 00:00:00 2001 From: Shubham Londhe Date: Sat, 21 Dec 2024 17:43:42 +0530 Subject: [PATCH 37/43] Delete k8s directory --- k8s/README.md | 169 ---------------------------------- k8s/configMap.yml | 10 -- k8s/deployment.yml | 55 ----------- k8s/hpa.yaml | 19 ---- k8s/hpa_vpa.md | 82 ----------------- k8s/ingress.yml | 20 ---- k8s/mysqlService.yml | 16 ---- k8s/mysqlStatefulSet.yml | 67 -------------- k8s/namespace.yml | 7 -- k8s/persistentVolume.yml | 17 ---- k8s/persistentVolumeClaim.yml | 15 --- k8s/secrets.yml | 10 -- k8s/service.yml | 17 ---- k8s/vpa.yaml | 12 --- 14 files changed, 516 deletions(-) delete mode 100644 k8s/README.md delete mode 100644 k8s/configMap.yml delete mode 100644 k8s/deployment.yml delete mode 100644 k8s/hpa.yaml delete mode 100644 k8s/hpa_vpa.md delete mode 100644 k8s/ingress.yml delete mode 100644 k8s/mysqlService.yml delete mode 100644 k8s/mysqlStatefulSet.yml delete mode 100644 k8s/namespace.yml delete mode 100644 k8s/persistentVolume.yml delete mode 100644 k8s/persistentVolumeClaim.yml delete mode 100644 k8s/secrets.yml delete mode 100644 k8s/service.yml delete mode 100644 k8s/vpa.yaml diff --git a/k8s/README.md b/k8s/README.md deleted file mode 100644 index 8ded7955..00000000 --- a/k8s/README.md +++ /dev/null @@ -1,169 +0,0 @@ -# SpringBoot-BankApp Deployment on Kubernetes - -This guide explains how to deploy the SpringBoot-BankApp application on a Kubernetes cluster using the provided manifests and configure the NGINX Ingress Controller for routing. - -### Prerequisites - -- Kubernetes Cluster: Ensure you have a running Kubernetes cluster. KIND, Minikube, or any cloud provider will work. -- kubectl: Installed and configured to interact with your cluster. -- Docker Image: Ensure the SpringBoot-BankApp Docker image is available. - -Update the deployment.yml file to reference the correct image and tag. -Deployment Steps - -## 1. Install and Configure the NGINX Ingress Controller - -Deploy the NGINX Ingress Controller: - -```bash - -kubectl apply -f https://kind.sigs.k8s.io/examples/ingress/deploy-ingress-nginx.yaml -``` -Verify that the Ingress Controller pods are running: - -```bash - -kubectl get pods -n ingress-nginx -``` -Edit the ValidatingWebhookConfiguration to ignore validation errors temporarily: - -```bash - -kubectl edit ValidatingWebhookConfiguration ingress-nginx-admission -``` -Update the failurePolicy to Ignore: - -```yaml - -failurePolicy: Ignore -``` - -## 2. Create a Namespace - -Create a dedicated namespace for the application: - -```bash - -kubectl apply -f namespace.yml -``` -## 3. Create ConfigMap - -Store non-sensitive configuration like database names and other environment variables: - -```bash - -kubectl apply -f configMap.yml -``` - -## 4. Create Secrets -Store sensitive data like database credentials securely: - -```bash - -kubectl apply -f secrets.yml -``` - -## 5. Set Up Persistent Storage -Create a PersistentVolume (PV) for MySQL: - -```bash - -kubectl apply -f persistentVolume.yml -``` -Create a PersistentVolumeClaim (PVC) to bind the PV: - -```bash - -kubectl apply -f persistentVolumeClaim.yml -``` - -## 6. Deploy MySQL - -Deploy MySQL as a StatefulSet for persistent database management: - -```bash - -kubectl apply -f mysqlStatefulSet.yml -``` -Expose MySQL via a Kubernetes Service: - -```bash - -kubectl apply -f mysqlService.yml -``` - -## 7. Deploy SpringBoot-BankApp -Deploy the SpringBoot-BankApp using a Deployment: - -```bash - -kubectl apply -f deployment.yml -``` -Expose the application via a Service: - -```bash - -kubectl apply -f service.yml -``` - -## 8. Configure Ingress -Deploy the Ingress resource to route traffic to the SpringBoot-BankApp: - -```bash - -kubectl apply -f ingress.yml -``` - -Forward port 80 from the Ingress Controller to your localhost: - -```bash - -kubectl port-forward --namespace ingress-nginx service/ingress-nginx-controller 80:80 -``` - -Update your /etc/hosts file to point bankapp.local to your localhost: - -```lua - -127.0.0.1 bankapp.local -``` -Access the application in your browser at: - -```arduino - -http://bankapp.local -``` -Verification -Check the status of all resources: - -```bash - -kubectl get all -n bankapp-namespace -``` -Verify the logs of the MySQL and SpringBoot-BankApp pods: - -```bash - -kubectl logs -n bankapp-namespace -``` -Cleaning Up -To remove all resources related to the SpringBoot-BankApp: - -```bash - -kubectl delete namespace bankapp-namespace -kubectl delete -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml -``` -Notes - -Ingress Tweaks: The failurePolicy: Ignore setting in the ValidatingWebhookConfiguration ensures smooth ingress creation in local environments like KIND. - -Scaling: Scale the BankApp deployment if needed: - -```bash - -kubectl scale deployment bankapp-deployment --replicas=3 -n bankapp-namespace -``` -Monitoring: Use tools like Prometheus or kubectl top to monitor resource usage. - -### Configure application to AutoScale [vpa_and_hpa](hpa_vpa.md) diff --git a/k8s/configMap.yml b/k8s/configMap.yml deleted file mode 100644 index 653155ca..00000000 --- a/k8s/configMap.yml +++ /dev/null @@ -1,10 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: bankapp-config - namespace: bankapp-namespace -data: - MYSQL_DATABASE: BankDB - SPRING_DATASOURCE_URL: jdbc:mysql://mysql-0.mysql-headless.bankapp-namespace.svc.cluster.local:3306/BankDB?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC - SPRING_DATASOURCE_USERNAME: root - diff --git a/k8s/deployment.yml b/k8s/deployment.yml deleted file mode 100644 index 0e2ab968..00000000 --- a/k8s/deployment.yml +++ /dev/null @@ -1,55 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: bankapp-deployment - namespace: bankapp-namespace - labels: - app: bankapp -spec: - replicas: 1 - selector: - matchLabels: - app: bankapp - template: - metadata: - labels: - app: bankapp - spec: - initContainers: - - name: wait-for-mysql - image: busybox:1.28 - command: ['sh', '-c', 'until nc -z mysql-0.mysql-headless 3306; do echo waiting for mysql; sleep 5; done;'] - containers: - - name: bankapp - image: trainwithshubham/springboot-bankapp:latest - ports: - - containerPort: 8080 - env: - - name: SPRING_DATASOURCE_URL - valueFrom: - configMapKeyRef: - name: bankapp-config - key: SPRING_DATASOURCE_URL - - name: SPRING_DATASOURCE_USERNAME - valueFrom: - configMapKeyRef: - name: bankapp-config - key: SPRING_DATASOURCE_USERNAME - - name: SPRING_DATASOURCE_PASSWORD - valueFrom: - secretKeyRef: - name: mysql-secret - key: SPRING_DATASOURCE_PASSWORD - livenessProbe: - httpGet: - path: /actuator/health - port: 8080 - initialDelaySeconds: 30 - periodSeconds: 10 - readinessProbe: - httpGet: - path: /actuator/health - port: 8080 - initialDelaySeconds: 10 - periodSeconds: 5 - diff --git a/k8s/hpa.yaml b/k8s/hpa.yaml deleted file mode 100644 index c8295b1f..00000000 --- a/k8s/hpa.yaml +++ /dev/null @@ -1,19 +0,0 @@ -apiVersion: autoscaling/v2 -kind: HorizontalPodAutoscaler -metadata: - name: bankapp-hpa - namespace: bankapp-namespace -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: bankapp - minReplicas: 1 - maxReplicas: 5 - metrics: - - type: Resource - resource: - name: cpu - target: - type: Utilization - averageUtilization: 40 # 40% avg cpu utilization diff --git a/k8s/hpa_vpa.md b/k8s/hpa_vpa.md deleted file mode 100644 index aa665e37..00000000 --- a/k8s/hpa_vpa.md +++ /dev/null @@ -1,82 +0,0 @@ -## 1. Horizontal Pod Autoscaler - -- Horizontal Pod Autoscaling helps manage traffic coming to your application, by launching new identical pods. -- The Kubernetes Metrics Server collects resource metrics from the kubelet in nodes and exposes those metrics through the Kubernetes API. -- Based on Resource utilization metrics and configuration defined on HPA spec it scale-out (increases the number of identical pods ) and scale-in (decreases the number of identical pods ) your application. - -- To work with HPA you need Metrics Server deployed and configured into your cluster. - -#### Install the Metrics server using following command - -```bash -kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml -``` -#### Edit deployment metrics-server to work without TLS. - -```bash -kubectl edit deployments.apps -n kube-system metrics-server - -# add these two enteries at: spec.template.spec.containers[0].args -# - --kubelet-insecure-tls -# - --kubelet-preferred-address-types=InternalIP,Hostname,ExternalIP - -``` -#### Verify Installation and apply HPA manifest -```bash -kubectl get pods -n kube-system -kubectl top nodes -``` - -```bash -kubectl apply -f hpa.yaml -``` -#### Create HPA, Generate Load and check newly created Pods. - -- Create a pod for generating load and testing - ```bash - kubectl run -i --tty load-generator --image=busybox /bin/sh - - while true; do wget -q -O- http://bankapp-service.bankapp-namespace.svc.cluster.local; done - ``` - -#### When utilization of resources exceeds the defined value, hpa will create new pods. -```bash -watch -n2 kubectl get pods -n bankapp-namespace -``` - - - -## 2. Vertical Pod Autoscaler -- It scale-up and scale down the request of resources (CPU, memory) depending on the workload. -- It will set the resource request automatically based on usage for proper scheduling. -- In the case of limits defined in the template of containers, it also manages a ratio between request and limit. -- VPA is installed in k8s using Custom Resource Definition object (CRD). - -#### Install CRD and apply vpa manifest. - -```bash -kubectl apply -f https://raw.githubusercontent.com/kubernetes/autoscaler/vpa-release-1.0/vertical-pod-autoscaler/deploy/vpa-v1-crd-gen.yaml - -kubectl apply -f https://raw.githubusercontent.com/kubernetes/autoscaler/vpa-release-1.0/vertical-pod-autoscaler/deploy/vpa-rbac.yaml -``` - -Apply VPA configution -```bash -kubectl apply -f vpa.yaml -``` - -Generate load to application -```bash -kubectl run -i --tty load-generator --image=busybox /bin/sh - -while true; do wget -q -O- http://bankapp-service.bankapp-namespace.svc.cluster.local; done -``` - -Check resource utilization. -```bash -kubectl top nodes - -kubectl describe deployment bankapp-deployment -n bankapp-namespace -``` - -**Note**: To configure Autoscaling resources request, limit must be set diff --git a/k8s/ingress.yml b/k8s/ingress.yml deleted file mode 100644 index ae8dca04..00000000 --- a/k8s/ingress.yml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: bankapp-ingress - namespace: bankapp-namespace - annotations: - nginx.ingress.kubernetes.io/rewrite-target: / -spec: - rules: - - host: bankapp.local - http: - paths: - - path: / - pathType: Prefix - backend: - service: - name: bankapp-service - port: - number: 8080 - diff --git a/k8s/mysqlService.yml b/k8s/mysqlService.yml deleted file mode 100644 index 8acf7b63..00000000 --- a/k8s/mysqlService.yml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: mysql-headless - namespace: bankapp-namespace - labels: - app: mysql -spec: - clusterIP: None - selector: - app: mysql - ports: - - protocol: TCP - port: 3306 - targetPort: 3306 - diff --git a/k8s/mysqlStatefulSet.yml b/k8s/mysqlStatefulSet.yml deleted file mode 100644 index 3b1c80e3..00000000 --- a/k8s/mysqlStatefulSet.yml +++ /dev/null @@ -1,67 +0,0 @@ -apiVersion: apps/v1 -kind: StatefulSet -metadata: - name: mysql - namespace: bankapp-namespace - labels: - app: mysql -spec: - serviceName: mysql-headless - replicas: 1 - selector: - matchLabels: - app: mysql - template: - metadata: - labels: - app: mysql - spec: - containers: - - name: mysql - image: mysql:latest - ports: - - containerPort: 3306 - env: - - name: MYSQL_ROOT_PASSWORD - valueFrom: - secretKeyRef: - name: mysql-secret - key: MYSQL_ROOT_PASSWORD - - name: MYSQL_DATABASE - valueFrom: - configMapKeyRef: - name: bankapp-config - key: MYSQL_DATABASE - volumeMounts: - - name: mysql-data - mountPath: /var/lib/mysql - livenessProbe: - exec: - command: - - mysqladmin - - ping - - -h - - localhost - initialDelaySeconds: 30 - periodSeconds: 10 - readinessProbe: - exec: - command: - - mysqladmin - - ping - - -h - - localhost - initialDelaySeconds: 10 - periodSeconds: 5 - volumeClaimTemplates: - - metadata: - name: mysql-data - labels: - app: mysql - spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 5Gi - diff --git a/k8s/namespace.yml b/k8s/namespace.yml deleted file mode 100644 index a1ebb8f9..00000000 --- a/k8s/namespace.yml +++ /dev/null @@ -1,7 +0,0 @@ -apiVersion: v1 -kind: Namespace -metadata: - name: bankapp-namespace - labels: - name: bankapp-namespace - diff --git a/k8s/persistentVolume.yml b/k8s/persistentVolume.yml deleted file mode 100644 index f147c6b3..00000000 --- a/k8s/persistentVolume.yml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: v1 -kind: PersistentVolume -metadata: - name: bankapp-pv - namespace: bankapp-namespace - labels: - app: bankapp -spec: - capacity: - storage: 5Gi - accessModes: - - ReadWriteOnce - persistentVolumeReclaimPolicy: Retain - storageClassName: manual - hostPath: - path: "/tmp/bankapp-mysql" # This will be stored on the host machine running KIND - diff --git a/k8s/persistentVolumeClaim.yml b/k8s/persistentVolumeClaim.yml deleted file mode 100644 index 0ac8b0a3..00000000 --- a/k8s/persistentVolumeClaim.yml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: bankapp-pvc - namespace: bankapp-namespace - labels: - app: bankapp -spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 5Gi - storageClassName: manual - diff --git a/k8s/secrets.yml b/k8s/secrets.yml deleted file mode 100644 index 466f15ad..00000000 --- a/k8s/secrets.yml +++ /dev/null @@ -1,10 +0,0 @@ -apiVersion: v1 -kind: Secret -metadata: - name: mysql-secret - namespace: bankapp-namespace -type: Opaque -data: - MYSQL_ROOT_PASSWORD: VGVzdEAxMjM= # Base64 for "Test@123" - SPRING_DATASOURCE_PASSWORD: VGVzdEAxMjM= # Base64 for "Test@123" - diff --git a/k8s/service.yml b/k8s/service.yml deleted file mode 100644 index a46714da..00000000 --- a/k8s/service.yml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: bankapp-service - namespace: bankapp-namespace - labels: - app: bankapp -spec: - type: NodePort - selector: - app: bankapp - ports: - - protocol: TCP - port: 8080 - targetPort: 8080 - nodePort: 30080 # Exposes the app on this port of the host - diff --git a/k8s/vpa.yaml b/k8s/vpa.yaml deleted file mode 100644 index eff17fbd..00000000 --- a/k8s/vpa.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: autoscaling.k8s.io/v1 -kind: VerticalPodAutoscaler -metadata: - name: bankapp-vpa - namespace: bankapp-namespace -spec: - targetRef: - apiVersion: apps/v1 - kind: Deployment - name: bankapp-deployment - updatePolicy: - updateMode: "Auto" # Options: "Off", "Initial", "Auto" \ No newline at end of file From cf8617795c48e593b2d56624172d4b88de1796c6 Mon Sep 17 00:00:00 2001 From: Shubham Londhe Date: Sat, 21 Dec 2024 17:44:15 +0530 Subject: [PATCH 38/43] Update Jenkinsfile --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index a6997335..96e1e341 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -23,7 +23,7 @@ pipeline { stage('Git: Code Checkout') { steps { script{ - code_checkout("https://github.com/DevMadhup/Springboot-BankApp.git","DevOps") + code_checkout("https://github.com/LondheShubham153/Springboot-BankApp.git","DevOps") } } } From a05dce05a35382958e7be5cfc24d11229f581290 Mon Sep 17 00:00:00 2001 From: Shubham Londhe Date: Sat, 21 Dec 2024 17:45:33 +0530 Subject: [PATCH 39/43] Update Jenkinsfile --- GitOps/Jenkinsfile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/GitOps/Jenkinsfile b/GitOps/Jenkinsfile index 24adc56f..7828a675 100644 --- a/GitOps/Jenkinsfile +++ b/GitOps/Jenkinsfile @@ -18,7 +18,7 @@ pipeline { stage('Git: Code Checkout') { steps { script{ - code_checkout("https://github.com/DevMadhup/Springboot-BankApp.git","DevOps") + code_checkout("https://github.com/LondheShubham153/Springboot-BankApp.git","DevOps") } } } @@ -37,7 +37,7 @@ pipeline { script{ dir('kubernetes'){ sh """ - sed -i -e 's|madhupdevops/bankapp:.*|madhupdevops/bankapp:${params.DOCKER_TAG}|g' bankapp-deployment.yaml + sed -i -e 's|trainwithshubham/bankapp-eks:.*|trainwithshubham/bankapp-eks:${params.DOCKER_TAG}|g' bankapp-deployment.yaml """ } } @@ -59,7 +59,7 @@ pipeline { git commit -m "Updated K8s Deployment Docker Image Version" echo "Pushing changes to github: " - git push https://github.com/DevMadhup/Springboot-BankApp.git DevOps + git push https://github.com/LondheShubham153/Springboot-BankApp.git DevOps ''' } } @@ -70,7 +70,7 @@ pipeline { always { script { emailext attachLog: true, - from: '8007930568pandey@gmail.com', + from: 'trainwithshubham@gmail.com', subject: "BankApp Application has been updated and deployed - '${currentBuild.result}'", body: """ @@ -87,7 +87,7 @@ pipeline { """, - to: '8007930568pandey@gmail.com', + to: 'trainwithshubham@gmail.com', mimeType: 'text/html' } } From 9c56836b49656ebd7298fac7f956284857a65447 Mon Sep 17 00:00:00 2001 From: Shubham Londhe Date: Sun, 22 Dec 2024 12:35:00 +0530 Subject: [PATCH 40/43] Update bankapp-ingress.yml --- kubernetes/bankapp-ingress.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kubernetes/bankapp-ingress.yml b/kubernetes/bankapp-ingress.yml index d409c28d..e1b8f06e 100644 --- a/kubernetes/bankapp-ingress.yml +++ b/kubernetes/bankapp-ingress.yml @@ -12,10 +12,10 @@ spec: ingressClassName: nginx tls: - hosts: - - junoon.trainwithshubham.com + - megaproject.trainwithshubham.com secretName: bankapp-tls-secret # Cert-Manager will manage this rules: - - host: junoon.trainwithshubham.com + - host: megaproject.trainwithshubham.com http: paths: - path: / From 40cbb6cb49635beaf32af6040906f5ae7ae73484 Mon Sep 17 00:00:00 2001 From: Shubham Londhe Date: Sun, 22 Dec 2024 12:40:39 +0530 Subject: [PATCH 41/43] Update bankapp-deployment.yml --- kubernetes/bankapp-deployment.yml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/kubernetes/bankapp-deployment.yml b/kubernetes/bankapp-deployment.yml index c2f7cb12..03721214 100644 --- a/kubernetes/bankapp-deployment.yml +++ b/kubernetes/bankapp-deployment.yml @@ -41,18 +41,18 @@ spec: secretKeyRef: name: mysql-secret key: SPRING_DATASOURCE_PASSWORD - readinessProbe: - httpGet: - path: /actuator/health # Update this based on your app's health endpoint - port: 8080 - initialDelaySeconds: 10 - periodSeconds: 5 - livenessProbe: - httpGet: - path: /actuator/health # Update this based on your app's health endpoint - port: 8080 - initialDelaySeconds: 30 - periodSeconds: 10 + # readinessProbe: + # httpGet: + # path: /actuator/health # Update this based on your app's health endpoint + # port: 8080 + # initialDelaySeconds: 10 + # periodSeconds: 5 + # livenessProbe: + # httpGet: + # path: /actuator/health # Update this based on your app's health endpoint + # port: 8080 + # initialDelaySeconds: 30 + # periodSeconds: 10 resources: requests: memory: "512Mi" From 4e4274c43441315d00a05aba6a01367e00a6a487 Mon Sep 17 00:00:00 2001 From: Shubham Londhe Date: Sun, 22 Dec 2024 12:45:48 +0530 Subject: [PATCH 42/43] Update bankapp-hpa.yml --- kubernetes/bankapp-hpa.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kubernetes/bankapp-hpa.yml b/kubernetes/bankapp-hpa.yml index ddcb3859..6c030161 100644 --- a/kubernetes/bankapp-hpa.yml +++ b/kubernetes/bankapp-hpa.yml @@ -7,7 +7,7 @@ spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment - name: bankapp + name: bankapp-deploy minReplicas: 1 maxReplicas: 5 metrics: From 66c677d8445d6340257137c21f3c227f4f31d40e Mon Sep 17 00:00:00 2001 From: Shubham Londhe Date: Sun, 22 Dec 2024 13:15:41 +0530 Subject: [PATCH 43/43] Update bankapp-deployment.yml --- kubernetes/bankapp-deployment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kubernetes/bankapp-deployment.yml b/kubernetes/bankapp-deployment.yml index 03721214..45a35b6f 100644 --- a/kubernetes/bankapp-deployment.yml +++ b/kubernetes/bankapp-deployment.yml @@ -17,7 +17,7 @@ spec: spec: containers: - name: bankapp - image: trainwithshubham/bankapp-eks:v1 + image: trainwithshubham/bankapp-eks:v2 ports: - containerPort: 8080 env: