diff --git a/Dockerfile b/Dockerfile index 62bd089..cafee20 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,18 +6,32 @@ # See https://github.com/nexB/federatedcode for support or download. # See https://aboutcode.org for more information about nexB OSS projects. # -FROM python:3.10 + +FROM python:3.10-slim + +ENV APP_NAME federatedcode +ENV APP_DIR /opt/$APP_NAME + # Python settings: Force unbuffered stdout and stderr (i.e. they are flushed to terminal immediately) ENV PYTHONUNBUFFERED 1 # Python settings: do not write pyc files ENV PYTHONDONTWRITEBYTECODE 1 +# Add the app dir in the Python path for entry points availability +ENV PYTHONPATH $PYTHONPATH:$APP_DIR -RUN pip install --upgrade pip +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + wait-for-it \ + git \ + && apt-get clean \ + && rm -rf /tmp/* /var/tmp/* -WORKDIR /federatedcode +WORKDIR $APP_DIR -COPY requirements.txt pyproject.toml /federatedcode/ +RUN mkdir -p /var/$APP_NAME/static/ -RUN pip install -r requirements.txt +# Keep the dependencies installation before the COPY of the app/ for proper caching +COPY setup.cfg setup.py requirements.txt pyproject.toml $APP_DIR/ +RUN pip install . -c requirements.txt -COPY . /federatedcode \ No newline at end of file +COPY . $APP_DIR diff --git a/README.rst b/README.rst index ac478d9..af39a89 100644 --- a/README.rst +++ b/README.rst @@ -9,10 +9,28 @@ security information. Quick Installation -------------------- +Run with Docker +~~~~~~~~~~~~~~~ + + +Clone FederatedCode:: + + git clone https://github.com/aboutcode-org/federatedcode.git + cd federatedcode + +Build and run:: + + docker compose build + docker compose up + + +Local development installation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + On a Debian system, use this:: sudo apt-get install python3-venv python3-dev postgresql libpq-dev build-essential - git clone https://github.com/nexB/federatedcode.git + git clone https://github.com/aboutcode-org/federatedcode.git cd federatedcode make dev envfile postgresdb make test @@ -163,9 +181,3 @@ funding is made available by the Swiss State Secretariat for Education, Research :target: https://nlnet.nl/discovery/ :height: 40 :alt: NGI Discovery logo - - - - - - diff --git a/docker-compose.yml b/docker-compose.yml index ee5a2fc..506c2a7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,43 +1,45 @@ version: '3' services: - federatedcode_db: - image: postgres:16 + db: + image: postgres:13 env_file: - docker.env volumes: - - federatedcode_db_data:/var/lib/postgresql/data/ + - db_data:/var/lib/postgresql/data/ - federatedcode: + web: build: . - command: /bin/sh -c " - apt-get update && apt-get install -y gunicorn && - python manage.py collectstatic --no-input --verbosity 0 --clear && - python manage.py migrate && - gunicorn federatedcode.wsgi:application -u nobody -g nogroup --bind :8000 --timeout 600 --workers 8" + command: wait-for-it --strict --timeout=60 db:5432 -- sh -c " + ./manage.py migrate && + ./manage.py collectstatic --no-input --verbosity 0 --clear && + gunicorn federatedcode.wsgi:application --bind :8000 --timeout 600 --workers 8" env_file: - docker.env expose: - 8000 - ports: - - "8000:8000" volumes: - - static:/var/federatedcode/static/ - /etc/federatedcode/:/etc/federatedcode/ + - static:/var/federatedcode/static/ + - workspace:/var/federatedcode/workspace/ depends_on: - - federatedcode_db + - db - federatedcode_nginx: + nginx: image: nginx + ports: + - 80:80 + - 443:443 env_file: - docker.env volumes: - - ./etc/nginx/conf.d/:/etc/nginx/conf.d + - ./etc/nginx/conf.d/:/etc/nginx/conf.d/ + - static:/var/federatedcode/static/ + - /var/www/html:/var/www/html depends_on: - - federatedcode + - web volumes: - federatedcode_db_data: - federatedcode_static: - federatedcode: - + db_data: + static: + workspace: diff --git a/docker.env b/docker.env index 2344682..3d7e295 100644 --- a/docker.env +++ b/docker.env @@ -1,4 +1,10 @@ -FEDERATEDCODE_WORKSPACE_LOCATION=/var/federatedcode +POSTGRES_DB=federatedcode +POSTGRES_USER=federatedcode +POSTGRES_PASSWORD=federatedcode + +FEDERATEDCODE_DB_HOST=db +FEDERATEDCODE_STATIC_ROOT=/var/federatedcode/static/ + +FEDERATEDCODE_WORKSPACE_LOCATION=/var/federatedcode/workspace/ FEDERATEDCODE_CLIENT_ID="" FEDERATEDCODE_CLIENT_SECRET="" -NGINX_PORT=8080 \ No newline at end of file diff --git a/docs/source/conf.py b/docs/source/conf.py index 4d4af91..174987d 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -16,7 +16,9 @@ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "federatedcode.settings") os.environ.setdefault("SECRET_KEY", "dummy secret key for autodoc rtd documentation") os.environ.setdefault("FEDERATEDCODE_CLIENT_ID", "dummy secret key for autodoc rtd documentation") -os.environ.setdefault("FEDERATEDCODE_CLIENT_SECRET", "dummy secret key for autodoc rtd documentation") +os.environ.setdefault( + "FEDERATEDCODE_CLIENT_SECRET", "dummy secret key for autodoc rtd documentation" +) sys.path.insert(0, os.path.abspath("../../.")) diff --git a/etc/nginx/conf.d/default.conf b/etc/nginx/conf.d/default.conf index eb94757..97e676c 100644 --- a/etc/nginx/conf.d/default.conf +++ b/etc/nginx/conf.d/default.conf @@ -1,5 +1,5 @@ upstream gunicorn_app { - server federatedcode:8000; + server web:8000; } server { diff --git a/federatedcode/settings.py b/federatedcode/settings.py index e70424f..2231c52 100644 --- a/federatedcode/settings.py +++ b/federatedcode/settings.py @@ -6,7 +6,7 @@ # See https://github.com/nexB/federatedcode for support or download. # See https://aboutcode.org for more information about AboutCode.org OSS projects. # -import os + import sys from pathlib import Path @@ -30,8 +30,7 @@ SECRET_KEY = env.str("SECRET_KEY") ALLOWED_HOSTS = env.list( - "ALLOWED_HOSTS", - default=[".localhost", "127.0.0.1", "[::1]", "host.docker.internal"], + "ALLOWED_HOSTS", default=[".localhost", "127.0.0.1", "[::1]", "host.docker.internal"] ) CSRF_TRUSTED_ORIGINS = env.list("CSRF_TRUSTED_ORIGINS", default=[])