Skip to main content

Command Palette

Search for a command to run...

Seu próprio "GitHub" em casa e de graça

Updated
10 min read
Seu próprio "GitHub" em casa e de graça
L

I'm a simple man... "I see coffee, I drink coffee"

Pra que usar GitHub, BitBucket, GitLab quando você pode ter o seu servidor de Git em casa enquanto prepara um chá?

foto de capa: "YDS Library" by Chris and Amy Stroup is licensed under CC BY-NC 2.0

Intro

O que seria uma "solução" sem problemas?

Caso você tenha caído de gaiato aqui e não saíba o que é git, em uma resumida absurda ele seria "o Google Docs do seu código":

  • Possui versionamento
  • Histórico
  • Várias pessoas podem editar ele
  • Trabalho simultâneo em diversas tarefas
  • etc

Caso isso seja interessante para ti, antes de continuar a ler o texto por favor veja os seguintes conteúdos:

O git nasceu de um necessidade de Linus Torvalds em conseguir gerenciar o desenvolvimento do kernel que ele criou. Todavia o projeto cresceu tanto que o próprio Torvalds passou a tocha para Junio Hamano manter ele com outros desenvolvedores uma vez que ele acredita que já provou que conseguiria ir além do estigma de ser apenas "o cara que fez o Linux".

Só para não fazer um desserviço a apresentar a ferramenta como se não tivesse nada antes dela, já existiam soluções similares disponíveis no mercado: Mercurial e SVN. Ambas com seus paradigmas e abordagens diferentes:

  • Mercurial: modelo similar ao que o git emprega, código descentralizado, você pode fazer tudo na sua máquina sem precisar de um servidor
  • SVN: código centralizado, funciona como se você apenas fizesse um acesso remoto, sem possibilidade de ter acesso sem estar conectado ao seu servidor

24106967867_592385c3b9_o.jpg

"Hieroglyphic script on Rosetta Stone" by PeterThoeny is licensed under CC BY-NC-SA 2.0

Soluções atuais

Não é apenas pela proximidade de nome que muita gente confunde o Git com o Github (GH), ele foi o primeiro a oferecer armazenamento de código baseado em Git quando comparado às outras soluções apresentadas aqui. Seguido pelo Bitbucket (BB) anos depois, então o GitLab (GL) e, por último, o Gitea (GT).

O GH é o maior de todos, tanto que há dois anos sofreu o maior ataque de DDoS da história e armazena alguns dos maiores projetos de programação como:

  • vue: ferramenta de desenvolvimento web em terceiro lugar no ranking de "likes"
  • tensorflow: ferramenta de desenvolvimento de projetos de Machine Learning em sexto lugar
  • You Don't Know JS Yet: livro de programação em décimo lugar

A diferença com relação a analogia feita anteirormente de ser é que serviços baseados em git hoje em dia fazem muito mais do que o já apresentado, normalmente eles constroem os artefatos necessários e os distribuem. Isso faz com que o simples "servidor de arquivos de textos" construa também o seu código e envie ele para onde ser necessário seja isso: uma loja de app, um site ou até mesmo outros sistemas de código. Só vale ressaltar que isto isso em si não tem a ver com o git como tecnologia, mas as soluções contruidas a partir dele. Tal facilidade reduz e, em alguns casos remove, a necessidade de se ter um time de "builds" e de "infra".

599820538_f98138ea32_o.jpg

"Storage Servers" by grover_net is licensed under CC BY-ND 2.0

Agora mais sobre elas:

  • Github:

    • Microsoft (MS) comprou ele em 2018
    • Mais da metade das 50 maiores empresas em verba dos EUA utilizam ele
    • Tem o Linux armazenado nele
  • BitBucket:

    • Teve um começo independete assim como o GH mas foi adquirido em 2010
    • Por ser da Atlassian, tem muita integração com os produtos da empresa como JIRA e Trello sem muitas configurações como nas outras opções
    • A Atlassian é famosa por seu suporte
  • GitLab

    • Teve um grande crescimento logo depois da aquisição do GH pela MS
    • Foi o primeiro a apresentar repositórios privados para contas gratuitas
    • Tinha ferramentas como Continuous Integration (CI) / Continuous Delivery (CD) antes do GH Actions
    • Famoso por pegar o feedback da comunidade e procurar sempre implementar novas features

Uma vez citados esses fatos, muitas empresas e pessoas podem evitar justamente tais produtos justamente por esses motivos. Assim como outros:

  • MS ainda tem um "passado turbulento" por causa de coisas que aconteceram, principalmente nos anos 90:
  • Atlassian é famosa por ser cara
  • GL não possuiu uma comunidade muito forte no País como as outras duas opções, o que dificulta para achar conteúdo em Português ou pessoas que utilizam a solução; além disso o seu sistema já apresentou mais instabilidades do que os outros dois

Por que o Gitea?

Antes de continuar, por mais que o GT seja o "garoto novo na parada", ele é bem robusto com facilidades de instalação seja rodando um container Docker em qualquer lugar até como o suporte para instalar ele com Helm. Além disso:

  • As vezes trabalha em uma pequena empresa e não tem a grana para pagar um GH, BB ou mesmo um GL own hosted
  • Roda em ARM
  • Interface mínima, simples e intuitiva
  • Baixa complexidade quando comparado a hostear os outros serviços

Fora que você pode ter também o interesse em entender como tal tipo de sistemas funcionam e procurar você mesmo a fazer modificações que atendam melhor a sua necessidade.

12696017363_6a6fcbf550_o.jpg

