From 6a809e20d9b8bf6db2c7f504aa1f5687b5dbfdfe Mon Sep 17 00:00:00 2001 From: ternera Date: Mon, 17 Nov 2025 20:12:16 -0600 Subject: [PATCH 1/2] started on docker implimentation --- .dockerignore | 34 +++++++++++++++++ DOCKER_README.md | 0 Dockerfile | 32 ++++++++++++++++ docker-compose.yml | 70 +++++++++++++++++++++++++++++++++++ docker-entrypoint.sh | 28 ++++++++++++++ editgroups/settings/docker.py | 29 +++++++++++++++ 6 files changed, 193 insertions(+) create mode 100644 .dockerignore create mode 100644 DOCKER_README.md create mode 100644 Dockerfile create mode 100644 docker-compose.yml create mode 100755 docker-entrypoint.sh create mode 100644 editgroups/settings/docker.py diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..2649130 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,34 @@ +__pycache__ +*.pyc +*.pyo +*.pyd +.Python +*.so +*.egg +*.egg-info +dist +build +.git +.gitignore +.vscode +.idea +*.swp +*.swo +*~ +.DS_Store +db.sqlite3 +*.sqlite3 +.env +venv +env +ENV +.venv +staticfiles +media +*.log +.coverage +htmlcov +.pytest_cache +.mypy_cache +node_modules +postgres_data diff --git a/DOCKER_README.md b/DOCKER_README.md new file mode 100644 index 0000000..e69de29 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3e74fdc --- /dev/null +++ b/Dockerfile @@ -0,0 +1,32 @@ +FROM python:3.11-slim + +ENV PYTHONUNBUFFERED=1 + +WORKDIR /app + +RUN apt-get update && apt-get install -y \ + postgresql-client \ + libpq-dev \ + gcc \ + libxml2-dev \ + libxslt1-dev \ + zlib1g-dev \ + git \ + netcat-openbsd \ + && rm -rf /var/lib/apt/lists/* + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt +RUN pip install --no-cache-dir psycopg2-binary + +COPY . . + +RUN mkdir -p /app/static + +EXPOSE 8000 + +COPY docker-entrypoint.sh /docker-entrypoint.sh +RUN chmod +x /docker-entrypoint.sh + +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..0fa9d18 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,70 @@ +version: '3.8' + +services: + db: + image: postgres:15 + environment: + POSTGRES_DB: editgroups + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + volumes: + - postgres_data:/var/lib/postgresql/data + ports: + - "5432:5432" + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres"] + interval: 5s + timeout: 5s + retries: 5 + + redis: + image: redis:7-alpine + ports: + - "6379:6379" + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 5s + timeout: 3s + retries: 5 + + web: + build: . + command: python manage.py runserver 0.0.0.0:8000 + volumes: + - .:/app + ports: + - "8000:8000" + environment: + - DJANGO_SETTINGS_MODULE=editgroups.settings.docker + depends_on: + db: + condition: service_healthy + redis: + condition: service_healthy + + celery: + build: . + command: celery -A editgroups worker -l info + volumes: + - .:/app + environment: + - DJANGO_SETTINGS_MODULE=editgroups.settings.docker + depends_on: + - db + - redis + - web + + celery-beat: + build: . + command: celery -A editgroups beat -l info + volumes: + - .:/app + environment: + - DJANGO_SETTINGS_MODULE=editgroups.settings.docker + depends_on: + - db + - redis + - web + +volumes: + postgres_data: diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh new file mode 100755 index 0000000..397ece3 --- /dev/null +++ b/docker-entrypoint.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +set -e + +echo "Waiting for PostgreSQL..." +while ! nc -z db 5432; do + sleep 0.1 +done +echo "PostgreSQL started" + +echo "Running migrations..." +python manage.py migrate --noinput + +echo "Collecting static files..." +python manage.py collectstatic --noinput + +echo "Creating superuser if it doesn't exist..." +python manage.py shell -c " +from django.contrib.auth import get_user_model +User = get_user_model() +if not User.objects.filter(username='admin').exists(): + User.objects.create_superuser('admin', 'admin@example.com', 'admin') + print('Superuser created: admin/admin') +else: + print('Superuser already exists') +" || true + +exec "$@" diff --git a/editgroups/settings/docker.py b/editgroups/settings/docker.py new file mode 100644 index 0000000..6274c34 --- /dev/null +++ b/editgroups/settings/docker.py @@ -0,0 +1,29 @@ +from .common import * + +DEBUG = True +ALLOWED_HOSTS = ['*'] + +SECRET_KEY = '20oj&tj8uaruseitlrise,tries,uirsetur36746209etus7e' + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.postgresql_psycopg2', + 'NAME': 'editgroups', + 'USER': 'postgres', + 'PASSWORD': 'postgres', + 'HOST': 'db', + 'PORT': '5432', + 'DISABLE_SERVER_SIDE_CURSORS': False, + } +} + +SOCIAL_AUTH_MEDIAWIKI_KEY = 'your_mediawiki_key' +SOCIAL_AUTH_MEDIAWIKI_SECRET = 'your_mediawiki_secret' +SOCIAL_AUTH_MEDIAWIKI_URL = 'https://www.wikidata.org/w/index.php' +SOCIAL_AUTH_MEDIAWIKI_CALLBACK = 'http://localhost:8000/oauth/complete/mediawiki/' + +REDIS_HOST = 'redis' +REDIS_PORT = 6379 +REDIS_DB = 0 +REDIS_PASSWORD = '' +REDIS_KEY_PREFIX = 'editgroups_' From ea6cefc1a31ad34f5e40410d4dff886bd08cd73a Mon Sep 17 00:00:00 2001 From: ternera Date: Tue, 18 Nov 2025 11:36:50 -0600 Subject: [PATCH 2/2] fixed a few bugs --- DOCKER_README.md | 0 celerybeat-schedule | Bin 0 -> 16384 bytes docker-compose.yml | 2 ++ docker-entrypoint.sh | 16 ++++++++------- editgroups/settings/docker.py | 37 +++++++++++++++++++--------------- editgroups/wsgi.py | 17 +++++++++++++++- 6 files changed, 48 insertions(+), 24 deletions(-) delete mode 100644 DOCKER_README.md create mode 100644 celerybeat-schedule diff --git a/DOCKER_README.md b/DOCKER_README.md deleted file mode 100644 index e69de29..0000000 diff --git a/celerybeat-schedule b/celerybeat-schedule new file mode 100644 index 0000000000000000000000000000000000000000..9e8fd745a64bcaa7483210b990bbf1f20b60fba3 GIT binary patch literal 16384 zcmeI(&ubGw6bJB0x-p5V^rxU!)I-HcVNpuY3dKWNET|Pl!DX`f##{ubUZTKWxAp0uX=z1Rwwb2tWV=5P$##AOL}*C~(1b8qq?)0S-n0;{f9T z;{f*o>Hz8h>Hz8h>Hz8h>HzA%e^v)Z>|M=9U1V2m@~~jzvRnS*Hkh5?+3??^N4xx_ z*RVaY-m1U>4*B~7c1Fx@r^ZeWHB&{qA2j159zW}Jms8 zQ6uHef%nqiZEb7G{eIBbbv2e`omC#ouo1~v@Qzlsn5VqG?l*WOwK{Q!);7B-zd@Z@ z*PFU73ZkGY%}8>YJmWf-ZtBJ3