DEV Community

Cover image for TUTORIAL: Deploy .NET WebAPI grátis no RailwayApp utilizando Docker!
Lucas Costa
Lucas Costa

Posted on

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

Crie 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
Enter fullscreen mode Exit fullscreen mode

Execute para criar a solução:

dotnet new sln
Enter fullscreen mode Exit fullscreen mode

Execute para vincular o projeto a solução

dotnet sln add WebApiDeployExample
Enter fullscreen mode Exit fullscreen mode

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/**
Enter fullscreen mode Exit fullscreen mode

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"]
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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}");
Enter fullscreen mode Exit fullscreen mode

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
Criando novo projeto no Visual Studio

Configure Nome do projeto, Local e Nome da solução
Configurando Nome do projeto, Local de criação e Nome da solução

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

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"
Enter fullscreen mode Exit fullscreen mode

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}");
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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

git init
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode




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

Criando novo projeto no RailwayApp

Busque pelo seu repositório e selecione 'Deploy Now’
Selecionando repositório do github no RailwayApp

Após finalizar o deploy adicione um domínio
Opção de adicionar domínio em destaque no RailwayApp

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

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

Repositório de exemplo

Documentações e referências

Contatos

Top comments (0)