सामान्य कमांड

अपने rtCloud कंटेनर प्रबंधित करने के लिए नियमित रूप से इन कमांड का उपयोग करें। इन्हें docker-compose.production.yml वाली डायरेक्टरी से चलाएं।

  # सभी कंटेनरों की स्थिति और स्वास्थ्य जांचें
docker compose -f docker-compose.production.yml ps

# लाइव लॉग देखें (सभी सेवाएं)
docker compose -f docker-compose.production.yml logs -f

# केवल ऐप के लॉग देखें
docker compose -f docker-compose.production.yml logs -f rtcloud

# एक कंटेनर पुनः शुरू करें
docker compose -f docker-compose.production.yml restart rtcloud

# सभी सेवाएं बंद करें
docker compose -f docker-compose.production.yml down

# सभी सेवाएं शुरू करें
docker compose -f docker-compose.production.yml up -d

# ऐप कंटेनर के अंदर एक शेल खोलें
docker compose -f docker-compose.production.yml exec rtcloud bash
  

अपग्रेड करना

rtCloud अपडेट नए Docker इमेज टैग के रूप में वितरित किए जाते हैं। अपग्रेड करने से नवीनतम इमेज पुल होती है और ऐप कंटेनर फिर से बनता है। डेटाबेस माइग्रेशन स्टार्टअप पर स्वचालित रूप से चलते हैं।

1. नवीनतम इमेज पुल करें:

  docker compose -f docker-compose.production.yml pull
  

2. ऐप कंटेनर फिर से बनाएं:

  docker compose -f docker-compose.production.yml up -d
  

Docker केवल उन कंटेनरों को बदलता है जिनकी इमेज बदली है। MySQL कंटेनर और सभी नामित वॉल्यूम अप्रभावित रहते हैं।

संस्करण पिन करना

latest के बजाय किसी विशिष्ट संस्करण में अपग्रेड करने के लिए, .env में RTCLOUD_IMAGE अपडेट करें:

  RTCLOUD_IMAGE=rtawebteam/rta-smartsurvey:1.2.3
  

फिर ऊपर बताए अनुसार docker compose pull और up -d चलाएं।

डाउनग्रेड करना

डाउनग्रेड करना आमतौर पर अनुशंसित नहीं है, क्योंकि डेटाबेस माइग्रेशन को उलट नहीं किया जा सकता। यदि डाउनग्रेड आवश्यक है, तो अपग्रेड से पहले लिए गए डेटाबेस बैकअप से रिस्टोर करें।


बैकअप और रिस्टोर

डेटाबेस बैकअप

एप्लिकेशन डेटाबेस को SQL फ़ाइल में निर्यात करने के लिए यह कमांड चलाएं:

  docker compose -f docker-compose.production.yml exec mysql \
  mysqldump -u root -p"$(grep MYSQL_ROOT_PASSWORD .env | cut -d= -f2)" smartsurvey \
  > backup-$(date +%Y%m%d-%H%M%S).sql
  

बैकअप फ़ाइल होस्ट पर आपकी वर्तमान डायरेक्टरी में लिखी जाती है।

डेटाबेस रिस्टोर

  docker compose -f docker-compose.production.yml exec -T mysql \
  mysql -u root -p"$(grep MYSQL_ROOT_PASSWORD .env | cut -d= -f2)" smartsurvey \
  < backup-20240101-120000.sql
  

अपलोड की गई फ़ाइलों का बैकअप

सर्वेक्षण सबमिशन में अक्सर अपलोड की गई फ़ाइलें (फ़ोटो, ऑडियो, दस्तावेज़) शामिल होती हैं जो नामित Docker वॉल्यूम में संग्रहीत होती हैं। इन्हें डेटाबेस से अलग बैकअप करें:

  # अपलोड बैकअप करें
docker run --rm \
  -v rtcloud_uploads:/data \
  -v "$(pwd):/backup" \
  alpine tar czf /backup/uploads-$(date +%Y%m%d).tar.gz -C /data .

# ऑडियो रिकॉर्डिंग बैकअप करें
docker run --rm \
  -v rtcloud_audios:/data \
  -v "$(pwd):/backup" \
  alpine tar czf /backup/audios-$(date +%Y%m%d).tar.gz -C /data .
  

यदि आपने डिफ़ॉल्ट बदला है तो rtcloud_uploads और rtcloud_audios को आपके वास्तविक वॉल्यूम नामों (COMPOSE_PROJECT_NAME से उपसर्गित) से बदलें।

अपलोड की गई फ़ाइलें रिस्टोर करें

  docker run --rm \
  -v rtcloud_uploads:/data \
  -v "$(pwd):/backup" \
  alpine tar xzf /backup/uploads-20240101.tar.gz -C /data
  

स्वचालित दैनिक बैकअप

बैकअप स्वचालित रूप से चलाने के लिए होस्ट पर एक cron जॉब जोड़ें। crontab -e के साथ root crontab संपादित करें:

  # सुबह 2:00 बजे दैनिक डेटाबेस बैकअप, 30 दिनों का इतिहास रखें
0 2 * * * cd /opt/rtcloud && docker compose -f docker-compose.production.yml exec -T mysql \
  mysqldump -u root -p"$(grep MYSQL_ROOT_PASSWORD .env | cut -d= -f2)" smartsurvey \
  > /backups/db-$(date +\%Y\%m\%d).sql && \
  find /backups -name "db-*.sql" -mtime +30 -delete
  

