Life hack - escreva e hospede o site com um livro de visitas na nuvem gratuitamente

Hospedado na nuvem, um site de livro de visitas gratuitamente


Atualmente, você pode implantar seu site com um nome de domínio de segundo nível na nuvem gratuitamente. Você está curioso sobre como? Continue lendo.


Sugiro que você dê uma olhada em como criar um livro de visitas no ASP.NET Core (com reCAPTCHA) e hospede-o gratuitamente em uma hospedagem em nuvem bastante conhecida (sim, com limitações, mas é bastante adequada para um site pessoal com pouco tráfego)


Como banco de dados, gostei do MongoDB da Atlas . Também pode ser "zayuzat" de graça.
Como alternativa, ainda existem boas opções na forma de DynamoDB com algum tipo de limite livre e Firebase Firestore.


O aplicativo será dockerized. Porém, como "existe uma falta de desejo" de instalar o docker localmente, configuraremos o pipeline para criar e publicar automaticamente a imagem do Docker (é claro, também é grátis)


Você pode encontrar o código fonte do livro de visitas no github
Não considerarei o código em detalhes. Em resumo, analisarei apenas a adição do reCAPTCHA v3. O livro de visitas recaptcha é Must. Além disso, a 3ª versão do Recaptcha não incomoda o usuário com a entrada de caracteres.


Usando reCAPTCHA


Você pode criar uma conta e obter o SiteKey e o SecretKey no reCAPTCHA do console do Google .
Não se esqueça de adicionar localhost (temporariamente no momento do desenvolvimento) e o URL do seu site à lista de domínios (está nas configurações)


Admin reCAPTCHA


Conectamos o script à chave retirada das configurações do aplicativo como parâmetro:


<script src="https://www.google.com/recaptcha/api.js?render=@Configuration["ReCaptcha:SiteKey"]" async defer></script> 

E no caso de enviar o conteúdo do formulário, adicione o token reCAPTCHA (enviamos "XMLHttpRequest" sem usar o jQuery)


 grecaptcha.ready(function() { grecaptcha.execute('@Configuration["ReCaptcha:SiteKey"]', {action: 'homepage'}).then(function(token) { xhttp.open('POST', '@Url.Action("AddMessage", "Home")', true); xhttp.setRequestHeader("RequestVerificationToken", document.getElementById('RequestVerificationToken').value); var formData = new FormData(document.forms.message); formData.append("Token", token) xhttp.send(formData); }); }); 

O AntiForgeryToken é definido como o cabeçalho. Este é outro token, sem o qual também não.
Para garantir que a solicitação não foi enviada pelo robô ou pelo remetente de spam, você deve enviar o token recebido do reCAPTCHA e a chave secreta para o endereço www.google.com/recaptcha/api/siteverify


Para isso, precisamos do HttpClient. Criar HttpClient usando a construção using não faz parte do conceito do ASP.NET Core. No Core, é habitual criar uma fábrica HttpClientFactory. É criado simplesmente. Uma linha é adicionada ao Startup.cs


 services.AddHttpClient(); 

E então, nos projetistas dos controladores, podemos extrair / criar instâncias de clientes da DI. Por exemplo, assim:


 private readonly HttpClient _httpClient; public HomeController(IHttpClientFactory httpClientFactory) { _httpClient = httpClientFactory.CreateClient("defaultClient"); } 

Verifique o reCAPTCHA assim:


 var parameters = new Dictionary<string, string> { { "secret", _configuration["ReCaptcha:SecretKey"] }, { "response", model.Token } }; var encodedContent = new FormUrlEncodedContent(parameters); var response = await _httpClient.PostAsync("https://www.google.com/recaptcha/api/siteverify", encodedContent); var result = JsonConvert.DeserializeObject<ReCaptchaResponse>(await response.Content.ReadAsStringAsync()); 

Nesse caso, a própria classe ReCaptchaResponse:


 public class ReCaptchaResponse { public bool success { get; set; } public double score { get; set; } public string action { get; set; } public string hostname { get; set; } public string challenge_ts { get; set; } } 

