Linux Ubuntu + Nginx + Letsencrypt + Docker + Portainer + MySQL + aaPanel rodando ASP.NET CORE

Uma das coisas que nunca tive muita experiência é com terminal e linhas de comando, principalmente com Linux.
Desde que comecei a trabalhar com ASP.NET Core lá na versão 2 o que mais me brilhava os olhos era o fato de poder desenvolver para rodar em “N” plataformas principalmente Linux, não sei porque mas sempre trabalhei com servidores Windows com IIS etc… isso deixava tudo muito caro (licença principalmente), mas sempre funcionou bem.

Eu apanhei bastante para entender e fazer acontecer então decidi compartilhar um pouco desta mistura que acho que funcionou muito bem para qualquer iniciante que ainda está aprendendo os comandos e quer praticidade e visão das coisas.

Instalação do Ubuntu

Se quiser rodar Ubuntu no Windows sem formatar sua máquina eu recomendo a utilização do VirtualBox que cria uma maquina virtual e você pode fazer tudo nela e formatar quantas vezes for preciso para aprender como eu fiz.

Quando terminar a instalação a primeira coisa que aprendi é fazer atualização dos pacotes e atualizações disponíveis então digitamos o comando:

sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade

Aplicando comando de atualização

Siga confirmando as solicitações que podem aparecer e após o processo terminar estamos atualizados.
Eu reinicio a maquina e rodo mesmo comando novamente para confirmar que está tudo ok

Mensagem de confirmação de que está tudo atualizado

Instalação aaPanel

Instalação do aaPanel é fácil seguindo documentação do site deles basta digitar na linha de comando:

wget -O install.sh http://www.aapanel.com/script/install-ubuntu_6.0_en.sh && sudo bash install.sh

Instalação do aaPanel confirmando que vai instalar no diretório www e que o servidor vai ter o IP da maquina na porta 8888

A instalação vai pedir sua confirmação, aperte sim (Y), deixe a concluir até o final pode demorar um pouco.
No final da instalação no terminal será exibido sua URL login e senha, anote estas informações.

Final da instalação do aaPanel, informando que está rodando tanto no endereço IPV6 quando IPV 4 com o username e senha gerados

Para acessar o painel basta abrir a URL em seu navegador fazer login utilizando o username e password informados e pronto você já tem um painel Linux rodando.

Tela inicial do aaPanel solicitando o que você deseja instalar

No primeiro acesso ao painel ele vai te perguntar o que deseja instalar e como deseja instalar, uma versão mais rápida e uma versão compilada que demora mais de 30min para instalar e compilar.
Eu escolhi a versão rápida (Fast LNMP) com a seguinte configuração:

Nginx 1.19
MySQL 8

Após a confirmação esta é a tela de instalação, mostra a fila e os recursos sendo instalados, você pode fechar ela se quiser e depois acessar a mesma novamente clicando contador que fica no painel do lado esquerdo no topo.
Deixei a instalação rodando e esta é a tela inicial do nosso painel, estou em uma maquina emulada e não configurei ela com muitos recursos como processador, mas veja que o painel é fiel aos recursos e utilização só para instalar as coisas ele está gastando toda minha CPU.

Instalação do docker

Se preferir via terminal é bem simples também basta digitar:
sudo apt install docker.io

Instalação do docker via aaPanel
Fila de instalação com Docker por último.

Após toda instalação terminar, você pode via painel aaPanel criar o seu site, apenas clicando em WebSite e depois “Add Site”

Adicionando um domínio chamado example.com

Veja que ao adicionar o domínio aparece uma série de configurações como diretório que ele vai criar se vai criar conta de FTP, no meu caso não vai porque não instalei este módulo.
Banco de dados MySQL se desejar ele já associa ao domínio.
Versão do PHP no meu caso como não instalei ele entende que é um domínio que terá conteúdo estático.
Categoria do site se você desejar colocar sites em categorias.
SLL aqui é onde ele faz a mágica se você configurar um domínio de verdade e já estiver apontando para sua maquina ele vai até o Let’s Encrypt solicitar e baixar o certificado para o domínio informado.
Apertando “submit” o site estará criado e funcionando ao acessar example.com uma tela padrão é exibida.

O pulo do gato vem aqui, porque se temos docker rodando com uma aplicação ASP.NET Core temos ele rodando em uma porta X então podemos nas configurações deste domínio falar que ele irá utilizar o “Rever Proxy” do Nginx para encaminhar as solicitações para o docker na porta X, veja exemplo abaixo da configuração de uma aplicação WEB.

Tela de configuração do domínio após criado
Promt após apertar o botão Add reverse proxy

Veja que eu configurei para que tudo que vier neste domínio example.com seja encaminhado para o localhost (127.0.0.1) para a porta do meu docker 5000 e pronto, se você tiver uma API, site ou qualquer outra aplicação dokcer rodando aqui já estaria funcionando.

Instalação do Portainer

Seguindo a documentação a instalação dele é bem simples:
Vá até o terminal e digite este comando:

docker volume create portainer_data

Este comando cria um volume de nome portainer_data da qual será o local onde ele vai salvar as informações dele mesmo e o que você fizer na interface dele.

Depois de criar o volume rode o comando para instalar o portainer:

docker run -d -p 8000:8000 -p 9000:9000 — name=portainer — restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce

Instalação do Portainer

Terminada a instalação basta abrir o seu navegador digitar o IP da sua maquina ou localhost:9000

Tela de login do portainer, solicitando a criação do usuário administrador, você pode mudar o admin por seu nome ou o que preferir.

Feito isto a tela inicial irá te perguntar que tipo de conexão você quer usar o portainer, no nosso caso vamos escolher docker

Escolhendo a forma de conexão como docker
Tela de conexões do docker, informado que estamos conectados ao docker local e dizendo o que temos nessa conexão como containers, volumes, imagens etc…

Clicando na linha de conexão de nome “local” vamos de fato entrar nesta conexão e ver o que podemos fazer dentro dela.

Baixo vou dar uma resumida em alguns pontos do menu

App Tempplate

Stacks

Images

Networks

Volumes

Events

Hosts

Tudo isto ai acima pode ser feito por linha de comando, durante todo esse processo acabei aprendendo a fazer tudo inclusive a instalar certificado SLL via linha de comando não é muito difícil os comandos e a maioria dos pacotes já ajudam a fazer muitas coisas, mas confesso que não foi simples, tive que refazer várias vezes.

Já da forma com o painel foi bem fácil administrar as coisas e como eu disse no começo ter visão delas já que linux tudo fica em arquivos de configuração em diferentes caminhos.

Espero que isso ajude!

Desenvolvedor há mais de 20 anos, atualmente estou me especializando em ASP.NET CORE com Linux.

Desenvolvedor há mais de 20 anos, atualmente estou me especializando em ASP.NET CORE com Linux.