This commit is contained in:
100
.woodpecker.yml
100
.woodpecker.yml
@@ -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
51
docker/Dockerfile copy
Normal 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"]
|
||||
27
docker/Dockerfile copy.base
Normal file
27
docker/Dockerfile copy.base
Normal 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"]
|
||||
@@ -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"]
|
||||
|
||||
Reference in New Issue
Block a user