El trabajo debe basarse en la rama principal y conectarse a ella. Usamos el proceso de aprobación de relaciones públicas de GitHub, por lo que una vez que su PR esté listo, necesitará que una persona lo apruebe y que las pruebas de CI pasen antes de poder fusionarlo.
Clona este repositorio y luego cd
al nuevo directorio
$ git clone [email protected]:ministryofjustice/peoplefinder.git
$ cd peoplefinder
Si aún no tiene rbenv
instalado, instálelo de la siguiente manera:
$ brew install rbenv ruby-build
$ rbenv init
Siga las instrucciones impresas del comando rbenv init
y actualice su ~/.bash_profile
o archivo equivalente en consecuencia, luego inicie una nueva terminal y navegue hasta el directorio del repositorio.
Utilice rbenv
para instalar la última versión de Ruby como se define en .ruby-version
(asegúrese de estar en la ruta del repositorio):
$ rbenv install
postgresql
$ brew install postgresql
Búsqueda abierta
$ brew install opensearch
Utilice los siguientes comandos para instalar gemas y paquetes de JavaScript y luego cree la base de datos
$ bin/setup
Crea algunos equipos de demostración.
$ DOMAIN=fake.gov.uk bin/rake peoplefinder:data:demo
Para ejecutar simplemente el servidor web sin ningún trabajo en segundo plano (normalmente suficiente):
$ bin/rails server
Se podrá acceder al sitio en http://localhost:3000.
Estos deben definirse en los archivos config/application.rb o enviroments/ environment .rb si es necesario definir la configuración por entorno.
config.app_title
, por ejemplo, 'Mi buscador de nuevas personas'
config.default_url_options
, por ejemplo, {host: mail.peoplefinder.example.com}
config.open_search_url
Requerido para producción (consulte la sección Búsqueda a continuación)
config.support_email
, por ejemplo, '[email protected]'
config.send_reminder_emails
Establecer en verdadero si los correos electrónicos de recordatorio se enviarán mediante cronjobs
El sistema permite iniciar sesión para correos electrónicos que tienen dominios de la lista blanca. La lista blanca está en la base de datos, administrada por el modelo PermittedDomain
. Al menos un dominio debe estar incluido en la lista blanca antes de que alguien pueda iniciar sesión (eso también se aplica al desarrollo).
Agregar un nuevo dominio a la base de datos de producción desde bash/zsh, etc.:
kubectl get pods -n <NAMESPACE>
kubectl exec -it <POD> -n <NAMESPACE> ash
rails c
PermittedDomain.create(domain: '<DOMAIN_NAME>')
email@<DOMAIN_NAME>
Se puede acceder al sitio en modo de solo lectura desde las direcciones IP de MOJ. La lista de IP se almacena en una variable de entorno llamada IP_ALLOWLIST
que se encuentra en un secreto de Kubernetes. La misma lista de IP también se utiliza para restringir el acceso a la sección de administración para los usuarios administradores.
El método de autenticación mediante token depende del acceso de los usuarios a su cuenta de correo electrónico para autenticarlos.
Cada vez que el usuario desea iniciar una sesión, debe generar un token de autenticación. Esto se puede hacer ingresando su dirección de correo electrónico (de un dominio permitido) en la pantalla de inicio de sesión. Se les enviará un mensaje de correo electrónico que contiene un enlace con un token aleatorio único. Al hacer clic en el enlace, podrán iniciar sesión.
Para pruebas locales: hay algunas formas de obtener el token
select * from tokens where user_email = <the email you use for asking token from app> order by id desc;
http://localhost:3000/tokens/
Luego use el token en esta URL: http://localhost:3000/tokens/3da4f4e2-8001-4437-b3ab-7e2b3f6e768c <- reemplácelo con su token.
People Finder envía algunos tipos de correo electrónico utilizando GOV.UK Notify
En producción, se envían correos electrónicos periódicos a los usuarios que tienen:
Para ejecutar el motor en modo de producción, se debe configurar config.open_search_url
en, por ejemplo, config/application.rb. La variable de entorno utilizada para configurarlo es MOJ_PF_ES_URL
Consulte 'Elementos configurables' más arriba.
Utilice localhost:9200
cuando llame a la búsqueda de OpenSearch localmente.
Los siguientes comandos en entornos de Kubernetes llamarán al pod de proxy de búsqueda abierta, que luego llamará a la búsqueda abierta en AWS para leer o actualizar datos.
Para comprobar el estado de la pila de opensearch, puede utilizar lo siguiente, desde cualquier instancia de host. wget
descargará la información en los pods para que puedas leer los archivos usando cat
. Localmente puedes usar curl
.
wget 'aws-es-proxy-service:9200/_cat/health?v'
o ver la configuración y estadísticas de ES:
wget 'aws-es-proxy-service:9200/_cluster/stats/?pretty'
wget 'aws-es-proxy-service:9200/_cat/indices?v'
wget 'aws-es-proxy-service:9200/_cat/nodes?v'
Si obtiene una IndexMissingException, deberá indexar el modelo de Persona:
bundle exec rake environment opensearch:import:model CLASS='Person' FORCE=y
O, alternativamente:
rake peoplefinder:es:index_people
O puede crear el índice desde la consola si los comandos rake anteriores fallan:
OpenSearch :: Model . client = OpenSearch :: Client . new ( url : Rails . configuration . open_search_url ) . index ( index : Person . index_name , body : { } )
Person . __opensearch__ . create_index! index : Person . index_name , force : true
Y llénelo:
Person.import
También puedes eliminar el índice:
Person.delete_indexes
Para ejecutar especificaciones sin OpenSearch:
bundle exec rspec . --tag ~opensearch
Si tu shell es Zsh, debes escapar de ~
usando ~
.
Nota: Desafortunadamente, por el momento no hay forma de evitar que ES se ejecute localmente, pero puede usar un contenedor acoplable como se mencionó anteriormente.
Manipulación
Usamos MiniMagick, por lo que es necesario instalar Imagemagick o Graphicsmagick para la manipulación de imágenes y para algunas de las pruebas.
Si usas brew puedes usar el siguiente comando:
brew install imagemagick
Almacenamiento
Para el entorno de desarrollo local, las imágenes de perfil se almacenan como archivos. Para los entornos implementados, las imágenes de perfil se almacenan en su propio depósito de AWS S3. Los depósitos no otorgan ningún permiso de grupo a usuarios que no sean de AWS (es decir, son privados). El acceso a las imágenes se logra a través de URL prefirmadas y de tiempo limitado generadas por la aplicación.
Las imágenes que la aplicación carga en el depósito impiden explícitamente la lectura en el grupo de AWS "Todos" mediante la configuración de CarrierWave en su inicializador; el valor predeterminado para esta configuración es verdadero/público.
config.fog_public = false # default: true
El diseño de la aplicación lo establece moj_internal_template que se instala como parte de este motor.
Puede anular este diseño en la aplicación contenedora y crear su propio archivo:
app/views/layouts/peoplefinder/peoplefinder.html.haml
Gran parte del texto de las vistas se puede configurar en el archivo de traducción.
Puede anularlos en la aplicación contenedora creando su propio archivo:
config/locales/en.yml
RandomGenerator
puede generar varias capas de equipos y personas con detalles generados aleatoriamente en esos equipos.
Uso:
group = Group . find ( ... )
# initialise the generator with a parent group
generator = RandomGenerator . new ( group )
# clean all subgroups and people within the provided parent group
generator . clear
# generate team structure and people with the given parameters
groups_levels = 2 # number of levels to generate
groups_per_level = 3 # how many teams per each level
people_per_group = 5 # how many people should be in the bottom most teams
domain = 'fake.gov.uk' # which e-mail address should be used for e-mails (has to be whitelisted)
generator . generate ( groups_levels , groups_per_level , people_per_group , domain )
También puede generar datos semialeatorios utilizando la tarea rake peoplefinder:data:demo
que se llama como parte de peoplefinder:db:reload
. La ejecución repetida peoplefinder:demo:data
agregará miembros a los grupos de ejemplo que crea.
Ejecutar rake -T | grep people
para la lista más reciente:
rake peoplefinder:data:demo # create basic demonstration data
rake peoplefinder:data:demo_csv[count,file] # create a valid csv for load testing, [count: number of records=500], [file: path to file=spec/fixtures/]
rake peoplefinder:db:clear # drop all tables
rake peoplefinder:db:reload # drop tables, migrate, seed and populate with demonstration data for development purposes
rake peoplefinder:db:reset_column_information # reset all column information
rake peoplefinder:import:csv_check[path] # Check validity of CSV file before import
rake peoplefinder:import:csv_import[path] # Import valid CSV file
Para que Peoplefinder tenga éxito, es necesario completar y mantener los perfiles.
Cualquier excepción planteada en cualquier entorno implementado se enviará a Sentry.