7 Commits

Author SHA1 Message Date
c7ca9f9442 🔧 (.gitea/workflows/on_release.yml): Add echo command to print TOKEN for debugging purposes
Some checks failed
Build / Code quality (push) Has been cancelled
Creates a docker image for production / Build the docker image (push) Successful in 39s
2025-02-05 10:44:57 -03:00
9c6db02e57 🔧 (on_release.yml): Add echo statement to print github ref_name and run_number for better debugging
Some checks are pending
Build / Code quality (push) Waiting to run
Creates a docker image for production / Build the docker image (push) Successful in 12s
♻️ (on_release.yml): Remove redundant curl command to clean up the code and improve readability
2025-02-05 10:42:24 -03:00
d6cd731a2a Fix no release
Some checks failed
Creates a docker image for production / Build the docker image (push) Successful in 9s
Build / Code quality (push) Has been cancelled
2025-02-05 10:39:52 -03:00
ed4d845b12 Habilitando admin
Some checks failed
Creates a docker image for production / Build the docker image (push) Successful in 23s
Build / Code quality (push) Has been cancelled
2025-02-05 10:38:54 -03:00
96afac4789 Habilitando deploy automático
Some checks failed
Creates a docker image for production / Build the docker image (push) Successful in 1m7s
Build / Code quality (push) Has been cancelled
2025-02-05 10:34:00 -03:00
50690f01cf Fix settings
Some checks failed
Build / Code quality (push) Has been cancelled
2025-02-05 10:33:23 -03:00
64d0105d4a Alterando Dockerfile
All checks were successful
Creates a docker image for production / Build the docker image (push) Successful in 43s
Build / Code quality (push) Successful in 9m39s
2025-02-05 10:11:51 -03:00
5 changed files with 77 additions and 96 deletions

View File

@@ -34,32 +34,24 @@ jobs:
labels: ${{ steps.meta.outputs.labels }} labels: ${{ steps.meta.outputs.labels }}
- name: Deploy to production server - name: Deploy to production server
run: | run: |
echo "${{ github.ref_name }} - ${{ github.run_number }}"
TOKEN=$(curl --silent --location 'https://auth.makecodes.dev/auth' \ TOKEN=$(curl --silent --location 'https://auth.makecodes.dev/auth' \
--header 'Content-Type: application/json' \ --header 'Content-Type: application/json' \
--data '{ --data '{
"email": "'$USERNAME'", "email": "'$USERNAME'",
"password": "'$PASSWORD'" "password": "'$PASSWORD'"
}' | jq -r '.token') }' | jq -r '.token')
# curl --location --silent 'https://deployer.makecodes.dev/deploy' \ echo $TOKEN
# --header 'Content-Type: application/json' \ curl --location --silent 'https://deployer.makecodes.dev/deploy' \
# --header "Authorization: Bearer $TOKEN" \ --header 'Content-Type: application/json' \
# --data '{ --header "Authorization: Bearer $TOKEN" \
# "image": "docker.nexus.makecodes.dev/makecodes/nfe-vision", --data '{
# "service": "nfe-vision_app", "image": "docker.nexus.makecodes.dev/mines/backend",
# "version": "${{ github.ref_name }}", "service": "mines_backend",
# "pipeline": "${{ github.run_number }}", "version": "${{ github.ref_name }}",
# "repository": "makecodes/nfe-vision" "pipeline": "${{ github.run_number }}",
# }' "repository": "mines/backend"
# curl --location --silent 'https://deployer.makecodes.dev/deploy' \ }'
# --header 'Content-Type: application/json' \
# --header "Authorization: Bearer $TOKEN" \
# --data '{
# "image": "docker.nexus.makecodes.dev/makecodes/nfe-vision",
# "service": "nfe-vision_worker",
# "version": "${{ github.ref_name }}",
# "pipeline": "${{ github.run_number }}",
# "repository": "makecodes/nfe-vision"
# }'
env: env:
USERNAME: ${{ secrets.SERVER_AUTH_USERNAME }} USERNAME: ${{ secrets.SERVER_AUTH_USERNAME }}
PASSWORD: ${{ secrets.SERVER_AUTH_PASSWORD }} PASSWORD: ${{ secrets.SERVER_AUTH_PASSWORD }}

View File

@@ -1,52 +1,72 @@
FROM python:3.8-slim-buster FROM python:3.12.6-bullseye AS base
ARG SCOPE ARG APP_USER \
APP_GROUP \
UID \
GID \
NEXUS_USERNAME \
NEXUS_PASSWORD
# Setup env ENV APP_USER=${APP_USER:-mines} \
ENV SCOPE=${SCOPE} \ APP_GROUP=${APP_GROUP:-mines} \
# python UID=${UID:-1000} \
PYTHONDONTWRITEBYTECODE=1 \ GID=${GID:-1000} \
PYTHONFAULTHANDLER=1 \ PYTHONFAULTHANDLER=1 \
PYTHONUNBUFFERED=1 \ PYTHONUNBUFFERED=1 \
PYTHONHASHSEED=random \ PYTHONHASHSEED=random \
PYTHONDONTWRITEBYTECODE=1 \
LC_ALL=C.UTF-8 \ LC_ALL=C.UTF-8 \
LANG=C.UTF-8 \ LANG=C.UTF-8 \
# pip
PIP_NO_CACHE_DIR=off \ PIP_NO_CACHE_DIR=off \
PIP_DISABLE_PIP_VERSION_CHECK=on \ PIP_DISABLE_PIP_VERSION_CHECK=on \
PIP_DEFAULT_TIMEOUT=100 \ PIP_DEFAULT_TIMEOUT=100 \
# poetry: UV_LINK_MODE=copy \
POETRY_VERSION=1.1.13 \ UV_PROJECT_ENVIRONMENT=/.venv \
POETRY_NO_INTERACTION=1 \ VIRTUAL_ENV=/.venv \
POETRY_VIRTUALENVS_CREATE=false \ PATH="/.venv/bin:$PATH"
POETRY_CACHE_DIR='/var/cache/pypoetry' \
POETRY_HOME='/usr/local'
SHELL ["/bin/bash", "-eo", "pipefail", "-c"] COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv
RUN apt-get update && apt-get upgrade -y \ WORKDIR /app
&& apt-get install --no-install-recommends -y \
COPY uv.lock pyproject.toml ./
# Dependências
RUN echo "deb http://apt.postgresql.org/pub/repos/apt bullseye-pgdg main" > /etc/apt/sources.list.d/pgdg.list && \
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - && \
apt-get update && \
apt-get install -y \
bash \ bash \
curl \ clang \
build-essential \ build-essential \
curl \
default-libmysqlclient-dev \ default-libmysqlclient-dev \
gnupg \
jq \
libc6 \
libffi-dev \
libjpeg-dev \
libmariadb-dev \
libpq-dev \ libpq-dev \
# Installing `poetry` package manager: libpthread-stubs0-dev \
# https://github.com/python-poetry/poetry libxml2-dev \
&& curl -sSL 'https://install.python-poetry.org' | python - \ libxslt-dev \
&& poetry --version \ mariadb-client \
# Cleaning cache: zlib1g-dev && \
&& apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ apt-get install -y --no-install-recommends gcc && \
&& apt-get clean -y && rm -rf /var/lib/apt/lists/* apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false && \
apt-get clean -y && rm -rf /var/lib/apt/lists/* && \
uv sync --dev && \
uv cache clean && \
. $VIRTUAL_ENV/bin/activate
# Copy only requirements to cache them in docker layer
WORKDIR /code
COPY poetry.lock pyproject.toml /code/
RUN poetry config virtualenvs.create false \ # Copia o restante do código da aplicação
&& poetry install $(test "$SCOPE" == production && echo "--no-dev") --no-interaction --no-ansi COPY . /app
# Creating folders, and files for a project: RUN groupadd -r $APP_GROUP -g $GID && \
COPY . /code useradd -r -g $APP_GROUP -u $UID $APP_USER --shell /bin/bash --home /app
CMD ["/code/commands/run-prod.sh"] USER $APP_USER
CMD ["/app/commands/run-prod.sh"]

View File

@@ -12,7 +12,7 @@ OP_ITEM_TITLE = os.environ.get('OP_ITEM_TITLE', 'mines')
op_env = OnePassword(SCOPE, OP_ITEM_TITLE) op_env = OnePassword(SCOPE, OP_ITEM_TITLE)
sentry_sdk.init( sentry_sdk.init(
dsn=op_env.get('settings.SENTRY_DSN'), dsn=op_env.get('SENTRY_DSN'),
integrations=[DjangoIntegration()], integrations=[DjangoIntegration()],
environment=SCOPE, environment=SCOPE,
send_default_pii=False, send_default_pii=False,
@@ -23,12 +23,12 @@ sentry_sdk.init(
BASE_DIR = Path(__file__).resolve().parent.parent BASE_DIR = Path(__file__).resolve().parent.parent
# SECURITY WARNING: keep the secret key used in production secret! # SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = op_env.get('settings.SECRET_KEY') SECRET_KEY = op_env.get('SECRET_KEY')
# SECURITY WARNING: don't run with debug turned on in production! # SECURITY WARNING: don't run with debug turned on in production!
DEBUG = op_env.get('settings.DEBUG', '0') in ['1', 'true'] DEBUG = op_env.get('DEBUG', '0') in ['1', 'true']
ALLOWED_HOSTS = op_env.get('settings.ALLOWED_HOSTS', '127.0.0.1,localhost').split(',') ALLOWED_HOSTS = op_env.get('ALLOWED_HOSTS', '127.0.0.1,localhost').split(',')
# Application definition # Application definition
INSTALLED_APPS = [ INSTALLED_APPS = [

View File

@@ -1,13 +1,7 @@
from django.conf import settings
from django.contrib import admin from django.contrib import admin
from django.urls import include, path from django.urls import include, path
urlpatterns = [ urlpatterns = [
path('', include('api.urls')), path('', include('api.urls')),
]
# We need this only for development purpose
if settings.DEBUG is True:
urlpatterns += [
path('admin/', admin.site.urls), path('admin/', admin.site.urls),
] ]

View File

@@ -1,25 +0,0 @@
import onepasswordconnectsdk
from onepasswordconnectsdk.client import Client, new_client_from_environment
def get_op_config():
op_client: Client = new_client_from_environment()
OP_DJANGO_SETTINGS_VARS = [
'database.host',
'database.port',
'database.name',
'database.user',
'database.password',
'settings.ALLOWED_HOSTS',
'settings.DEBUG',
'settings.SCOPE',
'settings.SENTRY_DSN',
'settings.SECRET_KEY',
]
op_config_get = {}
for var in OP_DJANGO_SETTINGS_VARS:
op_config_get[var] = {'opitem': 'mines', 'opfield': var}
return onepasswordconnectsdk.load_dict(op_client, op_config_get)