समस्या निवारण

ऐप कंटेनर शुरू नहीं हो रहा

त्रुटि संदेशों के लिए कंटेनर लॉग जांचें:

  docker compose -f docker-compose.production.yml logs rtcloud
  

सामान्य कारण:

  • .env में गुम या अमान्य पर्यावरण चर
  • MySQL अभी तैयार नहीं है (60 सेकंड प्रतीक्षा करें और फिर जांचें)
  • पोर्ट संघर्ष — कोई अन्य प्रक्रिया पहले से APP_PORT का उपयोग कर रही है

MySQL स्वस्थ नहीं है

  docker compose -f docker-compose.production.yml logs mysql
  

सामान्य कारण:

  • .env में MYSQL_ROOT_PASSWORD सेट नहीं है
  • दूषित डेटा वॉल्यूम (दुर्लभ — df -h के साथ डिस्क स्थान जांचें)

पहले बूट पर MySQL को शुरू होने में 30–60 सेकंड लग सकते हैं। विफलता मानने से पहले प्रतीक्षा करें और फिर जांचें।

पोर्ट पहले से उपयोग में है

.env में APP_PORT या SHINY_PORT को एक मुक्त पोर्ट में बदलें, फिर कंटेनरों को फिर से बनाएं:

  docker compose -f docker-compose.production.yml up -d --force-recreate
  

होस्ट पर एक पोर्ट का उपयोग क्या कर रहा है, यह जांचने के लिए:

  lsof -i :8080
  

400 CSRF Token सत्यापित नहीं किया जा सका

यह त्रुटि स्थानीय या रिवर्स-प्रॉक्सी परिवेशों में दिखाई देती है जहाँ अनुरोध मूल अपेक्षित होस्ट से मेल नहीं खाता। केवल स्थानीय विकास के लिए CSRF सत्यापन अक्षम करें:

  CSRF_VALIDATION_ENABLED=false
  

फिर ऐप पुनः शुरू करें:

  docker compose -f docker-compose.production.yml up -d --force-recreate rtcloud
  

प्रोडक्शन में CSRF सत्यापन अक्षम न करें। यदि प्रोडक्शन में यह त्रुटि होती है, तो सुनिश्चित करें कि आपका रिवर्स प्रॉक्सी सही Host और X-Forwarded-For हेडर फॉरवर्ड कर रहा है।

Admin पासवर्ड भूल गए

डेटाबेस में सीधे admin पासवर्ड रीसेट करें। MySQL कंटेनर से कनेक्ट करें और पासवर्ड हैश अपडेट करें:

चरण 1 — नया पासवर्ड हैश जेनरेट करें। newpassword को अपने इच्छित पासवर्ड से बदलें:

  docker compose -f docker-compose.production.yml exec rtcloud php -r "
  \$salt = trim(shell_exec(\"mysql -h mysql -u root -p\\\"\${MYSQL_ROOT_PASSWORD}\\\" \${MYSQL_DATABASE} -se \\\"SELECT salt FROM ss_user WHERE username='admin';\\\"\"));
  echo md5(\$salt . 'newpassword') . PHP_EOL;
"
  

चरण 2 — डेटाबेस में हैश अपडेट करें:

  docker compose -f docker-compose.production.yml exec mysql \
  mysql -u root -p"${MYSQL_ROOT_PASSWORD}" smartsurvey \
  -e "UPDATE ss_user SET password='<hash_from_step_1>' WHERE username='admin';"
  

कंटेनर बार-बार पुनः शुरू हो रहा है

जांचें कि क्या हेल्थ चेक विफल हो रही है:

  docker compose -f docker-compose.production.yml ps
docker inspect rtcloud-app --format '{{json .State.Health}}'
  

ऐप हेल्थ चेक /health endpoint को कॉल करती है। यदि यह बार-बार विफल होती है, तो स्टार्टअप त्रुटियों के लिए एप्लिकेशन लॉग जांचें।

डिस्क स्थान भरा हुआ है

क्या उपभोग हो रहा है, पहचानें:

  # होस्ट डिस्क उपयोग जांचें
df -h

# Docker डिस्क उपयोग जांचें (इमेज, कंटेनर, वॉल्यूम)
docker system df

# अप्रयुक्त इमेज और बंद कंटेनर हटाएं (चलाना सुरक्षित है)
docker system prune
  

docker system prune --volumes का उपयोग न करें क्योंकि इससे एप्लिकेशन डेटा हट जाएगा।


हेल्थ चेक

प्रत्येक सेवा में एक स्वचालित हेल्थ चेक है। कंटेनर स्थिति परिणाम दर्शाती है:

कंटेनरजांच विधिप्रारंभ अवधिअंतराल
rtcloud-appHTTP GET /health90 सेकंड30 सेकंड
rtcloud-mysqlmysqladmin ping30 सेकंड10 सेकंड
rtcloud-keycloakHTTP GET :9000/health/live120 सेकंड30 सेकंड

विफल हेल्थ चेक वाले कंटेनर RESTART_POLICY सेटिंग (डिफ़ॉल्ट: unless-stopped) के अनुसार स्वचालित रूप से पुनः शुरू किए जाते हैं।

क्या यह पृष्ठ सहायक था?