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.
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.
- Como Instalar o .NET
- Como instalar o Visual Studio Code
- Como instalar o Visual Studio 2022
- Como instalar e configurar o Docker
-
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
-
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"]
-
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();
-
-
Procure por Web API
-
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
- Via interface os arquivos Docker são configurados automaticamente.
-
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();
-
-
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
-
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.