Skip to content

lucasdwn/WebApiDeployExample

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TUTORIAL: Deploy .NET WebAPI grátis no RailwayApp utilizando Docker!


O que é o Railway App

Railway.app

Railway app é uma plataforma na nuvem para construção, envio e monitoramento de aplicativos. Plataformas como essa geralmente visam simplificar o processo de desenvolvimento, fornecendo ferramentas e automações para facilitar a construção e gerenciamentos de aplicativos.

No Railway é possivel você implementar aplicações de diversas linguagens, banco de dados, volumes e implementar integração CI/CD via github. Na criação de sua primeira conta você recebe $5 para gastar como quiser na plataforma, além dos planos de upgrades terem um ótimo custo benefício também.

Implementar uma Web Api .NET no Railway APP

Nosso objetivo é criar uma WebApi .NET, adicionar suporte para Docker, subir a um repositório github, realizar deploy no Railway App e testar, o mesmo método deste tutorial pode ser usado para implementar projetos MVC e talvez outros tipos de projetos(não fiz outros testes, fica em aberto para quem tiver interesse). Para realizar o deploy da nossa WebApi vamos utilizar o docker, ele é essencial nesse processo, caso você não tenha instalado irei deixar link de um tutorial de como baixar, instalar e configura-lo. Para seguir com o deploy é necessário ter .NET e Docker instalados em sua máquina e uma IDE ou Editor de texto, abaixo disponizibilizarei alguns tutoriais caso não tenha algum dos itens mencionados.

Tutoriais

Como configurar o projeto utilizando Visual Studio Code - CLI

Iniciar um projeto WebApi .NET C#

  • Cria uma pasta para seu projeto e dentro dela abra o Visual Studio Code e o prompt, execute para criar o projeto:

    dotnet new webapi -o WebApiDeployExample
  • Execute para criar a solução:

    dotnet new sln
  • Execute para vincular o projeto a solução

    dotnet sln add WebApiDeployExample

