Skip to content

Commit

Permalink
Add self host sites/envs docs
Browse files Browse the repository at this point in the history
  • Loading branch information
matheusgr committed Oct 17, 2024
1 parent ff519e2 commit e9461f3
Show file tree
Hide file tree
Showing 3 changed files with 175 additions and 4 deletions.
6 changes: 6 additions & 0 deletions docs/self-host/envs/en.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
description: Arquitetura Self-host
since: 2.0
---

## TODO (WIP)
103 changes: 103 additions & 0 deletions docs/self-host/site/en.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
---
description: Self-host Architecture
since: 2.0
---

## Site Deployment (Docker)

The state and configuration of the system are entirely defined in the file
system. Thus, the site's state is self-contained within the file system itself,
without the need for communication with external systems by default. However,
the site can access databases, SaaS services, or other web services, as
implemented by the developer, but this is not a mandatory requirement of the
Deco runtime.

To facilitate the deployment process, we offer a simple strategy using a
Dockerfile.

## Dockerfile

To deploy in Docker, copy the code below to a Dockerfile in the root of your
project. It is necessary to configure at least the environment variable
`ENV DECO_SITE_NAME` to reflect the name of your site or project.

```dockerfile
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"]
```

### Dockerfile Explanation

Here are some important details about the `Dockerfile` above, which may need
customization according to your use case:

- `FROM denoland/deno:alpine`
- Defines the base Docker image. You can specify an exact version, such as
`FROM denoland/deno:2.0.1.`

- `EXPOSE 8000`
- Exposes the port where the application will be available.

- `RUN echo -e ... >> _docker_deps.ts`
- Defines the dependencies that will be cached to avoid fetching external
packages during execution.

- `RUN deno cache --allow-import --frozen main.ts dev.ts _docker_deps.ts`
- Caches the project's dependencies.

- `ARG GIT_REVISION=1`
- Allows defining a build argument to identify project revisions.

- `ENV DECO_SITE_NAME=yoursitename`
- Sets an environment variable used to identify the site in the Deco runtime.

- `ENV DENO_DEPLOYMENT_ID=$GIT_REVISION`
- Variable used to manage the site's asset cache, which should be changed with
each new build.

- `CMD ["run", "--cached-only", "-A", "--unstable-kv", "main.ts"]`
- Command that runs the server with the necessary permissions.

### Docker Deployment

To create the Docker image based on your project, run the following command in
the root directory:

- `docker build -t site_image .`

If necessary, you can pass the `GIT_REVISION` argument to identify a specific
build revision:

- `docker build --build-arg GIT_REVISION=2 -t site_image .`

Finally, create and run the Docker container:

- `docker run -p 8000:8000 --name site_container site_image`

With this, your site will be running in a Docker container, ready for use.
70 changes: 66 additions & 4 deletions docs/self-host/site/pt.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,24 @@ description: Arquitetura Self-host
since: 2.0
---

## TODO (WIP)
## Deploy do site (Docker)

## Deployando seu 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.

```dockerfile
FROM denoland/deno:alpine
Expand Down Expand Up @@ -38,6 +53,53 @@ ENV DENO_DEPLOYMENT_ID=$GIT_REVISION
CMD ["run", "--cached-only", "-A", "--unstable-kv", "main.ts"]
```

Para deployar no fly.io...
### 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.`

- `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`

`flyctl launch`
Com isso, seu site estará rodando em um container Docker, pronto para uso.

0 comments on commit e9461f3

Please sign in to comment.