O que é o 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 Instalar o .NET
- Como instalar o Visual Studio Code
- Como instalar o Visual Studio 2022
- Como instalar e configurar o Docker
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
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
Configure Nome do projeto, Local e Nome da solução
Selecione versão do .NET, habilite o Docker e selecione Linux como sistema operacional do 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"
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
Busque pelo seu repositório e selecione 'Deploy Now’
Após finalizar o deploy adicione um domínio
Acesse o Swagger da WebApi caso tenha removido o uso do mesmo apenas de desenvolvimento ( url/swagger/index.html)
Utilize o Insomnia ou Postman para enviar uma requisição para a API caso não tenha removido Swagger de desenvolvimento.
Top comments (0)