Crie um banco de dados em nuvem gratuito


Ao registrar uma conta no MongoDB Atlas .
Você deve inserir um número de telefone e alguns outros dados pessoais. O cluster Starter gratuito foi projetado para aprender o MongoDB e para pequenas aplicações. É interessante que você possa escolher não apenas a região, mas o provedor de hospedagem na nuvem da sua base, a seu gosto, dentre as três maiores


Escolhendo uma região e um provedor no MondoDB Atlas


Depois de criar o cluster, você precisará criar um usuário


Criação de Usuário


e você precisará adicionar todos os IPs à lista de permissões (infelizmente, o plano de hospedagem gratuita da Heroku não fornece um IP estático).


Impacto na segurança como permitir acesso de todos os IPs


Agora, tudo o que precisamos fazer é criar um banco de dados e uma coleção


Tela inicial do administrador


Clique em COLEÇÕES e depois em Adicionar meus próprios dados.


Janela a partir da qual você pode criar uma coleção


Criamos o nome do banco de dados e da coleção e preenchemos os campos. É melhor não selecionar coleções limitadas, pois nesse caso não será possível excluir registros. Coleções limitadas são perfeitas para registrar informações. A gravação de novos registros é rápida, quando uma certa quantidade é atingida, os registros antigos são reescritos.


Criar coleção


Ao clicar em Conectar e selecionar Conectar seu aplicativo


Obtendo a seqüência de conexão


Você poderá copiar a cadeia de conexão


Obtendo a seqüência de conexão


Criando um aplicativo Heroku


Criando um aplicativo no Heroku


Tudo é realmente simples lá. Mesmo um cartão de crédito não pode ser vinculado ao registrar uma conta.


Criando um pipeline para publicar uma imagem no Docker Hub


No projeto, crie um Dockerfile com conteúdo bastante comum (um arquivo de exemplo é fornecido para a versão do .NET Core 2.2)


 FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base WORKDIR /app EXPOSE 64498 EXPOSE 44396 FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build WORKDIR /src COPY Guestbook.csproj Guestbook.csproj RUN dotnet restore COPY . . WORKDIR /src RUN dotnet build -c Release -o /app FROM build AS publish RUN dotnet publish -c Release -o /app FROM base AS final WORKDIR /app COPY --from=publish /app . ENTRYPOINT ["dotnet", "Guestbook.dll"] 

Para que o Heroku possa iniciar a imagem, a última linha precisará ser alterada para


 CMD ASPNETCORE_URLS=http://*:$PORT dotnet Guestbook.dll 

O código fonte deve ser executado em algum sistema de controle de versão. Comecei no github.
Depois que o código é colocado no GitHub para criar a imagem do docker, torna-se possível usar os Devops do Azure . Você pode pular esta parte do artigo, instalar o Docker localmente e reconstruir tudo manualmente a cada vez.


Vou descrever a criação do projeto com capturas de tela


Crie um projeto no DevOps do Azure


Depois de criar o próprio projeto, você precisa criar um novo pipeline


Criação de Pipeline


e selecione o sistema de controle de versão que você está usando


Escolhendo um sistema de controle de versão


Agora você pode selecionar um repositório


Seleção de repositório


Em seguida, você precisará autorizar o DevOps para acessar o repositório.
E será possível escolher o tipo de configuração (o arquivo yaml de um determinado tipo será criado automaticamente)


Escolhendo um tipo de configuração


Nossa versão é Docker.
Na janela que é aberta, você precisa especificar o caminho para o arquivo Docker:


Caminho do arquivo do Docker


Na próxima etapa, o conteúdo do arquivo yaml será exibido para você.


