7 changed files with 40 additions and 48 deletions
-
4Dockerfile
-
21Jenkinsfile
-
24docker-compose.yml
-
13docker/40-config-js.sh
-
18docker/nginx/default.conf.template
-
6runner.sh
-
2src/services/http.ts
@ -0,0 +1,21 @@ |
|||
pipeline { |
|||
environment { |
|||
production_server_ip = "88.99.212.243" |
|||
production_server_name = "newhorizon_germany_001_server" |
|||
project_path = "/projects/aqila/aqila_panel" |
|||
} |
|||
agent any |
|||
stages { |
|||
stage("deploy"){ |
|||
steps{ |
|||
script{ |
|||
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\"" |
|||
def lastCommit = sh(script: "git log -1 --pretty=format:\"%h - %s (%an)\"", returnStdout: true).trim() |
|||
sh "curl -F chat_id=-1002316394394 -F message_thread_id=11 -F document=@/var/jenkins_home/jobs/${env.JOB_NAME}/builds/${env.BUILD_NUMBER}/log -F caption='Project name: #${env.JOB_NAME} \nBuild status is ${currentBuild.currentResult} \nBuild url: ${BUILD_URL} \nLast Commit: ${lastCommit}' https://api.telegram.org/bot7207581748:AAFeymryw7S44D86LYfWqYK-tSNeV3TOwBs/sendDocument" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -1,39 +1,27 @@ |
|||
# docker-compose برای داشبورد حسینیه (SPA پشت nginx). |
|||
# |
|||
# منبع واحد env در پروداکشن: فایل .env.production (با env_file خوانده میشود). |
|||
# همهٔ متغیرها از همان یک جا میآیند و در runtime به کانتینر تزریق میشوند. |
|||
|
|||
services: |
|||
web: |
|||
build: |
|||
context: . |
|||
dockerfile: Dockerfile |
|||
image: hosseinieh-dashboard:latest |
|||
container_name: hosseinieh-dashboard |
|||
image: aqila-panel:latest |
|||
container_name: aqila_panel |
|||
restart: unless-stopped |
|||
|
|||
# ← تنها منبع متغیرهای محیط در پروداکشن |
|||
env_file: |
|||
- .env.production |
|||
|
|||
# ← پورت 5010 میزبان به 80 کانتینر (nginx) |
|||
ports: |
|||
- "5010:80" |
|||
|
|||
# دسترسی به بکاندی که روی خود میزبان اجرا میشود (host.docker.internal) |
|||
# extra_hosts: |
|||
# - "host.docker.internal:host-gateway" |
|||
- "5013:80" |
|||
|
|||
healthcheck: |
|||
test: ["CMD", "wget", "-qO-", "http://localhost/healthz"] |
|||
test: ["CMD", "wget", "-qO-", "http://127.0.0.1/healthz"] |
|||
interval: 30s |
|||
timeout: 3s |
|||
retries: 3 |
|||
start_period: 10s |
|||
networks: |
|||
- najm_najm |
|||
- aqila_backend_aqila |
|||
|
|||
networks: |
|||
najm_najm: |
|||
aqila_backend_aqila: |
|||
external: true |
|||
|
|||
@ -1,26 +1,19 @@ |
|||
#!/bin/sh |
|||
# تولید /config.js از متغیرهای محیط — «منبع واحدِ env در runtime». |
|||
# |
|||
# nginx رسمی هر اسکریپت اجراییِ /docker-entrypoint.d/*.sh را پیش از استارت سرور |
|||
# اجرا میکند. اینجا مقادیر env (که از .env.production → docker-compose میآیند) |
|||
# را در window.__ENV__ مینویسیم تا app آنها را در runtime بخواند — بدون rebuild. |
|||
# |
|||
# توجه: کلید Soniox از این مسیر نمیآید — در کد هاردکد شده است (نه env، نه API). |
|||
set -eu |
|||
|
|||
TARGET="/usr/share/nginx/html/config.js" |
|||
|
|||
# پیشفرضها (همراستا با fallbackهای کد). با env قابل override. |
|||
VITE_API_BASE_URL="${VITE_API_BASE_URL:-/api}" |
|||
VITE_AUTH_SCHEME="${VITE_AUTH_SCHEME:-Token}" |
|||
|
|||
# escape امنِ مقادیر برای قرارگیری داخل رشتهٔ JS (backslash، کوتیشن، خط جدید). |
|||
js_escape() { |
|||
printf '%s' "$1" | sed -e 's/\\/\\\\/g' -e "s/'/\\\\'/g" | tr '\n' ' ' |
|||
printf '%s' "$1" | sed -e 's/\\/\\\\/g' -e "s/'/\\'/g" | tr '\n' ' ' |
|||
} |
|||
|
|||
{ |
|||
echo "window.__ENV__ = {" |
|||
echo " VITE_API_BASE_URL: '$(js_escape "$VITE_API_BASE_URL")'," |
|||
echo " VITE_AUTH_SCHEME: '$(js_escape "$VITE_AUTH_SCHEME")'," |
|||
echo "};" |
|||
} > "$TARGET" |
|||
|
|||
|
|||
@ -1,2 +1,4 @@ |
|||
|
|||
git pull origin master && docker compose up -d --build |
|||
#!/bin/bash |
|||
git pull origin master |
|||
DOCKER_BUILDKIT=1 docker compose up -d --build web |
|||
docker exec nginx-nginx-1 nginx -s reload |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue