BC Archaeology Branch Arches configuration, schemas and extensions for the BC Archaeology Portal.
- Docker Desktop
- Create a directory called
bcap - Open a terminal and navigate to the
bcapdirectory - Run the following to clone the repositories required for this project:
git clone https://github.com/bcgov/arches-dependency-containers
git clone https://github.com/bcgov/arches
git clone https://github.com/archesproject/arches-component-lab
git clone https://github.com/archesproject/arches-controlled-lists
git clone https://github.com/archesproject/arches-querysets
git clone https://github.com/bcgov/bcgov-arches-common
git clone https://github.com/bcgov/nr-bcap
- You should now have the following directory structure:
.
└── 📁 bcap/
├── 📁 arches-dependency-containers/
├── 📁 arches/
├── 📁 bcgov-arches-common/
├── 📁 arches-querysets/
├── 📁 arches-component-lab/
├── 📁 arches-controlled-lists/
└── 📁 nr-bcap/
- Open or navigate to the
bcapdirectory in the terminal - Run the following command:
cd arches && git checkout dev/8.1.x_bcgov
There are 3 application specific docker containers and 4 common depdendency containers:
- bcap: Application container (Django dev server, BCAP codebase)
- bcap-proxy: Nginx proxy container
- bcap-pg_tileserv: Postgres Tileserve container - tile server for hosting local map tiles
- bcap-pg_featureserv: Postgres Featureserv container - tile server for hosting local wfs (Used for QGIS plugin)
- bcap-nginx: Nginx container - reverse proxy for the Arches application
- bcap-jupyter: Jupyter container - for development
- Depdendency containers - These containers can be shared across applications
- postgres16-3_arches7-5-2: Postgres/PostGIS container
- elasticsearch8-3_arches7-5-2: Elasticsearch container
- redis_arches7-5-2: Redis container
- rabbitmq3_arches7-5-2: RabbitMQ (not currently used, but still there)
- We need to load the base dependencies needed for Arches (i.e., Postgres, Elasticsearch, Redis, etc).
- Open or navigate to the
bcapdirectory in the terminal - Run the following command to setup the project's dependencies:
cd arches-dependency-containers/arches-7-5-2 && docker compose up -d
This is done w/ modifications to the manage.py file that connects from the docker container back to the host so no ports need to be configured in the docker-compose.yml file.
To activate this debugging mode:
- Add/edit the following lines in the ./docker/docker.dev.env file:
INSTALL_PYCHARM_DEBUG=true PYCHARM_DEBUG=true DOCKER_HOST_PLATFORM=linux/arm64 # One of linux/arm64, linux/amd64 - Create a Python Debug Server configuration in PyCharm and set the following:
- host: localhost
- port: 5680
- path mappings:
<dir to nr-bcap parent on host> -> /web_root<dir to nr-bcap on host> -> /web_root/bcap
- An .env file
- Open or navigate to the
bcapdirectory in the terminal - Run the following command:
cd nr-bcap && docker compose up -d
- Let the
bcapcontainer fully load (i.e., watch the "Logs" tab). There will be a warning about missing environment variables.- You will see:
django.core.exceptions.ImproperlyConfigured: Set the BCGOV_PROXY_PREFIX environment variable - This can take some time.
- You will see:
- You need to create or move the .env file to
bcap/nr-bcap/.env - Restart the
bcapcontainer in Docker Desktop - Open the
bcapcontainer in Docker Desktop - Go to the "Exec" tab and run the following:
bash
cd bcap && mkdir logs
- Restart the
bcapcontainer in Docker Desktop
- Create
test_user_list.pyinbcap/nr-bcap/bcap/management/data/test_user_list.py - Put the following function in the
test_user_list.pyfile if you do not have an IDIR username/password:
def get_user_list():
return [
{
"name": "testuser123",
"email": "test@email.com",
"password": "Test12345!",
"is_superuser": True,
"is_staff": True,
"first_name": "Test",
"last_name": "User",
"groups": [
"Resource Editor",
"Resource Reviewer",
"Archaeology Branch",
"Resource Exporter"
]
}
]
- Put the following function in the
test_user_list.pyfile if you do have an IDIR username/password:
def get_user_list():
return [
{
"name": "<idir username>@idir",
"email": "<email>",
"password": "Test12345!",
"is_superuser": True,
"is_staff": True,
"first_name": "<first name>",
"last_name": "<last name>",
"groups": [
"Resource Editor",
"Resource Reviewer",
"Archaeology Branch",
"Resource Exporter",
],
},
]
- The password is a dummy password so it can be left as is.
- OIDC is used so when authenticating you will use your IDIR username and password.
- The
@idirsuffix is necessary - The
<idir username>must be in lowercase
- Start and open the
bcapcontainer in Docker Desktop - Go to the "Exec" tab and run the following:
python3 manage.py bc_test_users --refresh
-
Open the "Inspect" tab in the container
-
Ctrl + FforNetworksand look forIPAddress -
Copy the IP Address and open the
bcap/nr-bcap/.envfile -
Add the IP Address to the
AUTH_BYPASS_HOSTSvariable:AUTH_BYPASS_HOSTS = ... ... <IPAddress>
-
Open the
bcapcontainer in Docker Desktop -
Go to the "Exec" tab and run the following:
npm run build_development
python3 manage.py setup_db
- Open
bcap/nr-bcap/bcap/settings.py - Find
AUTHENTICATION_BACKENDSin thesettings.pyfile
- Comment out the following:
"oauth2_provider.backends.OAuth2Backend",
"bcap.util.external_oauth_backend.ExternalOauthAuthenticationBackend",
- Uncomment the following:
"django.contrib.auth.backends.ModelBackend"
- Uncomment the following:
"oauth2_provider.backends.OAuth2Backend",
"django.contrib.auth.backends.ModelBackend",
"guardian.backends.ObjectPermissionBackend",
"arches.app.utils.permission_backend.PermissionBackend",
- Comment out the following:
"arches.app.utils.email_auth_backend.EmailAuthenticationBackend",
"django.contrib.auth.backends.RemoteUserBackend",
- You must also add the secret to the
OAUTH_CLIENT_SECRETvariable in the .env file
- You should now be able to access BCAP at http://localhost:82/bcap
- If it doesn't work, then open or navigate to the
bcapdirectory in the terminal - Restart the
bcapcontainer or run the following command:
cd nr-bcap && docker compose up -d
- After logging into BCAP, the map will initially be blank.
- You must navigate to the "System Settings" from the menu on the left-hand side, and enter your
Mapboxtoken there.
- You must navigate to the "System Settings" from the menu on the left-hand side, and enter your
If you have been given a database dump like bcap.sql follow these steps to load it into the system.
- Copy db file into your docker container from any terminal.
docker cp bcap.sql bcap:/tmp/bcap.sql
- Create and index the database from the Exec tab inside your container (indexing may take up to an hour).
createdb -U postgres -h postgres16-3_arches7-5-2 bcap
psql -U postgres -h postgres16-3_arches7-5-2 -d bcap -c "CREATE EXTENSION IF NOT EXISTS postgis;"
psql -U postgres -h postgres16-3_arches7-5-2 -d bcap -f /tmp/bcap.sql
python3 manage.py es index_database
- If you are having trouble with logins you might need to refresh your test user list
python3 manage.py bc_test_users --refresh
See README.vite.md for details about developing using the Vite dev server.
Documented DRF views → schema.yml (OpenAPI) → Zod schemas in
bcap/src/bcap/client/ (via @hey-api/openapi-ts; types via
z.infer). Regenerate in the bcap container after changing a documented
serializer, view, route, or resource model:
npm run api:gen # see scripts/generate_api_contract.shNOTE: Only the limited documented routes for now; arches-queryset routes later.
To load sample dashboard data into the current database (permit application, related resources, and Elasticsearch indexing):
# Small demo graph (one permit, three short requirements)
python3 manage.py seed_dashboard_demo
# One permit carrying the full real-world requirement flow
python3 manage.py seed_permit_application
# Seed several cards at once (each with randomized names and application id)
python3 manage.py seed_dashboard_demo --count 20Seeded data uses Faker to randomize holder names, project officer, ministry assignees, and the application id, so each card is distinct. Both commands take --count N (default 1) and --no-index (for when Elasticsearch is not running).
To remove the seeded data again (only resources the seeders created are deleted — real data in the same graphs is left untouched):
python3 manage.py clear_dashboard_dataThese are temporary developer aids and will be removed in a future release.
python3 manage.py test tests --pattern="*.py" --settings="tests.test_settings" --keepdb
--keepdbreuses the existing test database between runs to save time- To run a specific test module or class, replace
testswith the dotted path (e.g.tests.views.test_api)
- RabbitMQ is not being used
- We do not use the Django template engine, therefore changes to the Django code need to be rebuilt with the webpack