Go to file
Ramon Wenger 40b558f555 Update cache in pipelines definition 2020-10-08 14:55:27 +02:00
.git-crypt Add 1 git-crypt collaborator 2018-09-19 17:11:39 +02:00
bin initial commit 2018-08-06 23:26:23 +02:00
client Make news teaser spacing more consistent 2020-10-07 13:48:42 +02:00
docs Add documentation for backup (initial version) 2019-07-10 16:36:12 +02:00
server Fix admin interface for objective order 2020-09-30 17:25:52 +02:00
.editorconfig Show the name of the logged in user in DefaultLayout 2018-10-05 10:49:12 +02:00
.gitignore Add additional pipeline test settings 2020-04-02 16:20:42 +02:00
Dockerfile Add some configuration for the e2e tests 2019-02-04 09:33:42 +01:00
Pipfile Add environment information to frontend dev server 2020-05-27 10:12:18 +02:00
Pipfile.lock Update Pipfile.lock 2020-07-20 11:03:16 +02:00
Procfile Add new relic to requirements 2019-01-30 16:34:26 +01:00
README.md Update readme 2020-09-02 12:41:31 +02:00
bitbucket-pipelines.yml Update cache in pipelines definition 2020-10-08 14:55:27 +02:00
build-docker-image.sh Add some configuration for the e2e tests 2019-02-04 09:33:42 +01:00
docker-bash.sh Add some configuration for the e2e tests 2019-02-04 09:33:42 +01:00
docker-compose.yml Fix Postgres version in docker files 2018-10-30 17:52:00 +01:00
docker_dummy_data.sh Update docker configuration 2018-09-03 17:20:02 +02:00
local-setup-for-tests.sh Fix cypress test 2019-02-04 17:42:28 +01:00
package-lock.json Add schema file, also add instructions to readme 2020-01-20 13:02:27 +01:00
package.json remove uploadcare from root package.json 2018-09-20 09:41:05 +02:00
pipenv-cypress.sh Add script for local cypress testing with pipenv 2019-02-14 18:27:33 +01:00
release-tasks.sh Remove dummy data from release tasks 2018-10-17 14:48:45 +02:00
setup-for-tests.sh Add some configuration for the e2e tests 2019-02-04 09:33:42 +01:00

README.md

mySkillbox

Sources

Development

Server

  • Install pipenv
  • Create virtualenv in install dependencies pipenv --python 3.6 install --dev
  • Create PostgreSQL database & user, needs to be version 10, not 11
  • Install Heroku cli, run heroku login and heroku git:remote -a skillbox-hep
  • Create .env in server file with SECRET_KEY and DATABASE_URL (or copy the existing .env.example file)
  • Migrate databases: pipenv run python manage.py migrate
  • Create super user: pipenv run python manage.py createsuperuser
  • Run: pipenv run python manage.py runserver
  • Dummy data: pipenv run python manage.py dummy_data (restart the development server afterwards) Recreates the db with test data and new superuser: test/test

Dockerize DB

  • To dockerize the DB, after installing docker, run the following command:
docker run --name skillboxdb -d -p 5432:5432 -e POSTGRES_PASSWORD=skillbox -e POSTGRES_USER=skillbox -e POSTGRES_DB=skillbox postgres:10-alpine
  • After a reboot, start the container again with docker start skillboxdb

Notes

Commands

Create a new teacher demo account on prod
heroku login # if not already logged in
heroku run --remote heroku python server/manage.py create_teacher <firstname> <lastname> <email>

Tip: create and alias in ~/.bash_aliases:

alias create_teacher="heroku run --remote heroku python server/manage.py create_teacher"

Then you can just run in terminal:

create_teacher <firstname> <lastname> <email>
Import a CSV file

To import a CSV file locally, run:

python manage.py <csv-file>

To import a CSV file on prod, first upload the CSV file to some public S3 bucket (or make it publicly available some other way)

heroku login # if not already logged in
heroku run --remote heroku python server/manage.py import_users --s3 <csv-url>

Client

# install dependencies
npm install --prefix client

# serve with hot reload at localhost:3000
npm run dev --prefix client

# build
npm run build --prefix client

# build for production with minification
export NODE_ENV=production && npm install --prefix client && npm run build --prefix client

After running npm run dev login to the Django admin view on the same domain as the webpack dev server is running. Example: The client runs on localhost:8080 and Django on localhost:8000. This way you will have a session and a csrf cookie set and the apollo client will be able to make requests.

Production Build

Urls

(trailing slashes are required)

Heroku

heroku run python server/manage.py <command> --app <appname>

Rollback

After doing a rollback under https://data.heroku.com/

heroku pg:info --app=<appname>

Change DATABASE URL (e.g after a rollback)

heroku pg:promote HEROKU_POSTGRESQL_PINK

Backup

Create a backup

heroku pg:backups:capture --app <appname>

The following command will provide a URL to where the backup can be downloaded (expires after 60 minutes)

heroku pg:backups:url b001 --app <appname>

To restore a backup, use

heroku pg:backups:restore b001 DATABASE_URL --app <appname>

To see the backup schedule

heroku pg:backus:schedules --app <appname>

AWS

  1. Create user with API Access and add access key id and access key to .env and set USE_AWS=True
  2. Create S3 Bucket in location EU Ireland.

Change bucket Permissions / Bucket Policy

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Sid": "PublicReadForGetBucketObjects",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::<bucket-name>/*"
        },
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "AWS": "<user arn>"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::<bucket-name>/*",
                "arn:aws:s3:::<bucket-name>"
            ]
        }
    ]
}

Release

Pushing to Production

Whenever you want to do a release, just merge develop into master and push to origin. The current master will always be deployed in the evening, if there are new commits that are not yet on Heroku.

Tagging

Whenever you do a new release, please tag the current commit after merging with the current date:

git tag -a release/v2019-09-10

git tag -a creates an annotated tag, which must have a release message (like a commit message). For now, just repeat the current date, like:

Release to production on 2019-09-10

You can and should then push the tag to the repo

git push origin release/v2019-09-10

You can later see the metadata of the tag with

git show release/v2019-09-10

Testing

Mocking GraphQL calls

We use cypress-graphql-mock for mocking GraphQL calls in Cypress tests.

For an example, please see spellcheck.spec.js.

There is a schema.json in the fixtures folder. For now it has been generated once, and if there is a significant update to the schema on the server, it has to be regenerated.

To generate a new schema, use the management command

python manage.py export_schema_for_cypress