Deploy do site (Docker)
O estado e a configuração do sistema são totalmente definidos no sistema de arquivos. Assim, o estado do site é auto-contido no próprio sistema de arquivos, sem a necessidade de comunicação com sistemas externos por padrão. No entanto, o site pode acessar bancos de dados, serviços SaaS ou outros serviços web, conforme o código implementado pelo desenvolvedor, mas isso não é um requisito obrigatório do runtime da Deco.
Para facilitar o processo de deploy, oferecemos uma estratégia simples utilizando um Dockerfile.
Dockerfile
Para realizar o deploy em Docker, copie o código abaixo para um arquivo
Dockerfile na raiz do seu projeto. É necessário configurar, no mínimo, a
variável de ambiente ENV DECO_SITE_NAME
para refletir o nome do seu site ou
projeto.
FROM denoland/deno:alpine
# The port that your application listens to.
EXPOSE 8000
WORKDIR /app
RUN mkdir -p /home/deno && chown -R deno:deno /home/deno && mkdir /app/deno && chown -R deno:deno /app && mkdir -p /deno-dir && chown -R deno:deno /deno-dir
# Prefer not to run as root.
USER deno
# These steps will be re-run upon each file change in your working directory:
COPY --chown=deno:deno . deco
WORKDIR /app/deco
RUN echo -e 'import "$fresh/src/build/deps.ts";\nimport "$fresh/src/runtime/entrypoints/main.ts";\nimport "$fresh/src/runtime/entrypoints/deserializer.ts";\nimport "$fresh/src/runtime/entrypoints/signals.ts";' >> _docker_deps.ts
RUN deno cache --allow-import --frozen main.ts dev.ts _docker_deps.ts
ARG GIT_REVISION=1
ENV DECO_SITE_NAME=yoursitename
ENV DENO_DEPLOYMENT_ID=$GIT_REVISION
CMD ["run", "--cached-only", "-A", "--unstable-kv", "main.ts"]
Explicação do Dockerfile
Aqui estão alguns detalhes importantes sobre o Dockerfile
acima, que podem
precisar de personalização conforme o seu caso de uso:
FROM denoland/deno:alpine
- Define a imagem base do Docker. Você pode especificar uma versão exata, como
FROM denoland/deno:2.0.1.
- Define a imagem base do Docker. Você pode especificar uma versão exata, como
EXPOSE 8000
- Expõe a porta onde a aplicação estará disponível.
RUN echo -e ... >> _docker_deps.ts
- Define as dependências que serão cacheadas para evitar a busca por pacotes externos durante a execução.
RUN deno cache --allow-import --frozen main.ts dev.ts _docker_deps.ts
- Realiza o cache das dependências do projeto.
ARG GIT_REVISION=1
- Permite definir um argumento de build para identificar revisões do projeto.
ENV DECO_SITE_NAME=yoursitename
- Define uma variável de ambiente usada para identificar o site no runtime Deco.
ENV DENO_DEPLOYMENT_ID=$GIT_REVISION
- Variável usada para gerenciar o cache dos assets do site, devendo ser alterada a cada novo build.
CMD ["run", "--cached-only", "-A", "--unstable-kv", "main.ts"]
- Comando que executa o servidor com as permissões necessárias.
Deploy docker
Para criar a imagem Docker com base no seu projeto, execute o seguinte comando no diretório raiz:
docker build -t site_image .
Se necessário, você pode passar o argumento GIT_REVISION
para identificar uma
revisão específica do build:
docker build --build-arg GIT_REVISION=2 -t site_image .
Finalmente, crie e execute o container Docker:
docker run -p 8000:8000 --name site_container site_image
Com isso, seu site estará rodando em um container Docker, pronto para uso.