Configurando o Docker no projeto

  • Crie um arquivo ‘.dockerfile’ na raiz da solução(Mesma localização do seu arquivo .sln), preencha com os seguintes itens:

    **/.classpath
    **/.dockerignore
    **/.env
    **/.git
    **/.gitignore
    **/.project
    **/.settings
    **/.toolstarget
    **/.vs
    **/.vscode
    **/*.*proj.user
    **/*.dbmdl
    **/*.jfm
    **/azds.yaml
    **/bin
    **/charts
    **/docker-compose*
    **/Dockerfile*
    **/node_modules
    **/npm-debug.log
    **/obj
    **/secrets.dev.yaml
    **/values.dev.yaml
    LICENSE
    README.md
    !**/.gitignore
    !.git/HEAD
    !.git/config
    !.git/packed-refs
    !.git/refs/heads/**
  • Crie um arquivo ‘Dockerfile’ dentro do projeto(Mesma localização do seu arquivo .csproj), preencha com o seguinte template:

    #See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
    
    FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
    USER app
    WORKDIR /app
    EXPOSE 8080
    EXPOSE 8081
    
    FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
    ARG BUILD_CONFIGURATION=Release
    WORKDIR /src
    COPY ["[NomeDoProjeto]/[NomeDoProjeto].csproj", "[PastaDoProjeto]/"]
    RUN dotnet restore "./[NomeDoProjeto]/[NomeDoProjeto].csproj"
    COPY . .
    WORKDIR "/src/[NomeDoProjeto]"
    RUN dotnet build "./[NomeDoProjeto].csproj" -c $BUILD_CONFIGURATION -o /app/build
    
    FROM build AS publish
    ARG BUILD_CONFIGURATION=Release
    RUN dotnet publish "./[NomeDoProjeto].csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
    
    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app/publish .
    ENTRYPOINT ["dotnet", "[NomeDoProjeto].dll"]

Configurando Railway no projeto

  • Crie um arquivo ‘railway.toml’ na raiz da solução(Mesma localização do seu arquivo .sln), preencha com os seguintes itens:

    [build]
    builder = "dockerfile"
    dockerfilePath = "./WebApiDeployExample/Dockerfile"
    
    [deploy]
    startCommand = "dotnet WebApiDeployExample.dll"
    restartPolicyType = "never"
  • No projeto em Program.cs adicione o seguinte código antes de ‘var app = builder.Build();’:

    var port = Environment.GetEnvironmentVariable("PORT") ?? "8081";
    builder.WebHost.UseUrls($"http://*:{port}");
  • Comente ‘app.UseHttpRedirection();’

  • Caso queira visualizar o Swagger ao publicar retire ‘app.UseSwagger();’ e ‘app.UseSwaggerUI();’ de dentro das condições de ambiente de desenvolvimento.

    • Antes

      if (app.Environment.IsDevelopment())
      {
          app.UseSwagger();
          app.UseSwaggerUI();
      }
    • Depois

      app.UseSwagger();
      app.UseSwaggerUI();

Como configurar o projeto utilizando Visual Studio 2022 - Interface

Iniciar um projeto WebApi .NET C#

  • Procure por Web API

    image

  • Configure Nome do projeto, Local e Nome da solução

    image

  • Selecione versão do .NET, habilite o Docker e selecione Linux como sistema operacional do Docker

    image

Configurando o Docker no projeto

  • Via interface os arquivos Docker são configurados automaticamente.

Configurando Railway no projeto

  • Crie um arquivo ‘railway.toml’ na raiz da solução(Mesma localização do seu arquivo .sln), preencha com os seguintes itens:

    [build]
    builder = "dockerfile"
    dockerfilePath = "./WebApiDeployExample/Dockerfile"
    
    [deploy]
    startCommand = "dotnet WebApiDeployExample.dll"
    restartPolicyType = "never"
  • No projeto em Program.cs adicione o seguinte código antes de ‘var app = builder.Build();’:

    var port = Environment.GetEnvironmentVariable("PORT") ?? "8081";
    builder.WebHost.UseUrls($"http://*:{port}");
  • Comente ‘app.UseHttpRedirection();’

  • Caso queira visualizar o Swagger ao publicar retire ‘app.UseSwagger();’ e ‘app.UseSwaggerUI();’ de dentro das condições de ambiente de desenvolvimento.

    • Antes

      if (app.Environment.IsDevelopment())
      {
          app.UseSwagger();
          app.UseSwaggerUI();
      }
    • Depois

      app.UseSwagger();
      app.UseSwaggerUI();

Como subir o projeto para o github e fazer deploy no RailwayApp

Subindo o projeto para o github

  • Adicione um arquivo ‘.gitignore’ na raiz da solução(Mesma localização do seu arquivo .sln), preencha com os seguinte ou itens a critério:

    .vs
  • Crie um repositório local na raiz da solução utilizando

    git init
  • Crie um repositório vázio no github e conecte ao seu repositório local utilizando os comandos

    git remote add origin https://github.com/lucasdwn/WebApiDeployExample.git
    git branch -M main
    git add .
    git commit -m 'First Commit'
    git push -u origin main

Fazendo deploy com o Railway

  • No dashboard do railway após ter logado com o Github, crie um novo projeto e selecione Deploy from GitHub repo

    image

  • Busque pelo seu repositório e selecione 'Deploy Now’

    image

  • Após finalizar o deploy adicione um domínio

    image

  • Acesse o Swagger da WebApi caso tenha removido o uso do mesmo apenas de desenvolvimento ( url/swagger/index.html)

    image

  • Utilize o Insomnia ou Postman para enviar uma requisição para a API caso não tenha removido Swagger de desenvolvimento.

    image

Repositório de exemplo

Documentações e referências

Contatos

About

Repositório exemplificando o deploy de uma WebApi no RailwayApp utilizando Docker

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published