"tea bags" by Sean MacEntee is licensed under CC BY 2.0

Rancher

Parando de onde o último texto continua, o Gitea será deployado em uma Raspberry Pi 4:

48119313161_3b2a5cb9f0_o.jpg

"Raspberry Pi 4 Model B is here!" by adafruit is licensed under CC BY-NC-SA 2.0

E para poder explicar um pouco sobre o que o Rancher é em si: "um 'sistema operacional' pro seu servidor com uma interface simples e rápida de configurar seus serviços a serem utilizados"

Caso você já tenha seguido alguns dos posts aqui publicados e/ou já tenha um conhecimento de Rancher, Docker e Kubernetes, a imagem disponível no Docker Hub não possuí o melhor exemplo de caso de uso, tome cuidado.

45675861921_28fd3f39cc_o.jpg

"Mt Adams Barns Late Autumn Day 2135 G" by jim.choate59 is licensed under CC BY-NC-ND 2.0

Para instalar o GT há algumas opções de banco de dados assim como a própria documentação explica. Um dos exemplos é o MySQL 5.7, todavia esta versão não suporta multi arquiteturas, só a partir da versão 8.0... O que como já mostrado neste texto do Spotify DIY (Do It Yourself) há como se fazer funcionar ele e com uma boa performance -- o que reduziria a necessidade de subir um container novo caso já esteja rodando tal solução de streaming de música.

  1. Caso ainda não tenha o banco de dados:

    I. SSH no seu servidor:

    ssh -l seuUsuario ip.do.cluster.rancher
    

    II. Rode os seguintes comandos:

    mkdir ~/mysql
    cd ~/mysql
    pwd # salve o output deste comando
    

    III. Crie um novo deploy: image1023.png IV. Coloque os seguintes valores de variáveis de ambiente: image1009.png V. Configure o caminho que conseguiu no passo II -- no meu caso /home/ubuntu/mysql mas no seu pode ser que sejam outros valores: image995.png VI. Selecione a opção de configurações avançadas no canto inferior direito e vá na aba de Command e coloque o seuginte comando (--default-authentication-plugin=mysql_native_password): image981.png

  1. Agora o GT:

    I. SSH no seu servidor:

    ssh -l seuUsuario ip.do.cluster.rancher
    

    II. Rode os seguintes comandos:

    mkdir ~/gitea
    cd ~/gitea
    pwd # salve o output deste comando
    

    III. Configure a imagem -- recomendo sim travar ela porque o GT tem muitas builds na lastest: image967.png IV. Mapeie as suas portas -- lembrando que a 8082 e 8083 eram as disponíves na minha máquina, na sua pode ser que sejam outras: image967-3.png V. Coloque os seguintes valores de variáveis de ambiente: image953.png VI. Configure o caminho que conseguiu no passo II -- no meu caso /home/ubuntu/gitea mas no seu pode ser que sejam outros valores: g1148.png VII. Acesse o seu endereço: g1440.png VIII. Registre um novo servidor: g1449.png IX. Comece a se divertir: g1458.png

Considerações Finais

Com o GH em uma aparente jogada de marketing ao armazenar alguns códigos em um cofre no ártico, cada vez mais está se procurando conscientizar a "população comum" -- neste caso quem não coda ou pelo menos expostos à área -- sobre o quão "importante" o código é para computação, uma vez que ficou claro que a ideia era fazer uma comparação de importância com o Svalbard Global Seed Vault.

Além de ressaltar a importancia de legados de código, quando ações como essas procuram atingir principalmente o público não técnico, mostra uma intenção de se atrair pessoas para a àrea, uma vez que a demandar por profissionais se torna cada vez mais evidente. Mostar que não se precisa ter uma formação técnica, superior ou até mesmo um bootcamp em código para se poder programar -- como o químico que dá suporte à uma biblioteca de shells em Python.

Caso tenha vontade de participar em contribuir em qualquer projeto, este mês a Digital Ocean está dando uma camiseta para quem auxiliar eles em projetos como alguns do citados e vários outros e caso queira auxiliar o GT você pode fazer isso de várias maneiras:

  • Código
  • Documentação
  • Testes
  • etc.

Projetos assim crescem com o aúxilio que recebem de diversas pessoas, as vezes você pode ajudar a escrever a história dele e de muitos outros.

497411169_f87bb7eea7_o.jpg

"'Story Road'" by umjanedoan is licensed under CC BY 2.0

Apêndice

  • Menções honrosas à serviços de armazenamento de código que talvez você não saiba que fazem isto também:
    • Dropbox
    • Google: Cloud Source Repositories
  • A opção mais próxima é o Gitlab, o qual você pode também ter com passos similares ao mostrado aqui todavia não há suporte oficial para ARM
  • Caso queria saber mais sobre git, tem este livro gratuito para downlods
  • Com a aquisição recente do npm -- sistema de distribuição de pacotes da linguagem Node -- pela Microsoft isso mostra que a distribuição de código é importante pare eles uma vez que:
    • Fecharam um contrato de 10 bilhões de dólares com o governo americano para a plataforma de nuvem deles, a Azure.
    • Eles sabem já a importância de Free and Open Source Software (FOSS) em projetos utilizados na industria podem ser vistos aqui
  • Em um nível pessoal, ter um repositório git independentemente da solução, isto serve como um "portifólio" dos seus projetos: tarefas de faculdade, correções em projetos que utiliza, textos -- como este daqui -- que escreveu, etc. Dito isso, hostear o seu próprio serviço de git mostra que foi um passo bem além dos anteriores.

Referências