ASP.NET Core: rodando Linux e usando Docker com aaPanel
Não tenho muita experiência com terminal e linhas de comando, com Linux. Trabalhar com ASP.NET Core ajuda a desenvolver para rodar em “N” plataformas.

Uma das coisas que nunca tive muita experiência é com terminal e linhas de comando, principalmente com Linux↳Linux34 conteúdosKali Linux em um Servidor VPS: como, quando e por que usar?DevSecOps · dez 2024Construindo um Windows Service ou Linux Daemon com Worker Service & .NET Core – Parte 2Dev (Back & Front) · jul 2020Criando uma WebApi utilizando .NET, Linux e VSCodeDev (Back & Front) · ago 2019Ver tudo em DevSecOps →. Desde que comecei a trabalhar com ASP.NET Core↳Leia tambémDocker: conectando a um container em execuçãoDev (Back & Front) · mai 2019, 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ças, principalmente), mas sempre funcionou bem.
Instalação do UbuntuEu 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.
Primeiro, temos que instalar o Ubuntu. A instalação é muito simples e fácil. Não vou entrar neste ponto no detalhe, mas entre no site oficial do Ubuntu, escolha sua versão e baixe a instalação. É tão simples quanto Windows.
A versão que usei foi: Ubuntu 20.04.2.0 LTS
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.
Ao terminar a instalação, a primeira coisa que aprendi foi 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
Siga confirmando as solicitações que podem aparecer e, após o processo terminar, estamos atualizados.
Eu reinicio a maquina e rodo o mesmo comando novamente, para confirmar que está tudo ok.
Então, vamos instalar nosso painel de controle, o “AAPanel”. Gostei bastante dele, fiz testes em um monte de painel que tem livre para Linux, e gostei mais deste por ser simples e prático.
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
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á exibida sua URL, login e senha. Anote estas informações.
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.
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↳MySQL8 conteúdosMySQL + Adminer + Docker Compose: montando rapidamente um ambiente para usoData · abr 2019Banco de dados MYSQL no PHPStormDev (Back & Front) · jul 2019Criando um ambiente de desenvolvimento PHP mínimo com Docker – Parte 3Dev (Back & Front) · out 2019Ver tudo em Data → 8
Para instalar o docker, como temos um painel agora, podemos ir até a “App Store” do nosso painel encontrar o docker lá e mandar instalar ele.
Se preferir via terminal é bem simples também, basta digitar:
sudo apt install docker.io
Após toda instalação terminar, você pode, via painel aaPanel, criar o seu site, apenas clicando em WebSite e depois “Add Site”
Veja que ao adicionar o domínio aparece uma série de configurações como diretório que ele vai criar e se vai mesmo 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↳PHP44 conteúdosPadronizando seu código com PHP CS FixerDev (Back & Front) · mai 2019Docker de imagem. Para rodar projetos PHP em menos de 30 segundosDev (Back & Front) · jan 2026PHP 7.3: conheça as novidades desta versãoDev (Back & Front) · abr 2019Ver tudo em Dev (Back & Front) → – 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 se estiver 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.


Veja que eu configurei para que tudo o 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 PortainerPortainer é uma aplicação docker para gerenciar containers de forma simples através de uma interface web, eu achei muito animal, é muito simples. A imaginação do que se pode fazer de coisas dentro dele é gigante.
Seguindo a documentação , a instalação dele é bem simples:
Vá até o terminal e digite este comando:
docker volume create portainer_dataEste comando cria um volume de nome portainer_data que 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

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

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

Clicando na linha de conexão de nome “local” vamos de fato entrar nesta conexão e ver o que podemos fazer dentro dela.
Abaixo vou dar uma resumida em alguns pontos do menu
App TempplateAqui é um pequeno paraíso, porque já contém alguns templates prontos para instalação rápida e fácil. Você pode usar um template de WordPress, MysSQL, redis etc.. ele já cria tudo para você, rede, portas volumes etc…
Recomendo usar 1 template para ver o que ele faz, à primeira vez, o que ele cria e como ele gerencia as coisas. Assim fica mais fácil de você, depois, gerenciar seus Stacks.
As stacks na verdade são formas de subir muitas coisas de uma única vez, como por exemplo usar o famoso docker-compose e nele informar que você quer subir 1 docker do redis, mysql etc… ele sobe tudo de uma unica vez.
Dá, até mesmo, para usar o compose para baixar uma imagem do DockerHub privada do seu repositório e subi-la.
São as imagens que ele baixou e têm disponíveis para uso. Ele também informa na imagem qual container está usando ela.
NetworksSão as redes que ele cria para cada ambiente docker e também mostra as redes padrões que o docker cria, como: bridge, host e none.
VolumesOs volumes no docker são as HDS ou local onde as coisas serão salvas de uma determinada aplicação docker.
EventsSão os eventos que ocorrem na administração do Portainer, porque você pode ter múltiplos usuários e fazer várias coisas; aqui você pode ver o que ocorreu nos eventos.
HostsSão as informações do servidor, como nome da maquina, versão, cpu, memória etc…
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 e 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á com o painel, foi bem fácil administrar as coisas e, como eu disse no começo, é preciso ter visão delas, já que com Linux, tudo fica em arquivos de configuração, em diferentes caminhos.
Espero que isso ajude!
Artigo original publicado aqui e republicado no iMasters a pedido do autor.







