From 62a6dd1fe3048e36a023334f736d3a6bfa22b9e2 Mon Sep 17 00:00:00 2001 From: KoCoder Date: Tue, 21 Apr 2026 08:46:15 +0200 Subject: [PATCH] Update: Infrastructure Slide --- ...02_Praesentation_Konstantin_Hintermayer.md | 40 +++++++++++++++--- .../Images/images/konstantin/logos/debian.pdf | Bin 0 -> 3225 bytes .../Images/images/konstantin/logos/docker.pdf | Bin 0 -> 1493 bytes .../Images/images/konstantin/logos/gitea.pdf | Bin 0 -> 2571 bytes .../Images/images/konstantin/logos/github.pdf | Bin 0 -> 1539 bytes .../Images/images/konstantin/logos/nginx.pdf | Bin 0 -> 1713 bytes .../Images/images/konstantin/logos/oqtane.pdf | Bin 0 -> 1418 bytes .../images/konstantin/logos/postgres.pdf | Bin 0 -> 2888 bytes .../images/konstantin/logos/wireguard.pdf | Bin 0 -> 3068 bytes 9 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 Defensio/Images/images/konstantin/logos/debian.pdf create mode 100644 Defensio/Images/images/konstantin/logos/docker.pdf create mode 100644 Defensio/Images/images/konstantin/logos/gitea.pdf create mode 100644 Defensio/Images/images/konstantin/logos/github.pdf create mode 100644 Defensio/Images/images/konstantin/logos/nginx.pdf create mode 100644 Defensio/Images/images/konstantin/logos/oqtane.pdf create mode 100644 Defensio/Images/images/konstantin/logos/postgres.pdf create mode 100644 Defensio/Images/images/konstantin/logos/wireguard.pdf diff --git a/Defensio/02_Praesentation_Konstantin_Hintermayer.md b/Defensio/02_Praesentation_Konstantin_Hintermayer.md index ef57ad6..7c3cce5 100644 --- a/Defensio/02_Praesentation_Konstantin_Hintermayer.md +++ b/Defensio/02_Praesentation_Konstantin_Hintermayer.md @@ -58,16 +58,42 @@ :::: ::: +\vfill -## CI/CD +\begin{center} + \includegraphics[width=2.5em]{./Images/images/konstantin/logos/debian.pdf} \hspace{1em} + \includegraphics[width=2.5em]{./Images/images/konstantin/logos/docker.pdf} \hspace{1em} + \includegraphics[width=2.5em]{./Images/images/konstantin/logos/gitea.pdf} \hspace{1em} + \includegraphics[width=2.5em]{./Images/images/konstantin/logos/wireguard.pdf} \hspace{1em} + \includegraphics[width=2.5em]{./Images/images/konstantin/logos/github.pdf} \hspace{1em} + \includegraphics[width=2.5em]{./Images/images/konstantin/logos/nginx.pdf} \hspace{1em} + \includegraphics[width=2.5em]{./Images/images/konstantin/logos/postgres.pdf} \hspace{1em} + \includegraphics[width=2.5em]{./Images/images/konstantin/logos/oqtane.pdf} +\end{center} -CI: +\vfill + + +--- + +**Produktions-Infrastruktur:** + +```mermaid +sequenceDiagram + participant browser as Client + participant nginx as NginX + participant oqtane as Oqtane + participant db as PostgreSQL + + browser->>+nginx: HTTPS => 0.0.0.0:443 + nginx->>nginx: SSL Terminierung + nginx->>+oqtane: HTTP => 127.0.0.1:5000 + oqtane->>+db: SQL => 127.0.0.1:5432 + db-->>-oqtane: SQL + oqtane-->>-nginx: HTTP + nginx-->>-browser: HTTPS +``` -- Gitea Actions -- Debian Packages (.deb) -- Code-Reviewing: - - KI - - Git-Flow ## Softwarearchitektur diff --git a/Defensio/Images/images/konstantin/logos/debian.pdf b/Defensio/Images/images/konstantin/logos/debian.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a403f629daf3413b085cdf5b04cdff5e212ba0af GIT binary patch literal 3225 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 literal 0 HcmV?d00001 diff --git a/Defensio/Images/images/konstantin/logos/gitea.pdf b/Defensio/Images/images/konstantin/logos/gitea.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7d2f448c0260c4c61d0e6a973b5a420e102075f1 GIT binary patch literal 2571 zcma);2{e>#8^@8Yv5Ym5<*`f{%NPt}EH!q$LZ&ff$=UmPXNK$as>eZ0J9Awk_n-lnTRJ7tO@?4Lj;h81t^Rh zO27w$D7oP{&(wZf;nlaA;i!0krEP*HOO;dL1D_fY*h;wh{1cai_$S=e`gQk}o z3{4x?pClBr*Ui=~CPxN$4Za-w<~X)=5}fz>@<4n49D$IVcSHStqm}{n`y8jqo_DJZ zoQodlDXK;u&TgHZ*Fd!gJdS)xTGRn68s1z%%G2^vk3u|4_9?s?y?J6SUVV(||9m&vUu+sN@@qZKwH)mn+1~oV6;>X$U?nJMsa+b! z7w%PYT=&?RD)OOV85qJdre!6v)XenuNKmFuH!V93{k6VuwvuXkG=jv46~)!>(vnn< z-O9H^JhB4$Rg!)SsngcVZNn`^%P`8L^e!#R!*EmAg)U~*+%|rdB%1_zclk;F4GH-M zY`Dm%_6I+f>76C8GxNd_o3K>C=nL2*gV?=?NKNeCBi-ER(8tUSo;u}d^|n{EFj=1A zux&=-)CdJtQ?LvwOuF-22Hlso>vL38>V?)9x=W%nr}=Ak7z8tg>Q@SR;*UQDQI$&W z@3?g852dpK4Hi;~s}AUFUKA_Yzoq*;JGa4>&BRQzt9`STlP*2K;A`Tfdi=@30nE6y z#*}ZClnhAIbwT*V=}zzaRZkN{)lkpE^Cg&o&Z61m%36|y@pIWM{-bEBT2RUL+891_ zQNFS*!?J=S9*jU09lXjzQ;#fXd6*2r$uTg4;JiXT$s-=(nfY8b-tzDPo)=x#9cHH! zAq*DfIDr*7*cY}+;VmkI#&~_v*qv)vQI3LPqrLe%?9*2d+00&jy>AW**H$VU8Pa?R z#Y`#32YbG=*6GL!y8lkB9%Knl31}YmK)FY{+-0^jDt0r9P6(?scINRztDF zV8^?F%HmG7cQ4t0H;XN~G;uR9;(RmS(%gdTRU*aPb>HmFTfJwq=W+C7rN@=s);Jsb z2?tzOPMK-)6;!;9tHpp>YQbq2PZU*5ge;#bK27L=Amq~Dj8Bgq0bYWx4RJfET866J(wk#S&X7TgIMPLnFasSx*P zG!iDV-+pk{9x~$NEj7$pCpKtd;7R(OgJ*iXuuENqc^8z^;>4Kz8`awx{I!}2) zd$Y0^uidi_^#gZ%CeUL@E8;w(L)PGOU+vDDRlEIh+e+H=Q*zFGf5IwHmS2=$q>yB^ zQh^**<-LCuHP!sRjXD2FuKaD=+bSRE!;W=eySMoB)7Xp#eAm^T%^W4xBg#oRM>X&tv>E z4*=VL;wS-tIr{}+$ibUgzY`DnlXy-5eDlCIFf@z|7=B;>e+n94^jOIslSg^D_>tV+ zzZbZX{YQaDKV+Hw3t4deUv&M@vY|`g;9m*DrlF72>j}qCuS?g`Ai@%T$Er)>6ff_V z^%v`W-zeHB&crv=MKpe$KCHgCNe?wX+&sM%el>1ikIU1T;O%(fWOa0l#N1MA;(6n8 zJ3B7mWcQU=Fl%>y{7YGEfSj3L`QS^*6vX?&4$FeVDt`CIs!OLvCfCLzPFQpew9MYh zYNdVdA}==<%=Zf4ofmX?IGnl5wT^Cb?Uooga}aa6War5;maco#vh4wyiC?+w1N@EA zy4AQEL$fmPAQAH~z;Pht>or7|AVD^#2c~G?{YukCOTgF`7Va@CL@^!e#iFsp)owkC zVDU3A(yGT_9Fj(9gwSv36|G9VkJnoDyp!%jy|iBIUGpUT9`Kbr#Bf{d!OL&^`uZMX2}lqn(SDP_8v&rshgYRnd15=7 q*Fg0KmkSMZC5D@8YZqVt?^TA8@u6f&D5n5@149E41Y+ZC3;GA8Az$YJ literal 0 HcmV?d00001 diff --git a/Defensio/Images/images/konstantin/logos/github.pdf b/Defensio/Images/images/konstantin/logos/github.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ce917d50d4a00a5f98e964e39522afa346694ad5 GIT binary patch literal 1539 zcmY!laBlN#dPC#xuMySQtYgVq&s3%5Rjty4}Wr5T?5 zyL88kXRd)?mR!%(;JQ6S?A4E2!9To9UoWoRmjC7EFS&nT-QxF`SN*>0v!ma0;ho%z z>?;etEqGxweS(F)a`_dT_hM`M>ev_AOi_uvD)sV#VSv?5w+U>gyH?4*(OYsVcyGX& zHOJosZRHfONm(fJyWMj&V|S?T27$NfeRuc1e|LKIHLKl~5BHtu;XQKERQcovC;1Bj zujZaTzeIZViOuIW8n-Z<3G|g+Tvf*NaO&#`nGbFL>R;zL5FWmuHL}CUrlIPN*ou(1 z4&1t&m(v%|kXd|(`yzASX7fG1?2S9W74onbrpoGvg0ZVOJI9=iNv1oOh^6n`t+CLsneE%^6KfK`SKr+0U!^=l zJovWarEDwpdEvg1x6VC?Ej@p)yZY-KE6-nLy21;2va)QF@{Bg0IB?}i)1q7DT1s2f zV*e}%;*`A3tC6_-f883_s^eowg3N{;cv$MTkl692bTbopMs4INB{`*6AgeI1$}2n1w#e>;=M#-zslnCJwmh6_*?D@3$0bF-&pW` z&ELAiTfbP=Y?9n_a@%wEua6%IeeW_k7q~(9OTyec3b((wuU#gX`jXvVU(Pu8;?2Ob z?8a64g|Q#G*UWoj73vpy`hDDq%O4*sJpJaUr<7@?BJZWMpWleJ#x9aBZ>|5TmG^V{ ztGu^&So5CFc_A*OoOc{EcEEuQjUFR&b6ETsBGMl$-9!YXrXi;qQ%jt&07{*~nN_I@ zhLC6rSBN%LFj6pz1?vdP&o5ChG=xX4XI@&qf}sJJk6f%KCnWs%KfkkaawDUQfuWIZ zLPA2y19l;wSOvo}f!C}P63#IReibO~QD~YuaVoRMF|G3l7#JAdv36qmvbZF%sHCC@ R=mA4xLqjfARabvEE&vxXW8VM( literal 0 HcmV?d00001 diff --git a/Defensio/Images/images/konstantin/logos/nginx.pdf b/Defensio/Images/images/konstantin/logos/nginx.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6d62cdb98a92625c30e65c9ad0766950799ca939 GIT binary patch literal 1713 zcmY!laBlN#dP7h=eB=efvEhGX}S*s-}g=$_q>Aa>xd z>Z!`VQ420kwu<%qqdi@D^2b`iKRVBT{*c(uCcJs7*PD|fGqW1)yIiyX)yz0}p3&vbqouz5 z>MLg~YV0<0o@&uBJ-FkLLdj%lvj<7nd7Rh1Nj_y3{HA9Uk?d5uop;hq) zOQw9dQ}B9Tho6#JpKDN+IW z?P1+`_drHjShVKq%Ph;aibWrODiFEDXl8UU_sXQHwZ9XJ7cTw2(rx0=UKYk3GUegH zH|BT;cUo}kPTzW9MVVAy<<>JS+mAMfJTWnS;H%ix#8_3AVDy%?Jm6^R0t-*KXMA3> zr1nM~aaaD&`N8l$o6X~9C+j7uM*=OFrpvFFjlD4WI=6Hb=heFxBIo74lufY zW}%^o_JsC>rd_#ZvU@WU4=YWSWjnx|V!(6Z#Fo;Pt_yso`0>20%Dy!#%avI&t6azYG%D#`I_(Si_o4$md&$PZIM;I z;arz4r+B>fXi-o2`NgS%OFFf_%sj33_OX?Tjo-VSvow6%+g~j{tUBY6a?!H%;_|b8 zx8>58OKuW-@<}|bAa2jG(=44Ax{@#XiI**y=(l=qd#U{As_ zE$+U(dtJ#~ySt9>WLy0V@A0lx)KmEQ(aL;I^yX}ZmF)4as{~8}FSHpM+FW|u5LBJR zq7uivxFTrLIpe49Jg2Tor)SiZn*EVkv^wEMmUH1neaZQmnW^8tY`?dm&p)gFjQr!z zEPHzMAL~zNSJ}&znwJ7i=0FxGgMe}chz8~hb7LcrJcwru&pzM`<62ST9$W&6!e`P6$};hlM{g?Fbe@CfFuw>%`u0Yqo5yBS&*ur@1K+vT#^em6`C(C z;Q7)|!4NFrmRVF>qF@4L292Pp!F}uY;p!NMv(PGU|F00OW+hSArS8tdSB(Qz^CFhQ2Z4qTpoxAn- zU9Rh@o=LR3_hfIPg~DSF=@h0PZN}#mtItFRI{d1WbKxV(z*Gp?(?4VYrGSDeD#UG*qzGP2Jzm`itZj}&E{Fvl^5*o^nPtWy7bzG z=FdgkKYi;>s-zZbI0^qcn!HTgsxs?I!tn=7^|b34)77GOUs|p8>z%0SapwlR;s?Bu zwvw)5n`S>h$*;BDW&1y_|JSsaPLAKTJMX!ELF~EiIz}$DJS?dX9LUhhHz{0Pt#~$^ZZW literal 0 HcmV?d00001 diff --git a/Defensio/Images/images/konstantin/logos/oqtane.pdf b/Defensio/Images/images/konstantin/logos/oqtane.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8fbd3f69bee6253fd613cb07373799c530fa9941 GIT binary patch literal 1418 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 wRJidFJb}|2spL^A>ZOO<5E%do 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