Creando un entorno local de Frappe con Docker
Tags: spanish, docker, frappeframework, python
Published: 2021-08-04 16:37:55

## Resumen
Guía para levantar un entorno local de frappe framework y desarrollar en local las apps. En la guía se instala la version 13 de Frappe que es la última al día en el momento que se escribió esta guía, donde se mencione a `version-13` reemplazar por la más nueva.

## Prerequisitos
Para empezar con el desarrollo se necesitan los siguientes requisitos.
- Docker
- docker-compose
- Visual Studio Code

## Preparar contenedor para el desarrollo

Clonar y entrar al directorio `frappe_docker`

```shell
git clone https://github.com/frappe/frappe_docker.git
cd frappe_docker
```

Copiar la configuración ejemplo del devcontainer de la carpeta `devcontainer-example` a `.devcontainer`


```shell
cp -R devcontainer-example .devcontainer
```

## Usar la extensión de VSCode Remote Containers

Para un desarrollo más sencillo en Frappe Framework recomiendo el uso de [VSCode Remote - Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers). Primero instalar esta extensión antes de empezar.

Antes de abrir el contenedor, pueden cambiar la base de datos a usar en `.devcontainer/docker-compose.yml`, por defecto viene configurado con MariaDB pero puede usarse con PostgreSQL.

Una vez instalada la extensión, VSCode les preguntará si desea abrir el contenedor con la configuración dentro de `.devcontainer`. Una vez en VSCode van a ver los archivos dentro del contenedor y en su terminal ya van a estar dentro del contenedor y ahi mismo recomiendo que vayan trabajando con los comandos de Bench.

### Configurar Bench
Correr el siguiente comando dentro de la terminal del contenedor. Puede que necesites abrir una nueva terminal en VSCode

```shell
bench init --skip-redis-config-generation --frappe-branch version-13 frappe-bench
cd frappe-bench
```

Apartir de acá, todos los comandos se ejecutan siempre dentro de la carpeta `frappe-bench`, sino no va a funcionar.

### Configurar hosts
Tenemos que decirle a bench que use los contenedores correctos en lugar de localhost. Correr el siguiente comando dentro del cotenedor.

```shell
bench set-mariadb-host mariadb
bench set-redis-cache-host redis-cache:6379
bench set-redis-queue-host redis-queue:6379
bench set-redis-socketio-host redis-socketio:6379
```

### Editar archivo Procfile
Abrir el archivo Procfile y quitar las tres lineas que contienen la configuración de Redis, ya sea manualmente o corriendo el siguiente comando:

```shell
sed -i '/redis/d' ./Procfile
```

### Crear un nuevo sitio con bench
Se puede crear un nuevo sitio con el siguiente comando:

```shell
bench new-site sitename --no-mariadb-socket
```

sitename DEBE terminar con .localhost para hacer deploy locales.

Ejemplo:


```shell
bench new-site mysite.localhost --no-mariadb-socket
```

El comando pedirá la clave del usuario root de MariaDB. La clave por defecto es `123`. También te pedirá que definas la clave del usuario `Administrator` que se usará para logearse en Frappe.  
Esto creará un nuevo sitio y un directorio `mysite.localhost` dentro de `frappe-bench/sites`.  
La opción `--no-mariadb-socket` configurará las credenciales de la base de datos del site para que funcionen con docker.
Si querés ingresar por navegador con `mysite.localhost` tenés que hacer las configuraciones correspondientes en /etc/host si estás en Linux o el equivalente de Windows.

### Establecer el modo desarrollador de bench en el nuevo sitio

Para desarrollar una nueva app, él último paso será poner el site en developer mode. La documentación está disponible en [este link](https://frappe.io/docs/user/en/guides/app-development/how-enable-developer-mode-in-frappe).

```shell
bench --site mysite.localhost set-config developer_mode 1
bench --site mysite.localhost clear-cache
```

### Crear una nueva app
Para crear una nueva app hay que correr el siguiente comando:

```shell
bench new-app sample_app
```

`sample_app` es un ejemplo. Los nombre de las apps deben llevar `_` para separar sus palabras.  
El comando irá pidiendo los siguientes campos para rellenar.

```shell
App Name: sample_app
App Title: Sample App
App Description: This is a sample app.
App Publisher: Acme Inc.
App Icon: icon-linux
App Color: #6DAFC9
App Email: info@example.com
App URL: http://example.com
App License: MIT
```

Por último, para instalar la app en el site hay que correr el siguiente comando:

```shell
bench --site mysite.localhost install-app sample_app
```

Para más información detallada sobre las apps de Frappe tienen el [siguiente link](https://frappeframework.com/docs/user/en/guides/basics/apps) de la documentación.

### Instalar una app

También se pueda instalar una app ya existente. Previamente debe estar en un repositorio git.  
En el siguiente ejemplo se descarga una app y luego se instala en el site.

```shell
bench get-app myapp https://github.com/myusername/myapp.git
bench --site mysite.localhost install-app myapp
```

### Arrancar Frappe

Ejecutar el siguiente comando dentro del directorio `frappe-bench`.

```shell
bench start
```

Ahora podés logearte con el usuario `Administrator` y el password que hayas registrado cuando creaste el site.
Tu sitio ahora será accesible desde [localhost:8000](http://localhost:8000) o si configuraste tu `etc/host` la url que le hayas definido.

## Arrancar manualmente el contenedor
En caso de que no uses VSCode, podés arrancar el contenedor de forma manual con el siguiente comando:

### Corriendo los contenedores
```shell
docker-compose -f .devcontainer/docker-compose.yml up -d
```

Y entrar al shell del contenedor de desarrollo con el siguiente comando:

```shell
docker exec -e "TERM=xterm-256color" -w /workspace/development -it devcontainer_frappe_1 bash
```

Y luego es repetir los pasos detallados más arriba en la sección `Configurar Bench`