{"id":22463260,"url":"https://github.com/enflujo/arca-api","last_synced_at":"2026-02-16T09:32:34.859Z","repository":{"id":92700409,"uuid":"330302356","full_name":"enflujo/arca-api","owner":"enflujo","description":":ship: Administrador de contenido para el archivo Arca.","archived":false,"fork":false,"pushed_at":"2024-09-06T16:56:31.000Z","size":808,"stargazers_count":1,"open_issues_count":8,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-23T18:11:09.157Z","etag":null,"topics":["cms","development-environment","directus","docker-compose","postgresql"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/enflujo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-01-17T02:55:29.000Z","updated_at":"2024-09-06T16:56:35.000Z","dependencies_parsed_at":"2025-06-10T06:32:47.454Z","dependency_job_id":"db410752-6171-418f-b198-e40cf26c6dab","html_url":"https://github.com/enflujo/arca-api","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/enflujo/arca-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enflujo%2Farca-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enflujo%2Farca-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enflujo%2Farca-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enflujo%2Farca-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/enflujo","download_url":"https://codeload.github.com/enflujo/arca-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enflujo%2Farca-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29504751,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-16T09:05:14.864Z","status":"ssl_error","status_checked_at":"2026-02-16T08:55:59.364Z","response_time":115,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cms","development-environment","directus","docker-compose","postgresql"],"created_at":"2024-12-06T09:12:38.029Z","updated_at":"2026-02-16T09:32:34.853Z","avatar_url":"https://github.com/enflujo.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Arca API\n\n![Estilo Código](https://github.com/enflujo/arca-api/actions/workflows/estilo-codigo.yml/badge.svg)\n![Despliegue](https://github.com/enflujo/arca-api/actions/workflows/despliegue.yml/badge.svg)\n![Tamaño](https://img.shields.io/github/repo-size/enflujo/arca-api?color=%235757f7\u0026label=Tama%C3%B1o%20repo\u0026logo=open-access\u0026logoColor=white)\n![Licencia](https://img.shields.io/github/license/enflujo/arca-api?label=Licencia\u0026logo=open-source-initiative\u0026logoColor=white)\n\nLa aplicación para el administrador de contenido del proyecto Arca.\n\n## Instalación\n\n**Debes tener instalado Docker.**\n\n1. Clonar este repositorio.\n2. Pedir el último dump y poner el archivo `.sql` en la carpeta `/dump/`\n3. Iniciar contenedores:\n\n```bash\ndocker-compose up -d\n```\n\nEn la primera iniciada de los contenedores a veces es bueno dejarlo sin `-d` para ir viendo todo el primer proceso de instalación y preparación de los contenedores, si hay errores los vamos a poder ver en el terminal. Pero luego de tenerlos instalados, cada ves que queremos iniciar los contenedores podemos poner el flag `-d` para que el terminal no quede ocupado.\n\nEsto va a instalar 4 aplicaciones en 4 contenedores separados que se conectan entre si (Ver archivo `docker-compose.yml`):\n\n- **Directus**: El CMS disponible en [localhost:8055](http://localhost:8055)  \n  usuario: **admin@admin.com**  \n  clave: **admin**\n- **Postgres**: La base de datos.\n- **Redis**: El sistema de Cache.\n- **PgAdmin 4**: GUI para trabajar con la base de datos desde [localhost:5050](http://localhost:5050)  \n  usuario: **admin@admin.com**  \n  clave: **admin**\n\n### Carpeta `/dump` con archivo `sql`\n\nEn la primera vez que iniciamos `docker-compose up`, el archivo que este en `/dump/**.sql` se va a copiar a la carpeta `/docker-entrypoint-initdb.d` dentro del contenedor que tiene el Postgres (base de datos). Al encontrarse con ese archivo en una instalación nueva del contenedor, este se va a saltar los valores predeterminados del `docker-compose` y va a llenar las tablas con los datos y schema del `/dump/**.sql`. Esto significa que toda la configuración de Directus y Colecciones que se han modelado en el, quedan iguales en nuestro Directus de desarrollo local.\n\nEsto quiere decir que cuando tenemos un nuevo dump, luego de hacer un adelanto en el modelado de datos o configuración en Directus de manera local, se debe hacer un nuevo dump y compartirlo con los desarrolladores para que puedan volver a instalar el contendedor desde cero.\n\nNo es la manera ideal de trabajo y cuando instalemos el CMS en el servidor, esto se vuelve innecesario pues ya quedan los datos centralizados y disponibles a todos. De momento usamos este método para darle inicio al desarrollo y primeras pruebas.\n\n#### Reiniciar la base de datos con un nuevo dump\n\nApagar los contenedores:\n\n```bash\ndocker-compose down\n```\n\nBorrar la carpeta `./datos` que se genera automáticamente dentro de la carpeta de este proyecto.\n\nVolver a iniciar los contenedores:\n\n```bash\ndocker-compose up -d\n```\n\nEsto vuelve a crear la carpeta local `./datos` y la base de datos va a tener la nueva estructura del archivo `./dump/**.sql`.\n\n#### Crear un dump para compartir cambios\n\nEsto lo van a hacer luego de que se adelanten cambios importantes en Directus que necesiten compartir con los otros desarrolladores.\n\nTeniendo los contenedores prendidos, usar el siguiente comando:\n\n```bash\ndocker exec -t arca-cms-bd pg_dump -U arca arca \u003e ./arcabd.sql\n```\n\nEsto corresponde a:\n\n- **`arca-cms-bd`**: El nombre del contenedor de Postgres en `docker-compose-yml`. El que se pone en el campo `container_name: \"arca-cms-bd\"`.\n- **`arca`**: nombre del usuario que en `.env` es `BD_USUARIO=arca`.\n- **`enflujo`**: nombre de la base de datos que en `.env` es `BD_NOMBRE_BD=enflujo`.\n- **`./dump/arcabd.sql`**: Ruta y nombre del archivo sql que se va a exportar.\n\nTener cuidado que esto va a reemplazar el archivo actual.\n\n:exclamation: **En la carpeta `./dump` sólo debe existir 1 archivo de sql para que esto funcione.**\n\n### (Opcional) Configuración PgAdmin 4\n\nEl administrador de PgAdmin permite tener una interfaz gráfica para ver, modificar y hacer todo tipo de _query_ directo en la base de datos. Estos se ven reflejados en el Directus. _No es necesario usarlo pero queda incluido para facilitar algunos procesos manuales sobre la base de datos._\n\nPara instalarlo, agregar el servicio en `docker-compose.yml`:\n\n```yaml\npgadmin:\n  container_name: arca-cms-pgadmin\n  image: dpage/pgadmin4\n  restart: unless-stopped\n  ports:\n    - 5050:80\n  volumes:\n    - ./pgadmin:/var/lib/pgadmin\n  depends_on:\n    - database\n  networks:\n    - arca-cms-red\n  environment:\n    PGADMIN_DEFAULT_EMAIL: 'admin@admin.com'\n    PGADMIN_DEFAULT_PASSWORD: 'admin'\n```\n\nPara ingresar se debe ir a: [localhost:5050](http://localhost:5050)\n\nAdmin: **admin@admin.com**  \nClave: **admin**\n\n1. Hacer clic derecho sobre Server: Create -\u003e Server...\n\n![PgAdmin 1](./docs/pgAdmin-1.png)\n\n2. En la pestaña General nombrar el servidor `arca`\n\n![PgAdmin 2](./docs/pgAdmin-2.png)\n\n3. En la pestaña Connections usar la siguiente configuración que son las mismas que usamos en el `docker-compose.yml`:\n\n- Host: **arca-cms-database** _(Como tenemos la base de datos en un contenedor aparte, podemos usar el nombre de ese contenedor)_\n- Port: **5432**\n- Maintainance Database: **postgres** _(predeterminado)_\n- Username: **arca**\n- Password: **arca**\n- Save Password: **[x]**\n\n![PgAdmin 3](./docs/pgAdmin-3.png)\n\nAl iniciar los contenedores importamos los datos así que esta conexión nos debe mostrar los datos en la sección `Schemas-\u003eTables`, algo similar a esto:\n\n![PgAdmin 4](./docs/pgAdmin-4.png)\n\nTodas las tablas que inician con el nombre `directus_...` corresponden a la configuración del CMS Directus, las otras son las \"Colecciones\" que se crean y modelan dentro del CMS.\n\n## Ayudas\n\nAlgunas notas sobre Docker y docker-compose.\n\n### `volumes` en Docker\n\nUn principio importante en Docker es que los contenedores e imágenes son efímeras, cuando apagamos un contenedor, los datos de éste desaparecen. Para poder persistir los datos (ej. los datos dentro de _Directus_, la configuración en _PgAdmin_) usamos la idea de `volumes`. Estos los podemos pensar como una copia local de alguna carpeta dentro del contenedor. Cuando iniciamos el contenedor, los datos del volumen local se pasan al contenedor y de esta forma persisten durante el desarrollo. **Todas las carpetas locales de nuestros volumenes son ignoradas por git.** ya que le pertenecen a cada uno, pueden jugar, cambiar cosas, luego borra todo y comenzar de cero.\n\nEstos `volumes` los pueden ver en el `docker-compose.yml` y en las carpetas que se crean en su computador.\n\nPor ejemplo:\n\n```yml\nvolumes:\n  - ./pgadmin:/var/lib/pgadmin\n```\n\nEstos son los que definimos para el contenedor de _PgAdmin_. `./pgadmin` es la carpeta local y `/var/lib/pgadmin` es la carpeta en el contenedor. Siempre van a ver dos rutas separadas por `:` la primera es la local y la segunda es la del contenedor: **`[local]:[contenedor]`**. Si borramos la local e iniciamos el contenedor, desaparece cualquier configuración que hicimos antes y se vuelve a crear la carpeta local, esto es útil cuando queremos comenzar desde cero.\n\nEn el caso del contenedor de _PostgresQL_ es útil esto ya que cuando queremos cargar un nuevo _dump_ de un archivo `.sql` usamos 2 `volumes` para facilitar el proceso.\n\n```yml\nvolumes:\n  - ./dump:/docker-entrypoint-initdb.d\n  - ./datos:/var/lib/postgresql/data\n```\n\nEl archivo `***.sql` que ponemos en la carpeta `/dump` del primer volumen se pasa a la carpeta `/docker-entrypoint-initdb.d` en el contenedor. Esta es una carpeta especial de _postgres_ ya que si no existe base de datos y hay archivos `.sql` en esta carpeta, lo usa para crear y llenar la base de datos inicial. Si `/docker-entrypoint-initdb.d` esta vacía, simplemente crea una base de datos vacía. En teoría podemos poner diferentes archivos `.sql` en esta carpeta para correr diferentes procesos al iniciar la base de datos, pero en nuestro caso sólo usamos una que contiene toda la estructura y datos. Por esa razón sólo ponemos 1 archivo (si dejamos varios `.sql` que crean la misma base de datos, va a ejecutar todos y podemos tener resultados inesperados).\n\nPara que importe un nuevo _dump_ debemos borrar los datos que existen ya que los `.sql` en `/docker-entrypoint-initdb.d` sólo se ejecutan si no existen datos en el contenedor. Para eso, cuando traemos un nuevo _dump_ a `/dump`, debemos borrar el del otro volumen `/datos/`. Así el contenedor reconoce que no hay datos, importa los del nuevo _dump_ y vuelve a crear la carpeta `/datos` localmente con la nueva información.\n\n## Linux\n\nArreglar permiso de volumen.\n\n```bash\nsudo chown -R 1000:1000 uploads\n```\n\nEn caso de usar versión de desarrollo con pgadmin\n\n```bash\nsudo chown -R 5050:5050 pgadmin\n```\n\n## Buscador\n\n### Mostrar las llaves públicas\n\nMeilisearch crea unas llaves con diferentes permisos, para hacer búsquedas en el front, se debe usar la llave `Default Search API Key`.\n\nEn el terminal, imprimir las llaves disponibles:\n\n```bash\ncurl \\\n  -X GET 'http://localhost:7700/keys?limit=3' \\\n  -H 'Authorization: Bearer MEILI_MASTER_KEY'\n```\n\nEl resultado imprime un JSON donde podemos ver la llave pública que necesitamos y es segura publicar en el sitio donde implementamos el buscador:\nhttps://docs.meilisearch.com/learn/security/master_api_keys.html#communicating-with-a-protected-instance\n\n```json\n{\n  \"results\": [\n    {\n      \"name\": \"Default Search API Key\",\n      \"description\": \"Use it to search from the frontend\",\n      \"key\": \"...ESTA_ES_LA_LLAVE_PÚBLICA...\"\n      // ...\n    }\n  ],\n  \"offset\": 0,\n  \"limit\": 3,\n  \"total\": 2\n}\n```\n\n## Instalar paquetes en _Yarn Workspace_\n\nPaquete que comparten todos:\n\n```bash\nyarn add NOMBRE_EXTENSION -W\n```\n\n## Crear respaldo\n\nSi requiere de permisos:\n\n```bash\nchmod +x crearRespaldo.sh\n```\n\nEjecutar conjuro de respaldo en el servidor. Esto crea un archivo con el nombre `dump/arcabd_${FECHA}.sql`:\n\n```bash\nbash crearRespaldo.sh\n```\n\nSi hay errores en el formato de .env, convertirlo en UNIX con:\n\n```bash\nsudo apt install dos2unix\ndos2unix .env\n```\n\nPara descargar el `.sql` en otro computador:\n\n```bash\nscp usuario@IP_DEL_SERVIDOR:/ruta/al/proyecto/dump/arcabd_2026-01-05_11-23-41.sql .\n```\n\nPara no tener que escribir todo el nombre, se puede usar este para descargar el último respaldo:\n\n```bash\nscp arca@dDOMINIO:\"/home/arca/arca-pi/dump/$(ls -t /home/arca/arca-api/dump/*.sql | head -n 1)\" .\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenflujo%2Farca-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fenflujo%2Farca-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenflujo%2Farca-api/lists"}