Os anúncios recentes em LaraconEUA despertaram um interesse renovado em implantações baseadas em nuvem dentro da comunidade Laravel. À medida que o debate continua sobre uma vez que implantar seus aplicativos, uma coisa está clara: a nuvem está se tornando uma opção mais viável para usuários do Laravel.
Neste item, exploraremos uma vez que preparar seu aplicativo Laravel para implantação em um envolvente de nuvem usando FrankenPHP, CaddyDockerfiles e, finalmente, implantá-lo em Sevilha.
Logo por onde começamos? No envolvente sítio, é evidente! 🤓
#Envolvente de desenvolvimento sítio
Para simplificar, vamos supor que você tenha um novo aplicativo Laravel instalado em sua máquina sítio, que se conecta a um banco de dados PostgreSQL para ler/gravar alguns dados.
Antes de prosseguirmos, certifique-se de ter um .env
registo na raiz do seu projeto com o seguinte teor:
.env
:
...
DB_CONNECTION=pgsql
...
Depois que isso for verificado, podemos iniciar a edificar. 🤓 ☕️
É sempre uma boa teoria ter um envolvente de desenvolvimento sítio que se assemelhe bastante ao seu envolvente de produção. Dessa forma, você pode detectar quaisquer problemas logo no início e evitar surpresas ao implantar seu aplicativo em produção.
Para imitar a forma de produção que usaremos, contaremos com o Docker e o Docker Compose. Se você não tiver o Docker instalado em sua máquina, você pode baixá-lo do site solene.
#Executando Laravel sem o banco de dados
Primeiro, crie um novo registo chamado compose.yml
na raiz do seu projeto Laravel e adicione o seguinte teor:
compose.yml
:
services:
Sua visita nos ajuda a continuar oferecendo o melhor para você! php:
image: dunglas/frankenphp:php8.3-alpine
command: php artisan serve --host 0.0.0.0 --port 8080
ports:
- 8080:8080
Sua visita nos ajuda a continuar oferecendo o melhor para você! volumes:
- .:/app
Nascente registo de forma define um serviço chamado php
que usa o dunglas/frankenphp:php8.3-alpine
image, que é uma imagem FrankenPHP ligeiro que inclui extensões necessárias para executar um aplicativo Laravel. Também expomos a porta 8080
para acessar o aplicativo a partir da máquina host.
Para testar sua forma, tente executar o seguinte comando no seu terminal:
docker compose up [-d]
Você deverá ver uma página de erro do Laravel explicando que a conexão não foi estabelecida com o banco de dados devido a um driver ausente ao velejar para http://0.0.0.0:8080
no seu navegador. Isso é esperado, pois ainda não conectamos nosso aplicativo Laravel a um banco de dados.
Incrível, até agora configuramos nosso aplicativo Laravel para ser atendido por um tempo de realização FrankenPHP em realização php artisan serve
.
Em seguida, vamos conectar nosso aplicativo sítio a um banco de dados PostgreSQL!
#Executando Laravel com o banco de dados
Para conectar seu aplicativo Laravel a um banco de dados PostgreSQL, precisaremos fazer algumas coisas.
Primeiro, precisamos definir as seguintes variáveis de envolvente em seu .env
registo:
.env
:
...
DB_CONNECTION=pgsql
DB_HOST=db
DB_PORT=5432 # default PostgreSQL port
DB_DATABASE=main
DB_USERNAME=admin
DB_PASSWORD=password
Depois disso, você precisará juntar novos serviços ao seu compose.yml
registo e crie um personalizado Dockerfile
para seu envolvente dev. Crie e atualize os arquivos com o seguinte teor:
Dockerfile.dev
:
FROM dunglas/frankenphp:php8.3-alpine
RUN install-php-extensions pdo_pgsql
Dockerfile.dev
destina-se exclusivamente a ser usado pelo seu envolvente sítio/de desenvolvimento e estende o dunglas/frankenphp:php8.3-alpine
imagem para incluir o pdo_pgsql
extensão, necessária para conectar-se a um banco de dados PostgreSQL.
compose.yml
:
services:
init:
build:
dockerfile: Dockerfile.dev
command: php artisan migrate
depends_on:
db:
condition: service_healthy
volumes:
- .:/app
php:
build:
context: .
dockerfile: Dockerfile.dev
command: php artisan serve --host 0.0.0.0 --port 8080
ports:
- 8080:8080
depends_on:
init:
condition: service_completed_successfully
volumes:
- .:/app
db:
image: postgres:16.4-alpine
environment:
POSTGRES_USER: admin
POSTGRES_PASSWORD: password
POSTGRES_DB: main
volumes:
- /var/lib/postgresql/data
healthcheck:
test: pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB
interval: 1s
Há muita coisa acontecendo cá, vamos dar uma olhada no que mudou e por quê:
- Nós atualizamos o
php
serviço para usar um Dockerfile personalizado chamadoDockerfile.dev
para edificar uma novidade imagem que inclua as extensões necessárias para se conectar a um banco de dados PostgreSQL. - Adicionamos um novo serviço chamado
db
que usa opostgres:16.4-alpine
imagem para executar um banco de dados PostgreSQL. Também definimos algumas variáveis de envolvente para configurar o usuário, senha e nome do banco de dados. - Criamos um novo volume chamado
db_data
para persistir os dados no banco de dados da sua máquina, e o Docker poderá reutilizá-los quando você reiniciar os serviços. - Um novo serviço chamado
init
também foi adicionado que reutilizaDockerfile.dev
. Esta imagem é usada para executar ophp artisan migrate
comando para executar suas migrações de banco de dados. Odepends_on
chave garante que odb
o serviço está instalado e funcionando antes das migrações serem executadas. - O
php
o serviço agora depende doinit
serviço para prometer que as migrações do banco de dados sejam executadas antes do aplicativo Laravel iniciar. - Adicionamos uma verificação de saúde ao
db
serviço para prometer que o banco de dados PostgreSQL esteja instalado e funcionando antes doinit
serviço executa as migrações.
Para testar sua forma, execute o seguinte comando no seu terminal:
docker compose up --build
Agora seu aplicativo deve estar se conectando ao seu banco de dados PostgreSQL, e suas migrações de banco de dados serão sempre executadas. 🎉
Seu envolvente sítio agora está pronto para imitar seu envolvente de produção. Agora você pode desenvolver seu aplicativo localmente e testar uma forma realmente similar que você usará em produção.
#Preparando para produção
É hora de fazer as mudanças necessárias no seu envolvente de produção.
O primeiro passo é proferir ao Docker quais diretórios ele pode ignorar com segurança ao edificar a imagem de produção. Crie um novo registo chamado .dockerignore
na raiz do seu projeto Laravel e adicione o seguinte teor:
.dockerignore
:
vendor
bootstrap/chache/*
tests
Nascente registo informa ao Docker para ignorar o vendor
, bootstrap/cache
e tests
diretórios.
Em seguida, crie um Dockerfile
que será usado para edificar sua imagem de produção:
Dockerfile
:
FROM dunglas/frankenphp:php8.3-alpine
ENV SERVER_NAME=":8080"
RUN install-php-extensions @composer pdo_pgsql
WORKDIR /app
COPY . .
RUN composer install
--ignore-platform-reqs
--optimize-autoloader
--prefer-dist
--no-interaction
--no-progress
--no-scripts
Esse Dockerfile
é semelhante ao Dockerfile.dev
criamos anteriormente, mas inclui algumas etapas adicionais:
- Uma vez que a imagem FrankenPHP usa o Caddy uma vez que servidor web padrão, definimos o
SERVER_NAME
variável de envolvente para:8080
para instruir o Caddy a escutar na porta8080
. - Nós instalamos o
@composer
Extensão PHP para instalar o Composer na imagem. -
composer install
O comando é executado para instalar as dependências do seu aplicativo Laravel. - Definimos o diretório de trabalho para
/app
e copiou o teor do seu aplicativo Laravel para a imagem.
Para testar suas alterações em seu envolvente sítio, você precisará produzir uma compilação de produção do seu aplicativo. Execute o seguinte comando em seu terminal:
docker build -t my-laravel-app .
Nascente comando cria uma novidade imagem Docker chamada my-laravel-app
com base no Dockerfile
no diretório atual.
Para testar sua imagem de produção recém-criada, use o seguinte comando:
docker run -p 8080:8080 -e APP_KEY=<your-app-key> my-laravel-app
Substituir
com o valor do APP_KEY
variável de envolvente em seu .env
registo ou pegue uma chave de cá.
Visite 0.0.0.0:8080 no seu navegador, e seu aplicativo deve iniciar no modo de produção. Pode dar erro devido à falta de uma conexão com o banco de dados, mas isso é esperado.
#Implantando na nuvem
Agora que você tem uma imagem do Docker pronta para produção, você pode implantá-la em um provedor de nuvem. 🚀
Neste tutorial, usaremos Sevilhaum novo provedor de nuvem que oferece uma maneira simples de implantar Dockerfile
implantações baseadas em.
Uma vez que seu aplicativo depende de um banco de dados PostgreSQL, é melhor provisionar um novo banco de dados PostgreSQL no Sevalla primeiro. Depois de fazer login no Quadro de instrumentos Sevalla,
- Navegue até o modal Gerar banco de dados
- Selecione o banco de dados PostgreSQL
- Confirme as configurações e crie o banco de dados
Quando seu banco de dados estiver pronto, você pode fabricar seu aplicativo Laravel no Sevalla.
- Navegue até o modal Gerar aplicativo
- Selecione o repositório do seu aplicativo no seu provedor Git preposto
- Certifique-se de selecionar o mesmo data center em que seu banco de dados está
- Defina o
APP_KEY
variável de envolvente necessária pelo Laravel - Selecione
Dockerfile
uma vez Sua visita nos ajuda a continuar oferecendo o melhor para você! tipo de construção - Confirme o restante das configurações e clique no botão “Implementar mais tarde”
Se seu aplicativo estiver pronto, agora você pode conectá-lo ao seu banco de dados PostgreSQL.
- Navegue até a página do aplicativo
- Vá para a aba “Rede”
- Clique no botão “Aditar conexão” e selecione seu banco de dados PostgreSQL
- Confirme as configurações e clique em “Conectar”
Em seguida, defina as seguintes variáveis de envolvente na aba “Variáveis de envolvente” com os detalhes de conexão do seu banco de dados:
-
DB_CONNECTION
-
DB_HOST
-
DB_PORT
-
DB_DATABASE
-
DB_USERNAME
-
DB_PASSWORD
Recomendamos usar o endereço de rede interno do seu banco de dados uma vez que DB_HOST
valor. Dessa forma, seu aplicativo pode se conectar ao banco de dados por meio de uma rede privada.
A última lanço é configurar um processo de trabalho para seu aplicativo para executar as migrações do banco de dados antes de iniciar o aplicativo.
- Navegue até a aba “Processos”
- Clique no botão “Gerar processo” e selecione “Trabalho”
- Defina o comando para
php artisan migrate --force
- Defina a política de início uma vez que “Antes da implantação”
- Confirme as configurações e clique em “Gerar”
Se isso também for feito, agora você pode iniciar uma implantação manual do seu aplicativo na aba Implantações. 🎉
Se tudo correu muito, parabéns! Você preparou com sucesso seu aplicativo Laravel para a nuvem. 🚀
#Desfecho
Neste item, exploramos:
- Uma vez que configurar seu envolvente sítio para imitar seu envolvente de produção usando Docker e
docker compose
. - Uma vez que preparar seu aplicativo Laravel para implantação em um envolvente de nuvem usando Docker, FrankenPHP e Caddy.
- Também abordamos uma vez que implantar seu aplicativo em um provedor de nuvem uma vez que Sevilha.
Seguindo essas etapas, você pode levar seu aplicativo Laravel a novos patamares e aproveitar os benefícios das implantações baseadas em nuvem. 🌤
Tags:
Crédito: Natividade Original