This is an example demonstrating how to extend DemocracyOS using Docker.
- Clone this repo
- Make sure to have Docker installed on your machine.
- Copy the file
docker-compose.override.yml.exampletodocker-compose.override.yml, and set the email that you're going to signup with on STAFF. This way you will be able to setup DemocracyOS on the first run. - Run DemocracyOS with
docker-compose up --build(this could take a while) - Go to http://localhost:3000
- Signup, setup your instance, and that's all :)
- The file
docker-compose.override.ymlis added to the.gitignoreso it's not uploaded to your Git repo to avoid disclosing any sensitive data or keys. - If you want to know more about
docker-compose, here's the docs: https://docs.docker.com/compose/ - The complete documentation on overriding the default docker-compose.yml can be found here: https://docs.docker.com/compose/extends/
- On your
docker-compose.override.ymlyou can configure DemocracyOS using environment variables. All the available options are here: http://docs.democracyos.org/configuration.html - The port
27017is exposed so you can connect to mongo from your machine using any mongo client such as Robomongo. - If you already have a mongo 3.2 server running on your machine you can comment out the
mongoservice ondocker-compose.ymland change theMONGO_URLenvironment variable - All the customized views/endpoints are located on the
/extfolder. Following the same folders pattern as DemocracyOS/democracyos. - New frontend builds, which allows you to use your custom frontend code, are defined here.
- To use the last version of topics (with attributes such as state, year or town, run
NODE_PATH=. DEBUG=democracyos* node ./ext/bin/migrate-pp.js) - If you wish to debug node using de node built-in debugger pass the argument
NODE_DEBUGGER=1. You can use thedebugger;instruction in the code to create a breakpoint (this feature requires chromium/chrome).
# Spin up your development server with:
docker-compose up
# If you change any dependency you have to re-build your Docker image with:
docker-compose up --build
# Enter to the running DemocracyOS container with:
docker exec -it dos bash
Use as reference the repo DemocracyOS/onpremises. It uses Ansible for provisioning, and Docker Compose to run the server, there you will find more detailed documentation.
Se deben crear primeramente en config/defaults.json con un valor por defecto. Si se quiere que sea accesible desde el frontend, agregarla al array de la llave "client".
Para probar valores distintos en desarrollo local editar config/development.json.
Una vez registrada la variable nueva en defaults.json ya es configurable en el docker-compose/swarm, utilizando la forma traducida variablesDeEntorno a VARIABLE_DE_ENTORNO.
El formulario de carga de proyectos/propuestas tiene campos personalizados (lib/admin/admin-topics-form/attrs/component.js) que se toman de la BBDD. Estos están en la tabla forum, en su único registro, en el campo topicsAttrs. El modelo de este campo está definido en lib/models/forum/topics-attrs.js. Si desean agregar un campo a topicsAttrs primero hacerlo allí.
Para conectarnos a la consola de mongo:
// docker exec -it <nombre_container> mongo <nombre_base_de_datos>
// por ejemplo:
docker exec -it mongodb-vl mongo DemocracyOS-dev
Algunos comandos útiles de la consola de mongo para manipular estos campos son:
// ver todo el topicsAttrs
db.forums.find({},{'topicsAttrs': 1}).pretty()
// mostrar solo los campos nombre y width de topicsAttrs
db.forums.find({},{'topicsAttrs.name': 1, 'topicsAttrs.width': 1}).pretty()
// actualizar un ícono fitrando por nombre
db.forums.update({'topicsAttrs.name': 'state'}, {$set:{ 'topicsAttrs.$.icon': 'stop.png' }})
// borrar por nombre un elemento de topicsAttrs
db.forums.update({}, { $pull:{ 'topicsAttrs': {name: 'beneficiario'} } })
// borrar las migrations para que vuelvan a correr
db.migrations.remove({"name" : "extend-forum-attrs"})
db.migrations.remove({"name" : "set-default-forum-attrs"})
Este tipo de modificaciones solo se debe hacer para testear cosas.
Para cambios finales siembre usar migrations así se guardan los cambios realizados para futuras réplicas del sistema.