El sistema está pensado para correr bajo entornos *nix, en particular Ubuntu 16.04.
Este proyecto require python 3.6. Python 3 puede ser instalado con pyenv.
- Usar pyenv-installer para instalar pyenv
- Ver las versiones de python disponibles:
pyenv install --list
- Instalar python 3. Ejemplo:
pyenv install 3.6.6
(3.6.6 o mayor)
Tambien nodejs es necesario para usar eslint
y jscpd
.
- Instalar
nodejs
, esto se puede llevar a cabo mediante nvm. - Instalar la version
7
denodejs
- Usar
npm
para instalar las dependencias:npm install
Las dependencias de la aplicación (Elasticsearch, Postgres, Redis, Kong) se manejan a través de Docker y docker-compose.
Este proyecto adopta The 12 factor methodology. Esto significa que todas las configuraciones deberian hacerse por variables de entorno. (Factor III).
Decidir un puerto bajo el cual correr la aplicación Django. Tanto Django como Kong usan como default el puerto 8000, por lo tanto Django debe correr bajo otro puerto arbitrario.
La aplicación debe correr bajo la red interna obligatoriamente, para que el contenedor de Kong pueda llegar a la aplicación Django local. Por ejemplo, se puede correr Django como./manage.py runserver 192.168.1.181 7999
.
Para correr los próximos pasos, setear una variable DJANGO_URL
con la URL (con schema) bajo la cual correrá la aplicación Django. Por ejemplo:
DJANGO_URL=http://192.168.1.181:7999/
La IP de la red interna se puede obtener a través de utilidades del sistema como ip
o ifconfig
, suele ser 192.168.*.*
.
- Build:
docker-compose build
- Iniciar los servicios:
docker-compose up -d
- Migrar la base de datos de kong:
docker-compose run --rm kong kong migrations up
- Reiniciar kong:
docker-compose restart kong
- Agregar ruta de api management a kong
curl -X POST localhost:8001/apis -d name=management -d upstream_url=$DJANGO_URL -d uris=/management -d strip_uri=false
- Crear un "virtualenv" con un nombre descriptivo:
pyenv virtualenv 3.6.6 my_virtualenv
- Crear un archivo
.python-version
:echo "my_virtualenv" > .python-version
- Instalar los requerimientos:
pip install -r requirements/local.txt
- Copiar el archivo
conf/settings/.env.local
aconf/settings/.env
(y reemplazar las variables de ser necesario) - Migrar la base de datos:
./manage.py migrate
- Crear un super usuario:
./manage.py createsuperuser
Para mapear plugins a una serie se puede hacer desde la configuracion de la misma desde el Admin. En ella se encuentra la configuracion para cada plugin disponible, por ejemplo para activar Analytics a una serie se hace activando "Kong Api plugin http log" agregandole, en el campo "Api Key", el Token de acceso.
Finalmente, se puede correr la aplicación con ./manage.py runserver <IP RED INTERNA> <PUERTO>
, y acceder a través de kong en http://localhost:8000/management/ingresar
.
Por defecto la configuración local no utiliza workers asincrónicos, pero pueden ser activados seteando queue['ASYNC'] = True
en el ciclo for
dentro de conf/settings/local.py
.
Casi todos los modelos de la aplicación api_registry
requieren hacer una migración de las APIs de Kong (con actualizar una API es suficiente). A continuación se listan los encontrados hasta la fecha:
KongObject
, KongApi
, KongApiPlugin
, KongPlugin
, KongConsumerManager
, KongConsumer
, JwtCredentialManager
, JwtCredential
, TokenRequest
, KongPluginRateLimiting
, KongApiPluginRateLimiting
, KongApiPluginHttpLog
, KongApiPluginJwt
, KongApiPluginAcl
, AclGroup
, KongConsumerPlugin
, KongConsumerPluginRateLimiting
, KongApiPluginCors
, RootKongApi
,
- Instalar git-hooks.
- Instalar los hooks de git:
git hooks install
./manage.py runserver
-
./manage.py shell
-
Con Docker:
docker-compose run django python3 manage.py migrate
python manage.py test