diff --git a/.DS_Store b/.DS_Store index 9f3d78f..7f4db52 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/.drone.yml b/.drone.yml index cb9f459..04dfe5a 100644 --- a/.drone.yml +++ b/.drone.yml @@ -87,27 +87,18 @@ steps: # docker-compose up -d backend frontend # EOF - # Wdrożenie na środowisko produkcyjne - - name: deploy-production - image: kroniak/ssh-client + - name: deploy-production + image: docker:latest environment: - PROD_HOST: prodat.outbo.pl - PROD_USER: deploy - PROD_KEY: - from_secret: prod_ssh_key DRONE_REGISTRY: your-docker-registry + services: + - name: docker + image: docker:dind commands: - - mkdir -p ~/.ssh - - chmod 700 ~/.ssh - - echo "${PROD_KEY}" > ~/.ssh/id_rsa - - chmod 600 ~/.ssh/id_rsa - - scp -r ./docker-compose.prod.yml ${PROD_USER}@${PROD_HOST}:~/docker-compose.yml - - > - ssh ${PROD_USER}@${PROD_HOST} << EOF - docker login -u gitea-ci -p your-password ${DRONE_REGISTRY} - docker pull ${DRONE_REGISTRY}/web:${DRONE_COMMIT_SHA} - docker pull ${DRONE_REGISTRY}/api:${DRONE_COMMIT_SHA} - docker-compose rm --force backend - docker-compose rm --force frontend - docker-compose up -d backend frontend - EOF + - docker login -u gitea-ci -p your-password ${DRONE_REGISTRY} + - docker pull ${DRONE_REGISTRY}/web:${DRONE_COMMIT_SHA} + - docker pull ${DRONE_REGISTRY}/api:${DRONE_COMMIT_SHA} + - sed -i -e "s#COMPOSE_BACKEND_IMAGE=.*#COMPOSE_BACKEND_IMAGE=${DRONE_REGISTRY}/api:${DRONE_COMMIT_SHA}#" .env + - sed -i -e "s#COMPOSE_FRONTEND_IMAGE=.*#COMPOSE_FRONTEND_IMAGE=${DRONE_REGISTRY}/web:${DRONE_COMMIT_SHA}#" .env + - docker-compose rm --force backend frontend + - docker-compose up -d backend frontend diff --git a/api.Dockerfile b/api.Dockerfile index e15b5f2..25fcb01 100755 --- a/api.Dockerfile +++ b/api.Dockerfile @@ -1,24 +1,39 @@ FROM python:3.8 +#Ustaw zmienne środowiskowe ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 +# Zainstaluj zależności systemowe RUN apt-get update && apt-get install -y nano && rm -rf /var/lib/apt/lists/* -RUN mkdir -p /code && chown -R www-data:www-data /code -RUN mkdir -p /var/www && chown -R www-data:www-data /var/www - -USER www-data -ENV PATH /var/www/.local/bin:${PATH} - +# Ustaw katalog roboczy WORKDIR /code + +# Tworzenie wirtualnego środowiska +RUN python3 -m venv /code/venv + +# Ustaw ścieżkę do wirtualnego środowiska +ENV PATH="/code/venv/bin:$PATH" + +# Skopiuj pliki `pyproject.toml` i `poetry.lock` COPY pyproject.toml poetry.lock /code/ -RUN pip install --upgrade -U pip -RUN pip install -U poetry +# Instalacja narzędzi +RUN pip install --upgrade pip setuptools wheel + +# Instalacja poetry i zależności aplikacji +RUN pip install poetry RUN poetry config virtualenvs.create false --local -RUN poetry install --no-dev --extras "production" +RUN poetry install --only main --extras "production" + +# Zmień właściciela plików na `www-data` +RUN chown -R www-data:www-data /code + +# Przejście na użytkownika `www-data` +USER www-data + +# Domyślny punkt wejścia +CMD ["gunicorn", "--bind", "0.0.0.0:8000", "app.wsgi:application"] -COPY . /code/ -CMD exec gunicorn outbo.wsgi:application --access-logfile - --bind 0.0.0.0:8000 --workers 2 diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 56bf5f0..7125c57 100755 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -1,65 +1,82 @@ -version: "3.2" -services: +version: '3.8' + +services: db: - env_file: - - .env image: postgres:11 restart: unless-stopped + env_file: + - .env volumes: - ./db:/var/lib/postgresql/data networks: - internal-network - pgadmin: - env_file: - - .env - image: dpage/pgadmin4 - volumes: - - ./pgadmin:/var/lib/pgadmin - restart: unless-stopped - depends_on: - - db - networks: - - internal-network +# pgadmin: +# image: dpage/pgadmin4 +# restart: unless-stopped +# env_file: +# - .env +# depends_on: +# - db +# ports: +# - "5050:80" +# networks: +# - internal-network backend: + build: + context: ./evg-outbo-api + dockerfile: api.Dockerfile + image: outbo_backend:latest + restart: unless-stopped env_file: - .env - image: "${COMPOSE_BACKEND_IMAGE}" - restart: unless-stopped depends_on: - db + volumes: + - ./evg-outbo-api:/code networks: - internal-network - external-network + command: > + bash -c " + python manage.py migrate && + python manage.py collectstatic --noinput && + gunicorn --bind 0.0.0.0:8000 outbo.wsgi:application + " frontend: + build: + context: ./evg-outbo-web + dockerfile: web.Dockerfile + image: outbo_frontend:latest + restart: unless-stopped env_file: - .env - image: "${COMPOSE_FRONTEND_IMAGE}" - restart: unless-stopped depends_on: - backend + volumes: + - ./evg-outbo-web:/usr/share/nginx/html + ports: + - "3000:3000" networks: - internal-network server: - env_file: - - .env - image: "abiosoft/caddy" + image: abiosoft/caddy restart: unless-stopped - volumes: + volumes: - ./Caddyfile:/etc/Caddyfile - ./.caddy:/root/.caddy ports: - - 80:80 - - 443:443 + - "80:80" + - "443:443" networks: - internal-network - external-network - networks: internal-network: - internal: true - external-network: \ No newline at end of file + driver: bridge + external-network: + external: true diff --git a/evg-outbo-api/api.Dockerfile b/evg-outbo-api/api.Dockerfile new file mode 100755 index 0000000..25fcb01 --- /dev/null +++ b/evg-outbo-api/api.Dockerfile @@ -0,0 +1,39 @@ +FROM python:3.8 + +#Ustaw zmienne środowiskowe +ENV PYTHONDONTWRITEBYTECODE 1 +ENV PYTHONUNBUFFERED 1 + +# Zainstaluj zależności systemowe +RUN apt-get update && apt-get install -y nano && rm -rf /var/lib/apt/lists/* + +# Ustaw katalog roboczy +WORKDIR /code + +# Tworzenie wirtualnego środowiska +RUN python3 -m venv /code/venv + +# Ustaw ścieżkę do wirtualnego środowiska +ENV PATH="/code/venv/bin:$PATH" + +# Skopiuj pliki `pyproject.toml` i `poetry.lock` +COPY pyproject.toml poetry.lock /code/ + +# Instalacja narzędzi +RUN pip install --upgrade pip setuptools wheel + + +# Instalacja poetry i zależności aplikacji +RUN pip install poetry +RUN poetry config virtualenvs.create false --local +RUN poetry install --only main --extras "production" + +# Zmień właściciela plików na `www-data` +RUN chown -R www-data:www-data /code + +# Przejście na użytkownika `www-data` +USER www-data + +# Domyślny punkt wejścia +CMD ["gunicorn", "--bind", "0.0.0.0:8000", "app.wsgi:application"] + diff --git a/evg-outbo-web/web.Dockerfile b/evg-outbo-web/web.Dockerfile new file mode 100755 index 0000000..c13b551 --- /dev/null +++ b/evg-outbo-web/web.Dockerfile @@ -0,0 +1,17 @@ +FROM node:14 AS builder +ARG outbo_env +ARG backend_url +WORKDIR /app +COPY package.json yarn.lock /app/ +RUN yarn +COPY . /app +ENV NODE_ENV production +ENV REACT_APP_OUTBO_ENV=${outbo_env} +ENV REACT_APP_BACKEND_URL=${backend_url} +RUN yarn run build + +FROM node:14 +RUN yarn global add serve +WORKDIR /app +COPY --from=builder /app/build . +CMD ["serve", "-p", "80", "-s", "."] \ No newline at end of file diff --git a/web.Dockerfile b/web.Dockerfile index 0cf2efa..c13b551 100755 --- a/web.Dockerfile +++ b/web.Dockerfile @@ -1,4 +1,4 @@ -FROM node:erbium AS builder +FROM node:14 AS builder ARG outbo_env ARG backend_url WORKDIR /app @@ -10,7 +10,7 @@ ENV REACT_APP_OUTBO_ENV=${outbo_env} ENV REACT_APP_BACKEND_URL=${backend_url} RUN yarn run build -FROM node:erbium +FROM node:14 RUN yarn global add serve WORKDIR /app COPY --from=builder /app/build .