Skip to content

Commit cc000a4

Browse files
committed
feat: containerized apps
1 parent 862cb7a commit cc000a4

File tree

10 files changed

+570
-75
lines changed

10 files changed

+570
-75
lines changed

.dockerignore

Lines changed: 73 additions & 0 deletions
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/

.gitignore

Lines changed: 2 additions & 0 deletions
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

Dockerfile

Lines changed: 67 additions & 0 deletions
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 '-'"]

docker-compose.yml

Lines changed: 40 additions & 0 deletions
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

tests/app/idp/idp/settings.py

Lines changed: 82 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,94 @@
1010
https://docs.djangoproject.com/en/4.2/ref/settings/
1111
"""
1212

13+
import environ
1314
import os
1415
from pathlib import Path
1516

1617

18+
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=(str, """
30+
-----BEGIN RSA PRIVATE KEY-----
31+
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
80+
-----END RSA PRIVATE KEY-----
81+
"""),
82+
OAUTH2_PROVIDER_SCOPES=(dict, {"openid": "OpenID Connect scope" }),
83+
OAUTH2_PROVIDER_ALLOWED_SCHEMES=(list, ["https", "http"]),
84+
OAUTHLIB_INSECURE_TRANSPORT=(bool, "1"),
85+
STATIC_ROOT=(str, BASE_DIR / "static"),
86+
STATIC_URL=(str, "static/"),
87+
TEMPLATES_DIRS=(list, [BASE_DIR / "templates"]),
88+
89+
)
2090

2191
# Quick-start development settings - unsuitable for production
2292
# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/
2393

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

2797
# SECURITY WARNING: don't run with debug turned on in production!
28-
DEBUG = True
98+
DEBUG = env('DEBUG')
2999

30-
ALLOWED_HOSTS = []
100+
ALLOWED_HOSTS = env('ALLOWED_HOSTS')
31101

32102

33103
# Application definition
@@ -60,7 +130,7 @@
60130
TEMPLATES = [
61131
{
62132
"BACKEND": "django.template.backends.django.DjangoTemplates",
63-
"DIRS": [BASE_DIR / "templates"],
133+
"DIRS": env("TEMPLATES_DIRS"),
64134
"APP_DIRS": True,
65135
"OPTIONS": {
66136
"context_processors": [
@@ -80,10 +150,7 @@
80150
# https://docs.djangoproject.com/en/4.2/ref/settings/#databases
81151

82152
DATABASES = {
83-
"default": {
84-
"ENGINE": "django.db.backends.sqlite3",
85-
"NAME": BASE_DIR / "db.sqlite3",
86-
}
153+
"default": env.db(),
87154
}
88155

89156

@@ -120,78 +187,26 @@
120187

121188
# Static files (CSS, JavaScript, Images)
122189
# https://docs.djangoproject.com/en/4.2/howto/static-files/
123-
124-
STATIC_URL = "static/"
190+
STATIC_ROOT = env("STATIC_ROOT")
191+
STATIC_URL = env("STATIC_URL")
125192

126193
# Default primary key field type
127194
# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field
128195

129196
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
130197

131198
OAUTH2_PROVIDER = {
132-
"OIDC_ENABLED": True,
133-
"OIDC_RP_INITIATED_LOGOUT_ENABLED": True,
199+
"OIDC_ENABLED": env("OAUTH2_PROVIDER_OIDC_ENABLED"),
200+
"OIDC_RP_INITIATED_LOGOUT_ENABLED": env("OAUTH2_PROVIDER_OIDC_RP_INITIATED_LOGOUT_ENABLED"),
134201
# this key is just for out test app, you should never store a key like this in a production environment.
135-
"OIDC_RSA_PRIVATE_KEY": """
136-
-----BEGIN RSA PRIVATE KEY-----
137-
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
186-
-----END RSA PRIVATE KEY-----
187-
""",
202+
"OIDC_RSA_PRIVATE_KEY": env("OAUTH2_PROVIDER_OIDC_RSA_PRIVATE_KEY"),
188203
"SCOPES": {
189204
"openid": "OpenID Connect scope",
190205
},
191-
"ALLOWED_SCHEMES": ["https", "http"],
206+
"ALLOWED_SCHEMES": env("OAUTH2_PROVIDER_ALLOWED_SCHEMES"),
192207
}
193208
# needs to be set to allow cors requests from the test app, along with ALLOWED_SCHEMES=["http"]
194-
os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1"
209+
os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = env("OAUTHLIB_INSECURE_TRANSPORT")
195210

196211
LOGGING = {
197212
"version": 1,

0 commit comments

Comments
 (0)