,=====================.
                |G GATEWAY2000 /P5-90/|
                |.-------------------.|
                ||[ _ o     . .  _ ]_||
                |`-------------------'|
                ||                   ||
                |`-------------------'|       _   _                      _____                          
                ||                   ||      | | | |                    /  ___|                         
                |`-------------------'|      | |_| | ___  _ __ ___   ___\ `--.  ___ _ ____   _____ _ __ 
                ||                   ||      |  _  |/ _ \| '_ ` _ \ / _ \`--. \/ _ \ '__\ \ / / _ \ '__|
                |`-----------------_-'|      | | | | (_) | | | | | |  __/\__/ /  __/ |   \ V /  __/ |   
                ||[=========]| o  (@) |      \_| |_/\___/|_| |_| |_|\___\____/ \___|_|    \_/ \___|_|   
                |`---------=='/u\ --- |                                                                
                |------_--------------|       _____       _     _                                       
                | (/) (_)           []|      |  __ \     (_)   | |                                      
                |---==--==----------==|      | |  \/_   _ _  __| | ___                                  
                |||||||||||||||||||||||      | | __| | | | |/ _` |/ _ \                                 
                |||||||||||||||||||||||      | |_\ \ |_| | | |_| |  __/                                 
                |||||||||||||||||||||||       \____/\__,_|_|\__,_|\___|                                 
                |||||||||||||||||||||||                                                                 
                |||||||||||||||||||||||
                |||||||||||||||||||||||
                |||||||||||||||||dxm|||
                |||||||||||||||||||||||
                |=====================|
               .'                     `.
              """""""""""""""""""""""""""


            --------------------- Home Server Guide ---------------------                  
                    [1] Escolhendo as peças para seu servidor.
                    [2] Instalando o sistema operacional e configurando.
                    [3] Instalando e configurando as primeiras aplicações.
                    [4] Expondo o servidor para a internet.
                    [5] Algumas aplicações para instalar.


    Olá, neste guia/artigo, vou abordar os passos necessários para montar e configurar seu próprio home server, 
    incluindo dicas sobre escolha de hardware, instalação de sistema operacional, configuração de aplicativos e exposição do servidor para a internet.


    [1] Escolhendo as peças para seu servidor.

    A montagem de um home server pode ser feita de várias maneiras, dependendo do que você tem à disposição. Você pode optar por reutilizar peças velhas ou computadores antigos, ou investir em novas peças. 
    No meu caso, utilizei dois computadores antigos, combinando-os em um único. Embora não seja a solução ideal, funciona bem para meu propósito. 
    
    Se você busca uma solução mais profissional ou não possui hardware antigo para reutilizar, a melhor opção é comprar. Recomendo procurar em sites como o AliExpress ou adquirir peças usadas. 
    No AliExpress, você pode encontrar kits Xeon, que oferecem processadores de boa qualidade a um preço barato. Não é necessário um GPU dedicado; uma placa de vídeo integrada é suficiente (na maioria dos casos). 
    O foco principal do servidor é o CPU; um processador basico é suficiente. Agora, sobre a memória RAM, é importante para o desempenho do servidor. 
    Recomendo 8GB, ou no mínimo 4GB. No meu servidor, utilizo 8GB DDR3. 

    Em relação ao armazenamento, a escolha depende do que você pretende fazer com o servidor. Se você planeja hospedar arquivos ou montar um NAS, um SSD é essencial. 
    No entanto, para hospedar sites, etc, um HD de 500GB é suficiente.


    [2] Instalando o sistema operacional e configurando.

    Neste guia, vamos utilizar o Debian 12 netinstall como sistema operacional (Baixar ISO), por ser leve, seguro e estável. No entanto, a escolha do sistema operacional pode variar de acordo com suas preferências. 
    Para iniciantes em self-hosting, recomendo o uso do Debian. Caso contrário, outras opções como Ubuntu Server ou Fedora podem ser consideradas. Para um NAS, o TrueNAS é altamente recomendado.

    O sistema operacional não precisa e não deve ter interface gráfica, pois será acessado apenas por SSH. Durante a instalação, certifique-se de marcar a opção para instalar um servidor SSH. 
    Após a conclusão da instalação, você pode acessar o sistema da seguinte forma:
    
        ssh user@ip_do_servidor
    
    Substitua "user" pelo nome de usuário que você criou durante a instalação ou use "root". Em seguida, digite a senha do usuário e você estará conectado ao seu servidor.

    Ao se conectar, o primeiro passo é acessar como usuário root e atualizar os pacotes:
    
        su root
        apt update && apt upgrade
    
    Com os pacotes atualizados, o próximo passo é instalar o sudo e adicionar o seu usuário ao grupo sudo:
    
        apt install sudo
        /usr/sbin/usermod -aG sudo <\seu_user>
    
    Em seguida, saia e entre novamente no SSH para aplicar as alterações.

    Agora, algumas dicas de configuração do SSH. Por padrão, ele vem um pouco inseguro. O arquivo de configuração do SSH pode ser encontrado em `/etc/ssh/sshd_config`. 
    Ao acessá-lo, as configurações que recomendo são alterar a porta padrão (22) e desativar o login como root:
    
        Port 2222
        PermitRootLogin no
    
    Após fazer essas alterações, reinicie o serviço SSH para aplicar as configurações:
    
        systemctl restart sshd
    
    Dessa forma o seu SSH já está um pouco mais seguro, nada de mais, porém o suficiente.

    Outra configuração importante é adicionar atualizações automáticas para pacotes de segurança. Para isso, podemos usar o unattended-upgrades:

    1. Instale o unattended-upgrades, apt-listchanges e apticron:
    
        sudo apt install unattended-upgrades apt-listchanges apticron
    
    2.  Crie o arquivo "/etc/apt/apt.conf.d/51myunattended-upgrades" e adicione o seguinte conteúdo:
    
        // Enable the update/upgrade script (0=disable)
        APT::Periodic::Enable "1";

        // Do "apt-get update" automatically every n-days (0=disable)
        APT::Periodic::Update-Package-Lists "1";

        // Do "apt-get upgrade --download-only" every n-days (0=disable)
        APT::Periodic::Download-Upgradeable-Packages "1";

        // Do "apt-get autoclean" every n-days (0=disable)
        APT::Periodic::AutocleanInterval "7";

        // Send report mail to root
        //     0:  no report             (or null string)
        //     1:  progress report       (actually any string)
        //     2:  + command outputs     (remove -qq, remove 2>/dev/null, add -d)
        //     3:  + trace on    APT::Periodic::Verbose "2";
        APT::Periodic::Unattended-Upgrade "1";

        // Automatically upgrade packages from these
        Unattended-Upgrade::Origins-Pattern {
            "o=Debian,a=stable";
            "o=Debian,a=stable-updates";
            "origin=Debian,codename=${distro_codename},label=Debian-Security";
        };

        // You can specify your own packages to NOT automatically upgrade here
        Unattended-Upgrade::Package-Blacklist {
        };

        Unattended-Upgrade::AutoFixInterruptedDpkg "true";

        // Perform the upgrade when the machine is running because we won't be shutting our server down often
        Unattended-Upgrade::InstallOnShutdown "false";

        // Send an email to this address with information about the packages upgraded.
        Unattended-Upgrade::Mail "root";

        // Always send an e-mail
        Unattended-Upgrade::MailOnlyOnError "false";

        // Remove all unused dependencies after the upgrade has finished
        Unattended-Upgrade::Remove-Unused-Dependencies "true";

        // Remove any new unused dependencies after the upgrade has finished
        Unattended-Upgrade::Remove-New-Unused-Dependencies "true";

        // Automatically reboot WITHOUT CONFIRMATION if the file /var/run/reboot-required is found after the upgrade.
        Unattended-Upgrade::Automatic-Reboot "true";

        // Automatically reboot even if users are logged in.
        Unattended-Upgrade::Automatic-Reboot-WithUsers "true";
    
    3. Execute o unattended-upgrade em modo de teste para garantir que tudo está correto:
    
        sudo unattended-upgrades --dry-run --debug
    
    4. Se tudo estiver certo, habilite o unattended-upgrade e reinicie o servidor:
    
        sudo systemctl enable --now unattended-upgrades
        sudo reboot
    
    Se tudo estiver configurado corretamente, você está pronto para continuar com a configuração do seu servidor.


    [3] Instalando e configurando as primeiras aplicações.

    Neste paper, vamos utilizar o Docker e Docker Compose para instalar e configurar nossas aplicações, o que é altamente recomendado. 
    Se você não tem experiência com Docker, é hora de estudar um pouco sobre o assunto. Vamos começar instalando o Docker:
    
        sudo apt install docker.io docker-compose
    
    Gosto de organizar minhas aplicações em pastas na minha home e utilizar essas pastas como volumes no Docker. 
    Você pode organizar da forma que preferir, mas vou mostrar como eu costumo fazer:
    
        .
        ├── app1
        │   ├── docker-compose.yml
        │   └── app1_data
        ├── app2
        │   ├── app2_data
        │   └── docker-compose.yml
        └── app3
            ├── docker-compose.yml
            └── app3_data
    
    Outra dica é utilizar portas web na faixa de 800x (por exemplo, 8001, 8002, 8003, etc.) para manter a organização.

    Agora, vamos hospedar nossa primeira aplicação. Vamos começar com um servidor web usando o Apache2. 
    Primeiro, crie uma pasta "www" na sua home e coloque um arquivo docker-compose.yml dentro dela:
    
        .
        └── www
            └── docker-compose.yml
    
    Dentro do arquivo docker-compose.yml, você pode definir o serviço do Apache2 da seguinte forma:
    
        version: '3'
        services:
        apache:
            image: httpd:latest
            volumes:
            - /home/<seu_usuario>/www:/usr/local/apache2/htdocs
            - /home/<seu_usuario>/www/httpd.conf:/usr/local/apache2/conf/httpd.conf
            ports:
            - 8001:8001
            restart: unless-stopped
    
    No volume, altere o caminho para a pasta onde deseja armazenar os arquivos do seu site, substituindo "<seu_usuario>" pelo seu usuário. 
    Nas portas, você pode adicionar mais conforme necessário.
    
        ports:
        - 8001:8001
        - 8002:8002
        - 8003:8003
    
    Agora, inicie o container do Apache2:
    
        sudo docker-compose up -d
    
    Você verá alguns arquivos sendo criados na pasta "www", incluindo o arquivo httpd.conf. Abra o arquivo e adicione as configurações do seu site no final dele:
    
        Listen 8001
        <VirtualHost *:8001>
            DocumentRoot /usr/local/apache2/htdocs/<PASTA_DO_SEU_SITE>/
            ServerName <DOMINIO_DO_SEU_SITE>
        </VirtualHost>
    
    Substitua "<PASTA_DO_SEU_SITE>" pelo nome da pasta que contém os arquivos do seu site. Se não tiver um domínio, pode deixar como "localhost". 
    Certifique-se de que a porta corresponde àquela que você definiu no Docker Compose.

    Por exemplo, se você criou a estrutura de pastas da seguinte forma:
    
        .
        └── www
            ├── meu_site
            |   └── index.html
            ├── httpd.conf
            └── docker-compose.yml
    
    Você deve substituir "<PASTA_DO_SEU_SITE>" por "meu_site".

    Após fazer as alterações no httpd.conf, reinicie o Docker do Apache:
    
        sudo docker-compose restart
    
    Se tudo estiver correto, você poderá acessar seu site na porta que configurou. 

    Para adicionar mais sites, basta adicionar mais configurações de VirtualHost no httpd.conf, junto com as respectivas pastas de sites e configurações de portas no Docker Compose. 
    Assim, você pode hospedar quantos sites desejar em seu servidor.
    
        Listen 8001
        <VirtualHost *:8001>
            DocumentRoot /usr/local/apache2/htdocs/site1/
            ServerName <DOMINIO_1>
        </VirtualHost>

        Listen 8002
        <VirtualHost *:8002>
            DocumentRoot /usr/local/apache2/htdocs/site2/
            ServerName <DOMINIO_2>
        </VirtualHost>
    


    [4] Expondo o servidor para a internet.

    Agora que você possui um servidor web funcionando, seria interessante poder disponibilizar seu site para outras pessoas acessarem ou até mesmo adicionar um domínio a ele. 
    No entanto, muitas pessoas tem dificuldades nesse processo, pois um home server geralmente não possui um IP público estático e também não tem proteção contra ataques DDoS. 
    Para resolver isso, vamos utilizar o Cloudflare Tunnel, parte do Cloudflare.

    Primeiro, crie uma conta no Cloudflare, é um processo simples e direto. Em seguida, adicione seu domínio à sua conta seguindo as instruções fornecidas. 
    Após algumas horas, seu site estará visível no Cloudflare.
    
    

    Agora, acesse a área Zero Trust do Cloudflare para encontrar a opção de configurar o túnel.

    

    Provavelmente, pode ser pedido para adicionar um cartão de crédito, mas fique tranquilo, não será cobrado nada, o plano gratuito deles é muito bom e mais que o suficiente.

    Na plataforma de Zero Trust. Clique em "Networks" e depois em "Tunnels". Aqui, você deve criar seu primeiro túnel.

    

    Selecione o tipo de túnel como Cloudflared e dê um nome para o túnel (por exemplo, "Home server"). Clique em salvar. Em seguida, execute o comando que aparecerá para seu sistema operacional (Debian), 
    para instalar o Cloudflared e conectar seu túnel. Deve ser algo como:
    
        curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb && 
        sudo dpkg -i cloudflared.deb && 
        sudo cloudflared service install <TOKEN>
    
    

    Depois de conectar sua máquina, clique em "Next" e comece a configurar seu túnel. Escolha o domínio onde seu site ficará, o caminho ou subdomínio se quiser, e a porta do seu servidor. 
    Para um site simples, selecione HTTP e preencha as informações necessárias.

    

    Você pode adicionar quantos túneis quiser, para quantos sites e portas forem necessários. O Cloudflared é uma ótima ferramenta para isso!


    [5] Algumas aplicações para instalar.

    Agora que você ja aprendeu quase tudo, vamos instalar algumas aplicações úteis e legais em seu servidor. Aqui estão algumas sugestões de aplicações que você pode hospedar em seu próprio servidor.

    1. Gerenciador de senhas: Vaultwarden
    Um gerenciador de senhas é uma ferramenta essencial para manter suas senhas seguras. Hospedar seu próprio gerenciador de senhas, como o VaultWarden (uma versão modificada do BitWarden), 
    é uma opção segura e confiável. Primeiro, crie uma pasta chamada "vault" em sua home e adicione o seguinte docker-compose.yml:
    
        version: '3'

        services:
        vaultwarden:
            container_name: vaultwarden
            image: vaultwarden/server:latest
            restart: unless-stopped
            volumes:
            - /home/<seu_user>/vault/data/:/data/
            ports:
            - 8002:80
    
    Altere o caminho no volume para a sua pasta desejada e a porta conforme necessário. 
    Em seguida, execute o comando abaixo para iniciar o docker:
    
        sudo docker-compose up -d
    
    Você poderá acessar seu gerenciador de senhas em [http://localhost:8002](http://localhost:8002). Para criar uma conta, certifique-se de usar o site com SSL, 
    o que pode ser feito utilizando o Cloudflared para adicionar automaticamente, ou consulte a documentação do VaultWarden sobre como adicionar um certificado SSL. 
    Após criar sua conta, você poderá gerenciar suas senhas com facilidade.

    2. Search Engine: SearxNG
    Ter uma search engine segura, privada e hospedada por você mesmo é uma excelente adição ao seu home server. Você pode utilizar o SearxNG para isso. 
    Crie uma pasta em sua home chamada "searxng" e adicione o seguinte docker-compose.yml:
    
        version: '3'
        services:
            searxng:
                image: searxng/searxng:latest
                container_name: searxng
                environment:
                    - SEARXNG_BASE_URL=https://example.com
                cap_drop:
                    - ALL
                cap_add:
                    - CHOWN
                    - SETGID
                    - SETUID
                    - DAC_OVERRIDE
                volumes:
                    - /home/<seu_user>/searxng:/etc/searxng
                ports:
                    - 8003:8080
                restart: unless-stopped
    
    Altere o caminho do volume para sua pasta desejada, a porta e seu domínio conforme necessário. 
    Em seguida, inicie o container com o comando:
    
        sudo docker-compose up -d
    
    Agora você pode acessar sua search engine em http://localhost:8003. Para personalizar ainda mais, você pode editar o arquivo settings.yml dentro da pasta "searxng". 
    Se desejar experimentar, eu hospedo uma demo do SearxNG em http://search.lacorte.ninja.

    
Este foi o guia de como configurar seu home server. Ainda há muito a aprender, por isso, deixo esta lista de recursos que foram muito úteis para mim quando configurei meu home server pela primeira vez: Se tiver alguma dúvida ou desejar incluir algo mais neste guia, entre em contato comigo através da minha página de contato em https://lacorte.ninja/ptbr/contact.html.