Fix for production

This commit is contained in:
mahmood
2026-09-10 22:37:29 +03:30
parent efb0051ab9
commit ec899defb9
95 changed files with 219589 additions and 110 deletions
+1
View File
@@ -0,0 +1 @@
VITE_API_BASE_URL=https://api.wheel.montzar.ir/api
+5 -25
View File
@@ -1,30 +1,10 @@
FROM node:20-alpine AS builder
FROM docker.arvancloud.ir/nginx:latest
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN corepack enable pnpm
# بیلد لوکال: pnpm --filter @lucky-wheel/client build
# (با apps/client/.env.production)
WORKDIR /app
COPY . .
RUN pnpm install --frozen-lockfile
RUN pnpm --filter @lucky-wheel/client build
FROM nginx:alpine
COPY --from=builder /app/apps/client/dist /usr/share/nginx/html
# Configure Nginx for Single Page Application
RUN echo 'server { \
listen 80; \
server_name localhost; \
location / { \
root /usr/share/nginx/html; \
index index.html index.htm; \
try_files $uri $uri/ /index.html; \
} \
}' > /etc/nginx/conf.d/default.conf
COPY apps/client/nginx.conf /etc/nginx/conf.d/default.conf
COPY apps/client/dist /usr/share/nginx/html
EXPOSE 80
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+46
View File
@@ -0,0 +1,46 @@
import{C as a}from"./index-ilYp-WvI.js";const s=["۰","۱","۲","۳","۴","۵","۶","۷","۸","۹"];function g(e){return e==null||typeof e=="object"&&e!==null&&"value"in e&&(e=e.value,e==null)||typeof e=="object"?"":String(e).replace(/[0-9]/g,t=>s[+t]).replace(/[٠-٩]/g,t=>s[t.charCodeAt(0)-1632])}/**
* @license lucide-vue-next v0.378.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const p=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();/**
* @license lucide-vue-next v0.378.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/var r={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};/**
* @license lucide-vue-next v0.378.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const y=({size:e,strokeWidth:t=2,absoluteStrokeWidth:c,color:n,iconNode:h,name:d,class:k,...u},{slots:i})=>a("svg",{...r,width:e||r.width,height:e||r.height,stroke:n||r.stroke,"stroke-width":c?Number(t)*24/Number(e):t,class:["lucide",`lucide-${p(d??"icon")}`],...u},[...h.map(l=>a(...l)),...i.default?[i.default()]:[]]);/**
* @license lucide-vue-next v0.378.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const o=(e,t)=>(c,{slots:n})=>a(y,{...c,iconNode:t,name:e},n);/**
* @license lucide-vue-next v0.378.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const f=o("ArrowRightIcon",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]);/**
* @license lucide-vue-next v0.378.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const C=o("AwardIcon",[["path",{d:"m15.477 12.89 1.515 8.526a.5.5 0 0 1-.81.47l-3.58-2.687a1 1 0 0 0-1.197 0l-3.586 2.686a.5.5 0 0 1-.81-.469l1.514-8.526",key:"1yiouv"}],["circle",{cx:"12",cy:"8",r:"6",key:"1vp47v"}]]);/**
* @license lucide-vue-next v0.378.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const m=o("CheckIcon",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/**
* @license lucide-vue-next v0.378.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const I=o("CopyIcon",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);/**
* @license lucide-vue-next v0.378.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const A=o("LoaderCircleIcon",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);export{f as A,m as C,A as L,C as a,I as b,o as c,g as t};
+18
View File
@@ -0,0 +1,18 @@
<!DOCTYPE html>
<html lang="fa" dir="rtl">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🎡</text></svg>" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>گردونه شانس و قرعه‌کشی</title>
<!-- Google Font Vazirmatn -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Vazirmatn:wght@400;500;600;700;800;900&display=swap" rel="stylesheet">
<script type="module" crossorigin src="/assets/index-ilYp-WvI.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-BqdIdFn_.css">
</head>
<body class="bg-slate-900 text-slate-100 font-sans antialiased selection:bg-brand-500 selection:text-white overflow-x-hidden min-h-screen">
<div id="app"></div>␍
</body>
</html>
+18
View File
@@ -0,0 +1,18 @@
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html;
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
location / {
try_files $uri $uri/ /index.html;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
expires 7d;
add_header Cache-Control "public";
}
}
+3 -1
View File
@@ -6,8 +6,10 @@ declare module 'axios' {
}
}
const apiBaseURL = import.meta.env.VITE_API_BASE_URL || '/api';
export const apiClient = axios.create({
baseURL: '/api',
baseURL: apiBaseURL,
headers: {
'Content-Type': 'application/json',
},
+9
View File
@@ -0,0 +1,9 @@
/// <reference types="vite/client" />
interface ImportMetaEnv {
readonly VITE_API_BASE_URL?: string;
}
interface ImportMeta {
readonly env: ImportMetaEnv;
}