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"; |
import type { NextConfig } from "next"; |
||||
|
|
||||
const nextConfig: NextConfig = { |
const nextConfig: NextConfig = { |
||||
/* config options here */ |
|
||||
|
output: "standalone", |
||||
}; |
}; |
||||
|
|
||||
export default nextConfig; |
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