mirror of
https://github.com/suitenumerique/docs
synced 2026-04-21 13:37:20 +00:00
WIP
This commit is contained in:
parent
4dd7976803
commit
464c4ee542
4 changed files with 225 additions and 0 deletions
|
|
@ -12,6 +12,7 @@ flowchart TD
|
|||
Back --> DB("Database (PostgreSQL)")
|
||||
Back <--> Celery --> DB
|
||||
Back ----> S3("Minio (S3)")
|
||||
Back -- REST API --> Find
|
||||
```
|
||||
|
||||
### Architecture decision records
|
||||
|
|
|
|||
|
|
@ -93,6 +93,12 @@ These are the environment variables you can set for the `impress-backend` contai
|
|||
| OIDC_USERINFO_SHORTNAME_FIELD | OIDC token claims to create shortname | first_name |
|
||||
| POSTHOG_KEY | Posthog key for analytics | |
|
||||
| REDIS_URL | Cache url | redis://redis:6379/1 |
|
||||
| SEARCH_INDEXER_CLASS | Class of the backend for document indexation & search | |
|
||||
| SEARCH_INDEXER_BATCH_SIZE | Size of each batch for indexation of all documents | 100000 |
|
||||
| SEARCH_INDEXER_COUNTDOWN | Minimum debounce delay of indexation jobs (in seconds) | 1 |
|
||||
| SEARCH_INDEXER_URL | Find application endpoint for indexation | |
|
||||
| SEARCH_INDEXER_SECRET | Token for indexation queries | |
|
||||
| SEARCH_INDEXER_QUERY_URL | Find application endpoint for search | |
|
||||
| SENTRY_DSN | Sentry host | |
|
||||
| SESSION_COOKIE_AGE | duration of the cookie session | 60*60*12 |
|
||||
| SPECTACULAR_SETTINGS_ENABLE_DJANGO_DEPLOY_CHECK | | false |
|
||||
|
|
|
|||
217
docs/search.md
Normal file
217
docs/search.md
Normal file
|
|
@ -0,0 +1,217 @@
|
|||
# Setup full-text search with Find
|
||||
|
||||
This configuration will enable the fulltext search feature for Docs :
|
||||
- Each save on **core.Document** or **core.DocumentAccess** will trigger the indexer
|
||||
- The `api/v1.0/documents/search/` will work as a proxy with the Find API for fulltext search.
|
||||
|
||||
## Create an index service for Docs
|
||||
|
||||
In Find application Django admin configure a **Service** with these settings
|
||||
|
||||
- **Name**: `docs`<br>_request.auth.name of the Docs application._
|
||||
|
||||
- **Client id**: `impress`<br>_Name of the token audience or client_id of the Docs application._
|
||||
|
||||
## Configure settings
|
||||
|
||||
Add those Django settings to enable the feature.
|
||||
|
||||
```shell
|
||||
SEARCH_INDEXER_CLASS="core.services.search_indexers.FindDocumentIndexer"
|
||||
SEARCH_INDEXER_COUNTDOWN=10 # Debounce delay in seconds for the index calls.
|
||||
|
||||
# Indexation endpoint.
|
||||
SEARCH_INDEXER_SECRET=my-token-from-the-find-impress-service
|
||||
# The token from service "docs" of Find application.
|
||||
SEARCH_INDEXER_URL="http://app-find:8000/api/v1.0/documents/index/"
|
||||
|
||||
# Search endpoint. Uses the OIDC token for authentication
|
||||
SEARCH_INDEXER_QUERY_URL="http://app-find:8000/api/v1.0/documents/search/"
|
||||
```
|
||||
|
||||
We also need to enable the **OIDC Token** refresh or the authentication will fail quickly.
|
||||
|
||||
```shell
|
||||
# Store OIDC tokens in the session
|
||||
OIDC_STORE_ACCESS_TOKEN = True # Store the access token in the session
|
||||
OIDC_STORE_REFRESH_TOKEN = True # Store the encrypted refresh token in the session
|
||||
OIDC_STORE_REFRESH_TOKEN_KEY = "your-32-byte-encryption-key==" # Must be a valid Fernet key (32 url-safe base64-encoded bytes)
|
||||
```
|
||||
|
||||
# Installation with docker compose
|
||||
|
||||
First see [compose installation](installation/compose.md) documentation.
|
||||
|
||||
## 1. Postgresql
|
||||
|
||||
Find uses PostgreSQL as its database.
|
||||
|
||||
If you are using the example provided, you need to generate a secure key for `DB_PASSWORD` and set it in `env.d/find_postgresql`.
|
||||
|
||||
```shell
|
||||
# Postgresql db container configuration
|
||||
POSTGRES_DB=find
|
||||
POSTGRES_USER=dinum
|
||||
POSTGRES_PASSWORD=pass
|
||||
|
||||
# App database configuration
|
||||
DB_HOST=postgresql-find
|
||||
DB_NAME=find
|
||||
DB_USER=dinum
|
||||
DB_PASSWORD=<password>
|
||||
DB_PORT=5432
|
||||
```
|
||||
|
||||
And the service can be configured in `compose.yml`.
|
||||
|
||||
```yaml
|
||||
postgresql-find:
|
||||
image: postgres:15
|
||||
env_file:
|
||||
- env.d/development/find_postgresql
|
||||
- env.d/development/find_postgresql.local
|
||||
ports:
|
||||
- "15433:5432"
|
||||
```
|
||||
|
||||
## 2. Opensearch
|
||||
|
||||
Find uses Opensearch as its indexation database.
|
||||
|
||||
If you are using the example provided, you need to generate a secure key for `OPENSEARCH_INITIAL_ADMIN_PASSWORD` and `OPENSEARCH_PASSWORD`
|
||||
to set them in `env.d/opensearch`.
|
||||
|
||||
```shell
|
||||
OPENSEARCH_INITIAL_ADMIN_PASSWORD=find
|
||||
OPENSEARCH_PASSWORD=find
|
||||
OPENSEARCH_USE_SSL=true # false in Development mode
|
||||
|
||||
# Dashboard
|
||||
OPENSEARCH_HOSTS=["http://opensearch:9200"]
|
||||
DISABLE_SECURITY_DASHBOARDS_PLUGIN=false # true in Development mode
|
||||
```
|
||||
|
||||
And the service & dashboard can be configured in `compose.yml`.
|
||||
|
||||
```yaml
|
||||
opensearch:
|
||||
user: ${DOCKER_USER:-1000}
|
||||
image: opensearchproject/opensearch:latest
|
||||
env_file:
|
||||
- env.d/development/opensearch
|
||||
- env.d/development/opensearch.local
|
||||
environment:
|
||||
- discovery.type=single-node
|
||||
- plugins.security.disabled=true
|
||||
- plugins.security.ssl.http.enabled=false
|
||||
ulimits:
|
||||
memlock:
|
||||
soft: -1
|
||||
hard: -1
|
||||
volumes:
|
||||
- ./data/opensearch:/usr/share/opensearch/data
|
||||
ports:
|
||||
- "9200:9200"
|
||||
- "9600:9600"
|
||||
|
||||
opensearch-dashboards:
|
||||
image: opensearchproject/opensearch-dashboards:latest
|
||||
ports:
|
||||
- "5601:5601"
|
||||
env_file:
|
||||
- env.d/development/opensearch
|
||||
- env.d/development/opensearch.local
|
||||
depends_on:
|
||||
- opensearch
|
||||
```
|
||||
|
||||
## 3. Find (dev mode)
|
||||
|
||||
If you are using the example provided, you need to generate a secure key for `OIDC_RS_CLIENT_SECRET` and set it in `env.d/find`.
|
||||
|
||||
```shell
|
||||
# Django
|
||||
DJANGO_ALLOWED_HOSTS=*
|
||||
DJANGO_SECRET_KEY=ThisIsAnExampleKeyForDevPurposeOnly
|
||||
DJANGO_SETTINGS_MODULE=find.settings
|
||||
DJANGO_SUPERUSER_PASSWORD=admin
|
||||
|
||||
# Python
|
||||
PYTHONPATH=/app
|
||||
|
||||
# find settings
|
||||
|
||||
# Backend url
|
||||
FIND_BASE_URL="http://localhost:9072"
|
||||
|
||||
# OIDC
|
||||
OIDC_OP_URL=http://localhost:8083/realms/impress
|
||||
OIDC_OP_INTROSPECTION_ENDPOINT=http://nginx:8083/realms/impress/protocol/openid-connect/token/introspect
|
||||
|
||||
OIDC_OP_JWKS_ENDPOINT=http://nginx:8083/realms/impress/protocol/openid-connect/certs
|
||||
OIDC_OP_AUTHORIZATION_ENDPOINT=http://localhost:8083/realms/impress/protocol/openid-connect/auth
|
||||
OIDC_OP_TOKEN_ENDPOINT=http://nginx:8083/realms/impress/protocol/openid-connect/token
|
||||
OIDC_OP_USER_ENDPOINT=http://nginx:8083/realms/impress/protocol/openid-connect/userinfo
|
||||
|
||||
OIDC_RP_CLIENT_ID=impress
|
||||
OIDC_RP_CLIENT_SECRET=ThisIsAnExampleKeyForDevPurposeOnly
|
||||
OIDC_RP_SIGN_ALGO=RS256
|
||||
OIDC_RP_SCOPES="openid email"
|
||||
|
||||
OIDC_REDIRECT_ALLOWED_HOSTS=["http://localhost:8083", "http://localhost:3000"]
|
||||
OIDC_AUTH_REQUEST_EXTRA_PARAMS={"acr_values": "eidas1"}
|
||||
|
||||
# OIDC Resource server
|
||||
OIDC_RS_SCOPES="openid"
|
||||
OIDC_RS_CLIENT_ID=impress
|
||||
OIDC_RS_CLIENT_SECRET=ThisIsAnExampleKeyForDevPurposeOnly
|
||||
OIDC_RS_SIGN_ALGO=RS256
|
||||
|
||||
OIDC_RS_BACKEND_CLASS="core.authentication.FinderResourceServerBackend"
|
||||
```
|
||||
|
||||
And Find can be configured in `compose.yml`.
|
||||
|
||||
```yaml
|
||||
find-dev:
|
||||
user: ${DOCKER_USER:-1000}
|
||||
image: find:backend-development
|
||||
environment:
|
||||
- PYLINTHOME=/app/.pylint.d
|
||||
- DJANGO_CONFIGURATION=Development
|
||||
env_file:
|
||||
- env.d/development/find
|
||||
- env.d/development/find.local
|
||||
- env.d/development/find_postgresql
|
||||
- env.d/development/find_postgresql.local
|
||||
- env.d/development/opensearch
|
||||
- env.d/development/opensearch.local
|
||||
ports:
|
||||
- "9071:8000"
|
||||
volumes:
|
||||
- ../find/src/backend:/app
|
||||
- ../find/data/static:/data/static
|
||||
depends_on:
|
||||
- find_postgresql
|
||||
- opensearch
|
||||
- redis
|
||||
```
|
||||
|
||||
## Ports (dev defaults)
|
||||
|
||||
| Port | Service |
|
||||
| --------- | --------------------- |
|
||||
| 3000 | Next.js |
|
||||
| 8071 | Django (main) |
|
||||
| 9071 | Django (Find) |
|
||||
| 4444 | Y-Provider |
|
||||
| 8080 | Keycloak |
|
||||
| 8083 | Nginx proxy |
|
||||
| 9000/9001 | MinIO |
|
||||
| 15432 | PostgreSQL (main) |
|
||||
| 15433 | PostgreSQL (Find) |
|
||||
| 5433 | PostgreSQL (Keycloak) |
|
||||
| 1081 | MailCatcher |
|
||||
| 9200 | Opensearch |
|
||||
| 9600 | Opensearch admin |
|
||||
| 5601 | Opensearch dashboard |
|
||||
|
|
@ -36,6 +36,7 @@ OIDC_OP_JWKS_ENDPOINT=http://nginx:8083/realms/impress/protocol/openid-connect/c
|
|||
OIDC_OP_AUTHORIZATION_ENDPOINT=http://localhost:8083/realms/impress/protocol/openid-connect/auth
|
||||
OIDC_OP_TOKEN_ENDPOINT=http://nginx:8083/realms/impress/protocol/openid-connect/token
|
||||
OIDC_OP_USER_ENDPOINT=http://nginx:8083/realms/impress/protocol/openid-connect/userinfo
|
||||
OIDC_OP_INTROSPECTION_ENDPOINT=http://nginx:8083/realms/impress/protocol/openid-connect/token/introspect
|
||||
|
||||
OIDC_RP_CLIENT_ID=impress
|
||||
OIDC_RP_CLIENT_SECRET=ThisIsAnExampleKeyForDevPurposeOnly
|
||||
|
|
|
|||
Loading…
Reference in a new issue