15 changed files with 425 additions and 3 deletions
-
11.dockerignore
-
3.env.prod
-
1.gitignore
-
54Dockerfile
-
52Jenkinsfile
-
1README.md
-
BINapp/apple-icon.png
-
BINapp/favicon.ico
-
BINapp/icon.png
-
268app/icon.svg
-
9app/layout.tsx
-
24docker-compose.yml
-
2next.config.ts
-
BINpublic/favicon.ico
-
3runner.sh
@ -0,0 +1,11 @@ |
|||
Dockerfile |
|||
docker-compose.yml |
|||
.dockerignore |
|||
node_modules |
|||
npm-debug.log |
|||
README.md |
|||
.next |
|||
.git |
|||
.gitignore |
|||
.env*.local |
|||
.env.development |
|||
@ -0,0 +1,3 @@ |
|||
PORT=3000 |
|||
NODE_ENV=production |
|||
NEXT_TELEMETRY_DISABLED=1 |
|||
@ -0,0 +1,54 @@ |
|||
# syntax=docker/dockerfile:1.7 |
|||
|
|||
# ────────────────────────────────────────────────────────────────────────── |
|||
# مرحلهٔ ۱ — deps: آمادهسازی وابستگیها با کش npm |
|||
# ────────────────────────────────────────────────────────────────────────── |
|||
FROM node:22-alpine AS deps |
|||
RUN apk add --no-cache libc6-compat |
|||
WORKDIR /app |
|||
|
|||
COPY package.json package-lock.json* ./ |
|||
RUN --mount=type=cache,target=/root/.npm npm ci --prefer-offline --no-audit --fund=false |
|||
|
|||
# ────────────────────────────────────────────────────────────────────────── |
|||
# مرحلهٔ ۲ — builder: ساخت خروجی بهینهشده standalone برای Next.js |
|||
# ────────────────────────────────────────────────────────────────────────── |
|||
FROM node:22-alpine AS builder |
|||
WORKDIR /app |
|||
|
|||
COPY --from=deps /app/node_modules ./node_modules |
|||
COPY . . |
|||
|
|||
ENV NEXT_TELEMETRY_DISABLED=1 |
|||
ENV NODE_ENV=production |
|||
|
|||
RUN npm run build |
|||
|
|||
# ────────────────────────────────────────────────────────────────────────── |
|||
# مرحلهٔ ۳ — runner: سرور مینیمال، سبک و امن standalone در محیط پروداکشن |
|||
# ────────────────────────────────────────────────────────────────────────── |
|||
FROM node:22-alpine AS runner |
|||
WORKDIR /app |
|||
|
|||
ENV NODE_ENV=production |
|||
ENV NEXT_TELEMETRY_DISABLED=1 |
|||
ENV PORT=3000 |
|||
ENV HOSTNAME="0.0.0.0" |
|||
|
|||
# ایجاد کاربر غیر روت برای امنیت کانتینر |
|||
RUN addgroup --system --gid 1001 nodejs && \ |
|||
adduser --system --uid 1001 nextjs |
|||
|
|||
COPY --from=builder /app/public ./public |
|||
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ |
|||
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static |
|||
|
|||
USER nextjs |
|||
|
|||
EXPOSE 3000 |
|||
|
|||
# هلثچک کانتینر |
|||
HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \ |
|||
CMD wget -qO- http://127.0.0.1:3000/ || exit 1 |
|||
|
|||
CMD ["node", "server.js"] |
|||
@ -0,0 +1,52 @@ |
|||
pipeline { |
|||
environment { |
|||
develop_server_ip = '' |
|||
develop_server_name = '' |
|||
production_server_ip = "88.99.212.243" |
|||
production_server_name = "newhorizon_germany_001_server" |
|||
project_path = "/projects/teamby/teamby_landing" |
|||
version = "master" |
|||
gitBranch = "origin/master" |
|||
} |
|||
agent any |
|||
stages { |
|||
stage('deploy') { |
|||
steps { |
|||
script { |
|||
if (gitBranch == "origin/master") { |
|||
try { |
|||
withCredentials([usernamePassword(credentialsId: production_server_name, usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { |
|||
sh 'sshpass -p $PASSWORD ssh -p 1782 $USERNAME@$production_server_ip -o StrictHostKeyChecking=no "cd $project_path && ./runner.sh"' |
|||
} |
|||
} catch (Exception e) { |
|||
def lastCommit = sh(script: 'git log -1 --pretty=format:"%h - %s (%an)"', returnStdout: true).trim() |
|||
sh """ |
|||
curl -s -F chat_id=-1002316394394 \ |
|||
-F message_thread_id=1629 \ |
|||
-F document=@/var/jenkins_home/jobs/${env.JOB_NAME}/builds/${env.BUILD_NUMBER}/log \ |
|||
-F caption='Project name: #${env.JOB_NAME} \ |
|||
Build status is FAILED \ |
|||
Build url: ${BUILD_URL} \ |
|||
Last Commit: ${lastCommit}' \ |
|||
https://api.telegram.org/bot7207581748:AAH1y1pW8L9K_jWlKx3Xj_xV3pZl4Zq9V1Y/sendDocument || true |
|||
""" |
|||
currentBuild.result = 'FAILURE' |
|||
throw e |
|||
} |
|||
def lastCommit = sh(script: 'git log -1 --pretty=format:"%h - %s (%an)"', returnStdout: true).trim() |
|||
sh """ |
|||
curl -s -F chat_id=-1002316394394 \ |
|||
-F message_thread_id=1629 \ |
|||
-F document=@/var/jenkins_home/jobs/${env.JOB_NAME}/builds/${env.BUILD_NUMBER}/log \ |
|||
-F caption='Project name: #${env.JOB_NAME} \ |
|||
Build status is SUCCESS \ |
|||
Build url: ${BUILD_URL} \ |
|||
Last Commit: ${lastCommit}' \ |
|||
https://api.telegram.org/bot7207581748:AAH1y1pW8L9K_jWlKx3Xj_xV3pZl4Zq9V1Y/sendDocument || true |
|||
""" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
After Width: 51 | Height: 51 | Size: 5.0 KiB |
|
After Width: 51 | Height: 51 | Size: 5.0 KiB |
@ -0,0 +1,268 @@ |
|||
<svg width="51" height="51" viewBox="0 0 51 51" fill="none" xmlns="http://www.w3.org/2000/svg"> |
|||
<path d="M35.4741 24.5053H22.1291V22.1289H33.0978V17.3763H35.4741V24.5053Z" fill="url(#paint0_linear_4178_61388)"/> |
|||
<path d="M35.4741 17.3763L28.6187 17.3763C27.2476 17.3764 24.5054 18.117 24.5054 21.0781V22.2656H22.1291V21.3516C22.1293 18.7925 23.5467 15.0001 28.6187 15H35.4741V17.3763Z" fill="url(#paint1_linear_4178_61388)"/> |
|||
<path d="M15 28.6186C15 23.546 18.7937 22.129 21.3529 22.129H22.2669V24.5053H21.0781C18.117 24.5055 17.3763 27.2477 17.3763 28.6186V35.4728H15V28.6186Z" fill="url(#paint2_linear_4178_61388)"/> |
|||
<path d="M24.5053 22.129V35.4728H17.3763L17.3764 33.0965H22.129L22.1291 22.1289L24.5053 22.129Z" fill="url(#paint3_linear_4178_61388)"/> |
|||
<path d="M29.258 24.5054L24.5053 24.5054L24.5053 22.129L29.258 22.129V24.5054Z" fill="url(#paint4_linear_4178_61388)"/> |
|||
<path d="M35.4741 24.5053H22.1291V22.1289H33.0978V17.3763H35.4741V24.5053Z" fill="url(#paint5_linear_4178_61388)"/> |
|||
<path d="M35.4741 17.3763L28.6187 17.3763C27.2476 17.3764 24.5054 18.117 24.5054 21.0781V22.2656H22.1291V21.3516C22.1293 18.7925 23.5467 15.0001 28.6187 15H35.4741V17.3763Z" fill="url(#paint6_linear_4178_61388)"/> |
|||
<path d="M15 28.6186C15 23.546 18.7937 22.129 21.3529 22.129H22.2669V24.5053H21.0781C18.117 24.5055 17.3763 27.2477 17.3763 28.6186V35.4728H15V28.6186Z" fill="url(#paint7_linear_4178_61388)"/> |
|||
<path d="M24.5053 22.129V35.4728H17.3763L17.3764 33.0965H22.129L22.1291 22.1289L24.5053 22.129Z" fill="url(#paint8_linear_4178_61388)"/> |
|||
<path d="M29.258 24.5054L24.5053 24.5054L24.5053 22.129L29.258 22.129V24.5054Z" fill="url(#paint9_linear_4178_61388)"/> |
|||
<g opacity="0.3" filter="url(#filter0_f_4178_61388)" style="mix-blend-mode:color-dodge"> |
|||
<path d="M35.4741 24.5053H22.1291V22.1289H33.0978V17.3763H35.4741V24.5053Z" fill="white"/> |
|||
<path d="M35.4741 17.3763L28.6187 17.3763C27.2476 17.3764 24.5054 18.117 24.5054 21.0781V22.2656H22.1291V21.3516C22.1293 18.7925 23.5467 15.0001 28.6187 15H35.4741V17.3763Z" fill="white"/> |
|||
<path d="M15 28.6186C15 23.546 18.7937 22.129 21.3529 22.129H22.2669V24.5053H21.0781C18.117 24.5055 17.3763 27.2477 17.3763 28.6186V35.4728H15V28.6186Z" fill="white"/> |
|||
<path d="M24.5053 22.129V35.4728H17.3763L17.3764 33.0965H22.129L22.1291 22.1289L24.5053 22.129Z" fill="white"/> |
|||
<path d="M29.258 24.5054L24.5053 24.5054L24.5053 22.129L29.258 22.129V24.5054Z" fill="white"/> |
|||
<path d="M35.4741 24.5053H22.1291V22.1289H33.0978V17.3763H35.4741V24.5053Z" fill="white"/> |
|||
<path d="M35.4741 17.3763L28.6187 17.3763C27.2476 17.3764 24.5054 18.117 24.5054 21.0781V22.2656H22.1291V21.3516C22.1293 18.7925 23.5467 15.0001 28.6187 15H35.4741V17.3763Z" fill="white"/> |
|||
<path d="M15 28.6186C15 23.546 18.7937 22.129 21.3529 22.129H22.2669V24.5053H21.0781C18.117 24.5055 17.3763 27.2477 17.3763 28.6186V35.4728H15V28.6186Z" fill="white"/> |
|||
<path d="M24.5053 22.129V35.4728H17.3763L17.3764 33.0965H22.129L22.1291 22.1289L24.5053 22.129Z" fill="white"/> |
|||
<path d="M29.258 24.5054L24.5053 24.5054L24.5053 22.129L29.258 22.129V24.5054Z" fill="white"/> |
|||
</g> |
|||
<g filter="url(#filter1_f_4178_61388)" style="mix-blend-mode:plus-lighter"> |
|||
<path d="M35.4741 24.5053H22.1291V22.1289H33.0978V17.3763H35.4741V24.5053Z" fill="url(#paint10_linear_4178_61388)"/> |
|||
<path d="M35.4741 17.3763L28.6187 17.3763C27.2476 17.3764 24.5054 18.117 24.5054 21.0781V22.2656H22.1291V21.3516C22.1293 18.7925 23.5467 15.0001 28.6187 15H35.4741V17.3763Z" fill="url(#paint11_linear_4178_61388)"/> |
|||
<path d="M15 28.6186C15 23.546 18.7937 22.129 21.3529 22.129H22.2669V24.5053H21.0781C18.117 24.5055 17.3763 27.2477 17.3763 28.6186V35.4728H15V28.6186Z" fill="url(#paint12_linear_4178_61388)"/> |
|||
<path d="M24.5053 22.129V35.4728H17.3763L17.3764 33.0965H22.129L22.1291 22.1289L24.5053 22.129Z" fill="url(#paint13_linear_4178_61388)"/> |
|||
<path d="M29.258 24.5054L24.5053 24.5054L24.5053 22.129L29.258 22.129V24.5054Z" fill="url(#paint14_linear_4178_61388)"/> |
|||
<path d="M35.4741 24.5053H22.1291V22.1289H33.0978V17.3763H35.4741V24.5053Z" fill="url(#paint15_linear_4178_61388)"/> |
|||
<path d="M35.4741 17.3763L28.6187 17.3763C27.2476 17.3764 24.5054 18.117 24.5054 21.0781V22.2656H22.1291V21.3516C22.1293 18.7925 23.5467 15.0001 28.6187 15H35.4741V17.3763Z" fill="url(#paint16_linear_4178_61388)"/> |
|||
<path d="M15 28.6186C15 23.546 18.7937 22.129 21.3529 22.129H22.2669V24.5053H21.0781C18.117 24.5055 17.3763 27.2477 17.3763 28.6186V35.4728H15V28.6186Z" fill="url(#paint17_linear_4178_61388)"/> |
|||
<path d="M24.5053 22.129V35.4728H17.3763L17.3764 33.0965H22.129L22.1291 22.1289L24.5053 22.129Z" fill="url(#paint18_linear_4178_61388)"/> |
|||
<path d="M29.258 24.5054L24.5053 24.5054L24.5053 22.129L29.258 22.129V24.5054Z" fill="url(#paint19_linear_4178_61388)"/> |
|||
</g> |
|||
<defs> |
|||
<filter id="filter0_f_4178_61388" x="5" y="5" width="40.4727" height="40.4728" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> |
|||
<feFlood flood-opacity="0" result="BackgroundImageFix"/> |
|||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> |
|||
<feGaussianBlur stdDeviation="5" result="effect1_foregroundBlur_4178_61388"/> |
|||
</filter> |
|||
<filter id="filter1_f_4178_61388" x="0" y="0" width="50.4727" height="50.4728" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> |
|||
<feFlood flood-opacity="0" result="BackgroundImageFix"/> |
|||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> |
|||
<feGaussianBlur stdDeviation="7.5" result="effect1_foregroundBlur_4178_61388"/> |
|||
</filter> |
|||
<linearGradient id="paint0_linear_4178_61388" x1="25.2371" y1="15" x2="25.2371" y2="41.6877" gradientUnits="userSpaceOnUse"> |
|||
<stop stop-color="#0029B3"/> |
|||
<stop offset="0.1" stop-color="#0038BF"/> |
|||
<stop offset="0.2" stop-color="#0E4ACC"/> |
|||
<stop offset="0.3" stop-color="#255CD9"/> |
|||
<stop offset="0.4" stop-color="#3D6FE6"/> |
|||
<stop offset="0.5" stop-color="#487EFF"/> |
|||
<stop offset="0.65" stop-color="#4B80FF"/> |
|||
<stop offset="0.8" stop-color="#5D8BFF"/> |
|||
<stop offset="1" stop-color="#ADBFFF"/> |
|||
</linearGradient> |
|||
<linearGradient id="paint1_linear_4178_61388" x1="25.2371" y1="15" x2="25.2371" y2="41.6877" gradientUnits="userSpaceOnUse"> |
|||
<stop stop-color="#0029B3"/> |
|||
<stop offset="0.1" stop-color="#0038BF"/> |
|||
<stop offset="0.2" stop-color="#0E4ACC"/> |
|||
<stop offset="0.3" stop-color="#255CD9"/> |
|||
<stop offset="0.4" stop-color="#3D6FE6"/> |
|||
<stop offset="0.5" stop-color="#487EFF"/> |
|||
<stop offset="0.65" stop-color="#4B80FF"/> |
|||
<stop offset="0.8" stop-color="#5D8BFF"/> |
|||
<stop offset="1" stop-color="#ADBFFF"/> |
|||
</linearGradient> |
|||
<linearGradient id="paint2_linear_4178_61388" x1="25.2371" y1="15" x2="25.2371" y2="41.6877" gradientUnits="userSpaceOnUse"> |
|||
<stop stop-color="#0029B3"/> |
|||
<stop offset="0.1" stop-color="#0038BF"/> |
|||
<stop offset="0.2" stop-color="#0E4ACC"/> |
|||
<stop offset="0.3" stop-color="#255CD9"/> |
|||
<stop offset="0.4" stop-color="#3D6FE6"/> |
|||
<stop offset="0.5" stop-color="#487EFF"/> |
|||
<stop offset="0.65" stop-color="#4B80FF"/> |
|||
<stop offset="0.8" stop-color="#5D8BFF"/> |
|||
<stop offset="1" stop-color="#ADBFFF"/> |
|||
</linearGradient> |
|||
<linearGradient id="paint3_linear_4178_61388" x1="25.2371" y1="15" x2="25.2371" y2="41.6877" gradientUnits="userSpaceOnUse"> |
|||
<stop stop-color="#0029B3"/> |
|||
<stop offset="0.1" stop-color="#0038BF"/> |
|||
<stop offset="0.2" stop-color="#0E4ACC"/> |
|||
<stop offset="0.3" stop-color="#255CD9"/> |
|||
<stop offset="0.4" stop-color="#3D6FE6"/> |
|||
<stop offset="0.5" stop-color="#487EFF"/> |
|||
<stop offset="0.65" stop-color="#4B80FF"/> |
|||
<stop offset="0.8" stop-color="#5D8BFF"/> |
|||
<stop offset="1" stop-color="#ADBFFF"/> |
|||
</linearGradient> |
|||
<linearGradient id="paint4_linear_4178_61388" x1="25.2371" y1="15" x2="25.2371" y2="41.6877" gradientUnits="userSpaceOnUse"> |
|||
<stop stop-color="#0029B3"/> |
|||
<stop offset="0.1" stop-color="#0038BF"/> |
|||
<stop offset="0.2" stop-color="#0E4ACC"/> |
|||
<stop offset="0.3" stop-color="#255CD9"/> |
|||
<stop offset="0.4" stop-color="#3D6FE6"/> |
|||
<stop offset="0.5" stop-color="#487EFF"/> |
|||
<stop offset="0.65" stop-color="#4B80FF"/> |
|||
<stop offset="0.8" stop-color="#5D8BFF"/> |
|||
<stop offset="1" stop-color="#ADBFFF"/> |
|||
</linearGradient> |
|||
<linearGradient id="paint5_linear_4178_61388" x1="25.2371" y1="15" x2="25.2371" y2="41.6877" gradientUnits="userSpaceOnUse"> |
|||
<stop stop-color="#0029B3"/> |
|||
<stop offset="0.1" stop-color="#0038BF"/> |
|||
<stop offset="0.2" stop-color="#0E4ACC"/> |
|||
<stop offset="0.3" stop-color="#255CD9"/> |
|||
<stop offset="0.4" stop-color="#3D6FE6"/> |
|||
<stop offset="0.5" stop-color="#487EFF"/> |
|||
<stop offset="0.65" stop-color="#4B80FF"/> |
|||
<stop offset="0.8" stop-color="#5D8BFF"/> |
|||
<stop offset="1" stop-color="#ADBFFF"/> |
|||
</linearGradient> |
|||
<linearGradient id="paint6_linear_4178_61388" x1="25.2371" y1="15" x2="25.2371" y2="41.6877" gradientUnits="userSpaceOnUse"> |
|||
<stop stop-color="#0029B3"/> |
|||
<stop offset="0.1" stop-color="#0038BF"/> |
|||
<stop offset="0.2" stop-color="#0E4ACC"/> |
|||
<stop offset="0.3" stop-color="#255CD9"/> |
|||
<stop offset="0.4" stop-color="#3D6FE6"/> |
|||
<stop offset="0.5" stop-color="#487EFF"/> |
|||
<stop offset="0.65" stop-color="#4B80FF"/> |
|||
<stop offset="0.8" stop-color="#5D8BFF"/> |
|||
<stop offset="1" stop-color="#ADBFFF"/> |
|||
</linearGradient> |
|||
<linearGradient id="paint7_linear_4178_61388" x1="25.2371" y1="15" x2="25.2371" y2="41.6877" gradientUnits="userSpaceOnUse"> |
|||
<stop stop-color="#0029B3"/> |
|||
<stop offset="0.1" stop-color="#0038BF"/> |
|||
<stop offset="0.2" stop-color="#0E4ACC"/> |
|||
<stop offset="0.3" stop-color="#255CD9"/> |
|||
<stop offset="0.4" stop-color="#3D6FE6"/> |
|||
<stop offset="0.5" stop-color="#487EFF"/> |
|||
<stop offset="0.65" stop-color="#4B80FF"/> |
|||
<stop offset="0.8" stop-color="#5D8BFF"/> |
|||
<stop offset="1" stop-color="#ADBFFF"/> |
|||
</linearGradient> |
|||
<linearGradient id="paint8_linear_4178_61388" x1="25.2371" y1="15" x2="25.2371" y2="41.6877" gradientUnits="userSpaceOnUse"> |
|||
<stop stop-color="#0029B3"/> |
|||
<stop offset="0.1" stop-color="#0038BF"/> |
|||
<stop offset="0.2" stop-color="#0E4ACC"/> |
|||
<stop offset="0.3" stop-color="#255CD9"/> |
|||
<stop offset="0.4" stop-color="#3D6FE6"/> |
|||
<stop offset="0.5" stop-color="#487EFF"/> |
|||
<stop offset="0.65" stop-color="#4B80FF"/> |
|||
<stop offset="0.8" stop-color="#5D8BFF"/> |
|||
<stop offset="1" stop-color="#ADBFFF"/> |
|||
</linearGradient> |
|||
<linearGradient id="paint9_linear_4178_61388" x1="25.2371" y1="15" x2="25.2371" y2="41.6877" gradientUnits="userSpaceOnUse"> |
|||
<stop stop-color="#0029B3"/> |
|||
<stop offset="0.1" stop-color="#0038BF"/> |
|||
<stop offset="0.2" stop-color="#0E4ACC"/> |
|||
<stop offset="0.3" stop-color="#255CD9"/> |
|||
<stop offset="0.4" stop-color="#3D6FE6"/> |
|||
<stop offset="0.5" stop-color="#487EFF"/> |
|||
<stop offset="0.65" stop-color="#4B80FF"/> |
|||
<stop offset="0.8" stop-color="#5D8BFF"/> |
|||
<stop offset="1" stop-color="#ADBFFF"/> |
|||
</linearGradient> |
|||
<linearGradient id="paint10_linear_4178_61388" x1="25.2371" y1="15" x2="25.2371" y2="41.6877" gradientUnits="userSpaceOnUse"> |
|||
<stop stop-color="#0029B3"/> |
|||
<stop offset="0.1" stop-color="#0038BF"/> |
|||
<stop offset="0.2" stop-color="#0E4ACC"/> |
|||
<stop offset="0.3" stop-color="#255CD9"/> |
|||
<stop offset="0.4" stop-color="#3D6FE6"/> |
|||
<stop offset="0.5" stop-color="#487EFF"/> |
|||
<stop offset="0.65" stop-color="#4B80FF"/> |
|||
<stop offset="0.8" stop-color="#5D8BFF"/> |
|||
<stop offset="1" stop-color="#ADBFFF"/> |
|||
</linearGradient> |
|||
<linearGradient id="paint11_linear_4178_61388" x1="25.2371" y1="15" x2="25.2371" y2="41.6877" gradientUnits="userSpaceOnUse"> |
|||
<stop stop-color="#0029B3"/> |
|||
<stop offset="0.1" stop-color="#0038BF"/> |
|||
<stop offset="0.2" stop-color="#0E4ACC"/> |
|||
<stop offset="0.3" stop-color="#255CD9"/> |
|||
<stop offset="0.4" stop-color="#3D6FE6"/> |
|||
<stop offset="0.5" stop-color="#487EFF"/> |
|||
<stop offset="0.65" stop-color="#4B80FF"/> |
|||
<stop offset="0.8" stop-color="#5D8BFF"/> |
|||
<stop offset="1" stop-color="#ADBFFF"/> |
|||
</linearGradient> |
|||
<linearGradient id="paint12_linear_4178_61388" x1="25.2371" y1="15" x2="25.2371" y2="41.6877" gradientUnits="userSpaceOnUse"> |
|||
<stop stop-color="#0029B3"/> |
|||
<stop offset="0.1" stop-color="#0038BF"/> |
|||
<stop offset="0.2" stop-color="#0E4ACC"/> |
|||
<stop offset="0.3" stop-color="#255CD9"/> |
|||
<stop offset="0.4" stop-color="#3D6FE6"/> |
|||
<stop offset="0.5" stop-color="#487EFF"/> |
|||
<stop offset="0.65" stop-color="#4B80FF"/> |
|||
<stop offset="0.8" stop-color="#5D8BFF"/> |
|||
<stop offset="1" stop-color="#ADBFFF"/> |
|||
</linearGradient> |
|||
<linearGradient id="paint13_linear_4178_61388" x1="25.2371" y1="15" x2="25.2371" y2="41.6877" gradientUnits="userSpaceOnUse"> |
|||
<stop stop-color="#0029B3"/> |
|||
<stop offset="0.1" stop-color="#0038BF"/> |
|||
<stop offset="0.2" stop-color="#0E4ACC"/> |
|||
<stop offset="0.3" stop-color="#255CD9"/> |
|||
<stop offset="0.4" stop-color="#3D6FE6"/> |
|||
<stop offset="0.5" stop-color="#487EFF"/> |
|||
<stop offset="0.65" stop-color="#4B80FF"/> |
|||
<stop offset="0.8" stop-color="#5D8BFF"/> |
|||
<stop offset="1" stop-color="#ADBFFF"/> |
|||
</linearGradient> |
|||
<linearGradient id="paint14_linear_4178_61388" x1="25.2371" y1="15" x2="25.2371" y2="41.6877" gradientUnits="userSpaceOnUse"> |
|||
<stop stop-color="#0029B3"/> |
|||
<stop offset="0.1" stop-color="#0038BF"/> |
|||
<stop offset="0.2" stop-color="#0E4ACC"/> |
|||
<stop offset="0.3" stop-color="#255CD9"/> |
|||
<stop offset="0.4" stop-color="#3D6FE6"/> |
|||
<stop offset="0.5" stop-color="#487EFF"/> |
|||
<stop offset="0.65" stop-color="#4B80FF"/> |
|||
<stop offset="0.8" stop-color="#5D8BFF"/> |
|||
<stop offset="1" stop-color="#ADBFFF"/> |
|||
</linearGradient> |
|||
<linearGradient id="paint15_linear_4178_61388" x1="25.2371" y1="15" x2="25.2371" y2="41.6877" gradientUnits="userSpaceOnUse"> |
|||
<stop stop-color="#0029B3"/> |
|||
<stop offset="0.1" stop-color="#0038BF"/> |
|||
<stop offset="0.2" stop-color="#0E4ACC"/> |
|||
<stop offset="0.3" stop-color="#255CD9"/> |
|||
<stop offset="0.4" stop-color="#3D6FE6"/> |
|||
<stop offset="0.5" stop-color="#487EFF"/> |
|||
<stop offset="0.65" stop-color="#4B80FF"/> |
|||
<stop offset="0.8" stop-color="#5D8BFF"/> |
|||
<stop offset="1" stop-color="#ADBFFF"/> |
|||
</linearGradient> |
|||
<linearGradient id="paint16_linear_4178_61388" x1="25.2371" y1="15" x2="25.2371" y2="41.6877" gradientUnits="userSpaceOnUse"> |
|||
<stop stop-color="#0029B3"/> |
|||
<stop offset="0.1" stop-color="#0038BF"/> |
|||
<stop offset="0.2" stop-color="#0E4ACC"/> |
|||
<stop offset="0.3" stop-color="#255CD9"/> |
|||
<stop offset="0.4" stop-color="#3D6FE6"/> |
|||
<stop offset="0.5" stop-color="#487EFF"/> |
|||
<stop offset="0.65" stop-color="#4B80FF"/> |
|||
<stop offset="0.8" stop-color="#5D8BFF"/> |
|||
<stop offset="1" stop-color="#ADBFFF"/> |
|||
</linearGradient> |
|||
<linearGradient id="paint17_linear_4178_61388" x1="25.2371" y1="15" x2="25.2371" y2="41.6877" gradientUnits="userSpaceOnUse"> |
|||
<stop stop-color="#0029B3"/> |
|||
<stop offset="0.1" stop-color="#0038BF"/> |
|||
<stop offset="0.2" stop-color="#0E4ACC"/> |
|||
<stop offset="0.3" stop-color="#255CD9"/> |
|||
<stop offset="0.4" stop-color="#3D6FE6"/> |
|||
<stop offset="0.5" stop-color="#487EFF"/> |
|||
<stop offset="0.65" stop-color="#4B80FF"/> |
|||
<stop offset="0.8" stop-color="#5D8BFF"/> |
|||
<stop offset="1" stop-color="#ADBFFF"/> |
|||
</linearGradient> |
|||
<linearGradient id="paint18_linear_4178_61388" x1="25.2371" y1="15" x2="25.2371" y2="41.6877" gradientUnits="userSpaceOnUse"> |
|||
<stop stop-color="#0029B3"/> |
|||
<stop offset="0.1" stop-color="#0038BF"/> |
|||
<stop offset="0.2" stop-color="#0E4ACC"/> |
|||
<stop offset="0.3" stop-color="#255CD9"/> |
|||
<stop offset="0.4" stop-color="#3D6FE6"/> |
|||
<stop offset="0.5" stop-color="#487EFF"/> |
|||
<stop offset="0.65" stop-color="#4B80FF"/> |
|||
<stop offset="0.8" stop-color="#5D8BFF"/> |
|||
<stop offset="1" stop-color="#ADBFFF"/> |
|||
</linearGradient> |
|||
<linearGradient id="paint19_linear_4178_61388" x1="25.2371" y1="15" x2="25.2371" y2="41.6877" gradientUnits="userSpaceOnUse"> |
|||
<stop stop-color="#0029B3"/> |
|||
<stop offset="0.1" stop-color="#0038BF"/> |
|||
<stop offset="0.2" stop-color="#0E4ACC"/> |
|||
<stop offset="0.3" stop-color="#255CD9"/> |
|||
<stop offset="0.4" stop-color="#3D6FE6"/> |
|||
<stop offset="0.5" stop-color="#487EFF"/> |
|||
<stop offset="0.65" stop-color="#4B80FF"/> |
|||
<stop offset="0.8" stop-color="#5D8BFF"/> |
|||
<stop offset="1" stop-color="#ADBFFF"/> |
|||
</linearGradient> |
|||
</defs> |
|||
</svg> |
|||
@ -0,0 +1,24 @@ |
|||
services: |
|||
web: |
|||
build: |
|||
context: . |
|||
dockerfile: Dockerfile |
|||
image: teamby-landing:latest |
|||
container_name: teamby_landing |
|||
restart: unless-stopped |
|||
env_file: |
|||
- .env.prod |
|||
ports: |
|||
- "8065:3000" |
|||
healthcheck: |
|||
test: ["CMD-SHELL", "wget -qO- http://127.0.0.1:3000/ || exit 1"] |
|||
interval: 30s |
|||
timeout: 5s |
|||
retries: 3 |
|||
start_period: 15s |
|||
networks: |
|||
- teamby_backend_teamby |
|||
|
|||
networks: |
|||
teamby_backend_teamby: |
|||
external: true |
|||
@ -1,7 +1,7 @@ |
|||
import type { NextConfig } from "next"; |
|||
|
|||
const nextConfig: NextConfig = { |
|||
/* config options here */ |
|||
output: "standalone", |
|||
}; |
|||
|
|||
export default nextConfig; |
|||
@ -0,0 +1,3 @@ |
|||
#!/bin/bash |
|||
set -e |
|||
git pull origin master --rebase && docker compose up -d --build |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue