<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:base="https://tiagoportugal.top">
  <title>TP blog</title>
  <subtitle>Bitaites sobre o que vou ouvindo e fazendo</subtitle>
  <link href="https://tiagoportugal.top/feed.xml" rel="self" />
  <link href="https://tiagoportugal.top" />
  <updated>
    2025-01-20T17:27:36Z
  </updated>
  <id>https://tiagoportugal.top</id>
<author>
    <name>Tiago Portugal</name>
    <email>me@tiagoportugal.top</email>
  </author>
    <entry>
      <title>Pano de fundo</title>
      <link href="https://tiagoportugal.top/posts/makingof-240713/" />
      <updated>2024-07-13T00:00:00Z</updated>
      <id>https://tiagoportugal.top/posts/makingof-240713/</id>
      <content xml:lang="pt" type="html">
	&lt;p&gt;Um pouco atrasado com esta publicação, &lt;strong&gt;não porque&lt;/strong&gt; tenho a disciplina de escrita de um puto de 5 anos, mas porque penso que agora seja altura perfeita para resumir esta minha aventura.&lt;/p&gt;
&lt;p&gt;De qualquer forma, fica aqui a minha experiência ao criar e gerir este blog/portefólio.&lt;/p&gt;
&lt;h1&gt;O porquê disto tudo&lt;/h1&gt;
&lt;br /&gt;
&lt;p&gt;Sempre gostei de ler/perder-me em blogs e publicações sobre aspetos técnicos relativos a nichos no desenvolvimento de software ou em tecnologia no geral.&lt;/p&gt;
&lt;p&gt;Quando leio estes textos sagrados, uma vontade de fazer algo, seja estúpido, produtivo ou simplesmente inútil, cresce em mim, tendo inspirado vários projetos meus, mesmo que tenham, na sua maior parte, morrido na praia ou nunca visto a luz do dia.&lt;/p&gt;
&lt;p&gt;No entanto, apesar da taxa de sucesso destes projetos, do trajeto, que escolho para cada um deles, costumo tirar algo interessante ou frutífero que depois acabo por revisitar.&lt;/p&gt;
&lt;p&gt;Ao criar este meu cantinho da internet, dos frutos que vou tirando aqui ou ali, queria deixar uma semente, tal e qual como a que muitas vezes me faz levantar e como referi criar algo, assim contribuindo para este estranho ciclo.&lt;/p&gt;
&lt;h1&gt;Escolha de frameworks&lt;/h1&gt;
&lt;br /&gt;
&lt;p&gt;Tendo decidido criar esta coletânea de paredes de texto que agora estão a ver, fui procurar as ferramentas para o fazer.&lt;/p&gt;
&lt;p&gt;A minha experiência no desenvolvimento de web não é muita, mas existe e foi dai que parti.&lt;br /&gt;
Normalmente este tipo de blogs, são feitos com recurso a geradores de websites estáticos, que a partir de uma planta ou &lt;em&gt;template&lt;/em&gt; pegam no seu conteúdo numa estrutura simples como markdown, latex ou até mesmo html e criam várias páginas.&lt;/p&gt;
&lt;p&gt;No meu caso escolhi e uso markdown, pela sua simplicidade, nada de tags dentro de tags ou quer que seja que latex faça.&lt;/p&gt;
&lt;p&gt;A minha experiência com este tipo de ferramentas, é baseada nas contribuições que fiz a algum tempo para o futuro (acho eu) website do meu grupo de Linux da universidade ( &lt;a href=&quot;https://glua.ua.pt/&quot;&gt;GLUA&lt;/a&gt;, se quiserem conhecer fica aí a ligação, essa malta é espetacular ). Ai utilizei &lt;a href=&quot;https://gohugo.io/&quot;&gt;Hugo&lt;/a&gt;, foi interessante e aprender uma sintaxe para templates como &lt;a href=&quot;https://mozilla.github.io/nunjucks&quot;&gt;nunjucks&lt;/a&gt; foi útil, no entanto, achei muito a papinha da forma como o Hugo funciona á volta, e promove a utilização de temas.&lt;br /&gt;
Provavelmente poderia simplesmente ignorar todas essas indicações e fazer algo, como intendia, do zero, mas para isso, seria preciso ler atentamente a documentação, uma coisa que como sou estúpido não faço, e pôs-me á procura de alternativas.&lt;/p&gt;
&lt;p&gt;Nessa minha pesquisa encontrei &lt;a href=&quot;https://www.11ty.dev/&quot;&gt;11ty&lt;/a&gt;, e fiquei surpreendido o quão simples é, sem falar que é bastante rápido e por omissão oferece uma liberdade estupenda. Com isto, um toque de &lt;a href=&quot;https://tailwindcss.com/&quot;&gt;tailwind&lt;/a&gt;( nunca mais utilizo CSS puro ) e um ou dois plugins tinha tudo o que precisava e assim comecei a meter mãos á obra.&lt;/p&gt;
&lt;h1&gt;Desenho/Protótipo&lt;/h1&gt;
&lt;p&gt;Por muito que gostaria de dizer que sou um desenvolvedor responsável e tenho sempre reservada uma etapa para o planeamento e desenho daquilo que quero fazer, não, mergulho de cabeça e espero pelo melhor.&lt;br /&gt;
Aqui como muitas vezes acontece, mergulhei e bati com a cabeça. Depois de uma ou duas horas a fazer e refazer coisas aleatórias ou a olhar para uma cegante pagina em branco, percebi que se calhar era melhor tirar um tempito para realmente desenhar e estabelecer mais ou menos bases do que queria fazer.&lt;/p&gt;
&lt;h2&gt;A tela&lt;/h2&gt;
&lt;p&gt;Normalmente para websites simples utilizo, simplesmente, papel e caneta, porém, numa das minhas cadeiras na universidade utilizei &lt;a href=&quot;https://www.figma.com/&quot;&gt;figma&lt;/a&gt; e gostei da forma de como pouco ou nada tinha de pensar na localização dos componentes e seguir apenas a, meio que detalhada, planta.&lt;br /&gt;
Quando fui criar a minha conta, o nosso senhor, Richard Stallman, sussurrou-me ao ouvido e indicou-me &lt;a href=&quot;https://penpot.app/&quot;&gt;penpot&lt;/a&gt;, que ao contrário do figma é FOSS (Software livre).&lt;/p&gt;
&lt;h2&gt;Do nada a algo&lt;/h2&gt;
&lt;p&gt;Neste ponto tinha o meu objétivo, as ferramentas e uma tela onde esboçar o dito cujo, mas não tinha se quer ideia do que fazer então procurei referencias onde me pudesse encostar.&lt;/p&gt;
&lt;p&gt;Aqui estão algumas que gostei:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ntietz.com/blog&quot;&gt;ntietz blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pluralistic.net/&quot;&gt;pluralistic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://neocities.org/&quot;&gt;neocities&lt;/a&gt; *(o conteudo em si)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dingusland.biz/&quot;&gt;dingusland&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://lukesmith.xyz/&quot;&gt;lukesmith blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.tomscott.com/newsletter&quot;&gt;tom scott newsletter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ludic.mataroa.blog/&quot;&gt;ludicity blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;etc ...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Desta pequena amostra, qualquer um poderia facilmente adivinhar que adoro sites minimalistas, paredes de textos vindas dos anos 90, e estariam absolutamente corretos.&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;&lt;strong&gt;Tendo estes como pilares comecei a construir o meu castelo.&lt;/strong&gt;&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;A primeira coisa que fiz foi decidir a temática, e escolhi um tema arcaico, com uma estética e fontes que remetem a de um terminal. A partir daí, o resto simplesmente segui os meus instintos e fiz aquilo que gostaria de ver num blog.&lt;/p&gt;
&lt;p&gt;Na escolha das cores, não vou mentir, copiei a palete &lt;a href=&quot;https://www.nordtheme.com/&quot;&gt;nordica&lt;/a&gt;, não sei porquê, mas adoro este esquema de cores, faz me sentir confortável e com que os meus olhos deslizem como manteiga a ler.&lt;/p&gt;
&lt;p&gt;Os únicos aspetos que acho que têm o seu mérito, se algum ..., são a navegação, onde decidi fazer da barra de navegação tapete e metê-la como um sticky footer, e o header com meu nome e email que acho que ficou engraçado.&lt;/p&gt;
&lt;p&gt;Quando comecei a desenhar isto tudo, pensava que o resultado final ia ser completamente diferente, mas como podem ver esse não é o caso:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://tiagoportugal.top/assets/img/posts/makingof-240713/penpot.png&quot; alt=&quot;penpot&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Não sei se isto diz alguma coisa sobre o lado artístico, ou quão má a minha criatividade é.&lt;/p&gt;
&lt;h1&gt;Mãos á obra !&lt;/h1&gt;
&lt;br /&gt;
&lt;p&gt;Depois destes esboços feitos, deixei este projeto repousar durante um bom bocado, mas mesmo enferrujado com a ferramenta, 11ty, tailwind e outros, as plantas realmente permitiram-me avançar com o projeto.&lt;/p&gt;
&lt;p&gt;Primeiro tentei navegar pelos projetos iniciais que o 11ty tinha na sua documentação, para projetos esqueleto na minha opinião tinham dependências a mais e desnecessárias, pelo que os descartei.&lt;br /&gt;
Eu apenas queria, como disse, usar tailwind e alguns plugins do 11ty nada de complicado.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sem nada por me guiar fui então a ler a documentação e dar uso ao teclado&lt;/strong&gt;&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;Honestamente, nem foi assim tão complicado, a documentação é relativamente fácil de compreender e avancei bastante rápido ( quem diria que a documentação ajuda ), tive de aprender um bocado de nunjucks e tentar perceber mais ou menos como tailwind funciona, mas outra vez, isso também não foi problema.&lt;/p&gt;
&lt;p&gt;No 11ty tudo são templates, mesmo o próprio conteúdo, para processar um template noutro utilizamos filtros, e foi isso que essencialmente deu mais trabalho, criar ditos filtros na configuração, &lt;code&gt;eleventy.js&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;
    eleventyConfig&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;addFilter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;MarkdownFilter&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

	content &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; content&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;replace&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token regex&quot;&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token regex-source language-regex&quot;&gt;&amp;lt;p&gt;&lt;/span&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token regex-flags&quot;&gt;g&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;&amp;lt;p class=&quot;mt-2 mb-4  [&amp;amp;:has(img)]:flex  [&amp;amp;:has(img)]:my-14  [&amp;amp;:has(img)]:md:h-96 [&amp;amp;:has(img)]:justify-center &quot;&gt;&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	content &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; content&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;replace&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token regex&quot;&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token regex-source language-regex&quot;&gt;&amp;lt;h1&gt;&lt;/span&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token regex-flags&quot;&gt;g&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;&amp;lt;h1 class=&quot;font-extrabold md:text-8xl py-3 text-7xl underline &quot;&gt;&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	content &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; content&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;replace&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token regex&quot;&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token regex-source language-regex&quot;&gt;&amp;lt;h2&gt;&lt;/span&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token regex-flags&quot;&gt;g&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;&amp;lt;h1 class=&quot;md:text-7xl text-6xl py-2 underline&quot;&gt;&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Este filtro markdown pode ser aplicado nos templates desta forma :&lt;/p&gt;
&lt;pre class=&quot;language-nunjucks&quot;&gt;&lt;code class=&quot;language-nunjucks&quot;&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;div&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;text-xl md:text-2xl&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;content&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;MarkdownFilter&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;safe&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;div&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;E parecendo que não em um pouco mais que o uma semana tinha mais ou menos tudo pronto, só falta o mais difícil, o &lt;strong&gt;conteúdo&lt;/strong&gt;.&lt;/p&gt;
&lt;h1&gt;Meter o blog no ar&lt;/h1&gt;
&lt;p&gt;Entre a fase de desenho e realmente meter mão á obra, referi que deixei o projeto repousar por um bocado, isto porque sou preguiçoso, estava ocupado com outras coisas, ou estava a construir e perceber como dar selfhost daquilo que preciso.&lt;/p&gt;
&lt;p&gt;Nessa jornada de selfhost, aprendi que para realmente hospedar o meu website, teria de expor o endereço IP para o exterior ou utilizar um VPS com um reverse proxy redirecionando o trafico para o meu servidor.&lt;/p&gt;
&lt;p&gt;Claro que não queria expor o meu IP então explorei a segunda opção e descobri algo . . . &lt;strong&gt;VPS são caras para caraças&lt;/strong&gt;. De maneira alguma iria pagar 8€ mês, por um projeto que poderia hospedar em algo como &lt;a href=&quot;https://www.netlify.com/&quot;&gt;netlify&lt;/a&gt;, domínio customizado, de &lt;strong&gt;graça&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Para esclarecer não estou a descartar o uso de uma VPS, mas para mim de momento não faz sentido, se ainda tivesse que hospedar algo mais no publico, como, por exemplo, serviços tipo pastebin ou algo colaborativo como mattermost ou alguma office suite, mas de momento não preciso.&lt;/p&gt;
&lt;p&gt;Antes meter o anel no netlify, fui procurar por alternativas e houve uma que realmente me despertou o interesse, &lt;a href=&quot;https://surge.sh/&quot;&gt;Surge.sh&lt;/a&gt;, nada de painéis de administração ou websites complicados, apenas uma cli e uns quantos comandos e tinhas o website no ar. Só não optei por esta alternativa porque o plano gratuito não suporta dominios customizados, no entanto caso precise de hospedar um website aleatório para um pequeno projeto estará no topo das minhas opções.&lt;/p&gt;
&lt;p&gt;Um pouco desiludido, lá segui com netlify, criei uma conta, adicionei os meus domínios e meti no ar este website com a netlifly-cli.&lt;/p&gt;
&lt;h1&gt;TODOS e Conclusão&lt;/h1&gt;
&lt;br /&gt;
&lt;p&gt;Ainda tenho uma outra coisa que quero ajustar e explorar, como o template de RSS que apesar de funcional está uma porcaria, reparar pequenos problemas que encontrar com o filtro de markdown e talvez organizar a configuração do 11ty.&lt;br /&gt;
Mas por agora está novo ! :D&lt;/p&gt;
&lt;p&gt;Se disto tiro alguma coisa, é respeito por quem tem de escrever como profissão e que escrever é difícil, apesar de me estar a adequar aos poucos ao ofício.&lt;/p&gt;
&lt;p&gt;Em suma, é bom ter este meu cantinho da internet, para me expressar e dar os meus bitaites, mesmo que dê algum trabalho.&lt;/p&gt;

      </content>
    </entry>
    <entry>
      <title>Adeus cloud</title>
      <link href="https://tiagoportugal.top/posts/selfhosting-240523/" />
      <updated>2024-05-23T00:00:00Z</updated>
      <id>https://tiagoportugal.top/posts/selfhosting-240523/</id>
      <content xml:lang="pt" type="html">
	&lt;p&gt;Há três semanas atrás decidi criar este portefólio/blog, no entanto, queria dar selfhost do mesmo.&lt;br /&gt;
Embora tenho ido por outra rota de modo a não expor o meu IP ao exterior o bichinho do selfhost permaneceu.&lt;br /&gt;
Aqui deixo a minha jornada até onde hoje estou.&lt;/p&gt;
&lt;h1&gt;Escolha do hardware&lt;/h1&gt;
&lt;p&gt;Tendo feito a minha decisão, faltava a plataforma onde pôr o meu plano em prática.&lt;/p&gt;
&lt;h2&gt;Limpeza de primavera&lt;/h2&gt;
&lt;p&gt;Inicialmente comecei por vasculhar e arrumar gavetas e armários para ver o que tinha por casa, chegando à conclusão que todos os computadores que tinha estavam num dos seguintes 3 estados :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Avariados&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Atualmente a ser usados&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mau estado ou Inutilizáveis&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Na última categoria tinha um Magalhães ( Intel Classmate PC) de primeira geração, a correr Linux Mint, com o disco a dar as últimas, que ainda estou a ponderar como trocar, estando os parafusos todos rafados de em puto tentar abrir aquilo com facas e o que tinha à mão. Além dessa relíquia, outro incrível achado foi um portátil Toshiba que crasha aleatoriamente pelo que duvido que a 1h de uptime chega-se.&lt;/p&gt;
&lt;p&gt;Com um pouco de trabalho talvez consegui-se utilizar um deles, no entanto falham dois requerimentos que tenho.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tecnologia de virtualização (Intel VT-x or AMD-V)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consumo razoável&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O segundo ponto talvez conseguisse atingir com um pouco de configuração de &lt;strong&gt;C-STATES&lt;/strong&gt;, se é que os suportam assim que o primeiro ponto falhou não me dei ao trabalho de verificar.&lt;/p&gt;
&lt;p&gt;A importância do primeiro ponto deve-se ao facto que pretendia correr o meu website e outros serviços, que poderia posteriormente dar selfhost, em contentores.&lt;/p&gt;
&lt;h2&gt;Caça aos gambozinos&lt;/h2&gt;
&lt;p&gt;Ok, dando a busca local por computação adequada terminada, vi que tinha que gastar uns trocos se realmente quisesse prosseguir.&lt;/p&gt;
&lt;p&gt;Fui desesperado procurar por &lt;strong&gt;maquinas Intel de quarta geração para cima&lt;/strong&gt;. Os preços que encontrei rondavam os 60~70 €, sendo a maioria torres HP, Dell, Lenovo, Fujitso , etc . . . provavelmente com origens em contextos empresariais.&lt;/p&gt;
&lt;p&gt;Embora seja um preço acessível iria-me ver às negras para posteriormente dar upgrade de qualquer coisa que fosse, devido a uma selva de suportes, guindastes e outros mecanismos proprietários de hardware ao software. Torres da Lenovo e da Fujitso pareciam-me mais aceitáveis, mas ainda assim não me apetecia arriscar.&lt;/p&gt;
&lt;p&gt;Deixando-me com duas opções, elevar a busca a níveis absurdos comprando peças individuais e montando um sistema low cost do zero ou . . . um &lt;strong&gt;rasberry pi&lt;/strong&gt; que no futuro podia utilizar em outros projetos.&lt;/p&gt;
&lt;p&gt;A escolha óbvia foi um Rasberry PI. Qual deles é que foi um pouco mais complicado sendo que o Rasberry PI 4 8GB, nos mercados a que tenho acesso, estava ao mesmo preço do Rasberry PI 5 4GB. Um com mais memória, no entanto, menos poder de processamento e outras funcionalidades como velocidades USB 3.0 aumentadas e um PCIE slot, que depois poderei usar para um SSD. Tendo isto em conta, em vez de gastar 60~70€ numa destas duas opções acabei por investir mais 20€ e escolhi o &lt;strong&gt;Rasberry PI 5 8GB&lt;/strong&gt;.&lt;/p&gt;
&lt;h1&gt;Arquitetura&lt;/h1&gt;
&lt;p&gt;Tive uma semana para pensar como ia preparar a cama ao bicho, no entanto, só o comecei a fazer depois de o mesmo ter chegado.&lt;/p&gt;
&lt;p&gt;Tendo já dois domínios preparados, um para o meu website e outro para os meus serviços, comecei a trabalhar.&lt;/p&gt;
&lt;h2&gt;Génese do famoso homelab&lt;/h2&gt;
&lt;p&gt;Para começar, ignorei completamente o acesso ao exterior e simplesmente meti os contentores a correr.&lt;/p&gt;
&lt;p&gt;Embora tudo quanto fosse tutorial indicasse-me a utilizar Docker, eu utilizei Podman porque gosto do projeto e vai dar ao mesmo.&lt;/p&gt;
&lt;p&gt;Quando o Podman começou a aparecer na cena, a sua carta na manga eram os &lt;strong&gt;rootless containers&lt;/strong&gt; (era porque agora o Docker também já suporta) e foi o que inicialmente ia usar, porém estes rootless containers não podem ser mantidos pela root (quem diria!!!), pelo que para que os containers fossem reiniciados pelo sistema e mantidos sem qualquer intervenção, teriam de ser rootfull. Eu descobri isto após uma horita a tentar perceber o porquê de os meus serviços só estarem disponíveis com uma sessão de SSH aberta . . .&lt;/p&gt;
&lt;p&gt;Outra coisa que aprendi tendo sempre desenvolvendo software para x86 é que algumas imagens de Docker não têm versão ARM, ou exigem que seja utilizada uma tag a especificar que uma versão para ARM seja utilizada. Tudo bem até aqui, agora dava jeito era avisarem isso em vez de obter um erro genérico &lt;code&gt;Failed Exec&lt;/code&gt; ou algo parecido.&lt;/p&gt;
&lt;p&gt;Para reiniciar os container a maior parte dos artigos/posts online aconselham a adicionar uma flag &lt;code&gt;restart-always&lt;/code&gt;, o Podman tem um serviço systemd chamado &lt;code&gt;podman-restart&lt;/code&gt; que fornece esta funcionalidade, no entanto, decidi ignorar isto e optar por uma integração do systemd com containers denominada de &lt;code&gt;quadlets&lt;/code&gt; ou &lt;code&gt;docker/podman-systemd&lt;/code&gt;, que a partir de ficheiros de configuração, faz com que o systemd trate de dar pull das imagens e o estado dos relativos containers.&lt;/p&gt;
&lt;p&gt;Depois de algum tempo a escolher as imagens certas, criar os volumes, fazer a transição de rootless para rootfull e outros problemas 2–3 dias tinha os contentores a bombar nas suas portas.&lt;/p&gt;
&lt;h2&gt;Networking&lt;/h2&gt;
&lt;p&gt;Ok, contentores a trabalhar e portas definidas, a única coisa que faltava era uma forma uniforme de aceder ao vários serviços dentro e fora da rede de casa.&lt;/p&gt;
&lt;h3&gt;Solução á Papo seco&lt;/h3&gt;
&lt;p&gt;Pus-me ao trabalho e defini um IP estático no router para o meu servidor. Passando de seguida adicionar um &lt;code&gt;A record&lt;/code&gt;, com o IP publico do meu servidor, ao meu domínio e subdomínios.&lt;/p&gt;
&lt;p&gt;Por razões de segurança e penso que devido à falta de IPs desde o início da internet normalmente as ISPs vão trocando os IP publicos de redes domésticas. Com isto, cada vez que esta mudança ocorre os &lt;code&gt;A records&lt;/code&gt; ficam desatualizados.&lt;/p&gt;
&lt;p&gt;Felizmente existem clientes DDNS (Dynamic DNS), que consistem em daemons, que a partir de serviços de descoberta de IP públicos em conjunto com as APIs das entidades do registo de domínios atualizam, dinamicamente, os dados de um dado domínio. No meu caso e penso que no caso da maior parte das pessoas, &lt;strong&gt;ddclient&lt;/strong&gt; serviu para o problema.&lt;/p&gt;
&lt;p&gt;Tendo &lt;strong&gt;ddclient&lt;/strong&gt; acedi ao meu router e, além da porta de SSH (porta aleatória, não 22), abri as portas 80 e 443.&lt;/p&gt;
&lt;p&gt;Nessas portas 80 e 443 pus um contentor a correr &lt;strong&gt;nginx proxy manager (aka NPM)&lt;/strong&gt;, e configurei os endereços e as portas a que correspondem. Neste processo aprendi que nunca mais vou utilizar localhost, passando a optar por &lt;code&gt;127.0.0.1&lt;/code&gt; .&lt;/p&gt;
&lt;p&gt;Pensei em dar por concluída a minha aventura aqui, apesar disso, a sensação de que qualquer pessoa podia aceder aos meus serviços (embora tivessem de saber a password para cada um deles) não me deixou dormir.&lt;/p&gt;
&lt;h3&gt;Solução relativamente segura&lt;/h3&gt;
&lt;p&gt;À medida que ia fazendo pesquisas de como melhorar o meu homelab e que serviços hospedar, havia sempre malta a aconselhar a utilizar uma &lt;strong&gt;VPN&lt;/strong&gt;  para aceder a rede local, e aí usufruir das várias aplicações no servidor.&lt;/p&gt;
&lt;p&gt;Pelo que não fiz mais nada instalei &lt;strong&gt;wireguard&lt;/strong&gt;, abri a porta no router e fiz configuração para rotear o tráfico da interface virtual do wireguard para a do servidor, isto reencaminhando qualquer pedido de algum nó wireguard, connectado ao meu nó no servidor, seja reencaminhado para a rede local.&lt;/p&gt;
&lt;p&gt;A partir dai foi só alterar todos os &lt;strong&gt;subdomínios&lt;/strong&gt; para o IP estático do servidor e fechar as portas &lt;strong&gt;SSH&lt;/strong&gt;, &lt;strong&gt;http&lt;/strong&gt; e &lt;strong&gt;https&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Sendo que com isto desde que esteja conectado ao &lt;strong&gt;wireguard&lt;/strong&gt; consigo aceder a todos os meus serviços, em qualquer lugar.&lt;/p&gt;
&lt;p&gt;Para facilitar adicionar novos dispositivos, estou a utilizar wireguard-ui (wg-ui). É fácil de usar, porém, é preciso adicionar uns serviços systemd e fazer as configurações na interface web, em vez de diretamente nos ficheiros de configuração.&lt;/p&gt;
&lt;h2&gt;Desenho da arquitetura&lt;/h2&gt;
&lt;p&gt;Para quem quiser replicar, fica aqui um guia visual, que também está no meu repositório juntamente com outras configurações.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://codeberg.org/Disco-Robot/homelab/raw/branch/master/other/img/homelab.png&quot; alt=&quot;homelab&quot; /&gt;&lt;/p&gt;
&lt;h1&gt;Um passo mais perto de ser autossuficiente&lt;/h1&gt;
&lt;p&gt;Além de ter aprendido uma coisa ou outra e todos os benefícios de agora ter um homelab, um dos aspetos mais importantes que atingi com este processo todo foi tornar-me um bocadito mais autossuficiente.&lt;/p&gt;
&lt;p&gt;Numa época onde ensh*tificantion ou m*rdificação se tornou a norma, ter algo local, privado e que temos, com certa, garantia, que não nos vais extorquir por mais dois 2 € para satisfazer acionistas, que esperam algo, tão estúpido, como crescimento contínuo, num mundo finito, penso que mais essencial, é necessário.&lt;/p&gt;
&lt;p&gt;De qualquer forma fico apenas feliz por dizer, &lt;strong&gt;adeus cloud.&lt;/strong&gt;&lt;/p&gt;

      </content>
    </entry>
</feed>
