From 72f6c3818b1bbb3e80c3643ec0544c8f5620d2d8 Mon Sep 17 00:00:00 2001 From: Firq Date: Sat, 23 Dec 2023 23:17:02 +0100 Subject: [PATCH] Updated About page, added blogpost for new deployment --- .../{index.astro.old => _index.astro.old} | 0 src/pages/blog/deploying-this-round-2.md | 167 ++++++++++++++++++ static/assets/data/_technologydata.json | 28 ++- static/assets/technologies/alpine-linux.webp | Bin 2734 -> 0 bytes static/assets/technologies/astro.webp | Bin 7728 -> 8790 bytes static/assets/technologies/docker.webp | Bin 0 -> 5864 bytes static/assets/technologies/forgejo.webp | Bin 0 -> 11518 bytes static/assets/technologies/gitlab.webp | Bin 4514 -> 0 bytes static/assets/technologies/nodejs.webp | Bin 0 -> 9308 bytes static/assets/technologies/serve.webp | Bin 0 -> 872 bytes static/assets/technologies/ubuntu.webp | Bin 9132 -> 0 bytes static/assets/technologies/unlighthouse.webp | Bin 0 -> 8754 bytes 12 files changed, 186 insertions(+), 9 deletions(-) rename src/pages/{index.astro.old => _index.astro.old} (100%) create mode 100644 src/pages/blog/deploying-this-round-2.md delete mode 100644 static/assets/technologies/alpine-linux.webp create mode 100644 static/assets/technologies/docker.webp create mode 100644 static/assets/technologies/forgejo.webp delete mode 100644 static/assets/technologies/gitlab.webp create mode 100644 static/assets/technologies/nodejs.webp create mode 100644 static/assets/technologies/serve.webp delete mode 100644 static/assets/technologies/ubuntu.webp create mode 100644 static/assets/technologies/unlighthouse.webp diff --git a/src/pages/index.astro.old b/src/pages/_index.astro.old similarity index 100% rename from src/pages/index.astro.old rename to src/pages/_index.astro.old diff --git a/src/pages/blog/deploying-this-round-2.md b/src/pages/blog/deploying-this-round-2.md new file mode 100644 index 0000000..4f84624 --- /dev/null +++ b/src/pages/blog/deploying-this-round-2.md @@ -0,0 +1,167 @@ +--- +layout: ../../layouts/blogPost.astro +title: 'Migrating to Forgejo' +pubDate: 2023-12-23 +description: 'My small recollection of migrating this site + CI to Forgejo' +author: 'Firq' +tags: ['astro', 'docker', 'forgejo'] +--- + +Before I begin this, I want to give a shoutout to Neshura - without him, I would never have had the opportunity to actually create and host my website. I also want to thank him for his patience when I was stuck multiple times during the migration process, as my experience with Forgejo and its CI was really limited. + +## Migrating Git - Gitlab to Forgejo + +The migration of the git files themselves went a lot smoother than expected. Main reason for this was Forgejos built-in migration tool suite, which lets you migrate external repositories with ease. + +Generally, the workflow was as follows: + +1. Open Forgejo and start a new migration +2. Select GitLab from the list +3. Fill the details of the migration: Repository URL, Access token, etc. +4. Hit Migrate + +And voila: The repository with all extra features like the wiki is getting migrated automatically. + +In total, I did this for 7 repositories without issues. Afterwards, it was just a matter of updating the remote repository url for my local clones: + +```shell +git remote set-url origin https://forgejo.neshweb.net/Firq/firq-dev-website.git +``` + +Since the underlying git repository didn't change, migration was painless on the client side of things. + +## Reworking CI + +One of the major parts of the migration was to port my working GitLab-CI to Forgejo Actions. As I never worked with this before (or with Github Actions, which is the basis of Forgejo), it was ... interesting to say the least. + +I stumbled over multiple issues while transforming my old `.gitlab-ci.yml` file into a new `build_release.yml`, but in the end I got there. My main issue was that I imagined the CI just to work like GitLab - but I was mistaken. + +My main points of confusion were: + +- Files are not checked out automatically - A manual run of the checkout action is necessary, otherwise the files will just be missing +- The working directory is not preserved between different run commands (made apparent early on) + +But after around 2 hours of tinkering, I managed to get everything working (and even improved some steps, such as automatically getting the known_hosts instead of hardcoding it into the secrets). But still, it felt a bit unsatisfying, as I was still relying on a ssh-connection with rsync to deploy the files. Unbeknownst to me, this was about to change drastically ... + +## Such Innovation: Moving from dedicated website server to docker containers + +After migrating and finishing up, Neshura showed me how he deploys the main website of his server: With a docker container. After seeing how much easier this would be in the long run, I decided to just go for it and switch from building the static files and syncing them to a webserver to just build my own container. + +Generally, this turned out to be a lot easier than expected: I added a Dockerfile to my repo and switched the CI to build a container based on that, which then would get published to the Forgejo registry. + +The `Dockerfile` itself is rather simple: + +```dockerfile +FROM node:lts AS build +WORKDIR /app +COPY . . +RUN npm i +RUN npm run build + +FROM forgejo.neshweb.net/firq/website-serve-docker:latest AS runtime + +COPY --from=build /app/dist /public +COPY --from=build /app/serve.json /public/serve.json +RUN rm -r /public/assets/data/ + +ENV PORT 8081 +EXPOSE 8081 + +CMD [ "serve", "public/", "-p", "8081" ] +``` + +As you can see, I am using a custom container for the runtime stage, which will be explained in the next section. + +### Custom serve docker - My new goto for static site serving + +When starting out with the `Dockerfile`, I first used the standard `node:lts` image for the runtime. This meant I also had to install the `serve` package by `@warren-bank` each time I built the container. Since this takes extra time and resources each run, I decided to create a pre-configured docker container that can be used for this instead. + +The `Dockerfile` for that one is laughable simple: + +```dockerfile +FROM node:lts +RUN npm install --global "@warren-bank/serve" +``` + +The container is also published to the docker registry that the Forgejo instance provides, which allows referencing it easily during runs. + +## Deployments using Dockge + +Since my website is now using a docker container instead of the previous `rsync` + `screen` approach, a new deployment solution was needed. + +In the end, Neshura proposed to use Dockge, a new, simple container management tool build by the developer of the beloved uptime-kuma. With that set up, getting the website only was really really easy: + +1. Create a new stack +2. Add a container entry +3. Fill the new entry with the url of the website container on the registry +4. Configure the ports +5. Hit start + +After that, it was just a matter of pointing nginx to the new IP address and port that Dockge uses. Just like that, the website was online. + +But this still wasn't the end of my migration tasks. + +## Unlighthouse - Implementing website testing without worries + +Before I even planned to migrate to Forgejo, I had long implemented some simple site benchmarking using the `Unlighthouse` package. This required a separate instance of my site to be running for benchmarking, as I wanted to test the site before pushing any changes to the main domain. + +The same principle now applies here: I can push changes to my dev branch and build a preview container by pushing a preview tag. Once that's build, I can deploy the preview using Dockge to a staging environment. + +With that set up, I can push a new tag with a keyword for unlighthouse to run. The reports will then be uploaded onto the old webserver, as I don't want to build extra containers just for the reports. + +Implementing this proved a lot easier than expected, but sadly I got disappointed when trying to circumvent the staging environment, as the container wouldn't work as a service in Forgejo actions. + +### Dedicated unlighthouse docker + +One last hurdle was, ironically, Gitlab. Specifically, it was their `lighthouse` container I used for testing. The main issue was that this container is run as a non-privileged user. In general, this is not a problem. However, this prevented me from actually cloning my repository using Forgejo actions. + +After some testing, I decided to just make my own version of the `lighthouse` container, without the user but with `unlighthouse` preinstalled (this also helps with processing times, as puppeteer takes a good amount of time to install each run). + +The `Dockerfile` can be found below (really simple again): + +```dockerfile +FROM node:20.10.0-bookworm +LABEL authorname="firq" +WORKDIR /unlighthouse + +# renovate: datasource=repology depName=debian_12/chromium versioning=loose +ENV CHROMIUM_VERSION="120.0.6099.109-1~deb12u1" +ENV NODE_ENV='production' + +# Update path so executable can be run globally +ENV PATH="/unlighthouse/node_modules/.bin:${PATH}" + +RUN apt-get update && apt-get -y install --no-install-recommends chromium=${CHROMIUM_VERSION} procps && rm -rf /var/lib/apt/lists/* +RUN npm install @unlighthouse/cli puppeteer +``` + +With this container, the CI step to actually run the tests became a lot easier: + +```yaml +jobs: + unlighthouse: + runs-on: docker + container: forgejo.neshweb.net/firq/unlighthouse-docker:latest + steps: + - name: Checkout repository + uses: https://code.forgejo.org/actions/checkout@v3 + - name: Run unlighthouse + run: unlighthouse-ci --site "https://preview.firq.dev/" + - name: Prepare artifacts + run: cp serve.json unlighthouse-reports + - name: Upload reports + uses: actions/upload-artifact@v3 + with: + name: unlighthouse-reports + path: unlighthouse-reports/ +``` + +Once the tests ran, the artifacts would be uploaded to the website-server for the time being. + +## Conclusion + +In the end, I must say migrating was a lot more painless than expected. Sure, Forgejo is missing some of the features that Gitlab offers (mainly YAML anchors and manual CI actions, which hopefully will be implemented in the near future). But at the end of the day, it actually feels refreshing to now have a stable and independent CI to deploy this site, without having to construct weird solutions to self-inflicted problems. + +I also updated my about page to now reflect the migration, as the old technologies weren't up-to-date anymore. + +If you want to check out the repository by yourself, feel free to do so. It is available on Neshuras Forgejo instance diff --git a/static/assets/data/_technologydata.json b/static/assets/data/_technologydata.json index 3b46e3c..2cfea86 100644 --- a/static/assets/data/_technologydata.json +++ b/static/assets/data/_technologydata.json @@ -5,9 +5,14 @@ "image": "astro" }, { - "title": "GitLab", - "link": "https://gitlab.io", - "image": "gitlab" + "title": "Forgejo", + "link": "https://forgejo.org/", + "image": "forgejo" + }, + { + "title": "Docker", + "link": "https://www.docker.com/", + "image": "docker" }, { "title": "Typescript", @@ -15,13 +20,18 @@ "image": "typescript" }, { - "title": "Alpine Linux", - "link": "https://alpinelinux.org/", - "image": "alpine-linux" + "title": "NodeJS", + "link": "https://ubuntu.com/", + "image": "nodejs" }, { - "title": "Ubuntu", - "link": "https://ubuntu.com/", - "image": "ubuntu" + "title": "serve by @warren-bank", + "link": "https://www.npmjs.com/package/@warren-bank/serve", + "image": "serve" + }, + { + "title": "Unlight-house", + "link": "https://unlighthouse.dev/", + "image": "unlighthouse" } ] \ No newline at end of file diff --git a/static/assets/technologies/alpine-linux.webp b/static/assets/technologies/alpine-linux.webp deleted file mode 100644 index 61a52ccb489100e3e303cade4495966ee9b479db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2734 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 diff --git a/static/assets/technologies/astro.webp b/static/assets/technologies/astro.webp index 000203b4dd4ab521aaad68fac8c3399462a8997f..c3b4e49ffd9b57f117d2b2160b1715a5c1b92d84 100644 GIT binary patch literal 8790 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 z zdaDaFeL`3i`Te@(^(DnYj%n9|$m$~ig!epoAOvHB@^!yOIi$v-oPW9g`GLeML~miJH5hwghPEf$rLW*pGX$B_$SPe zBmRkSZ;aEw`0}IhT%>g|I_xV=U1i7*$-fX^F#B6b)aoZTh8Gc%#BcfP* zAxrP};Ns%K?e@t@?@Vd8J}xfKE0qe#qPE_@PAmR)P!oKWePK7; z(=>U|oMt?&jh{VPeL+eI^sl!bz5lYNvVB}~JTg83@BN3CX3FCQuJB|lQ>0d!dcTCo z?xJ7c3UK(bSS5SlsvbcgRVeL=FRoH9E`pjOW!yqQ!1`+t3tQzrx9iFb~gR*s_3g?W54<63qUE-ovyN4^v=pF zAFRcrS9$i2v@vLI@#W%TOZI2Vd1ou#_+s(BtjDRl63oR#I0}K(y)Tz>a(9aSJ^D_5 z?)IZ!x1q?-z3#d=o*u1vC6ZR)3nkTzE%iP@M4Oy1%xIt2%X-KuM%q%$z;?%3;AMi4 zwsCqtQdV*F=;d3ZG^!uo>Vv{GUD)dpXZ^sQ7ZNTm6232-`5nF{uMb_ncPcvkdvHlR z!0u(TV}pAGY>K5RB|m=_LIQw7Q_K*KgDjOcH06_ik{;uszl-hxv?bqAiu$=o7#gHs zTkbb;zb>%ndzN$6>G7ZH<=g*_@@c<%J2o5L@@E@+#qvhp(qBti|5u&O`YZPZ@Zrkh z&9v!LhWTt$1p9BUUp)Y@{|bEp$9OsU>58oo^TWZ6kBRttE7nrZ`d6`yzia<5C}-34 zje9%V$?DxwlYE9;S_!g!y{z~rV*CDM|9|C`$jeswZy3$H{Ikte6!6?*7x3~04FJIG zx}-7mH?f$@2B3~8NmAvD95a2pk<8=H?mT%@*?k71dh`(dT@HF)N`%4e$KC<}tl;~L z@}hP&3s>|vxTK!2=arF{o-Sen%b3C1TxUZ42;hhRUr=b<@J zkAKlOcEc~D3swG`SSDhteHtr}8();QqN{io#){_cqA<8kMkmm-p5SuI;C>hN9z!9p z1_ql9v5i!6Bp?~Ik`eCJcxKXi-m!hxMKyYAdxQL-NsA53j@OPx=I9C~rIqQrS-g+k zql(^OuFHI^in&QO*ATF}k|){Tx#3j8v2j|sB)*l@p_K^1S@BDPHipMuI*)-dPuy-6vY%=LDN9L%k5vQ>x5HC^ud#yRq+^q z`zJK2bh}$Gl2;87uQ9h_6VlEsp6w#)(Thr(Y(ni5s$W>{^eY@>-Cu(6!Hc9+YhpS= z=_}4cEi&3o-Fi61DK={yWo*?*&r@rD4NSCcancZHy+_i^FgS_ek37Y+D9$pF%4UOL z+T`_s0*0`)tk~v&pYK;QUQ?tY&N99VJxQAr*)zS1Yt@{aj*^MxrmHnb@<*;`TOE)* zCylS%W-ZxN@fNw{lVYD(esbi@GH!8;YIo7*H`fBu$D{1e)4s?fEMGM@nFLzee*u|m zr0fH&Vjd`!Bz-=@-;8tGcqF6}e+cc#Y<*=<;1h7v>(B@}40;<4NP+~ zIt{4vy9(gv&1lpK#6gVBeFuLL&%6`bCGl5gCQjE@v! zEe;Hmg{N|w`&eO_gUoE8VAb(?)PkO(!+(*1OPen1t1Tb#Zo?5O)qX}^PR&uv@b@ep zi0jAcaUK-X9pRLO*Anjw_oquMTFcueLg|!>yDUI{}crq8p5*DavjOJZWd8 zYM%5rfs;#ICXH>V+8jRgdR=#bKhZXmd0)mC zIof_ZJM<{Lct1hK8?`9S9iHF9)J>|V8k4Q0m6{P;p;9vSCGjvI>e-0d8M*Vl;c+C6 zsHFJVAF7+D9vlDeF80}kUM#-=jVX6&W3dtnlc}MUQQXe=Kd*UiD5k%k1w2$U_{{j@VvSf(wDH!O>Vn01dWWeomp>2v506>uF7ayzb zI&u-}&~B}caf?c z<+)pjM1JUmpEI?8z^$ud==ZH|eY3=zS8&@c>U@(SjXZ!U)}qT=EHBV3oX`(gby&+l ziFsPChV5oixI=e(GDi(D4Zss!ylrQI(v`P;r2?zLIMu`c{o_e@e18yr37|@{SXK6o|e^h?Z4wbI$3iu`pp!(+Z*6Meti!3y0 zCg0NdeP@yIR`7&ho(NbPR7C%g2}!7Cj+=0m*6+ygEZ)~=Yn}Y=cBoV6;{V+U{QYg@ G-}oQc6^Ql# literal 7728 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 diff --git a/static/assets/technologies/docker.webp b/static/assets/technologies/docker.webp new file mode 100644 index 0000000000000000000000000000000000000000..5471bd081b39ab38877920deb16176dd68b0aea1 GIT binary patch literal 5864 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 bwM876g6Y~qa;|d{E05cm2hDlY|84&QI!X&} diff --git a/static/assets/technologies/nodejs.webp b/static/assets/technologies/nodejs.webp new file mode 100644 index 0000000000000000000000000000000000000000..90c48f8f2246daed7e6f196a169b9c1b5bd328bf GIT binary patch literal 9308 zcma)gWmp{Bwr%4CcXtTx5-hj}_uvqMYl6Er9xOP)gFC^U;OQj`CT4FJGQ z7Uw$9?%_acoSp$#*u+na9cziK!h)%*XM<3vH`6&3w5K#BC~uBS@NSvyeT3cZQe-Sh z;<(Oyb7kk|y^~&Bp#)(j$$FHqt4D92;BD95x4p}2?*%f-Q%{+z0ND6DvGag!Xdg5Z ziVJ0cs6OTV?*Ztk)teOkF{Zi_<~I3dnGyC8b`AH0y67aM@5lMaG!}$R{}-HO^k-9g zO1 z0^9JxC2z|O9ReCHH0&~dbs~%RhONLdzHkJj`H+wmWh_~8j1DVJ9-c}gH8n9tA{*S0 zPhk?H9z1i^0bFE64xF5a^awlXL65hbE6Rk3umu=!1Ir&xpE`y8*a}RRH~>Ue0M1={ znDMJ+(H}&1yR!?~=4;snK|ONj9okyymTL{FcQJ?$F_wrF$~Ut{ZPwcZ*z5VxAPE<^ z*rLb15|Rv|w$#*pORK4U@q#b@2XDV1TCKC4V;G$vlTe!0&(W5iU-SAbp7`grWr>r9 zMBhB*+mnu)xCF})@z(Q}ST|uJvgT%qxn9F(Ia0D=(65}fE}U9g+x2dsh=>oa%C_}J zsJN~!d9SqZ$nJ4{v z+uS>bIaUNrD_<4xx!ROW^;ES4V1il>B$2p2?ypegWg2~c&~J6yl8DXYKgkUV2?4wJ zi~iVO8w+P6myBBx=MP5!frIl$c#RAnLs|Bb1_eZ z%EH)lK(j&*3!Fk?fPF=un+(~(m-*L5LHMFXugLvu7VBY9_b2s?*m8@N^Q=0g#WLp}Kxlp|YU$iD>u*9J*O(m+6HDF? z?t|B|FVw9jr}iwrbtQ;a9XO%+IRZLPu)WsLXPoD)r-m)%z3 zkyrbi7WD-{2T4hw^a#1bA#3-D(`aS`6! z4S0#Udz}4ncp3*=s)2T78gwLS(0B26FHC6)#E2imfp?dr5wigiEj9q!OQMKXrzxRG(3*jE5OLpn1t=XQhmu!Ro4f zDE{~eCek`iSiUTZRLz@ag0LLX*vRa6`k~z$u<)X(lvsvm?Z<()uaRKY@O&xsjHIz- zZ)I;3=#Zt<1M}t+j)~^q5`Lz}vw(>jZL+o~Yn9|f`iP_UU>LH}BqxrIp7Wips=s-dz`EUEa{bNu8tku~3EvW4jY3!+ee zhuJ+m_vwsf`CcP!mv|W2m^;FNC%7s;By-3#B=D;Z$U`t7hgtivDn&XOk}evOK0zae@7Fsn~BtuG&<3Wg(x`PMQ)$`}6A^R(MjH(?8oUkH}SU=Qe^ z+ao*KEosH&ys09W`@4;Jk58+}v{cTtw0tNq$N&T&V@nxsM-D$IgeUI6hDe1VA$Y2Lhirt;4&gs{*0go7!@K+mlB7S)g+h%ce6S6+Hf? zfn4srolW%NK<|l4;B2K7m1RiWkDdoOO9P%t@^4NrJO0lEI$vcRcCya(s0_$izV=zZ z$Pi0hC6D9a^;x0JSt0olf0IAIxt5d#3Pl4vMFZe|9|jdIV;(=d0g%myc7IsjNL;rI zzqE8a63#-=`6O;&O7hko>tgA}aS@M6UZEPSL3n=XZmf-AbTi&9HJQ6V&uY9P(I_@!s+_7zkIS>G3W=5kR|ny%bN`<)ZtMbP@6&c3N}w&p8<-rFk%5@AJP zQ*VgcC(Dla)YP0Z#CUA?qyVs~sc6MTA)O$UOpah6IkPRX2gv1wRe}y#5&hSJK}XJn z#v>jpYwIU+MJap+$FK^zspoH zvcyZsP2@vj)yMPJw}Tw?e>KUW=2B=A+gj0I1^eHQ)Dz5V8-=QlA~kA4+sv^~;;S2m zP6{#V$^%TG57{2}{HRArEcLD^wFY1@3kUUor3nv$E}SA##t@U}J6X zit1xJ#~1I=fEMGLZ8QC782a)XSZCQ6P|}sxj%8UivS6ElI)TOeEL!OQQVUbZ$0&Wa zi-KpMQuy9sso1$`8fcGJWI=RMryCE{9Q)9P7Je_aXP3a@q@<8KyQ>i}3-`LFw%IqD z;QqNb|9AJRIaOV^u*#Q(v*zM4bE=)OoufEZJ;2P2ODmEAlg%4`|30#y7NAFLPgyG; zZKy-97MmgSOkR-D3rW0qDMM24j=))!uBflw6R=W7X0i;efd|*S=L?8sR$ociE%xv( zo$g2;>|La#RPSpleBC9C2qt@KAZWP{N@PSC{BbjBbhU{Ja&gG5N^R>}v-)rIXG{pWEOo!Z%#?UUOu-$YK|oJUf+h&rG9pYDIU7H^YRtJ8VEHoeuZTD1oRbyG42)s!%wwrnfx?^<+ICi zL~3dZXjBQoM_D}IwigK+ZNUH(IdI^ihg|;dNut`VjhpnBzvHVCaTNHup3^^Fpxn2 zLHvA|lA8Ed-4nI*nUfIJ<-1OWP1X?!JB-?Z9B>8++mvo_R|t3zYu)6kDTh7#Ve@s| zTj*{ouGRRR@6Qe6isrpwm~jWj>{N=No8)Appb32Z4pgySax7|}lbjAOy74fPM+@Tpjv9KqYd0(@s}j!V zINA@9#uxP~m68{W=Y%&{TAn5a=NBB=UDx%-+=suA>zttH;|%P?Q||<}c1k|8=R94U z4DzNbb}S5hZ2*U-Rvj~bb)LJqBUx1K^mB>~g<<(Zl@8gb3ksd#N2k75aPopD6J|0; z_Aq3N4-CnH^rKyvMZ)Laf^sT(f)#`(OIKuSG1hZv3jfnpD30PDBw;9rR%GqYFjca5i6-lpi8}FRR>70p(IN>O(9$osD8Uj^0t$0{DI7&BqhJr^)CT&V zo(;XLdapR|L=B9cWK7ujB9iyM`s6^hGVej=19G)pe1*}S%T0YRBC~A!I_;78?l0~48lD`bM?@Zi*6-JlDCZOqmhmg{9wyT4p(IVh2PvtYX>IfcYF+k+ zIi~`R2-`_i9eC>vELQ5_;Ky5Gv#H!pa?{Pd7H+26X%(~HPIgZ3uF951NqYkOvHmZ# z(Qh?ej}UjW+4#>&VFd%y_*F9H=HK;v3cCUXymL1Fj@a_BqJ=k#hq#>5YKiYQ3H+txS1RQnP_YhR23sxHZm2(2$7h}R&wSV& z&lb{VcBnkOmknFVNkzu2e^!fLyZ1ybj4o|PBxv%qXSjwM!rpt0ldyeO&{L?&yeaYh zFx~%R!TW|0Q;n*Nwh1hQm<~uu#(W_o9{N0{h}Rx(XUH__Z^OO6c-R+MdW$IvK?Rjh zl(aGBXUyi+_X99k6u}_LXQ$XOPPW!hM!pPsT=f|b<&H`c+3vo1qD28cKSM-|A>dDy z)S8(0+$s23<40$PvlZl`hiVME$rZ`(fY)}Wc@`(?Q+yV!PTEn`DBb#ggQt#WiszGNYkPI z9e7#t`7{oQmMwFVtczEI4h24xS1U^(QyN#wOb8fma#px^XDccfvam5x zSA32{k|4M(nW5oNA*9i6OnDH?LHBy=8blzt2edtOBGZG9G&JngW*K=H>7Yt((=OV{ zSffnz8fvP2^2QEzDYG~FC@jkt?h8IMl%h*7tBRk7>x|lLGp8y-9nrCSdCds??)W%H z0dy!Zkkt2}6yZ>=1Ft^5OZeY+F#eyW2bA#5OD~419R~o29|B~-Ft@|D!-{edMM~vU zM~2_PW5ERL8#EggM+am=0A>L5Aa9t)6>%|fu|V502*5uu0MHAah4O`;=WL1rI6g%MX`$lT;GaNlZw@Rx<(7$8-JG2%pIK8nA`X~Iqp}4scIS`M72lOA% zJY}g`T&v~EDdewFmu_`BOsRnFXXYO-WXGsKWc=%gKQuyv-xvt$O@m%$dGlO>`ajds z6RuzBh(O3oz0Jh>56m4WgBSUy02EXINEn^cXOH-YmhkJ7d%{s8QZ4oSjzF2L-`C9J zlAK{G3m4T5tSma+^%xTxO||u-sC^YYO}6?=gYS85IwFkI$MO_VLb|;3P(6Sp!Mv2LvIv7l^+?6!_C}ct(px3+s$zj*9G~gNt21PTEko6g>)v z()lM18t>j%|5(alp1dc5vXx98DyAFtM@vK3uCe?9+L5Y3KHk^0;2$NWD-(Xaq+_b{ zh10r(&JCu|#(l7z2{Wg8dC@Ej%-qpL(LxO_QMwZ4=uG;Mfqa*8YME~YPU z9o4Ye*NyG%E|t7e3PEii){4@QRchyUQA@Np-oFhg+#tl8RDU4NCPD~Vq5SKy7A2Np zV7%=xL`#+>=!6M=rlg2gjN*GOw9o9Qqv`gN<5ZTH8*=#p=C5b#r?T(e=gnFRlDMj` zPx{~}p1|*f3Wt1gz?8o<`1kcrXOv8TL8Yq-N7SofWdVoLk)+YB+Lr?VD%?N)Ex@Z5Q2*~( z|03|8g?b79A5Q;&npXe-QSFJX3TBGz8bF^;Me_cxiXt~~6w&swD+Q9NyH#}4mtN-vL-zLO= z`WjO`EC7VOi@Uvui6*=L{E-*R%uEh0*a1+~Kbh@+^apgIB1=RXkBG6C>D7lj^vK?dU#DVD+Ui6b zQxCxKCd3_v5N{a4CkhqqEJb2pdaj_TexM_j^KUyt9*PvL+i`6uf1gWaN?*gHKuN&L zF>D}UY0DX&!ZrI4Xd>gXHae9yJ${oUBEG_XDP8@mTr7Y|^`2R*6BD_m>8U(U!13&z zXp{*4=0+w)wYvH%NhE?RJH>s9w>AuP`ma8#e^yO5OsTk5jbMP8pBAE%EeARTL{WSN zSxBU=yS-5ZUfM>ZH|Lb>f2il;xXkYjgw45daQZcdL(KRQ9>b|mP;~+W2l#6pY4Iq# z7W=$?yH6SkQ;U=nXEC{<>d+nw3E9L>2287K?49pZ>^BKr?dv@F_4w8N!mjJrNISiY zAE<-yxUs;g76xZEI?{TE^NSbFjrgLCz{ZVCmNck?<2Fz`RF@uWW=4%3Wrk%Ltp~y*tvjqTrkiNh4a-i$4 zu_mm}B8hKeQ2pH!#~-mVS%bf}f46QUhd5qTT?1j^s^oj{^9D zeV^YJoEz10Ky0x@(Td9hSyONTeIvgWY(d#XO;YauI)#|+>XXlL~|kT9u1!+=UBLKQfZ8sD)&y}H}Cnq z7n<*pS#1r!Zv)H1ExTa0c(-KbjN$F#=)X|0qtXY*WKm(=I8lO}PLBlwU2Mp;&+sNzCApRMrxj#VgKg#v4-F0c+q05#JAA zcj4|@7Eg)^>dfC>mluX{bYIz&oCQw}YGyRk#HVg@OSR2&OfRs3KRA7SbXA||#yOj} zuxBUnMe5CSk84QZs_sl^Tui;%{1Zr zyWvk-U*At8?*Ag2ZYsf2{fHl-qR8@b=o{X$0#Vm+74$1Js~G+GBZLZIKbSr4;Je=O z`*8O6EQdZ89(@cVT|gI-ggMd?B70x#lDja1v99Eb{8?e-!rt_Z_aIx=%hs@^8A z@y;othhs4;)uoc3o!T>e-qNSX*ukS%FpBjRt*K&LzoH*VvWMRqc?SQ3Tccs0+_kNz z4QG~=#iiIW{1)(aXNv}==2l;3+KO4vd;YmZ(!4v0(bb1{j0Y$^^6DnC7r?Kchqy;M zGPLqghFO!{!Z}KKSUZ*lM2#@pAAar(udu&1^5W^cd^VSmDdq(r#YH~5A4x7iSz?r= z5!L%#zsy5*^$9uFFE!j|4N0Uxb>qqt<2NDX^*izmc!ux#3J6c5RhJOf6Y(Vcnbnk5 zXQb5C6>3KA8BMh5-|l&l%Z3Ka4zv#237|Ybo$Gd&`>Hq#(WCm3`PV-R=hy3Yk~88zon_>(44__#OLlxadp;3txsuGn=rd5F)W7mL$=4D?e zAJbN*a3-`7C&M!%{)~rk@G1-8;;lv_!DCKjtI_*(^H{V(kAlHe;b;c_nUpsx7FxPf zXC^R;!mpm>@3N4fXIQE=XZgGYB&>V9o9(R^T#l^^w#ZEFi*Wo6>EPkimR`}qWR-Es zxN~0%`GEZOA)+`Hl|bA}ktp7Cvf3FP9y z2WXRsa+wjfmmku}=3MKWK@}T)!SLl#w`XQ|pHFlzP<>gD6J2O zXD4B$VlYCo_>-#DQ?dXqV}IQ-IcT**;I;>g5AxhoKd4zs*@3Hy@pBZx{t!8Y6NPL< zv;UbLpV))@Al%QfSUkd;w6ZzEti< zr>Ws#JSI^}i*0?k6xl?TeGS=O2 zQ0Novm!l$r*CmMER+nK=`g41WA2p~ZFtD(Gz^M#ZKRz3+kK^tsUse0YE2O#yyLw?u z;N=BrRFp{;)^%70s%Z>i@Z1=B>mp!;`v4QeT2oo*^``OFKEeYg=Gwov)=GgFRjH)! zGM-F)jvw#F8MR$JzZo>Ht`*_X^BQeNvrmnZMjQKd@))6!GR+^qhDzxg!@N=Y#@rWb zOTgxm-4nC><|OIb4S8w~U0a@F!)r-1S*EnZz;`K)bwhnH{QmgdNhaxm#wq`tS*+15 ze48h@d}3wP!XRP8V!7MEfg)-XjsUCO6d+tX&@W^l(=TFIAM>ioaPfL#MfS-Mjw)9OvOU-lGALJ{hYQU#unY1)Y7o(IdCe$U=M#KScG zfWN!w>FF5!)~m?-mq~IOPwaf|QSSEqMs9fhpbE&zb^==7V#&QLcY z+Lh?~&L1f*^f-P)Aa#uWu+PZ27?c5f#pPl)q-M;v7Dhh$>$F>4b5 literal 0 HcmV?d00001 diff --git a/static/assets/technologies/serve.webp b/static/assets/technologies/serve.webp new file mode 100644 index 0000000000000000000000000000000000000000..3d49da185b45d786caeb664bc3dff4b296faa2e2 GIT binary patch literal 872 zcmWIYbaP8!W?%?+bqWXzu2zupn1@8He4CgYvvajNNP5mj9DH`~MI7 zga0Slnz=OC6QtcIHO#zgKjF}_4L{wl>vml^xYJ$m?|cTE|Mo<{|G!=)Ol;QvaXI&i z;q+hiXY0#9r!=Yy+x$7B%x-M+tVJgN<$lxuH@)YjO&Rk(>&)Ci{;isrxjm?m^u1An^Qb;Oh%)6g?PLjeVsz(HU_86= z`r)V_YyoF%IJN)uCKQY3Ju;k~_B$r(&|b&3*opHSh0ZA|?^XP!x~28~G8N-x&JUy+ zBEMappiQ=aer(c8o%*JGR^@~KAV%!>3=k9BWoX`Fpt^n8KIJU8KYQd6FK zFNk&!Ti)?XOQ$vWJ;R;WhOQg33WviJE;s1RapvCXe4zJ&MMl$dqX#mj+!m7i95+lj zey210#N)aJ2ktAE==H8JGINpJ z$T9}!S8UT0UD6%qIlpU5o)vsRJkjBA!U;!}0u}b10;dED4+P%f5v*3ZK4bpL^n_0K zyw0DFef$EO>@D_9IVEDmcp~wh??#_K5$_{z8eV_yH7MQT4du92pn2tGw1eu6j@2K_ zRy|a*;qfZ4zM@dWcXegM_h8m!tpk21bPxOuXgq1Nrj2#VF+PQU;}egG}?RPQ(0JEc^{Qv*} literal 0 HcmV?d00001 diff --git a/static/assets/technologies/ubuntu.webp b/static/assets/technologies/ubuntu.webp deleted file mode 100644 index a78f23e3061abbf03e73d1f77bb335aa66159f8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9132 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 diff --git a/static/assets/technologies/unlighthouse.webp b/static/assets/technologies/unlighthouse.webp new file mode 100644 index 0000000000000000000000000000000000000000..91a93654af70da45e088620958ca62526ec1eec7 GIT binary patch literal 8754 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 literal 0 HcmV?d00001 -- 2.39.2