Merge branch 'dev_dockerfile' into 'master'

Add support for developers

See merge request !18
This commit is contained in:
James Polley 2017-09-03 07:51:25 +00:00
commit 008c33a221
8 changed files with 113 additions and 4 deletions

View file

@ -1,5 +1,7 @@
symposion_app symposion_app
=============== =============
.. contents::
At this time, considerations have not been made to have the django project run At this time, considerations have not been made to have the django project run
without additional infrastructure. without additional infrastructure.
@ -40,8 +42,36 @@ You may consider testing with testshib.
Configure signing and encryption keys, and configure them in the settings.py Configure signing and encryption keys, and configure them in the settings.py
VirtualEnv Running a dev instance in Docker
~~~~~~~~~~ --------------------------------
Assuming you have docker installed and working on your machine::
./make_dev_container.sh
will build you a container and run through the initial setup steps.
The last stage interactively creates a superuser account: you'll need
to interact with this for it to finish.
Once this has completed, you can hit http://localhost:28000/admin to
log into the admin interface. Once you're logged in,
http://localhost:28000 will take you to the dashboard.
Note that when you do this you're logged in as a superuser, so what
you see will be different from what a normal user will see.
Making migrations
~~~~~~~~~~~~~~~~~
If you make changes to the data model, you'll need to run "manage.py
makemigrations" to create a matching migration file. If you're on a
mac, or a system without python3, this can be difficult. In such a
case, the ``makemigrations.sh`` script takes advantaged of a docker
container that's slightly modified, and runs the makemigration action
on the files in your working directory.
Running a dev instance in a VirtualEnv
--------------------------------------
Not all things are lovely, so we use constraints to force the versions we Not all things are lovely, so we use constraints to force the versions we
we wish for without having to do anything ugly. This may require a newer we wish for without having to do anything ugly. This may require a newer
@ -54,6 +84,9 @@ with a python3 interpreter.
- ``source ./venv/bin/activate`` - ``source ./venv/bin/activate``
- ``pip install -c constraints.txt -r requirements.txt`` - ``pip install -c constraints.txt -r requirements.txt``
Once your dev instance is up and running
----------------------------------------
Pre-post-start configuration Pre-post-start configuration
~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@ -72,6 +105,9 @@ Shut down and now run:
Now you can run the system and see how it goes. Now you can run the system and see how it goes.
Admin tasks
-----------
Admin Credentials Admin Credentials
~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~

View file

@ -0,0 +1,22 @@
FROM python:3.6
VOLUME /source
COPY constraints.txt requirements.txt /setup/
RUN set -ex \
&& buildDeps=' \
libmysqlclient-dev \
libffi-dev \
libfreetype6-dev \
libjpeg-dev \
libwebp-dev \
libpng-dev \
liblcms2-dev \
zlib1g-dev \
libmemcached-dev \
libsasl2-dev \
' \
&& apt-get update \
&& apt-get install -y git xmlsec1 libmysqlclient18 \
&& apt-get install -y $buildDeps --no-install-recommends
RUN pip install -c /setup/constraints.txt -r /setup/requirements.txt
CMD ["python","/source/manage.py", "makemigrations"]

7
docker/laptop-mode-env Normal file
View file

@ -0,0 +1,7 @@
DJANGO_SECRET_KEY=5CEA51A5-A613-4AEF-A9FB-D0A57D77C13B
STRIPE_PUBLIC_KEY=5CEA51A5-A613-4AEF-A9FB-D0A57D77C13B
STRIPE_SECRET_KEY=5CEA51A5-A613-4AEF-A9FB-D0A57D77C13B
GCS_BUCKET=5CEA51A5-A613-4AEF-A9FB-D0A57D77C13B
GOOGLE_APPLICATION_CREDENTIALS=/dev/null
DATABASE_URL=sqlite:////tmp/symposion.sqlite
SYMPOSION_DEV_MODE=LAPTOP

25
make_dev_container.sh Executable file
View file

@ -0,0 +1,25 @@
#!/bin/bash -x
CONTAINER_NAME=${1:-symposion_app}
docker image build -f docker/Dockerfile -t ${CONTAINER_NAME} .
docker container stop symposion
docker container rm symposion
docker container create --env-file docker/laptop-mode-env -p 28000:8000 --name symposion ${CONTAINER_NAME}
docker container start symposion
docker exec symposion ./manage.py migrate
docker exec symposion ./manage.py loaddata ./fixtures/*.json
docker exec symposion ./manage.py create_review_permissions
docker exec -it symposion ./manage.py createsuperuser --username root --email root@example.com
## The following sets up everything required for rego - tickets and
## t-shirts and stuff. At this stage, it's not something we want.
#docker exec symposion ./manage.py populate_inventory
set +x
echo "Now you can log into http://localhost:28000/admin"
echo "Username: root Password: the one you just typed twice"
echo "If you need to test as a non-admin user, create one at"
echo "http://localhost:28000/admin/auth/user/add/ - then log out"
echo "and log back in at http://localhost:28000"

4
makemigrations.sh Executable file
View file

@ -0,0 +1,4 @@
#!/bin/bash -x
docker image build -f docker/Dockerfile.makemigrations -t makemigrations .
docker run -it --env-file=docker/laptop-mode-env -v $(pwd):/source makemigrations

View file

@ -0,0 +1,7 @@
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
AUTHENTICATION_BACKENDS = [
'symposion.teams.backends.TeamPermissionsBackend',
'django.contrib.auth.backends.ModelBackend',
]
LOGIN_URL='/accounts/login'

View file

@ -382,3 +382,8 @@ DEFAULT_FILE_STORAGE = 'gapc_storage.storage.GoogleCloudStorage'
GAPC_STORAGE = { GAPC_STORAGE = {
'num_retries': 2, 'num_retries': 2,
} }
DEV_MODE = os.environ.get("SYMPOSION_DEV_MODE", None)
if DEV_MODE and DEV_MODE == "LAPTOP":
print("ENABLING LAPTOP MODE")
from .devmode_settings import *

View file

@ -33,6 +33,9 @@ urlpatterns = [
if settings.DEBUG: if settings.DEBUG:
import debug_toolbar import debug_toolbar
urlpatterns.insert(0, url(r'^__debug__/', include(debug_toolbar.urls))) urlpatterns.insert(0, url(r'^__debug__/', include(debug_toolbar.urls)))
if settings.DEV_MODE:
from django.contrib.auth.views import login, logout
urlpatterns.insert(0, url(r'^accounts/logout', logout, {'template_name': 'admin/logout.html'}))
urlpatterns.insert(0, url(r'^accounts/login', login, {'template_name': 'admin/login.html'}))
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)