Browse Source

Merge pull request 'Agrega un comando a gancio para hacer deploys automaticos' (#4) from gancio-deploy into master

Reviewed-on: https://git.sindominio.net/gancio/docker-gancio/pulls/4
master
siroco 6 months ago
parent
commit
5751b240ab
  1. 3
      Dockerfile
  2. 45
      README.md
  3. 3
      docker-compose.yml
  4. 104
      patches/0001-adds-deploy-command-to-gancio.patch

3
Dockerfile

@ -35,7 +35,10 @@ RUN git clone https://framagit.org/les/gancio.git && \
cd gancio && \
git checkout $GANCIO_VERSION
# Aplicar parches
WORKDIR /opt/gancio
COPY patches patches
RUN git apply patches/*.patch
# Instalar dependencias de desarrollo, compilar y empaquetar
RUN yarn install && \

45
README.md

@ -122,7 +122,7 @@ docker-compose run --rm gancio "gancio setup --docker --db=sqlite"
```
## Instalacion Automatica ( en desarrollo, ver TODOs )
## Instalacion Automatica
En este caso, nos interesa desplegar Gancio sin intervencion de una usuaria.
Queremos:
@ -147,6 +147,8 @@ Al editar el archvio, los datos que nos interesa cambiar en este archivo son
nuevo con `cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w ${1:-24} | head -n 1`
- `admin_email`, email de la cuenta de administradora (se usa para acceder al
gestionar el servicio)
- `admin_pass`, clave de acceso para la cuenta de administradora. _SE ELIMINA
AUTOMATICAMENTE DEL FICHERO AL CREAR LA CUENTA_
- `smtp`, si se desea enviar correos, modificar a los datos de vuestro
servidor de SMPT
@ -159,26 +161,15 @@ segura de lo que haces ;)
### Cuenta de administradora
La mayoria de los datos que necesita la instancia de Gancio se encuentran en
el `config.json`, a excepcion de la clave de la cuenta de administradora.
Esta clave solo sera necesaria en el caso de iniciar una nueva instancia de
Esta cuenta solo se creara en el caso de iniciar una nueva instancia de
Gancio, sin datos.
Si estamos re-iniciando una instancia existente, o migrando una instancia que
ya cuenta con su propia base de datos, esta variable 'clave de administradora'
sera ignorada y se deberan conocer los datos de la cuenta de administradora
originales.
Si estamos re-iniciando una instancia existente, estos datos seran ignorados
y se deberan conocer los datos de la cuenta de administradora originales.
Entonces, en una instancia nueva iniciada sin datos, la administradora podra
loguearse utilizando el dato `admin_email` informado en el `config.json` y la
clave que especifiquemos en la variable de entorno `GANCIO_ADMIN_PASS`
_TODO cuando iniciemos con una base de datos vacia, crear la usuaria admin con
los datos del config.json y un password pasado por entorno
idea: crear script node que apalanque las funciones existentes para ejecutar las
migraciones en la base de datos, y para crear la usuaria administradora_
loguearse utilizando el dato `admin_email` y `admin_pass` informado en el
`config.json`
### Autenticacion para SMTP
@ -197,6 +188,7 @@ informacion en la seccion `smtp` del fichero `config.json`
...
```
## Configuracion del servicio
Dado que utilizamos `docker-compose` para ejecutar Gancio, aprovecharemos la
posibilidad de definir nuestras variables de entorno en un archivo `.env` que
@ -209,26 +201,13 @@ cp .env.sample .env
```
### Variables de Despliegue (necesarias en todos los casos)
- `GANCIO_DATA_PATH`, ruta en el host que contiene los datos de Gancio _(valor por
defecto `./data` = subcarpeta `data` en la misma carpeta que
`docker-compose.yml`)_
- `GANCIO_DATA_PATH`, ruta en el host que contiene los datos de Gancio
_(valor por defecto `./data` = subcarpeta `data` en la misma carpeta que
`docker-compose.yml`)_
- `GANCIO_PORT`, puerto del host en el que se expondra el servicio de Gancio
_(valor por defecto `13120`)_
### Variables de Instalacion Automatica (solo para Instalaciones Automaticas)
Estas variables solo son necesarias en los procesos de instalacion automatica
de nuevas instancias.
Se pueden pasar como variables de entorno al docker durante su primera
ejecucion, ej `docker-compose run -e MI_VAR=valor gancio ...`
Como alternativa, se pueden informar estas variables en el fichero `.env`, en
cuyo caso se borran luego de ser utilizadas para finalizar la instalacion
automatica.
- `GANCIO_ADMIN_PASS`, clave de acceso de la cuenta de administradora [ solo
es necesaria en Instalaciones Automaticas nuevas ].
_TODO eliminar estas variables de `.env` luego de persistirlas en la bbdd_
## Ejecucion de Gancio
Llegado este punto, podemos iniciar nuestra intancia

3
docker-compose.yml

@ -3,10 +3,9 @@ version: '3'
services:
gancio:
build: .
restart: always
image: gancio:latest
container_name: gancio
command: [ "gancio start --docker --db=sqlite" ]
command: [ "gancio deploy --docker --db=sqlite --autostart" ]
volumes:
- $GANCIO_DATA_PATH:/opt/gancio
ports:

104
patches/0001-adds-deploy-command-to-gancio.patch

@ -0,0 +1,104 @@
From b2722e244c8249d6cdc3464610fb257e8c80d849 Mon Sep 17 00:00:00 2001
From: matus <matus@enmotoneta.com>
Date: Fri, 4 Jun 2021 16:29:07 +0000
Subject: [PATCH] adds deploy command to gancio
---
server/cli.js | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 67 insertions(+)
diff --git a/server/cli.js b/server/cli.js
index 41005ca2..7148f3e0 100755
--- a/server/cli.js
+++ b/server/cli.js
@@ -305,6 +305,67 @@ async function setup (options) {
process.exit(0)
}
+async function deploy (options) {
+ consola.info('You\'re going to deploy gancio on this machine.')
+
+ // check for mandatory config.json
+ if (firstrun.check(options.config)) {
+ consola.error(` ⚠ MISSING CINFIGURATION: Configuration file "${options.config}" not found!
+ Use "--config <CONFIG_FILE.json>" to specify another path, or generate one running 'gancio setup'`)
+ process.exit(-1)
+ }
+ const config = require(options.config)
+
+ // run migrations on ddbb
+ await run_migrations(config.db)
+
+ const db = require('./api/models')
+ const User = require('./api/models/user')
+ await db.authenticate()
+
+ // if new instance, initialize
+ const users = await User.findAll()
+ if (users.length === 0) {
+ // check for necesary data
+ if (!(config.admin_email && config.admin_pass)) {
+ consola.error(`⚠ MISSING CONFIGURATION: Cannot create Admin account on new deployment
+ Please, specify both 'admin_email' and 'admin_pass' on the config file`)
+ process.exit(-1)
+ }
+
+ // generate a random salt
+ consola.info(`Generate random salt`)
+ config.secret = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15)
+
+ // create admin user
+ const admin = { email: config.admin_email, password: config.admin_pass }
+
+ consola.info(`Create admin with email: ${admin.email}`)
+ await User.create({
+ email: admin.email,
+ password: admin.password,
+ is_admin: true,
+ is_active: true
+ })
+
+ // remove admin password and store salt/secret on config.json
+ delete config.admin_pass
+
+ consola.info(`Save configuration to ${options.config}`)
+ try {
+ fs.writeFileSync(options.config, JSON.stringify(config, null, 2))
+ } catch (e) {
+ consola.warn(` ⚠️ ${e}. You can specify configuration path using '--config'`)
+ }
+
+ }
+
+ if ( options.autostart ) {
+ // start gancio using default method
+ start(options)
+ }
+}
+
consola.info(`📅 ${pkg.name} - v${pkg.version} - ${pkg.description}`)
require('yargs')
@@ -323,6 +384,11 @@ require('yargs')
describe: 'Configuration file',
default: '/opt/gancio/config.json'
})
+ .option('autostart', {
+ describe: 'Start gancio service after deploying',
+ default: false,
+ type: 'boolean'
+ })
.coerce('config', config_path => {
const absolute_config_path = path.resolve(cwd, config_path)
process.env.config_path = absolute_config_path
@@ -330,6 +396,7 @@ require('yargs')
})
.command(['start', 'run', '$0'], 'Start gancio', {}, start)
.command('setup', 'Setup a new instance', {}, setup)
+ .command('deploy', 'Deploy a instance from config files', {}, deploy)
.help('h')
.alias('h', 'help')
.epilog('Made with ❤ by underscore hacklab - https://gancio.org')
--
2.31.1
Loading…
Cancel
Save