-
Notifications
You must be signed in to change notification settings - Fork 14
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #273 from datosgobar/4.0.0
Ready for 4.0.0
- Loading branch information
Showing
77 changed files
with
4,664 additions
and
93 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,3 +3,6 @@ | |
node_modules | ||
public | ||
tmp | ||
.vagrant | ||
Vagrantfile | ||
*.swp |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,10 @@ | ||
FROM democracyos/democracyos:2.11.15 | ||
|
||
MAINTAINER Matías Lescano <[email protected]> | ||
MAINTAINER Democracia en Red <[email protected]> | ||
|
||
COPY ./dos-override/models/comment.js /usr/src/lib/models/comment.js | ||
COPY ./dos-override/api-v2/db-api/comments/index.js /usr/src/lib/api-v2/db-api/comments/index.js | ||
COPY ./dos-override/api-v2/db-api/comments/scopes.js /usr/src/lib/api-v2/db-api/comments/scopes.js | ||
|
||
ENV LOCALE=es \ | ||
AVAILABLE_LOCALES=es,en \ | ||
|
@@ -9,8 +13,8 @@ ENV LOCALE=es \ | |
MULTI_FORUM=true \ | ||
RESTRICT_FORUM_CREATION=true \ | ||
FAVICON=/ext/lib/boot/favicon.ico \ | ||
LOGO=https://consultapublica.blob.core.windows.net/assets/Logo_Presidencia.svg \ | ||
LOGO_MOBILE=https://consultapublica.blob.core.windows.net/assets/Logo_Presidencia.svg \ | ||
LOGO=/ext/lib/site/footer/logo-footer.svg \ | ||
LOGO_MOBILE=/ext/lib/site/footer/logo-footer.svg \ | ||
[email protected] \ | ||
NOTIFICATIONS_MAILER_NAME='Consulta Pública Argentina' \ | ||
[email protected] \ | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,71 +1,19 @@ | ||
# Consulta Pública Argentina | ||
![Consulta Pública Argentina](/docs/consulta-publica-header.png?raw=true "Consulta Pública Argentina") | ||
|
||
Fork de la plataforma [DemocracyOS](https://github.com/DemocracyOS/democracyos) con modificaciones específicas para Gobierno Abierto de Argentina | ||
# Consulta Pública | ||
[![GitHub tag](https://img.shields.io/github/tag/datosgobar/consulta-publica.svg?style=flat-square)](https://GitHub.com/datosgobar/consulta-publica/tags) | ||
[![GitHub forks](https://img.shields.io/github/forks/datosgobar/consulta-publica.svg?style=flat-square&label=Fork&maxAge=2592000)](https://GitHub.com/datosgobar/consulta-publica/network/) | ||
|
||
## Para empezar | ||
> La Plataforma de **Consulta Pública** es un desarrollo basado en la tecnología de [DemocracyOS](https://github.com/DemocracyOS/democracyos) coordinado por la *[Subsecretaría de Innovación Pública y Gobierno Abierto](https://www.argentina.gob.ar/modernizacion/gobiernoabierto)* pertenece al Ministerio de Modernización de Argentina. | ||
1. Asegurate tener instalado [Docker 1.13.0+](https://www.docker.com/). | ||
2. Cloná este repositorio. | ||
3. Copiá el archivo `docker-compose.override.yml.example` a `docker-compose.override.yml`, y agregá tu mail en la variable `STAFF`. De este modo vas a poder administrar el contenido. (**Edit 10/01/2019**: Revisar el apartado "Nota") | ||
4. Empezá el servidor con `docker-compose up --build` _(la primera vez puede llevar un ratito)_ | ||
5. Navegá a [http://localhost:3000](http://localhost:3000) | ||
6. Registrate, entrá, y podés empezar a crear contenido en http://localhost:3000/ajustes/administrar | ||
El código se basa en [DemocracyOS](https://github.com/DemocracyOS/democracyos), plataforma de código abierto especialmente diseñada para informar, debatir y votar propuestas públicas de forma online hacia la construcción de una democracia adaptada al siglo XXI. | ||
|
||
#### ⚠️ NOTA - Variables de entorno para Mi Argentina | ||
|
||
De acuerdo a los ultimos cambios implementados en el sprint para agregar el login con Mi Argentina, se agregan las siguientes variables de entorno. **Importante de agregar al ENV del docker-compose** | ||
## Indice | ||
|
||
``` | ||
CUSTOM_SIGNIN=true | ||
OIDC_ISSUER= | ||
OIDC_AUTH= | ||
OIDC_TOKEN= | ||
OIDC_USER= | ||
OIDC_CLIENT_ID= | ||
OIDC_CLIENT_SECRET= | ||
OIDC_CALLBACK= | ||
``` | ||
|
||
### Comandos | ||
|
||
``` | ||
# Para abrir el server local | ||
docker-compose up | ||
``` | ||
|
||
``` | ||
# Si cambiás alguna dependencia en el package.json, tenes que volver a buildear la imagen de Docker con: | ||
docker-compose up --build | ||
``` | ||
|
||
``` | ||
# Para poder entrar al container de DemocracyOS: | ||
docker exec -it dos bash | ||
``` | ||
|
||
### Referencias | ||
|
||
* El archivo `docker-compose.override.yml` se encuentra en el `.gitignore` para estar seguros de no subir cualquier información sensible al repo, como keys, etc. | ||
* Si querés saber más sobre `docker-compose`, acá está toda la documentación: https://docs.docker.com/compose/ | ||
* En el archivo `docker-compose.override.yml` podes configurar DemocracyOS con cualquiera de las variables de entorno listadas acá: http://docs.democracyos.org/configuration.html | ||
* El puerto `27017` está expuesto para que puedas administrar la base de datos con algún cliente de MongoDB, por ejemplo con [Robomongo](https://robomongo.org/). | ||
* Todas las vistas personalizadas para Consulta Pública se encuentran en [`/ext`](ext). Siguiendo el mismo patrón de carpetas que [DemocracyOS/democracyos](https://github.com/DemocracyOS/democracyos). | ||
|
||
## Corriendo en Producción | ||
|
||
Usar de referencia el repositorio [DemocracyOS/onpremises](https://github.com/DemocracyOS/onpremises). Utiliza Ansible para el aprovisionamiento, y Docker Compose para correr el servidor. | ||
|
||
### Imagen de Docker | ||
|
||
La imagen se encuentra en: https://hub.docker.com/r/datosgobar/democracyos/ | ||
|
||
Para buildear la imagen: | ||
* `docker build . -t datosgobar/democracyos:latest` | ||
|
||
Para subir la imagen: | ||
* `docker push datosgobar/democracyos:latest` | ||
|
||
Todo junto: | ||
``` | ||
docker build . -t datosgobar/democracyos:latest && docker push datosgobar/democracyos:latest | ||
``` | ||
- [Development](/docs/development.md) | ||
- [Consejos para el desarrollo](/docs/consejos-dev.md) | ||
- [Personalización de la plataforma](/docs/personalizacion.md) | ||
- [Deployment](/deployment/README.md) | ||
- [Manual instructivo para administradores](/docs/manual-admin.md) | ||
- [Manual instructivo para usuarios](/docs/manual-usuarios.md) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,191 @@ | ||
# Deployment | ||
|
||
Esta guía presenta los pasos necesarios para poder hacer un deployment de consulta pública en plataformas basadas en GNU/Linux. La herramienta de aprovisionamiento seleccionada es [Ansible](https://www.ansible.com). Todos estos pasos se ejecutan desde el equipo del administrador. _Work in progress_. | ||
|
||
## Pre-requisitos | ||
|
||
**Imágen de Docker** | ||
|
||
El sistema de consulta pública se distribuye e instala generando una imágen de [Docker](https://www.docker.com). Es necesario que al momento de seguir esta guía el usuario cuente con una imágen disponible en el [registro oficial de Docker (Docker Hub)](https://hub.docker.com). Los pasos necesarios escapan al foco de esta guía pero pueden resumirse como: | ||
* Crear una cuenta en [Docker Hub](https://hub.docker.com). | ||
* Crear un repositorio en [Docker Hub](https://hub.docker.com). | ||
* Pushear la imágen desde el entorno del desarrollador. | ||
|
||
## Requisitos | ||
|
||
**Acceso SSH** | ||
|
||
Los distintos _playbooks de Ansible_ requieren acceso por SSH al servidor de destino. El mismo debe realizarse mediante la utilización de llaves asimétricas. Estos pasos se explican en [esta completa guía](https://www.digitalocean.com/community/tutorials/como-configurar-las-llaves-ssh-en-ubuntu-18-04-es). Una excelente práctica es utilizar el fichero de configuración del cliente ssh ubicado en `~/.ssh/config`, esto se explica en [esta completa guía (inglés)](https://www.digitalocean.com/community/tutorials/how-to-configure-custom-connection-options-for-your-ssh-client). | ||
|
||
**Ansible** | ||
|
||
Ansible es una herramienta de aprovisionamiento que permite aplicar planes de ejecución llamados _playbooks_ en los cuales se definen una serie de pasos a realizar en uno o más hosts. En este caso utilizamos Ansible para definir la instalación de la plataforma de consulta pública, formalizando y automatizando el proceso. La guía oficial de instalación se encuentra [aquí](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html) aunque es muy probable que se encuentre ya disponible en los repositorios oficiales de las distintas distribuciones: | ||
|
||
* Versión mínima requerida: 2.3. | ||
|
||
```bash | ||
# Ubuntu | ||
$ sudo apt-get install ansible | ||
# RHEL/CentOS/Fedora yum | ||
$ sudo yum install ansible | ||
# RHEL/CentOS/Fedora dnf | ||
$ sudo dnf install ansible | ||
# macOS con brew | ||
$ brew install ansible | ||
# Python pip | ||
$ pip install ansible | ||
``` | ||
|
||
**Inventario de Ansible** | ||
|
||
Ansible utiliza un inventario donde es necesario definir los hosts sobre los cuales va a trabajar. La ubicación por defecto del mismo es `/etc/ansible/inventory`, a modo de ejemplo se muestra como configurar el inventario y a su vez `~/.ssh/config`: | ||
|
||
```bash | ||
## Configuración del cliente SSH y el inventario de Ansible sin SSH alias | ||
# Contenido de ~/.ssh/config | ||
Host mi.server.local | ||
HostName mi.server.local | ||
User ubuntu | ||
Port 22 | ||
IdentityFile ~/.ssh/llave | ||
|
||
# Contenido de /etc/ansible/inventory | ||
[servidores] | ||
mi-server ansible_ssh_host=mi.server.local ansible_connection=ssh ansible_port=22 ansible_user=ubuntu | ||
``` | ||
|
||
```bash | ||
## Configuración del cliente SSH y el inventario de Ansible con SSH alias | ||
# Contenido de ~/.ssh/config | ||
Host serveralias | ||
HostName mi.server.local | ||
User ubuntu | ||
Port 22 | ||
IdentityFile ~/.ssh/llave | ||
|
||
# Contenido de /etc/ansible/inventory | ||
[servidores] | ||
mi-server ansible_ssh_host=serveralias ansible_connection=ssh ansible_port=22 ansible_user=ubuntu | ||
``` | ||
|
||
## Plataformas Soportadas | ||
|
||
El deployment está basado en Docker y docker-compose. Estos playbooks fueron probados con [Vagrant](https://www.vagrantup.com) utilizando boxes oficiales: | ||
* CentOS (7.3, 7.4, 7.5). | ||
* Debian (8 y 9). | ||
* Ubuntu (16.04 LTS y 18.04 LTS, 14.04 ya no tiene soporte). | ||
|
||
## Playbooks | ||
|
||
IMPORTANTE: muchas configuraciones requieren permisos de superusuario, en caso de que el usuario configurado en el inventario de Ansible requiera de su password para utilizar `sudo` es necesario agregar a cada ejecución de `ansible-playbook` el flag `--ask-become-pass` al final de cada línea, ejemplo: | ||
|
||
```bash | ||
# ansible mostrará un prompt para ingresar el password de sudoer | ||
$ ansible-playbook instalacion_docker.yaml --extra-vars "host_destino=mi-server" --ask-become-pass | ||
``` | ||
|
||
### Instalación de Docker | ||
|
||
La primera tarea a realizar es la instalación de Docker en el servidor de destino. Esto se realiza con el playbook `instalacion_docker.yaml` de la siguiente forma: | ||
|
||
```bash | ||
# mi-server es el nombre que aparece en el inventario de Ansible | ||
$ ansible-playbook instalacion_docker.yaml --extra-vars "host_destino=mi-server" | ||
``` | ||
|
||
### Instalación de la plataforma | ||
|
||
La instalación de la plataforma se realiza con el segundo playbook, `instalacion_plataforma.yaml`. En este caso, primero es necesario completar el fichero con variables incluido como `variables.yaml`. Es necesario aclarar que el deployment requiere de un hostname al cual responderá la aplicación, en caso de no contar con resolución DNS es posible forzar dicha resolución en el fichero de hosts del sistema operativo del administrador. | ||
|
||
La información sobre las posibles variables y sus valores puede obtenerse en el fichero `variables.yaml` de este repositorio. | ||
|
||
**Funcionamiento del deployment** | ||
|
||
La aplicación se instala en formato de docker-compose, por defecto se levantan tres contenedores: | ||
* [Traefik](https://traefik.io): es un proxy/balanceador de carga orientado a entornos cloud. Es el que realiza la terminación TLS cuando se utiliza HTTPS y hace las veces de proxy reverso contra la aplicación. | ||
* Aplicación de Consulta Pública: la aplicación indicada en la variable `IMAGE` de `variables.yaml`. | ||
* MongoDB: en caso de no utilizar una base de datos externa, el deployment levanta una instancia de MongoDB 3.2 en un contenedor. | ||
|
||
Tanto el docker-compose como las configuraciones y archivos de MongoDB se almacenan como volúmenes de Docker en el path de instalación, una instalación por defecto se ve de la siguiente forma: | ||
|
||
```bash | ||
$ cd /opt/consulta-publica && tree | ||
. | ||
├── docker-compose.yaml | ||
├── volumenes | ||
├── traefik | ||
└── mongo | ||
``` | ||
|
||
#### Aplicación por HTTP | ||
|
||
En este tipo de instalación la plataforma funciona por HTTP, la configuración básica es la siguiente: | ||
|
||
```yaml | ||
# variables.yaml | ||
deploy: | ||
hostname: consulta.ejemplo.org | ||
|
||
docker: | ||
IMAGE: democraciaenred/consulta-publica:development | ||
# Resto de variables... | ||
``` | ||
|
||
Luego se ejecuta el playbook: | ||
|
||
```bash | ||
# mi-server es el nombre que aparece en el inventario de Ansible | ||
$ ansible-playbook instalacion_plataforma.yaml --extra-vars "host_destino=mi-server" | ||
``` | ||
|
||
En este caso, la aplicación estará disponible en http://consulta.ejemplo.org. | ||
|
||
#### Aplicación por HTTPS con certificado propio | ||
|
||
En este tipo de instalación la plataforma funciona por HTTPS con certificados propios, es necesario completar el fichero de variables con las rutas absolutas hacia el certificado y la llave privada: | ||
|
||
```yaml | ||
# variables.yaml | ||
deploy: | ||
hostname: consulta.ejemplo.org | ||
protocolo: https | ||
https_path_certificado: /home/ubuntu/server.crt | ||
https_path_llave: /home/ubuntu/server.key | ||
|
||
docker: | ||
IMAGE: democraciaenred/consulta-publica:development | ||
# Resto de variables... | ||
``` | ||
|
||
Luego se ejecuta el playbook: | ||
|
||
```bash | ||
# mi-server es el nombre que aparece en el inventario de Ansible | ||
$ ansible-playbook instalacion_plataforma.yaml --extra-vars "host_destino=mi-server" | ||
``` | ||
|
||
En este caso, la aplicación estará disponible en https://consulta.ejemplo.org. | ||
|
||
#### Aplicación por HTTPS con Let's Encrypt (Staging) | ||
|
||
En este tipo de instalación se utiliza el servicio gratuito de Let's Encrypt para obtener un certificado y llave, es necesario completar el fichero de variables con una dirección de correo electrónico del responsable del dominio. Es importante aclarar que a menos que se trate de un entorno productivo es mejor utilizar los servidores de staging de Let's Encrypt tal como se muestra a continuación: | ||
|
||
```yaml | ||
# variables.yaml | ||
deploy: | ||
hostname: consulta.ejemplo.org | ||
protocolo: https | ||
https_lets_encrypt_email: [email protected] | ||
https_lets_encrypt_staging: true | ||
|
||
docker: | ||
IMAGE: democraciaenred/consulta-publica:development | ||
# Resto de variables... | ||
``` | ||
|
||
```bash | ||
# mi-server es el nombre que aparece en el inventario de Ansible | ||
$ ansible-playbook instalacion_plataforma.yaml --extra-vars "host_destino=mi-server" | ||
``` | ||
|
||
En este caso, la aplicación estará disponible en http://consulta.ejemplo.org. |
Oops, something went wrong.