Você pode pensar e conjurar você mesmo, mas é mais fácil copiar o código a seguir e substituir alguns valores nele (Atenção! Os espaços no yaml são muito importantes):


 variables: dockerId: your-docker-login # Replace with your Docker ID for Docker Hub or the admin user name for the Azure Container Registry imageName: mongodb-guestbook # Replace with the name of the image you want to publish steps: - script: | docker build -t $(dockerId)/$(imageName) . docker login -u $(dockerId) -p $(dockerPassword) docker push $(dockerId)/$(imageName) docker login --username=_ --password=$(token) registry.heroku.com docker build -t registry.heroku.com/myfreeguestbook/web . docker push registry.heroku.com/myfreeguestbook/web 

seu-docker-login, você precisa substituir pelo ID da sua conta do docker
mongodb-guestbook altere o nome da sua imagem
em vez de myfreeguestbook, insira o nome do seu aplicativo no Heroku


Tudo o que resta é inserir os valores das variáveis dockerPassword e token . Para fazer isso, clique em Variáveis


Botão Variáveis


Bem, digite a senha da conta do Docker. E o token ..


Janela Variáveis


Se estiver claro onde obter a senha da conta do Docker, para obter o token, precisamos do Heroku CLI
Você pode baixá-lo no seguinte link: Baixe e instale
Você pode instalar a versão autônoma / portátil.


Efetue login usando um dos seguintes comandos: heroku login (este comando abrirá uma janela do navegador para login) ou heroku login -I (este comando solicitará uma senha no console)


O token é obtido usando o comando


heroku auth:token


Também é aconselhável alterar o tipo de aplicativo Heroku para contêiner. Isso é feito pelo comando:


heroku stack:set container -a myfreeguestbook


Lembre-se de alterar myfreeguestbook para o nome do seu aplicativo.


Depois que o pipeline for concluído e criar a imagem do docker, você precisará executar o comando que publica seu aplicativo:


heroku container:release -a myfreeguestbook


Se você é o desenvolvedor certo e armazena todas as configurações no arquivo appsettings.Development.json, o projeto não funcionará para você. Para que tudo funcione, você precisa adicionar configurações ao Heroku


Valores de configuração do aplicativo Heroku


Os elementos filho Json são separados por sublinhados duplos __


Configuração de domínio e SSL


Com o Heroku CLI, você pode adicionar seu domínio ao aplicativo. Para fazer isso, primeiro você precisará anexar um cartão de crédito à sua conta.


Equipa:


heroku domains:add www.example.ru


Isso lhe dará algo como:


Adicionando www.example.ru ao ⬢ exemplo-aplicativo ... concluído
▸ Configure o provedor DNS do seu aplicativo para apontar para o Destino DNS
▸ whispering-willow-5678.herokudns.com.
▸ Para obter ajuda, consulte https://devcenter.heroku.com/articles/custom-domains
Ele deve ser repetido para o seu domínio raiz (por exemplo, por exemplo.ru)

Os aliases de CNAME devem ser salvos e adicionados como CNAMEs no portal de registro de nomes de domínio


www whispering-willow-erkie5ugksj4fo.herokudns.com


@ mighty-horse-dvkerbibi34biufbwiieuf.herokudns.com


Você pode adicioná-los diretamente ao editor de registro DNS arbitrário:


www.example.ru. IN CNAME whispering-willow-erkie5ugksj4fo.herokudns.com.


@.example.ru IN CNAME mighty-horse-dvkerbibi34biufbwiieuf.herokudns.com.


Você pode fazer isso.


Mas prefiro a opção de ter uma conta gratuita do cloudflare. Afinal, o Cloudflare fornece um certificado SSL gratuito. Para Conteúdo, você deve especificar os valores CNAME recebidos do Heroku. Como você pode ver, também adicionei correio Yandex gratuito para o domínio.


Configurar CloudFlare


Bem, o que será indicado nos valores dos servidores de nomes Cloudflare, você precisará especificar na forma de servidores DNS no site do seu registrador de domínio.


O resultado é que o CloudFlare é um intermediário entre o seu provedor de DNS e o Heroku.

Source: https://habr.com/ru/post/pt471474/


All Articles