Implantando e hospedando aplicativos Full-Stack Laravel
Published: 2023-03-18 11:02:26

No mundo do desenvolvimento de hoje é mais fácil do que nunca implantar seus projetos online com configuração mínima, com frontend e aplicativos JAM Stack/nó, há muitas boas opções: Vercel, Netlify, GitHub Pages, Gitlab Pages, Firebase Hosting.

Infelizmente, para aplicativos modernos baseados em php/Laravel com front-end Vue/React, não há muitos com configuração mínima com a qualidade das opções mencionadas acima do Heroku antes da mudança de seus termos e não encontro um bom um-para-um substituto para ele.

Aqui, quero compartilhar minha jornada replicar um fluxo de trabalho próximo à experiência Heroku com menos de 10 dólares/mês.

As necessidades
Estou falando de um aplicativo pronto para semiprodução, então quais são nossas listas de verificação?

Separado landing pagedo aplicativo. não queremos que os erros do aplicativo afetem nossas páginas de marketing / guias nem os deixem lentos e queremos implementar SEO que provavelmente nosso próprio aplicativo não precisa, porque as rotas são protegidas.

O Main appcom Laravel/Jetstream e todos os recursos que precisamos para isso (Database, cron tabs, redis)

A Database Managerpara revisar rapidamente o banco de dados se estivermos longe de nosso computador e precisarmos gerenciar os dados online

Propriedade, não precisamos pagar dinheiro extra apenas para ter uma funcionalidade básica que gostaríamos (agora tudo é um plugin, DB, Crons, etc...)

Construa nosso front-end e implante no servidor ao mesclar nossa ramificação com serviços master como Heroku e Vercel.

Para aplicativos de produção com mais de 100 clientes pagantes, talvez seja uma opção melhor migrar para algo como os serviços Laravel , mas para projetos paralelos, talvez seja necessário apenas implantar e mostrar o aplicativo para seus amigos ou obter alguns usuários e ver como ele vai gastando menos do que possível.

A solução (primeira tentativa)
Na minha primeira tentativa usei o docker-compose para configurar o ambiente com os serviços que precisava aqui a parte mais difícil foi atender o landing e app através do Nginx como load balancer e seu ssl mas encontrei ferramentas que facilitam a tarefa.

Provedor de nuvem: Digital Ocean
Aplicativos: Docker, Docker Compose
Ferramentas: ssl-companion , jwilder/nginx-proxy
Passos
No servidor:

Inicie um doplet com o Digital Ocean (você precisa dar acesso à sua chave ssh ao criá-lo).
Configure seus domínios no DO.
Instalar janela de encaixe
Configure um repositório git bare no seu servidor para aceitar o git push do seu local enquanto você envia para o Github (mais tarde eu automatizei esta etapa com um pacote Laravel insano/remotr e só preciso definir e definir o REMOTR_SERVER_IPe REMOTR_REPO_NAMEno seu .envdocumento).
No local:

Verifique se você pode se conectar ao seu servidor via SSH
Configure um docker-compose.yml para o seu projeto Laravel aqui foi o meu docker-compose do Loger .
Adicione a URL do seu servidor ao git remote.
git push
Execute seu docker compose upcomando no servidor via SSH e pronto
Talvez haja uma maneira mais curta de fazer isso, mas não por US $ 6,00 / mês sem partidas a frio ou usando outros serviços.

Minha solução atual
O Docker Compose com php e Laravel não era uma boa opção para um Doplet de $ 6, era mais lento do que meu ambiente local pronto para uso, então acabei instalando a pilha LEMP .

Um ponto problemático que enfrentei com a primeira abordagem foi ter que construir os ativos em minha máquina ou no servidor, seria mais fácil gerenciar isso com ações do GitHub, então, eu configurei.

Mais tarde, encontrei um tutorial para conectar as ações do Digital Ocean e do GitHub. Só precisava da chave SSH para enviar do GitHub Action em vez do meu local como primeira abordagem. Portanto, em cada mesclagem para mestre, se os testes estiverem verdes e depois que os arquivos do meu código de front-end forem criados, um git push para o servidor será executado.

 

```
 name: Laravel App Deployment

  on:
    push:
      branches: [ "master" ]
    pull_request:
      branches: [ "master" ]

  jobs:
    build:
    deploy:
      if: ${{ github.event_name == 'push' }}
      name: Deploy
      runs-on: ubuntu-latest
      needs: build
      environment:
        name: demo
        url: ${{ secrets.SITE_URL }}
      steps:
        - uses: actions/checkout@v3
          with:
            fetch-depth: 0
        - name: Install SSH Key
          uses: shimataro/ssh-key-action@v2
          with:
            key: ${{ secrets.DO_DOPLET_SECRET }}
            known_hosts: unnecessary

       - name: Adding Known Hosts
         run: ssh-keyscan -H ${{ secrets.SSH_HOST }}  >> ~/.ssh/known_hosts

       - name: Download frontend build
         uses: actions/download-artifact@v3
         with:
          name: frontend-build
          path: public

       - name: Store live name
         run: git remote add live ${{ secrets.DO_REPO_URL }}

       - name: Deploy with git
         env:
           branch_name: live_digital_ocean
         run: |
           echo "Deploy to staging server"
           git config --global user.email "<>"
           git config --global user.name "Action Bot"
           git add .
           git checkout -b $branch_name
           git commit -m "deploy: build"
           git push live $branch_name:master -f
           echo "deployed to prod-staging"

       - name: Update Composer PHP
         uses: appleboy/ssh-action@master
         with:
           host: ${{ secrets.SSH_HOST }}
           username: ${{ secrets.SSH_USER }}
           key: ${{ secrets.DO_DOPLET_SECRET }}
         script: |
            cd /var/www/loger.com
            composer update --ignore-platform-reqs
```

você pode verificar o arquivo completo aqui: https://github.com/jesusantguerrero/atmosphere/blob/master/.github/workflows/laravel.yml

Pilha atualizada:

IaaS: Digital Ocean Doplet
Aplicativos: NGINX, MariaDB, PHP 8.1
Ferramentas: cerbot, GitHub Actions


Passos
No servidor:

Inicie um Doplet com o Digital Ocean (você precisa dar acesso à sua chave SSH ao criá-lo).
Configure seus domínios no DO.
Instalar janela de encaixe
Configure um repositório git bare no seu servidor para aceitar o git push do seu local enquanto você envia para o GitHub (posteriormente eu automatizei esta etapa com um pacote Laravel insano/remotr e só preciso definir e definir o REMOTR_SERVER_IPe REMOTR_REPO_NAMEno seu .envdocumento).
No GitHub:

configure os segredos SSH que precisamos para a ação:
SITE_URL
DO_REPO_URL
SSH_HOST
SSH_USER
DO_DOPLET_SECRET

Defina a ação de implantação do nosso registrador de ação

Menções honrosas:

fly.io
Aplicativo Oceano Digital
Empacotando

Para resumir, você pode replicar a experiência com baixo custo usando:

Dopleto do Oceano Digital
Crie um repositório git bare para enviar suas alterações com git
Usando Docker ou LEMP Stack no servidor
Automatize testes, build e implantação via SSH com ações do GitHub
Obrigado por ler, se você tiver alguma dúvida ou quiser compartilhar uma pilha, os comentários estão abertos, assim como meu Twitter e Github .


> https://dev.to/jesusantguerrero/deploying-and-hosting-full-stack-laravel-apps-1673