- Node and npm (use nvm for managing multiple node versions)
- Gulp:
npm install -g gulp - PostgresQL
- Python 3
- Pip
- Clone the repository
- Create a blank data postgres database and update the connection details in
settings/base.py - run the following commands
pip install dev-requirements.txtpython manage.py migratepython manage.py createsuperuser - In a separate terminal window run
npm installto install dependencies. - Run
npm run startthis will build the frontend assets and watch for changes - In your original terminal window run
python manage.py runserverthe application should now be running on and accessible athttp://localhost:8000
Frontend assets should be stored in the /frontend directory.
When the npm run start command is run it will run npm run-script build as a sub command which will compile assets and deploy them to /ictcg/assets
To build production version of the frontend assets run npm run build
To run linting on CSS and JS npm run linting
The Digital Buying Guide is currently deployed on GOVUK PaaS
The following environment variables should be supplied in the manifest before performing a cf push:
ANALYTICS_ID: [UA-some-ga-token-1]
BLOCK_SEARCH_ENGINES: (true/false)
DJANGO_DEBUG: (true/false)
DJANGO_SECRET_KEY: [SOME KEY]
The application requires a Postgres backing service and an AWS s3 backing service
cf create-service aws-s3-bucket default [service-name] -c '{"public_bucket":true}'
cf create-service postgres [plan-name] [service-name]
The Postgres service can be populated from a SQL db dump
cf conduit [service-name] -- psql [dump-filename].sql
The S3 service can be populated from a local directory
First create a key:
cf csk [service-name] [some-key-name] -c '{"allow_external_access": true}'
cf service-key [service-name] [some-key-name]
Then populate your ~/.aws/credentials file with an entry with the aws_access_key_id and aws_secret_access_key
# [some-key-name]
# aws_access_key_id = access-key
# aws_secret_access_key = secret-key
Next, using the bucket name from the cf service-key step above:
AWS_PROFILE=[some-key-name] aws s3 sync [directory] s3://[bucket-name]
Finally:
cf delete-service-key [service-name] [some-key-name]
Autoscaling rules are defined in the files:
autoscaling-policy-staging.json
autoscaling-policy-production.json
For both staging and production
- An instance will be added if:
- cpu or memory breaches 80% usage for 60 seconds
- An instance will be removed if:
- cpu or memory drops below 50% usage for 120 seconds
With a minimum of 2 and a maximum of 10 instances for production and a minimum of 1 and a maximum of 3 for staging.
To update an autoscaling policy:
cf target -o global-digital-marketplace -s <SPACE>
cf attach-autoscaling-policy <APPNAME> autoscaling-policy-<STAGE>.json
In the future consider setting this to respond to responsetime if we decide we want an SLA based on this metric.
Further reading:
https://docs.cloud.service.gov.uk/managing_apps.html#autoscaling https://github.com/cloudfoundry/app-autoscaler/blob/master/docs/Readme.md#concepts-of-autoscaling-policy
Most transations occur within the CMS itself however there are a number of words/sentences which require manual translation using the translation feature provided by Django.
To generate the transation .po files run:
python manage.py makemessages -i env
After generating the .po file, add the translated content here.
Po files can be found in the /locale/language/LC_MESSAGES/django.po
Once completed the file must be compiled
python manage.py compilemessages -i env
If you set up the correct periodic task, or run that task manually, you can set a page, or group of pages to publish at a specific time.
You can dry run this task and it will print out what changes will be made:
cf run-task dbg-[DEPLOYMENT]-app --command "python manage.py publish_scheduled_pages --dry-run"
cf logs dbg-[DEPLOYMENT]-app
Otherwise running the below will trigger the changes set to have already published:
cf run-task dbg-[DEPLOYMENT]-app --command "python manage.py publish_scheduled_pages"
cf logs dbg-[DEPLOYMENT]-app
For more information on scheduling publishing this github comment is illuminating: wagtail/wagtail#2366 (comment) Or the Wagtail docs: https://docs.wagtail.io/en/v2.0/reference/pages/theory.html#scheduled-publishing