Publicando uma aplicação ASP.NET Core no Linux com o Nginx \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 13 Horas 

 36 Min 

 04 Seg 

   Tempo restante da oferta: 13 36 04 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Publicando uma aplicação ASP.NET Core no Linux com o Nginx  [ ASP .NET ](https://www.treinaweb.com.br/blog/categoria/asp-net) 

# Publicando uma aplicação ASP.NET Core no Linux com o Nginx

 Veja todo o processo de publicação de deploy de uma aplicação ASP.NET Core no Linux utilizando o Nginx.

 [ Wladimilson M. Nascimento ](https://www.treinaweb.com.br/blog/autor/wladimilson-m-nascimento) 6 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/10/deploy-asp-net-core-linux-nginx.png)  

Ao concluir uma aplicação ASP.NET Core é chegado o momento de compartilhá-la com o mundo. [Há várias formas de fazer isso](https://www.treinaweb.com.br/blog/os-tipos-mais-comuns-de-hospedagem-de-sites/), pode ser com [Docker no Heroku](https://www.treinaweb.com.br/blog/publicando-uma-aplicacao-asp-net-core-no-heroku/) ou mesmo uma função [AWS Lambda](https://www.treinaweb.com.br/blog/criando-e-publicando-uma-funcao-aws-lambda-com-o-cli-do-net-core/). Mas devido a versatilidade, atualmente a forma mais comum de realizar o deploy de uma aplicação ASP.NET Core é em uma instância Linux de máquina virtual adquirida em um serviço de [cloud computing](https://www.treinaweb.com.br/blog/o-que-e-cloud-computing/), onde todo o processo é realizado pelo desenvolvedor. E neste artigo veremos este processo passo a passo.

## Ubuntu Server

Para este artigo estou utilizando a versão 20.04 LTS do Ubuntu Server. Caso esteja utilizando outra distribuição, pode haver algumas diferenças, mas no geral os códigos e comandos apresentados aqui devem funcionar nela.

[  ![C# (C Sharp) - APIs REST com ASP.NET Web API](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/csharp.svg)   Curso C# (C Sharp) - APIs REST com ASP.NET Web API Conhecer o curso ](https://www.treinaweb.com.br/curso/c-sharp-apis-rest-com-asp-net-web-api)

## Publicando a aplicação

Por não ser o foco do artigo, não mostrarei a criação da aplicação, farei uso da [API criada com o framework Carter](https://www.treinaweb.com.br/blog/criando-uma-api-restful-com-o-carter-e-net-core/) apresentada anteriormente. E como esta aplicação já está pronta, então vamos partir deste ponto.

No momento que a aplicação é concluída, podemos realizar o seu deploy, através do comando abaixo:

```shell
dotnet publish -c Release -r linux-x64

```

Como não desejo instalar o .NET Core no servidor, note que estou [publicando a aplicação como self-contained](https://www.treinaweb.com.br/blog/aplicacoes-self-contained-com-o-net-core/).

Para verificar se tudo está correto, copie a aplicação para o servidor (todo o conteúdo da pasta “*publish*”) e execute o comando abaixo:

```shell
./aplicacao

```

Se não for gerado nenhum erro:

![Aplicação funcionando no terminal](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/10/CarterAPI-funcionando.png)

Significa que está tudo certo com a aplicação. Então podemos dar continuidade ao nosso processo.

## Instalando o Nginx

O Kestrel é um ótimo servidor e mesmo que seja estável para ser utilizado em produção, ele não possui tantos recursos como um servidor mais robusto, tipo o Apache, IIS ou Nginx. Assim, uma forma de mitigar isso é utilizando um proxy reverso.

O proxy reverso funciona como um intermediário das requisições. Toda requisição passará por ele, que se encarrega de redirecioná-la para a aplicação. Com isso, a aplicação poderá fazer uso de recursos não disponíveis no Kestrel, como balanceamento de carga, compressão de requisição, entre outros.

Existem algumas opções de proxy reverso, sendo que o mais usado é o [Nginx](https://www.nginx.com/).

Geralmente uma máquina virtual de um serviço de Cloud já contém esta aplicação, caso não contenha, é necessário instalá-la:

```shell
sudo apt-get install nginx

```

Ao final da instalação, o serviço do Nginx já estará funcionando. Podemos verificar se deu tudo certo analisando-o:

```shell
sudo systemctl status nginx

```

## Configurando o Nginx

Para configurar o Nginx como proxy reverso de uma aplicação ASP.NET Core, vamos criar dentro de */etc/nginx/sites-available/* um arquivo chamado **exemploapi.com**. Aqui é importante frisar que as boas práticas recomendam que este arquivo seja nomeado de acordo com o domínio da aplicação configurada nele. Assim, caso haja mais de uma aplicação, será mais fácil localizar a sua configuração.

Adicione neste arquivo o conteúdo abaixo:

```ini
server {
    listen        80;
    server_name   exemploapi.com *.exemploapi.com;
    location / {
        proxy_pass         http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

```

Nele estamos definindo que toda requisição recebida na porta 80, pelo domínio **exemploapi.com**, deve ser redirecionada para http://localhost:5000. As demais opções são atributos que dão mais segurança para a aplicação, mas não faz parte do escopo deste artigo explicá-las.

Para evitar qualquer problema, defina o usuário do Nginx como proprietário do arquivo:

```shell
sudo chown -R www-data: /etc/nginx/sites-available/exemploapi.com

```

E dê permissão de escrita para ele:

```shell
sudo chmod -R 775 /etc/nginx/sites-available/exemploapi.com

```

Para garantir que o servidor não aceite requisições de outros domínios, é necessário alterar o conteúdo do arquivo */etc/nginx/sites-available/default* para o abaixo:

```ini
server {
    listen   80 default_server;
    listen [::]:80 default_server deferred;
    return   444;
}

```

Assim, para qualquer requisição na porta 80 que não seja do domínio que definimos para a nossa aplicação, o servidor retornará o código 444.

Por fim, crie um link simbólico do arquivo em **sites-available** para o **sites-enabled**, o qual é lido pelo Nginx quando iniciado:

```shell
sudo ln -sfn /etc/nginx/sites-available/exemploapi.com /etc/nginx/sites-enabled/

```

Para verificar que não há nenhum erro nestes arquivos, é possível analisar a sintaxe deles com o comando abaixo:

```shell
sudo nginx -t

```

Estando tudo certo, o Nginx pode ser reiniciado:

```shell
sudo systemctl restart nginx

```

Com isso, caso a aplicação esteja iniciada, ao acessar o domínio http://exemploapi.com, já teremos acesso à ela:

![Aplicação acessada no navegador, pela url http://exemploapi.com ](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/10/pa%CC%81gina-ini%CC%81cio-carterapi.png)

Lembrando que o domínio só funcionará caso esteja definido em algum serviço de DNS, o redirecionamento dele para o servidor. Localmente isso pode ser configurado no arquivo hosts, com a adição da linha:

```ini
127.0.0.0 exemploapi.com

```

## Configurando a aplicação como serviço

No estado atual, se ocorrer qualquer problema no servidor, o serviço do Nginx é reiniciado, mas isso não ocorre com a nossa a aplicação, pois ela está sendo iniciada manualmente. Para evitar isso, podemos defini-la como um serviço, algo que já abordei no meu artigo de [Worker Service](https://www.treinaweb.com.br/blog/net-core-3-0-criando-tarefas-de-segundo-plano-com-worker-service/).

Desta forma, crie o arquivo */etc/systemd/system/kestrel-exemploapi.service*, com o conteúdo abaixo:

```ini
[Unit]
Description=Serviço da aplicação do ExemploApi

[Service]
WorkingDirectory=/caminho/aplicacao
ExecStart=/caminho/aplicacao
Restart=always
# Restart service after 10 seconds if service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
StandardOutput=/var/log/aplicacao-output.log
StandardError=/var/log/aplicacao-error.log

[Install]
WantedBy=multi-user.target

```

Registre este serviço:

```ini
sudo systemctl enable kestrel-exemploapi.service

```

O inicie:

```ini
sudo systemctl start kestrel-exemploapi.service

```

E verifique se está tudo certo:

```ini
sudo systemctl status kestrel-exemploapi.service

```

Agora a nossa aplicação sempre estará acessível:

![Aplicação acessada no navegador, pela url http://exemploapi.com ](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/10/pa%CC%81gina-ini%CC%81cio-carterapi.png)

Mesmo se ocorrer algum erro no servidor, ela será reiniciada junto com o Nginx.

[  ![Nginx - Criação de sites](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/nginx.svg)   Curso Nginx - Criação de sites Conhecer o curso ](https://www.treinaweb.com.br/curso/nginx-criacao-de-sites)

## Configurando conexão segura

Caso possua um certificado SSL, que pode ser [criado gratuitamente com o Certbot](https://www.treinaweb.com.br/blog/gerando-certificados-ssl-gratuitos-com-certbot/), este pode ser definido na configuração da aplicação no Nginx, no arquivo **exemploapi.com**:

```ini
server {
     listen       80;
     listen       [::]:80;
     server_name   exemploapi.com *.exemploapi.com;

     return 301 https://$host$request_uri;
}

server {
     listen       443 ssl http2;
     listen       [::]:443 ssl http2;
     server_name  exemploapi.com *.exemploapi.com;

     ssl_certificate /etc/letsencrypt/live/exemploapi.com/cert.pem;
     ssl_certificate_key /etc/letsencrypt/live/exemploapi.com/privkey.pem;
     ssl_session_cache shared:SSL:1m;
     ssl_session_timeout  10m;
     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
     ssl_ciphers HIGH:SEED:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!RSAPSK:!aDH:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!SRP;
     ssl_prefer_server_ciphers on;

     location / {
        proxy_pass         http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

```

Nesta configuração é definido que todas as requisições via HTTP, sejam redirecionadas para a versão HTTPS do site. E dentro da configuração HTTPS, os certificados são indicados:

```ini
ssl_certificate /etc/letsencrypt/live/exemploapi.com/cert.pem;
ssl_certificate_key /etc/letsencrypt/live/exemploapi.com/privkey.pem;

```

Reinicie o Nginx para que a versão segura da aplicação seja disponibilizada:

![Aplicação acessada no navegador, por url seguraça, mas com aviso no navegador](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/10/pa%CC%81gina-ini%CC%81cio-carterapi-segura.png)

Acima o Chrome indica que o site não é seguro, porque o certificado utilizado não foi criado por uma autoridade válida. Criei ele localmente XD

- [ #ASP .NET Core ](https://www.treinaweb.com.br/blog/tag/asp-net-core)
- [ #nginx ](https://www.treinaweb.com.br/blog/tag/nginx)

Autor

 ![Wladimilson M. Nascimento](//secure.gravatar.com/avatar/f0dd442f156a3eacd2880e9cd0eafbd1?d=mm)

## Wladimilson M. Nascimento

 Instrutor, nerd, cinéfilo e desenvolvedor nas horas vagas. Graduado em Ciências da Computação pela Universidade Metodista de São Paulo. 

 [Todos os artigos](https://www.treinaweb.com.br/blog/autor/wladimilson-m-nascimento)  

## Continue estudando

 Transforme leitura em prática com os cursos e formações da TreinaWeb.

 [Ver cursos](https://www.treinaweb.com.br/cursos)   

  Continue lendo

## Artigos relacionados

- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/08/01172547/NET-CORE-3-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     7 anos atrás

    ##  [ .NET Core 3.0 - Criando tarefas de segundo plano com Worker Service ](https://www.treinaweb.com.br/blog/net-core-3-0-criando-tarefas-de-segundo-plano-com-worker-service) 

     Você já quis criar tarefas em segundo plano com o .NET Core? Na versão 3.0 foi introduzido o template Worker Service que facilita a criação deste tipo de aplicação. Caso tenha passado por uma situação assim, neste artigo mostramos como você pode aproveitar este novo recurso do .NET Core 3.0.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/02/02145619/asp-net-heroku-400x280.png)  [ ASP .NET ](https://www.treinaweb.com.br/blog/categoria/asp-net) 

     7 anos atrás

    ##  [ Publicando uma aplicação ASP.NET Core no Heroku ](https://www.treinaweb.com.br/blog/publicando-uma-aplicacao-asp-net-core-no-heroku) 

     Veja neste artigo como publicar uma aplicação ASP.NET Core no Heroku.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/01/10162055/asp-net-beanstalk-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     7 anos atrás

    ##  [ Publicando uma aplicação .NET Core 3.0 no AWS Elastic Beanstalk ](https://www.treinaweb.com.br/blog/publicando-uma-aplicacao-net-core-3-0-no-aws-elastic-beanstalk) 

     Nesse artigo vamos aprender como publicar e configurar um projeto desenvolvido em ASP.NET Core 3.0 no Elastic Beanstalk, o serviço do tipo plataforma como serviço da AWS especializado para aplicações web.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/05/05142558/mediator-pattern-com-mediatr-no-asp-net-core-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     7 anos atrás

    ##  [ Mediator Pattern com MediatR no ASP.NET Core ](https://www.treinaweb.com.br/blog/mediator-pattern-com-mediatr-no-asp-net-core) 

     Manter os objetos isolados é o objetivo do Mediator Pattern. No ASP.NET Core a sua implementação é facilitada com a biblioteca MediatR.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/04/utilizando-arquivos-dotenv-env-em-uma-aplicacao-asp-net-core-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     6 anos atrás

    ##  [ Utilizando arquivos Dotenv (.env) em uma aplicação ASP.NET Core ](https://www.treinaweb.com.br/blog/utilizando-arquivos-dotenv-env-em-uma-aplicacao-asp-net-core) 

     O uso de arquivos .env é quase o padrão de aplicações web, veja como utilizá-los em uma aplicação ASP.NET Core.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2017/07/13150455/aplicacoes-self-contained-com-o-net-core-400x280.jpg)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     8 anos atrás

    ##  [ ASP.NET Core: Compreendendo AddMvc(), AddMvcCore(), AddControllers(), AddControllersWithViews() e AddRazorPages() ](https://www.treinaweb.com.br/blog/asp-net-core-compreendendo-addmvc-addmvccore-addcontrollers-addcontrollerswithviews-e-addrazorpages) 

     Aprenda quando utilizar os métodos AddMvc(), AddMvcCore(), AddControllers(), AddControllersWithViews() e AddRazorPages() em uma aplicação ASP.NET Core.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/09/CACHE-DISTRIBUÍDO-ASP-NET-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     6 anos atrás

    ##  [ Implementando cache distribuído no ASP.NET Core ](https://www.treinaweb.com.br/blog/implementando-cache-distribuido-no-asp-net-core) 

     Veja como é simples implementar cache distribuído no ASP.NET Core, utilizando o Redis ou o SQL Server.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2017/07/aplicacoes-self-contained-com-o-net-core-400x280.png)  [ .NET Core ](https://www.treinaweb.com.br/blog/categoria/net-core) 

     10 anos atrás

    ##  [ Aplicações self-contained com o .NET Core ](https://www.treinaweb.com.br/blog/aplicacoes-self-contained-com-o-net-core) 

     Aprenda a criar aplicações self-contained no .NET Core.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/08/asp-net-conhecendo-as-minimal-api-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     4 anos atrás

    ##  [ ASP.NET - Conhecendo a Minimal API ](https://www.treinaweb.com.br/blog/asp-net-conhecendo-as-minimal-api) 

     Neste artigo vamos conhecer um dos recursos que foram adicionados no .NET 6/ASP.NET 6, que é um novo template de aplicações Web, a Minimal API.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/code-copy-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     10 anos atrás

    ##  [ Criando repositórios para o NuGet ](https://www.treinaweb.com.br/blog/criando-repositorios-para-o-nuget) 

     Veja algumas importantes dicas sobre a criação de repositórios para o NuGet.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/07/16141718/GOOGLE-APP-ENGINE-400x280.png)  [ Google Cloud Platform (GCP) ](https://www.treinaweb.com.br/blog/categoria/google-cloud-platform-gcp) 

     8 anos atrás

    ##  [ O que é o App Engine e como publicar uma aplicação nele ](https://www.treinaweb.com.br/blog/o-que-e-o-app-engine-e-como-publicar-uma-aplicacao-nele) 

     Descubra o que é o App Engine, sua história e como fazer a publicação (deploy) de sua primeira aplicação através de um vídeo prático.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/05/lambda-400x280.png)  [ Desenvolvimento ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento) 

     7 anos atrás

    ##  [ O que é AWS Lambda? ](https://www.treinaweb.com.br/blog/o-que-e-aws-lambda) 

     Nesse artigo vamos conhecer o AWS Lambda, serviço de computação Serveless da AWS especializado em executar funções sem a necessidade de se preocupar com servidores.

     Ler artigo

## Um ano de acesso total para você viver de programação.

 Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro `console.log` ao mercado de trabalho.

- **1 ano** de acesso a **todos os cursos**
- Cursos novos **toda semana**
- Suporte **direto com professores**
- Plano de carreira **personalizado**
- **Certificados digitais** inclusos
- **Aplicativos** para Android e iOS, com **acesso offline**

    **Garantia incondicional de satisfação** 

 Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

### Acesso completo a todos os cursos e dezenas de Formações.

 12 meses 

  Economize R$ 840,00  54% OFF 

 de 12x R$ 129,00 por apenas

 12x  R$ 59,00

 sem juros no cartão de crédito ou R$ 599,00 à vista

  Oferta termina em  **13h 36min 04s**

- Acesso imediato e ilimitado durante 1 ano.
- Plano de carreira personalizado.
- Suporte direto com professores.
- E muito mais!

 [Matricule-se agora](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26)

     [                ](https://www.treinaweb.com.br)

 Escola online de programação, tecnologia e IA.

- [  ](https://www.facebook.com/TreinaWeb/)
- [  ](https://www.instagram.com/treinaweb/)
- [  ](https://www.youtube.com/user/TreinaWeb)
- [  ](https://twitter.com/treinaweb)
- [  ](https://www.linkedin.com/company/treinaweb)
- [  ](https://github.com/treinaweb)

## Inscreva-se em nossa newsletter

Receba lançamentos, promoções e novidades.

   Seu nome     Seu WhatsApp     Seu melhor e-mail   Inscrever-se 

## Cursos

- [ Base para Devs ](https://www.treinaweb.com.br/categoria/base-para-devs)
- [ Front-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-front-end)
- [ Back-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-back-end)
- [ Mobile ](https://www.treinaweb.com.br/categoria/desenvolvimento-mobile)
- [ Bancos de Dados ](https://www.treinaweb.com.br/categoria/bancos-de-dados)
- [ Cloud ](https://www.treinaweb.com.br/categoria/cloud-computing)
- [ IA ](https://www.treinaweb.com.br/categoria/ia)
- [ E mais ](https://www.treinaweb.com.br/categoria/e-mais)
- [ Ver todos os cursos ](https://www.treinaweb.com.br/cursos)

## Conteúdo

- [ Formações ](https://www.treinaweb.com.br/formacoes)
- [ Projetos práticos ](https://www.treinaweb.com.br/projetos-praticos)
- [ Direto ao ponto ](https://www.treinaweb.com.br/direto-ao-ponto)
- [ Planos ](https://www.treinaweb.com.br#assinatura)
- [ Depoimentos ](https://www.treinaweb.com.br#depoimentos)
- [ Comunidade ](https://www.treinaweb.com.br#comunidade)
- [ Corpo docente ](https://www.treinaweb.com.br#docente)

## A empresa

- [ Sobre a TreinaWeb ](https://www.treinaweb.com.br#sobre)
- [ Perguntas frequentes ](https://www.treinaweb.com.br#faq)
- [ Vantagens de estudar na TreinaWeb ](https://www.treinaweb.com.br/vantagens-de-estudar-na-treinaweb)
- [ Cursos para empresas ](https://www.treinaweb.com.br/empresas)
- [ Sugira um novo curso ](https://www.treinaweb.com.br/sugerir-curso)
- [ Trabalhe conosco ](https://www.treinaweb.com.br/trabalhe-conosco)
- [ Artigos ](https://www.treinaweb.com.br/blog)
- [ Desenvolvedores e agentes ](https://www.treinaweb.com.br/developers)
- [ Contato ](https://www.treinaweb.com.br/contato)
- [ Política de privacidade ](https://www.treinaweb.com.br/politica-de-privacidade)
- [ Termos de uso ](https://www.treinaweb.com.br/termos-de-uso)

## Baixe nosso aplicativo

 [   Disponível na **App Store**  ](https://apps.apple.com/us/app/treinaweb/id1322729447) [   Disponível no **Google Play**  ](https://play.google.com/store/apps/details?id=br.com.treinaweb.mobile) 

  Av. Paulista, 1765, Conj 71 e 72 · Bela Vista · São Paulo · SP · 01311-200   © 2004 – 2026 TreinaWeb Tecnologia LTDA · CNPJ 06.156.637/0001-58
