Skip to content

Commit 133ba85

Browse files
authored
feat: containerized apps (#1366)
1 parent 9a862fc commit 133ba85

10 files changed

+582
-85
lines changed

Diff for: .dockerignore

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
venv
2+
__pycache__
3+
.tox
4+
.github
5+
.vscode
6+
.django_oauth_toolkit.egg-info
7+
.coverage
8+
coverage.xml
9+
10+
# every time we change this we need to do the COPY . /code and
11+
# RUN pip install -r requirements.txt again
12+
# so don't include the Dockerfile in the context.
13+
Dockerfile
14+
docker-compose.yml
15+
16+
17+
# from .gitignore
18+
*.py[cod]
19+
20+
*.swp
21+
22+
# C extensions
23+
*.so
24+
25+
# Packages
26+
*.egg
27+
*.egg-info
28+
dist
29+
build
30+
eggs
31+
parts
32+
bin
33+
var
34+
sdist
35+
develop-eggs
36+
.installed.cfg
37+
lib
38+
lib64
39+
__pycache__
40+
41+
# Installer logs
42+
pip-log.txt
43+
44+
# Unit test / coverage reports
45+
.cache
46+
.pytest_cache
47+
.coverage
48+
.tox
49+
.pytest_cache/
50+
nosetests.xml
51+
52+
# Translations
53+
*.mo
54+
55+
# Mr Developer
56+
.mr.developer.cfg
57+
.project
58+
.pydevproject
59+
60+
# PyCharm stuff
61+
.idea
62+
63+
# Sphinx build dir
64+
_build
65+
66+
# Sqlite database files
67+
*.sqlite
68+
69+
/venv/
70+
/coverage.xml
71+
72+
db.sqlite3
73+
venv/

Diff for: .gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,5 @@ _build
5454

5555
db.sqlite3
5656
venv/
57+
58+
/tests/app/idp/static

Diff for: Dockerfile

+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
# syntax=docker/dockerfile:1.6.0
2+
# this Dockerfile is located at the root so the build context
3+
# includes oauth2_provider which is a requirement of the
4+
# tests/app/idp. This way we build images with the source
5+
# code from the repos for validation before publishing packages.
6+
7+
FROM python:3.11.6-slim as builder
8+
9+
ENV PYTHONDONTWRITEBYTECODE 1
10+
ENV PYTHONUNBUFFERED 1
11+
12+
ENV DEBUG=False
13+
ENV ALLOWED_HOSTS="*"
14+
ENV TEMPLATES_DIRS="/data/templates"
15+
ENV STATIC_ROOT="/data/static"
16+
ENV DATABASE_URL="sqlite:////data/db.sqlite3"
17+
18+
RUN apt-get update
19+
# Build Deps
20+
RUN apt-get install -y --no-install-recommends gcc libc-dev python3-dev git openssh-client libpq-dev file libev-dev
21+
# bundle code in a virtual env to make copying to the final image without all the upstream stuff easier.
22+
RUN python -m venv /opt/venv
23+
ENV PATH="/opt/venv/bin:$PATH"
24+
# need to update pip and setuptools for pep517 support required by gevent.
25+
RUN pip install --upgrade pip
26+
RUN pip install --upgrade setuptools
27+
COPY . /code
28+
WORKDIR /code/tests/app/idp
29+
RUN pip install -r requirements.txt
30+
RUN pip install gunicorn
31+
RUN python manage.py collectstatic --noinput
32+
33+
34+
35+
FROM python:3.11.6-slim
36+
37+
# allow embed sha1 at build time as release.
38+
ARG GIT_SHA1
39+
40+
LABEL org.opencontainers.image.authors="https://jazzband.co/projects/django-oauth-toolkit"
41+
LABEL org.opencontainers.image.source="https://github.com/jazzband/django-oauth-toolkit"
42+
LABEL org.opencontainers.image.revision=${GIT_SHA1}
43+
44+
45+
ENV SENTRY_RELEASE=${GIT_SHA1}
46+
47+
# disable debug mode, but allow all hosts by default when running in docker
48+
ENV DEBUG=False
49+
ENV ALLOWED_HOSTS="*"
50+
ENV TEMPLATES_DIRS="/data/templates"
51+
ENV STATIC_ROOT="/data/static"
52+
ENV DATABASE_URL="sqlite:////data/db.sqlite3"
53+
54+
55+
56+
57+
COPY --from=builder /opt/venv /opt/venv
58+
ENV PATH="/opt/venv/bin:$PATH"
59+
COPY --from=builder /code /code
60+
RUN mkdir -p /code/tests/app/idp/static /code/tests/app/idp/templates
61+
WORKDIR /code/tests/app/idp
62+
RUN apt-get update && apt-get install -y \
63+
libpq5 \
64+
&& rm -rf /var/lib/apt/lists/*
65+
EXPOSE 80
66+
VOLUME ["/data" ]
67+
CMD ["gunicorn", "idp.wsgi:application", "-w 4 -b 0.0.0.0:80 --chdir=/code --worker-tmp-dir /dev/shm --timeout 120 --error-logfile '-' --log-level debug --access-logfile '-'"]

Diff for: docker-compose.yml

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
volumes:
2+
idp-data:
3+
4+
5+
x-idp: &idp
6+
image: django-oauth-toolkit/idp
7+
volumes:
8+
- idp-data:/data
9+
10+
services:
11+
idp-migrate:
12+
<<: *idp
13+
build: .
14+
command: python manage.py migrate
15+
16+
idp-loaddata:
17+
<<: *idp
18+
command: python manage.py loaddata fixtures/seed.json
19+
depends_on:
20+
idp-migrate:
21+
condition: service_completed_successfully
22+
23+
idp:
24+
<<: *idp
25+
command: gunicorn idp.wsgi:application -w 4 -b 0.0.0.0:80 --chdir=/code --timeout 120 --error-logfile '-' --log-level debug --access-logfile '-'
26+
ports:
27+
# map to dev port.
28+
- "8000:80"
29+
depends_on:
30+
idp-loaddata:
31+
condition: service_completed_successfully
32+
33+
rp:
34+
image: django-oauth-toolkit/rp
35+
build: ./tests/app/rp
36+
ports:
37+
# map to dev port.
38+
- "5173:3000"
39+
depends_on:
40+
- idp

Diff for: tests/app/idp/idp/settings.py

+84-67
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,93 @@
1313
import os
1414
from pathlib import Path
1515

16+
import environ
17+
1618

1719
# Build paths inside the project like this: BASE_DIR / 'subdir'.
1820
BASE_DIR = Path(__file__).resolve().parent.parent
1921

22+
env = environ.FileAwareEnv(
23+
DEBUG=(bool, True),
24+
ALLOWED_HOSTS=(list, []),
25+
DATABASE_URL=(str, "sqlite:///db.sqlite3"),
26+
SECRET_KEY=(str, "django-insecure-vri27@j_q62e2it4$xiy9ca!7@qgjkhhan(*zs&lz0k@yukbb3"),
27+
OAUTH2_PROVIDER_OIDC_ENABLED=(bool, True),
28+
OAUTH2_PROVIDER_OIDC_RP_INITIATED_LOGOUT_ENABLED=(bool, True),
29+
OAUTH2_PROVIDER_OIDC_RSA_PRIVATE_KEY=(
30+
str,
31+
"""
32+
-----BEGIN RSA PRIVATE KEY-----
33+
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
82+
-----END RSA PRIVATE KEY-----
83+
""",
84+
),
85+
OAUTH2_PROVIDER_SCOPES=(dict, {"openid": "OpenID Connect scope"}),
86+
OAUTH2_PROVIDER_ALLOWED_SCHEMES=(list, ["https", "http"]),
87+
OAUTHLIB_INSECURE_TRANSPORT=(bool, "1"),
88+
STATIC_ROOT=(str, BASE_DIR / "static"),
89+
STATIC_URL=(str, "static/"),
90+
TEMPLATES_DIRS=(list, [BASE_DIR / "templates"]),
91+
)
2092

2193
# Quick-start development settings - unsuitable for production
2294
# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/
2395

2496
# SECURITY WARNING: keep the secret key used in production secret!
25-
SECRET_KEY = "django-insecure-vri27@j_q62e2it4$xiy9ca!7@qgjkhhan(*zs&lz0k@yukbb3"
97+
SECRET_KEY = env("SECRET_KEY")
2698

2799
# SECURITY WARNING: don't run with debug turned on in production!
28-
DEBUG = True
100+
DEBUG = env("DEBUG")
29101

30-
ALLOWED_HOSTS = []
102+
ALLOWED_HOSTS = env("ALLOWED_HOSTS")
31103

32104

33105
# Application definition
@@ -60,7 +132,7 @@
60132
TEMPLATES = [
61133
{
62134
"BACKEND": "django.template.backends.django.DjangoTemplates",
63-
"DIRS": [BASE_DIR / "templates"],
135+
"DIRS": env("TEMPLATES_DIRS"),
64136
"APP_DIRS": True,
65137
"OPTIONS": {
66138
"context_processors": [
@@ -80,10 +152,7 @@
80152
# https://docs.djangoproject.com/en/4.2/ref/settings/#databases
81153

82154
DATABASES = {
83-
"default": {
84-
"ENGINE": "django.db.backends.sqlite3",
85-
"NAME": BASE_DIR / "db.sqlite3",
86-
}
155+
"default": env.db(),
87156
}
88157

89158

@@ -120,8 +189,8 @@
120189

121190
# Static files (CSS, JavaScript, Images)
122191
# https://docs.djangoproject.com/en/4.2/howto/static-files/
123-
124-
STATIC_URL = "static/"
192+
STATIC_ROOT = env("STATIC_ROOT")
193+
STATIC_URL = env("STATIC_URL")
125194

126195
# Default primary key field type
127196
# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field
@@ -130,69 +199,17 @@
130199

131200
OAUTH2_PROVIDER = {
132201
"OAUTH2_VALIDATOR_CLASS": "idp.oauth.CustomOAuth2Validator",
133-
"OIDC_ENABLED": True,
134-
"OIDC_RP_INITIATED_LOGOUT_ENABLED": True,
202+
"OIDC_ENABLED": env("OAUTH2_PROVIDER_OIDC_ENABLED"),
203+
"OIDC_RP_INITIATED_LOGOUT_ENABLED": env("OAUTH2_PROVIDER_OIDC_RP_INITIATED_LOGOUT_ENABLED"),
135204
# this key is just for out test app, you should never store a key like this in a production environment.
136-
"OIDC_RSA_PRIVATE_KEY": """
137-
-----BEGIN RSA PRIVATE KEY-----
138-
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
187-
-----END RSA PRIVATE KEY-----
188-
""",
205+
"OIDC_RSA_PRIVATE_KEY": env("OAUTH2_PROVIDER_OIDC_RSA_PRIVATE_KEY"),
189206
"SCOPES": {
190207
"openid": "OpenID Connect scope",
191208
},
192-
"ALLOWED_SCHEMES": ["https", "http"],
209+
"ALLOWED_SCHEMES": env("OAUTH2_PROVIDER_ALLOWED_SCHEMES"),
193210
}
194211
# needs to be set to allow cors requests from the test app, along with ALLOWED_SCHEMES=["http"]
195-
os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1"
212+
os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = env("OAUTHLIB_INSECURE_TRANSPORT")
196213

197214
LOGGING = {
198215
"version": 1,

0 commit comments

Comments
 (0)