Migrate to Blazor WASM, MSSQL platform DB, and durable audio PVC.
build-and-deploy / deploy (push) Failing after 15m11s
build-and-deploy / deploy (push) Failing after 15m11s
Remove in-cluster Postgres; serve WASM via nginx; add audio import job for Gooya archives.
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
# One-shot import of Tafsir Gooya audio into tafsirquran-audio PVC.
|
||||
# Run: kubectl -n tafsirquran apply -f k8s/audio-import-job.yaml
|
||||
# Watch: kubectl -n tafsirquran logs -f job/tafsirquran-audio-import
|
||||
apiVersion: batch/v1
|
||||
kind: Job
|
||||
metadata:
|
||||
name: tafsirquran-audio-import
|
||||
namespace: tafsirquran
|
||||
spec:
|
||||
backoffLimit: 1
|
||||
ttlSecondsAfterFinished: 86400
|
||||
template:
|
||||
spec:
|
||||
restartPolicy: Never
|
||||
containers:
|
||||
- name: import
|
||||
image: debian:bookworm-slim
|
||||
command: ["/bin/bash", "-lc"]
|
||||
args:
|
||||
- |
|
||||
set -euo pipefail
|
||||
apt-get update -qq
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install -y -qq curl unrar ca-certificates >/dev/null
|
||||
chmod +x /scripts/fetch-audio.sh
|
||||
/scripts/fetch-audio.sh /data/audio
|
||||
volumeMounts:
|
||||
- name: audio
|
||||
mountPath: /data/audio
|
||||
- name: scripts
|
||||
mountPath: /scripts
|
||||
resources:
|
||||
requests:
|
||||
memory: 512Mi
|
||||
cpu: 250m
|
||||
volumes:
|
||||
- name: audio
|
||||
persistentVolumeClaim:
|
||||
claimName: tafsirquran-audio
|
||||
- name: scripts
|
||||
configMap:
|
||||
name: tafsirquran-audio-scripts
|
||||
defaultMode: 0755
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: tafsirquran-audio-scripts
|
||||
namespace: tafsirquran
|
||||
data:
|
||||
fetch-audio.sh: |
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
AUDIO_DIR="${1:-/data/audio}"
|
||||
PASSWORD="www.p30download.com"
|
||||
BASE_URL="https://pdn.sharezilla.ir/d/audio"
|
||||
WORKDIR="${AUDIO_DIR}/.download"
|
||||
mkdir -p "$AUDIO_DIR" "$WORKDIR"
|
||||
SLUGS=(
|
||||
001.Tafsir.Gooya.Hamd 002.Tafsir.Gooya.Baqara 003.Tafsir.Gooya.Ale.imran 004.Tafsir.Gooya.Nisa
|
||||
005.Tafsir.Gooya.Maeda 006.Tafsir.Gooya.Anaam 007.Tafsir.Gooya.Araf 008.Tafsir.Gooya.Anfal
|
||||
009.Tafsir.Gooya.Tawba 010.Tafsir.Gooya.Yunus 011.Tafsir.Gooya.Hud 012.Tafsir.Gooya.Yusuf
|
||||
013.Tafsir.Gooya.Rad 014.Tafsir.Gooya.Ibrahim 015.Tafsir.Gooya.Hijr 016.Tafsir.Gooya.Nahl
|
||||
017.Tafsir.Gooya.Isra 018.Tafsir.Gooya.Kahf 019.Tafsir.Gooya.Maryam 020.Tafsir.Gooya.Taha
|
||||
021.Tafsir.Gooya.Anbiya 022.Tafsir.Gooya.Hajj 023.Tafsir.Gooya.Mumenoon 024.Tafsir.Gooya.Noor
|
||||
025.Tafsir.Gooya.Furqan 026.Tafsir.Gooya.Shuara 027.Tafsir.Gooya.Naml 028.Tafsir.Gooya.Qasas
|
||||
029.Tafsir.Gooya.Ankaboot 030.Tafsir.Gooya.Room 031.Tafsir.Gooya.Luqman 032.Tafsir.Gooya.Sajda
|
||||
033.Tafsir.Gooya.Ahzab 034.Tafsir.Gooya.Saba 035.Tafsir.Gooya.Fatir 036.Tafsir.Gooya.Yaseen
|
||||
037.Tafsir.Gooya.Saaffat 038.Tafsir.Gooya.Sad 039.Tafsir.Gooya.Zumar 040.Tafsir.Gooya.Ghafir
|
||||
041.Tafsir.Gooya.Fussilat 042.Tafsir.Gooya.Shura 043.Tafsir.Gooya.Zukhruf 044.Tafsir.Gooya.Dukhan
|
||||
045.Tafsir.Gooya.Jathiya 046.Tafsir.Gooya.Ahqaf 047.Tafsir.Gooya.Muhammad 048.Tafsir.Gooya.Fath
|
||||
049.Tafsir.Gooya.Hujaraat 050.Tafsir.Gooya.Qaf 051.Tafsir.Gooya.Dhariyat 052.Tafsir.Gooya.Tur
|
||||
053.Tafsir.Gooya.Najm 054.Tafsir.Gooya.Qamar 055.Tafsir.Gooya.Ar-Rahman 056.Tafsir.Gooya.Waqia
|
||||
057.Tafsir.Gooya.Hadid 058.Tafsir.Gooya.Mujadila 059.Tafsir.Gooya.Hashr 060.Tafsir.Gooya.Mumtahina
|
||||
061.Tafsir.Gooya.Saff 062.Tafsir.Gooya.Jumua 063.Tafsir.Gooya.Munafiqoon 064.Tafsir.Gooya.Taghabun
|
||||
065.Tafsir.Gooya.Talaq 066.Tafsir.Gooya.Tahrim 067.Tafsir.Gooya.Mulk 068.Tafsir.Gooya.Qalam
|
||||
069.Tafsir.Gooya.Haaqqa 070.Tafsir.Gooya.Maarij 071.Tafsir.Gooya.Nooh 072.Tafsir.Gooya.Jinn
|
||||
073.Tafsir.Gooya.Muzzammil 074.Tafsir.Gooya.muddaththir 075.Tafsir.Gooya.Qiyama 076.Tafsir.Gooya.Insan
|
||||
077.Tafsir.Gooya.Mursalat 078.Tafsir.Gooya.Naba 079.Tafsir.Gooya.Naziat 080.Tafsir.Gooya.Abasa
|
||||
081.Tafsir.Gooya.Takwir 082.Tafsir.Gooya.Infitar 083.Tafsir.Gooya.Mutaffifin 084.Tafsir.Gooya.Inshiqaq
|
||||
085.Tafsir.Gooya.Brooj 086.Tafsir.Gooya.Tariq 087.Tafsir.Gooya.Ala 088.Tafsir.Gooya.Ghashiya
|
||||
089.Tafsir.Gooya.Fajr 090.Tafsir.Gooya.Balad 091.Tafsir.Gooya.Shams 092.Tafsir.Gooya.Lail
|
||||
093.Tafsir.Gooya.Dhuha 094.Tafsir.Gooya.Inshirah 095.Tafsir.Gooya.Tin 096.Tafsir.Gooya.Alaq
|
||||
097.Tafsir.Gooya.Qadr 098.Tafsir.Gooya.Bayyina 099.Tafsir.Gooya.Zalzala 100.Tafsir.Gooya.Adiyat
|
||||
101.Tafsir.Gooya.Qaria 102.Tafsir.Gooya.Takathur 103.Tafsir.Gooya.Asr 104.Tafsir.Gooya.Humaza
|
||||
105.Tafsir.Gooya.Fil 106.Tafsir.Gooya.Quarish 107.Tafsir.Gooya.Maun 108.Tafsir.Gooya.kauther
|
||||
109.Tafsir.Gooya.Kafiroon 110.Tafsir.Gooya.Nasr 111.Tafsir.Gooya.Masad 112.Tafsir.Gooya.Ikhlas
|
||||
113.Tafsir.Gooya.Falaq 114.Tafsir.Gooya.Nas
|
||||
)
|
||||
for slug in "${SLUGS[@]}"; do
|
||||
num="${slug%%.*}"
|
||||
out_dir="${AUDIO_DIR}/${num}"
|
||||
if find "$out_dir" -type f \( -iname '*.mp3' -o -iname '*.m4a' \) 2>/dev/null | grep -q .; then
|
||||
echo "skip $num"; continue
|
||||
fi
|
||||
rar="${WORKDIR}/${slug}.rar"
|
||||
echo "download $slug"
|
||||
curl -fL --retry 5 --retry-delay 3 -o "$rar" "${BASE_URL}/${slug}.rar"
|
||||
mkdir -p "$out_dir"
|
||||
echo "extract $slug"
|
||||
unrar x -o+ -p"${PASSWORD}" "$rar" "${out_dir}/"
|
||||
rm -f "$rar"
|
||||
echo "done $num"
|
||||
done
|
||||
echo "files:" $(find "$AUDIO_DIR" -type f \( -iname '*.mp3' -o -iname '*.m4a' \) | wc -l)
|
||||
+26
-72
@@ -10,8 +10,9 @@ metadata:
|
||||
namespace: tafsirquran
|
||||
type: Opaque
|
||||
stringData:
|
||||
POSTGRES_PASSWORD: tafsir_pg_2026
|
||||
MSSQL_SA_PASSWORD: "87zH26nbqT"
|
||||
Jwt__Key: TafsirQuran-Prod-Secret-Key-Change-Me-32chars
|
||||
ConnectionStrings__Default: "Server=mssql-svc.platform.svc.cluster.local,1433;Database=TafsirQuran;User Id=sa;Password=87zH26nbqT;TrustServerCertificate=True;Encrypt=False"
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
@@ -20,7 +21,7 @@ metadata:
|
||||
namespace: tafsirquran
|
||||
data:
|
||||
ASPNETCORE_URLS: "http://+:5080"
|
||||
ConnectionStrings__Default: "Host=tafsirquran-postgres;Port=5432;Database=tafsirquran;Username=tafsir;Password=tafsir_pg_2026"
|
||||
AudioRoot: "/data/audio"
|
||||
Jwt__Issuer: "TafsirQuran"
|
||||
Jwt__Audience: "TafsirQuran"
|
||||
Jwt__ExpireMinutes: "43200"
|
||||
@@ -31,75 +32,19 @@ metadata:
|
||||
name: tafsirquran-web-env
|
||||
namespace: tafsirquran
|
||||
data:
|
||||
ASPNETCORE_URLS: "http://+:8080"
|
||||
ApiBaseAddress: "http://185.252.31.44:30821/"
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: tafsirquran-pg-data
|
||||
name: tafsirquran-audio
|
||||
namespace: tafsirquran
|
||||
spec:
|
||||
accessModes: ["ReadWriteOnce"]
|
||||
storageClassName: local-path
|
||||
resources:
|
||||
requests:
|
||||
storage: 5Gi
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: tafsirquran-postgres
|
||||
namespace: tafsirquran
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: tafsirquran-postgres
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: tafsirquran-postgres
|
||||
spec:
|
||||
containers:
|
||||
- name: postgres
|
||||
image: postgres:16-alpine
|
||||
ports:
|
||||
- containerPort: 5432
|
||||
env:
|
||||
- name: POSTGRES_USER
|
||||
value: tafsir
|
||||
- name: POSTGRES_DB
|
||||
value: tafsirquran
|
||||
- name: POSTGRES_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: tafsirquran-secrets
|
||||
key: POSTGRES_PASSWORD
|
||||
volumeMounts:
|
||||
- name: data
|
||||
mountPath: /var/lib/postgresql/data
|
||||
readinessProbe:
|
||||
exec:
|
||||
command: ["pg_isready", "-U", "tafsir", "-d", "tafsirquran"]
|
||||
initialDelaySeconds: 5
|
||||
periodSeconds: 5
|
||||
volumes:
|
||||
- name: data
|
||||
persistentVolumeClaim:
|
||||
claimName: tafsirquran-pg-data
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: tafsirquran-postgres
|
||||
namespace: tafsirquran
|
||||
spec:
|
||||
selector:
|
||||
app: tafsirquran-postgres
|
||||
ports:
|
||||
- port: 5432
|
||||
targetPort: 5432
|
||||
storage: 100Gi
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
@@ -131,18 +76,30 @@ spec:
|
||||
secretKeyRef:
|
||||
name: tafsirquran-secrets
|
||||
key: Jwt__Key
|
||||
- name: ConnectionStrings__Default
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: tafsirquran-secrets
|
||||
key: ConnectionStrings__Default
|
||||
volumeMounts:
|
||||
- name: audio
|
||||
mountPath: /data/audio
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /
|
||||
port: 5080
|
||||
initialDelaySeconds: 10
|
||||
initialDelaySeconds: 15
|
||||
periodSeconds: 10
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /
|
||||
port: 5080
|
||||
initialDelaySeconds: 30
|
||||
initialDelaySeconds: 40
|
||||
periodSeconds: 20
|
||||
volumes:
|
||||
- name: audio
|
||||
persistentVolumeClaim:
|
||||
claimName: tafsirquran-audio
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
@@ -178,21 +135,18 @@ spec:
|
||||
image: tafsirquran-web:latest
|
||||
imagePullPolicy: Never
|
||||
ports:
|
||||
- containerPort: 8080
|
||||
envFrom:
|
||||
- configMapRef:
|
||||
name: tafsirquran-web-env
|
||||
- containerPort: 80
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /
|
||||
port: 8080
|
||||
initialDelaySeconds: 10
|
||||
port: 80
|
||||
initialDelaySeconds: 5
|
||||
periodSeconds: 10
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /
|
||||
port: 8080
|
||||
initialDelaySeconds: 30
|
||||
port: 80
|
||||
initialDelaySeconds: 15
|
||||
periodSeconds: 20
|
||||
---
|
||||
apiVersion: v1
|
||||
@@ -205,6 +159,6 @@ spec:
|
||||
selector:
|
||||
app: tafsirquran-web
|
||||
ports:
|
||||
- port: 8080
|
||||
targetPort: 8080
|
||||
- port: 80
|
||||
targetPort: 80
|
||||
nodePort: 30820
|
||||
|
||||
Reference in New Issue
Block a user