Compare commits
No commits in common. "master" and "10884-dockerify" have entirely different histories.
master
...
10884-dock
7 changed files with 17 additions and 135 deletions
|
|
@ -1,8 +1,5 @@
|
||||||
# CHANGELOG.md
|
# CHANGELOG.md
|
||||||
|
|
||||||
## 2.1 (2022-09-29)
|
|
||||||
- issue#11013: non-public entries appearing as public
|
|
||||||
|
|
||||||
## 2.0 (2022-09-19) Dockerify https://redmine.ungleich.ch/issues/10884
|
## 2.0 (2022-09-19) Dockerify https://redmine.ungleich.ch/issues/10884
|
||||||
|
|
||||||
Steps:
|
Steps:
|
||||||
|
|
|
||||||
|
|
@ -42,14 +42,11 @@ RUN addgroup -S app && adduser -S app -G app
|
||||||
|
|
||||||
# create the appropriate directories
|
# create the appropriate directories
|
||||||
ENV HOME=/home/app
|
ENV HOME=/home/app
|
||||||
ENV APP_HOME=/home/app/gmba_django
|
ENV APP_HOME=/home/app/app
|
||||||
RUN mkdir $APP_HOME
|
RUN mkdir $APP_HOME
|
||||||
RUN mkdir $APP_HOME/static
|
RUN mkdir $APP_HOME/static
|
||||||
RUN mkdir $APP_HOME/media
|
RUN mkdir $APP_HOME/media
|
||||||
|
WORKDIR $APP_HOME
|
||||||
#ADD gmba_django /data/app
|
|
||||||
|
|
||||||
#WORKDIR /data/app/gmba_django
|
|
||||||
|
|
||||||
# install dependencies
|
# install dependencies
|
||||||
RUN apk update && apk add libpq
|
RUN apk update && apk add libpq
|
||||||
|
|
@ -58,16 +55,12 @@ COPY --from=builder /usr/src/gmba_django/requirements.txt .
|
||||||
RUN pip install --no-cache /wheels/*
|
RUN pip install --no-cache /wheels/*
|
||||||
|
|
||||||
# copy entrypoint.prod.sh
|
# copy entrypoint.prod.sh
|
||||||
COPY ./entrypoint.prod.sh /entrypoint.prod.sh
|
COPY ./entrypoint.prod.sh .
|
||||||
COPY ./init.sh /init.sh
|
RUN sed -i 's/\r$//g' $APP_HOME/entrypoint.prod.sh
|
||||||
RUN sed -i 's/\r$//g' /entrypoint.prod.sh
|
RUN chmod +x $APP_HOME/entrypoint.prod.sh
|
||||||
RUN chmod +x /entrypoint.prod.sh
|
|
||||||
|
|
||||||
# copy project
|
# copy project
|
||||||
#COPY . $APP_HOME
|
COPY . $APP_HOME
|
||||||
|
|
||||||
ADD . /home/app/gmba_django
|
|
||||||
WORKDIR /home/app/gmba_django
|
|
||||||
|
|
||||||
# chown all the files to the app user
|
# chown all the files to the app user
|
||||||
RUN chown -R app:app $APP_HOME
|
RUN chown -R app:app $APP_HOME
|
||||||
|
|
@ -75,11 +68,8 @@ RUN chown -R app:app $APP_HOME
|
||||||
# change to the app user
|
# change to the app user
|
||||||
USER app
|
USER app
|
||||||
|
|
||||||
#RUN python manage.py collectstatic --noinput
|
RUN python manage.py collectstatic --noinput
|
||||||
|
|
||||||
# run entrypoint.prod.sh
|
# run entrypoint.prod.sh
|
||||||
ENTRYPOINT ["/entrypoint.prod.sh"]
|
ENTRYPOINT ["./entrypoint.prod.sh"]
|
||||||
|
|
||||||
EXPOSE 8000
|
|
||||||
|
|
||||||
CMD ["gunicorn", "--bind", "[::]:8000", "--chdir", "/home/app/gmba_django", "--workers", "3", "gmba_django.wsgi:application"]
|
|
||||||
|
|
|
||||||
100
app/admin.py
100
app/admin.py
|
|
@ -9,7 +9,6 @@ from django.http import HttpResponse
|
||||||
import csv
|
import csv
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.contrib.admin.widgets import AutocompleteSelect
|
from django.contrib.admin.widgets import AutocompleteSelect
|
||||||
from django.contrib import messages # import messages
|
|
||||||
|
|
||||||
|
|
||||||
class autocomplete_fields_form(forms.ModelForm):
|
class autocomplete_fields_form(forms.ModelForm):
|
||||||
|
|
@ -125,81 +124,6 @@ class PersonAdmin(admin.ModelAdmin):
|
||||||
'country', 'organisation_english', 'organisation_2', 'organisation_3', 'acronym')
|
'country', 'organisation_english', 'organisation_2', 'organisation_3', 'acronym')
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
def get_actions(self, request):
|
|
||||||
actions = super().get_actions(request)
|
|
||||||
if 'delete_selected' in actions:
|
|
||||||
del actions['delete_selected']
|
|
||||||
return actions
|
|
||||||
|
|
||||||
def delete_model(self, request, obj):
|
|
||||||
self.delete_person(request, obj)
|
|
||||||
return super(PersonAdmin, self).delete_model(request, obj)
|
|
||||||
|
|
||||||
def delete_person(self, request, obj):
|
|
||||||
taxa_people = TaxaPeople.objects.filter(person=obj.id)
|
|
||||||
for i in taxa_people:
|
|
||||||
i.delete()
|
|
||||||
ranges_people = RangesPeople.objects.filter(person=obj.id)
|
|
||||||
for i in ranges_people:
|
|
||||||
i.delete()
|
|
||||||
resources_people = ResourcesPeople.objects.filter(person=obj.id)
|
|
||||||
for i in resources_people:
|
|
||||||
i.delete()
|
|
||||||
scales_people = ScalesPeople.objects.filter(person=obj.id)
|
|
||||||
for i in scales_people:
|
|
||||||
i.delete()
|
|
||||||
people_function = PeopleFunction.objects.filter(person=obj.id)
|
|
||||||
for i in people_function:
|
|
||||||
i.delete()
|
|
||||||
people_range = PeopleRange.objects.filter(person=obj.id)
|
|
||||||
for i in people_range:
|
|
||||||
i.delete()
|
|
||||||
people_resources = PeopleResource.objects.filter(person=obj.id)
|
|
||||||
for i in people_resources:
|
|
||||||
i.delete()
|
|
||||||
fields_people = FieldsPeople.objects.filter(person=obj.id)
|
|
||||||
for i in fields_people:
|
|
||||||
i.delete()
|
|
||||||
methods_people = MethodsPeople.objects.filter(person=obj.id)
|
|
||||||
for i in methods_people:
|
|
||||||
i.delete()
|
|
||||||
|
|
||||||
def delete_persons(self, request, obj):
|
|
||||||
for o in obj.all():
|
|
||||||
taxa_people = TaxaPeople.objects.filter(person=o.id)
|
|
||||||
for i in taxa_people:
|
|
||||||
i.delete()
|
|
||||||
ranges_people = RangesPeople.objects.filter(person=o.id)
|
|
||||||
for i in ranges_people:
|
|
||||||
i.delete()
|
|
||||||
resources_people = ResourcesPeople.objects.filter(person=o.id)
|
|
||||||
for i in resources_people:
|
|
||||||
i.delete()
|
|
||||||
scales_people = ScalesPeople.objects.filter(person=o.id)
|
|
||||||
for i in scales_people:
|
|
||||||
i.delete()
|
|
||||||
people_function = PeopleFunction.objects.filter(person=o.id)
|
|
||||||
for i in people_function:
|
|
||||||
i.delete()
|
|
||||||
people_range = PeopleRange.objects.filter(person=o.id)
|
|
||||||
for i in people_range:
|
|
||||||
i.delete()
|
|
||||||
people_resources = PeopleResource.objects.filter(person=o.id)
|
|
||||||
for i in people_resources:
|
|
||||||
i.delete()
|
|
||||||
fields_people = FieldsPeople.objects.filter(person=o.id)
|
|
||||||
for i in fields_people:
|
|
||||||
i.delete()
|
|
||||||
methods_people = MethodsPeople.objects.filter(person=o.id)
|
|
||||||
for i in methods_people:
|
|
||||||
i.delete()
|
|
||||||
o.delete()
|
|
||||||
messages.success(request, "Successfully deleted")
|
|
||||||
|
|
||||||
delete_persons.short_description = 'Delete Person & Related Fields'
|
|
||||||
|
|
||||||
actions = [download_csv, delete_persons]
|
|
||||||
|
|
||||||
|
|
||||||
class ResourceKeywordInline(admin.TabularInline):
|
class ResourceKeywordInline(admin.TabularInline):
|
||||||
autocomplete_fields = ['keyword']
|
autocomplete_fields = ['keyword']
|
||||||
|
|
@ -268,26 +192,7 @@ class ResourceAdmin(admin.ModelAdmin):
|
||||||
del actions['delete_selected']
|
del actions['delete_selected']
|
||||||
return actions
|
return actions
|
||||||
|
|
||||||
def delete_model(self, request, obj):
|
|
||||||
self.delete_resource(request, obj)
|
|
||||||
return super(ResourceAdmin, self).delete_model(request, obj)
|
|
||||||
|
|
||||||
def delete_resource(self, request, obj):
|
def delete_resource(self, request, obj):
|
||||||
resource_keyword = ResourceKeyword.objects.filter(resource=obj.id)
|
|
||||||
for i in resource_keyword:
|
|
||||||
i.delete()
|
|
||||||
resource_range = ResourceRange.objects.filter(resource_title=obj.id)
|
|
||||||
for i in resource_range:
|
|
||||||
i.delete()
|
|
||||||
resource_people = ResourcesPeople.objects.filter(resource=obj.id)
|
|
||||||
for i in resource_people:
|
|
||||||
i.delete()
|
|
||||||
resource_people_resource = PeopleResource.objects.filter(
|
|
||||||
resource=obj.id)
|
|
||||||
for i in resource_people_resource:
|
|
||||||
i.delete()
|
|
||||||
|
|
||||||
def delete_resources(self, request, obj):
|
|
||||||
for o in obj.all():
|
for o in obj.all():
|
||||||
resource_keyword = ResourceKeyword.objects.filter(resource=o.id)
|
resource_keyword = ResourceKeyword.objects.filter(resource=o.id)
|
||||||
for i in resource_keyword:
|
for i in resource_keyword:
|
||||||
|
|
@ -303,10 +208,9 @@ class ResourceAdmin(admin.ModelAdmin):
|
||||||
for i in resource_people_resource:
|
for i in resource_people_resource:
|
||||||
i.delete()
|
i.delete()
|
||||||
o.delete()
|
o.delete()
|
||||||
messages.success(request, "Successfully deleted")
|
delete_resource.short_description = 'Delete Resource & Related Fields'
|
||||||
delete_resources.short_description = 'Delete Resource & Related Fields'
|
|
||||||
|
|
||||||
actions = [download_csv, delete_resources]
|
actions = [download_csv, delete_resource]
|
||||||
|
|
||||||
|
|
||||||
class RangeNameTranslationInline(admin.TabularInline):
|
class RangeNameTranslationInline(admin.TabularInline):
|
||||||
|
|
|
||||||
|
|
@ -213,10 +213,10 @@ class SearchView(View):
|
||||||
per_page = int(self.request.GET.get('per_page', 10))
|
per_page = int(self.request.GET.get('per_page', 10))
|
||||||
q = self.request.GET.get('q', '').strip()
|
q = self.request.GET.get('q', '').strip()
|
||||||
if not q or len(q) < 3:
|
if not q or len(q) < 3:
|
||||||
query_set = Person.objects.filter(profile_on_web=True).all()
|
query_set = Person.objects.all()
|
||||||
else:
|
else:
|
||||||
query = reduce(operator.or_, (Q(field_indexer__icontains=item) for item in q.split(" ")))
|
query = reduce(operator.or_, (Q(field_indexer__icontains=item) for item in q.split(" ")))
|
||||||
query_set = Person.objects.filter(query).filter(profile_on_web=True)
|
query_set = Person.objects.filter(query)
|
||||||
|
|
||||||
q_country = self.request.GET.get('country', '')
|
q_country = self.request.GET.get('country', '')
|
||||||
q_range = self.request.GET.get('range', '')
|
q_range = self.request.GET.get('range', '')
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,8 @@ services:
|
||||||
dockerfile: Dockerfile.prod
|
dockerfile: Dockerfile.prod
|
||||||
command: gunicorn gmba_django.wsgi:application --bind [::]:8000
|
command: gunicorn gmba_django.wsgi:application --bind [::]:8000
|
||||||
volumes:
|
volumes:
|
||||||
- static_volume:/data/app/app/static
|
- static_volume:/home/app/app/static
|
||||||
- media_volume:/data/app/app/media
|
- media_volume:/home/app/app/media
|
||||||
expose:
|
expose:
|
||||||
- 8000
|
- 8000
|
||||||
env_file:
|
env_file:
|
||||||
|
|
@ -18,14 +18,14 @@ services:
|
||||||
db:
|
db:
|
||||||
image: postgres:13.0-alpine
|
image: postgres:13.0-alpine
|
||||||
volumes:
|
volumes:
|
||||||
- postgres_data:/data/var/lib/postgresql/data/
|
- postgres_data:/var/lib/postgresql/data/
|
||||||
env_file:
|
env_file:
|
||||||
- ./.env.prod
|
- ./.env.prod
|
||||||
nginx:
|
nginx:
|
||||||
build: ./nginx
|
build: ./nginx
|
||||||
volumes:
|
volumes:
|
||||||
- static_volume:/data/app/app/static
|
- static_volume:/home/app/app/static
|
||||||
- media_volume:/data/app/app/media
|
- media_volume:/home/app/app/media
|
||||||
ports:
|
ports:
|
||||||
- 1337:80
|
- 1337:80
|
||||||
depends_on:
|
depends_on:
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,6 @@ DATABASES = {
|
||||||
|
|
||||||
SECURE_SSL_REDIRECT = True
|
SECURE_SSL_REDIRECT = True
|
||||||
|
|
||||||
# See https://docs.djangoproject.com/en/2.2/ref/settings/#secure-proxy-ssl-header
|
|
||||||
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
|
|
||||||
|
|
||||||
SESSION_COOKIE_SECURE = True
|
SESSION_COOKIE_SECURE = True
|
||||||
|
|
||||||
CSRF_COOKIE_SECURE = True
|
CSRF_COOKIE_SECURE = True
|
||||||
|
|
|
||||||
6
init.sh
6
init.sh
|
|
@ -1,6 +0,0 @@
|
||||||
#!/bin/ash
|
|
||||||
#python manage.py migrate
|
|
||||||
|
|
||||||
python manage.py collectstatic --noinput
|
|
||||||
#
|
|
||||||
#gunicorn gmba_django.wsgi:application --bind [::]:8000
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue