fixe ci
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed

This commit is contained in:
Ehsan.Asadi
2025-12-31 04:40:25 +03:30
parent 7b78b67ec8
commit 75dc0b9a28
4 changed files with 129 additions and 60 deletions

View File

@@ -97,67 +97,69 @@ steps:
- org.opencontainers.image.title=Peikarband Landing
- org.opencontainers.image.description=Peikarband hosting platform landing page
cache: inline
provenance: true
sbom: true
# cache: inline
# provenance: true
# sbom: true
push: true
cache_from: type=registry,ref=hub.peikarband.ir/peikarband/landing:cache
cache_to: type=registry,ref=hub.peikarband.ir/peikarband/landing:cache,mode=max
when:
event: [push, tag]
branch: [main, develop,]
# ============================================
# Verify Images
# ============================================
# # ============================================
# # Verify Images
# # ============================================
verify-images:
image: alpine:latest
commands:
- apk add --no-cache curl
- |
echo "════════════════════════════════════════"
echo " 🔍 Verifying Images in Registry"
echo "════════════════════════════════════════"
echo ""
# verify-images:
# image: alpine:latest
# commands:
# - apk add --no-cache curl
# - |
# echo "════════════════════════════════════════"
# echo " 🔍 Verifying Images in Registry"
# echo "════════════════════════════════════════"
# echo ""
# Check base image
echo "Checking base image..."
if curl -f -u "$HARBOR_USERNAME:$HARBOR_PASSWORD" \
"https://hub.peikarband.ir/v2/peikarband/landing/manifests/base" > /dev/null 2>&1; then
echo "✅ Base image: hub.peikarband.ir/peikarband/landing:base"
else
echo "⚠️ Base image not found (this is OK if first build)"
fi
# # Check base image
# echo "Checking base image..."
# if curl -f -u "$HARBOR_USERNAME:$HARBOR_PASSWORD" \
# "https://hub.peikarband.ir/v2/peikarband/landing/manifests/base" > /dev/null 2>&1; then
# echo "✅ Base image: hub.peikarband.ir/peikarband/landing:base"
# else
# echo "⚠️ Base image not found (this is OK if first build)"
# fi
echo ""
# echo ""
# Check app image
echo "Checking app image..."
TAG="${CI_COMMIT_SHA:0:8}"
if curl -f -u "$HARBOR_USERNAME:$HARBOR_PASSWORD" \
"https://hub.peikarband.ir/v2/peikarband/landing/manifests/$TAG" > /dev/null 2>&1; then
echo "✅ App image: hub.peikarband.ir/peikarband/landing:$TAG"
echo ""
echo "Available tags:"
echo " • latest"
echo " • ${CI_COMMIT_SHA:0:8}"
echo " • ${CI_COMMIT_BRANCH}"
echo ""
echo "════════════════════════════════════════"
else
echo "❌ Failed to verify app image"
exit 1
fi
# # Check app image
# echo "Checking app image..."
# TAG="${CI_COMMIT_SHA:0:8}"
# if curl -f -u "$HARBOR_USERNAME:$HARBOR_PASSWORD" \
# "https://hub.peikarband.ir/v2/peikarband/landing/manifests/$TAG" > /dev/null 2>&1; then
# echo "✅ App image: hub.peikarband.ir/peikarband/landing:$TAG"
# echo ""
# echo "Available tags:"
# echo " • latest"
# echo " • ${CI_COMMIT_SHA:0:8}"
# echo " • ${CI_COMMIT_BRANCH}"
# echo ""
# echo "════════════════════════════════════════"
# else
# echo "❌ Failed to verify app image"
# exit 1
# fi
environment:
HARBOR_USERNAME:
from_secret: HARBOR_USERNAME
HARBOR_PASSWORD:
from_secret: HARBOR_PASSWORD
# environment:
# HARBOR_USERNAME:
# from_secret: HARBOR_USERNAME
# HARBOR_PASSWORD:
# from_secret: HARBOR_PASSWORD
when:
event: [push, tag]
branch: [main, develop]
# when:
# event: [push, tag]
# branch: [main, develop]
# ============================================
# Notifications

51
docker/Dockerfile copy Normal file
View File

@@ -0,0 +1,51 @@
# استفاده از ایمیج پایه‌ای که قبلاً Push کردید
ARG BASE_IMAGE=hub.peikarband.ir/peikarband/landing:base
FROM ${BASE_IMAGE} AS builder
WORKDIR /app
# ۱. کپی کردن فایل‌های نیازمندی (برای استفاده از Cache)
COPY peikarband/requirements.txt .
RUN --mount=type=cache,target=/root/.cache/pip \
pip install --no-cache-dir -r requirements.txt
# ۲. کپی کردن کل کدها
# مهم: ساختار فولدر باید با app_name در rxconfig.py یکی باشد
COPY peikarband/ .
# ۳. تنظیم PYTHONPATH برای حل مشکل ModuleNotFoundError
ENV PYTHONPATH=/app
# ۴. اجرای Reflex Export
# این دستور خودش فرانت‌تند را بیلد می‌کند و نیازی به npm run build دستی نیست
RUN reflex init --loglevel debug
RUN reflex export --frontend-only --no-zip --loglevel debug
# ================= Stage 2: Runtime =================
FROM ${BASE_IMAGE} AS runtime
# ایجاد یوزر غیر ریشه برای امنیت
RUN groupadd -r peikarband && useradd -r -g peikarband -u 1000 -m peikarband
WORKDIR /app
# کپی کردن کتابخانه‌های نصب شده از مرحله قبل
COPY --from=builder /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages
COPY --from=builder /usr/local/bin /usr/local/bin
# کپی کردن کد اپلیکیشن و فایلهای بیلد شده فرانت‌تند
COPY --from=builder --chown=peikarband:peikarband /app /app
# ایجاد پوشه‌های مورد نیاز
RUN mkdir -p data logs uploaded_files && \
chown -R peikarband:peikarband /app && \
chmod -R 755 /app
ENV PYTHONUNBUFFERED=1 \
PYTHONPATH=/app \
NODE_ENV=production
USER peikarband
EXPOSE 3000 8000
ENTRYPOINT ["/usr/bin/tini", "--"]
CMD ["reflex", "run", "--env", "prod"]

View File

@@ -0,0 +1,27 @@
# Peikarband Base Image
ARG PYTHON_VERSION=3.11
FROM python:${PYTHON_VERSION}-slim
# نصب ابزارهای سیستم و پاکسازی برای کاهش حجم
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc g++ make curl gnupg ca-certificates unzip git tini \
&& rm -rf /var/lib/apt/lists/*
# نصب Node.js 20
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
&& apt-get install -y --no-install-recommends nodejs \
&& rm -rf /var/lib/apt/lists/*
# نصب Bun با مکانیزم Retry برای پایداری در شبکه
RUN set -ex && \
for i in 1 2 3 4 5; do \
curl -fsSL https://bun.sh/install | bash && break || \
(echo "Attempt $i failed, retrying in 5 seconds..." && sleep 5); \
done
ENV PATH="/root/.bun/bin:${PATH}"
# آپدیت ابزارهای پایتون
RUN pip install --no-cache-dir --upgrade pip setuptools wheel
WORKDIR /build
CMD ["/bin/bash"]

View File

@@ -1,11 +0,0 @@
"""Peikarband Landing Application Module.
This module exports the Reflex app instance.
Reflex expects to find 'app' in peikarband.peikarband when app_name='peikarband'.
"""
# Import app from app.py module (same directory, use relative import)
from .app import app
__all__ = ["app"]