diff --git a/Dockerfile b/Dockerfile index 04896ce..f0aa4ae 100644 --- a/Dockerfile +++ b/Dockerfile @@ -86,9 +86,8 @@ EOT # See . STOPSIGNAL SIGINT -COPY --from=build --chown=app:app --chmod=u+rw /app /app +COPY --from=build --chown=app:app /app /app -COPY --from=ghcr.io/astral-sh/uv:0.7.2 /uv /app/bin/uv COPY --chown=app:app --chmod=700 /scripts/entrypoint.sh /entrypoint.sh COPY --chown=app:app --chmod=700 /scripts/deploy.sh /deploy.sh COPY --chown=app:app --chmod=700 /manage.py /app/manage.py diff --git a/docker-compose.yml b/docker-compose.yml index 40ea63c..dbde604 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,41 +1,30 @@ services: web: build: . - command: bash -c "cd /code && uv pip install --editable . --no-deps && python manage.py runserver 0.0.0.0:8000" + #command: ["django-admin", "runserver", "0.0.0.0:8000"] ports: - - "8000:8000" - restart: unless-stopped - environment: - - DEBUG=true + - 8000:8000 + restart: always volumes: - ./seed:/seed:ro - - ./:/code + # DANGEROUS DUE TO DOCKERFILE PACKAGE BUILDING/INSTALLATION + # will need to use editable package instead somehow + #- ./src/pkmntrade_club:/app/lib/python3.12/site-packages/pkmntrade_club:ro depends_on: db: condition: service_healthy - redis: - condition: service_started celery: build: . - command: bash -c "cd /code && uv pip install --editable . --no-deps && celery -A pkmntrade_club.django_project worker -l INFO -B -E" - restart: unless-stopped - volumes: - - ./:/code + command: ["celery", "-A", "pkmntrade_club.django_project", "worker", "-l", "INFO", "-B", "-E"] + restart: always depends_on: db: condition: service_healthy - redis: - condition: service_started redis: image: redis:latest restart: always ports: - 6379:6379 - healthcheck: - test: ["CMD", "redis-cli", "ping"] - interval: 10s - timeout: 5s - retries: 5 db: image: postgres:16 restart: always @@ -48,5 +37,6 @@ services: interval: 10s timeout: 5s retries: 5 + volumes: postgres_data: \ No newline at end of file diff --git a/scripts/entrypoint.sh b/scripts/entrypoint.sh index e6e194f..3e43ed2 100755 --- a/scripts/entrypoint.sh +++ b/scripts/entrypoint.sh @@ -8,8 +8,10 @@ fi /deploy.sh +# show command version before running it +$1 --version + if [ "$1" == "granian" ]; then - granian --version echo "Appending static files path to granian command (requires granian >= 2.3.0)" STATIC_ROOT=$(python -c 'import os; import pkmntrade_club; from django.conf import settings; print(settings.STATIC_ROOT)') set -- "$@" --static-path-mount "$STATIC_ROOT" diff --git a/scripts/prebuild.sh b/scripts/prebuild.sh index c6f540b..93e436c 100755 --- a/scripts/prebuild.sh +++ b/scripts/prebuild.sh @@ -1,12 +1,11 @@ #!/bin/bash -cd src/pkmntrade_club/ - # Remove all files in staticfiles except .gitkeep if [ -d "staticfiles" ]; then find staticfiles -type f ! -name '.gitkeep' -delete + find staticfiles -type d -empty -delete fi # Build the tailwind theme css -cd theme/static_src +cd src/pkmntrade_club/theme/static_src npm install . && npm run build \ No newline at end of file diff --git a/scripts/reset-db_make-migrations_seed-data.sh b/scripts/reset-db_make-migrations_seed-data.sh index 5ee4d66..406e185 100755 --- a/scripts/reset-db_make-migrations_seed-data.sh +++ b/scripts/reset-db_make-migrations_seed-data.sh @@ -9,14 +9,18 @@ source .env set +a uv run manage.py makemigrations --noinput -echo "Resetting dev database... " +echo "Resetting database... " docker compose down \ && docker volume rm -f pkmntradeclub_postgres_data \ && ./scripts/rebuild-and-run.sh # Wait for the database to be ready. -echo "Waiting 15 seconds for migrations to be auto-run..." +echo "Waiting 15 seconds for the database to be ready, and migrations to be autorun..." sleep 15 + +echo "Creating cache table..." +docker compose exec -it web bash -c "django-admin createcachetable django_cache" + echo "Loading seed data..." docker compose exec -it web bash -c "django-admin loaddata /seed/0*" diff --git a/server/docker-compose_staging.yml b/server/docker-compose_staging.yml index 90020bc..30cf1f4 100644 --- a/server/docker-compose_staging.yml +++ b/server/docker-compose_staging.yml @@ -7,17 +7,16 @@ services: web-staging: <<: *common environment: - - DEBUG=False - - DISABLE_SIGNUPS=True - - PUBLIC_HOST=staging.pkmntrade.club - - ALLOWED_HOSTS=staging.pkmntrade.club,127.0.0.1 + - DEBUG=False + - DISABLE_SIGNUPS=True + - PUBLIC_HOST=staging.pkmntrade.club labels: - "enable_gatekeeper=true" deploy: mode: replicated replicas: 2 # healthcheck: - # test: ["CMD", "curl", "-f", "http://127.0.0.1:8000/health"] + # test: ["CMD", "curl", "-f", "http://127.0.0.1:8000"] # interval: 30s # timeout: 10s # retries: 3 @@ -25,8 +24,7 @@ services: celery-staging: <<: *common environment: - - DEBUG=False - - DISABLE_SIGNUPS=True - - PUBLIC_HOST=staging.pkmntrade.club - - ALLOWED_HOSTS=staging.pkmntrade.club,127.0.0.1 + - DEBUG=False + - DISABLE_SIGNUPS=True + - PUBLIC_HOST=staging.pkmntrade.club command: ["celery", "-A", "pkmntrade_club.django_project", "worker", "-l", "INFO", "-B", "-E"] \ No newline at end of file diff --git a/server/docker-compose_web.yml b/server/docker-compose_web.yml index 6d453e0..8ee6cac 100644 --- a/server/docker-compose_web.yml +++ b/server/docker-compose_web.yml @@ -9,18 +9,18 @@ services: image: ghcr.io/xe/x/httpdebug entrypoint: ["/ko-app/httpdebug", "--bind", ":8000"] #image: badbl0cks/pkmntrade-club:stable + #command: ["granian", "--interface", "wsgi", "pkmntrade_club.django_project.wsgi:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "1", "--workers-kill-timeout", "180", "--access-log"] environment: - DEBUG=False - DISABLE_SIGNUPS=True - PUBLIC_HOST=pkmntrade.club - - ALLOWED_HOSTS=pkmntrade.club,127.0.0.1 labels: - "enable_gatekeeper=true" deploy: mode: replicated replicas: 4 # healthcheck: - # test: ["CMD", "curl", "-f", "http://127.0.0.1:8000/health"] + # test: ["CMD", "curl", "-f", "http://127.0.0.1:8000"] # interval: 30s # timeout: 10s # retries: 3 @@ -32,5 +32,4 @@ services: # - DEBUG=False # - DISABLE_SIGNUPS=True # - PUBLIC_HOST=pkmntrade.club - # - ALLOWED_HOSTS=pkmntrade.club,127.0.0.1 # command: ["celery", "-A", "pkmntrade_club.django_project", "worker", "-l", "INFO", "-B", "-E"] \ No newline at end of file diff --git a/src/pkmntrade_club/home/urls.py b/src/pkmntrade_club/home/urls.py index 9dadbe0..c135f7a 100644 --- a/src/pkmntrade_club/home/urls.py +++ b/src/pkmntrade_club/home/urls.py @@ -1,6 +1,6 @@ from django.urls import path -from .views import HomePageView +from .views import HomePageView, HealthCheckView urlpatterns = [ path("", HomePageView.as_view(), name="home"), diff --git a/src/pkmntrade_club/home/views.py b/src/pkmntrade_club/home/views.py index cc05847..cdf2449 100644 --- a/src/pkmntrade_club/home/views.py +++ b/src/pkmntrade_club/home/views.py @@ -139,3 +139,29 @@ class HomePageView(TemplateView): def get(self, request, *args, **kwargs): """Override get method to add caching""" return super().get(request, *args, **kwargs) + +class HealthCheckView(View): + def get(self, request, *args, **kwargs): + + try: + from django.db import connection + connection.cursor().execute("SELECT 1") + except Exception as e: + return HttpResponse("Database connection failed", status=500) + + try: + from pkmntrade_club.trades.models import TradeOffer + with contextlib.redirect_stdout(None): + print(TradeOffer.objects.count()) + except Exception as e: + return HttpResponse("DB models not reachable, but db is reachable", status=500) + + try: + from django.core.cache import cache + cache.set("test", "test") + with contextlib.redirect_stdout(None): + print(cache.get("test")) + except Exception as e: + return HttpResponse("Cache not reachable", status=500) + + return HttpResponse("OK/HEALTHY") diff --git a/src/pkmntrade_club/static/js/alpinejs.collapse-3.14.8.min.js b/src/pkmntrade_club/static/js/alpinejs.collapse@3.14.8.min.js similarity index 100% rename from src/pkmntrade_club/static/js/alpinejs.collapse-3.14.8.min.js rename to src/pkmntrade_club/static/js/alpinejs.collapse@3.14.8.min.js diff --git a/src/pkmntrade_club/static/js/alpinejs-3.14.8.min.js b/src/pkmntrade_club/static/js/alpinejs@3.14.8.min.js similarity index 100% rename from src/pkmntrade_club/static/js/alpinejs-3.14.8.min.js rename to src/pkmntrade_club/static/js/alpinejs@3.14.8.min.js diff --git a/src/pkmntrade_club/static/js/count-v4.js b/src/pkmntrade_club/static/js/count@v4.js similarity index 100% rename from src/pkmntrade_club/static/js/count-v4.js rename to src/pkmntrade_club/static/js/count@v4.js diff --git a/src/pkmntrade_club/static/js/floating-ui_core-1.6.9.9.min.js b/src/pkmntrade_club/static/js/floating-ui_core@1.6.9.9.min.js similarity index 100% rename from src/pkmntrade_club/static/js/floating-ui_core-1.6.9.9.min.js rename to src/pkmntrade_club/static/js/floating-ui_core@1.6.9.9.min.js diff --git a/src/pkmntrade_club/static/js/floating-ui_dom-1.6.13.13.min.js b/src/pkmntrade_club/static/js/floating-ui_dom@1.6.13.13.min.js similarity index 100% rename from src/pkmntrade_club/static/js/floating-ui_dom-1.6.13.13.min.js rename to src/pkmntrade_club/static/js/floating-ui_dom@1.6.13.13.min.js diff --git a/src/pkmntrade_club/theme/templates/base.html b/src/pkmntrade_club/theme/templates/base.html index 7098131..9279351 100644 --- a/src/pkmntrade_club/theme/templates/base.html +++ b/src/pkmntrade_club/theme/templates/base.html @@ -38,8 +38,8 @@ - - + + @@ -130,13 +130,13 @@ - + - + - - + + {% block javascript %}{% endblock %}