استضافة ذاتية لـ Discourse في الصين بعد الحواجز الحكومية

الخلفية

تعد وثائق الاستضافة الذاتية لـ Discourse ممتازة، وقد تمت عملية التثبيت بسلاسة. ومع ذلك، واجهت مشاكل عند نشر خادمي في البر الرئيسي للصين، خلف جدار الحماية العظيم.

المشكلة

في كل مرة أقوم فيها بتشغيل ./launcher rebuild app، تفشل العملية بسبب قيود الشبكة. فيما يلي رسائل الخطأ الرئيسية:

I, [2025-01-14T10:21:45.402169 #1]  INFO -- : Scope: all 17 workspace projects
Lockfile is up to date, resolution step is skipped
Progress: resolved 1, reused 0, downloaded 0, added 0
Packages: +87 -15
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------
Progress: resolved 87, reused 46, downloaded 0, added 33
Progress: resolved 87, reused 46, downloaded 18, added 53
Progress: resolved 87, reused 46, downloaded 25, added 61
Progress: resolved 87, reused 46, downloaded 29, added 66
Progress: resolved 87, reused 46, downloaded 30, added 67
Progress: resolved 87, reused 46, downloaded 30, added 68
 WARN  GET https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz error (ECONNRESET). Will retry in 10 seconds. 2 retries left.
 WARN  GET https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz error (ECONNRESET). Will retry in 10 seconds. 2 retries left.
 WARN  GET https://registry.npmjs.org/lefthook-linux-x64/-/lefthook-linux-x64-1.10.4.tgz error (ECONNRESET). Will retry in 10 seconds. 2 retries left.
 WARN  GET https://registry.npmjs.org/@embroider/compat/-/compat-3.8.0.tgz error (ECONNRESET). Will retry in 10 seconds. 2 retries left.
 WARN  GET https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.7.2.tgz error (ECONNRESET). Will retry in 10 seconds. 2 retries left.
 WARN  GET https://registry.npmjs.org/ace-builds/-/ace-builds-1.37.4.tgz error (ECONNRESET). Will retry in 10 seconds. 2 retries left.
 WARN  GET https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz error (ERR_SOCKET_TIMEOUT). Will retry in 1 minute. 1 retries left.
 WARN  GET https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz error (ERR_SOCKET_TIMEOUT). Will retry in 1 minute. 1 retries left.
 WARN  GET https://registry.npmjs.org/lefthook-linux-x64/-/lefthook-linux-x64-1.10.4.tgz error (ERR_SOCKET_TIMEOUT). Will retry in 1 minute. 1 retries left.
 WARN  GET https://registry.npmjs.org/@embroider/compat/-/compat-3.8.0.tgz error (ERR_SOCKET_TIMEOUT). Will retry in 1 minute. 1 retries left.
 WARN  GET https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.7.2.tgz error (ERR_SOCKET_TIMEOUT). Will retry in 1 minute. 1 retries left.
 WARN  GET https://registry.npmjs.org/ace-builds/-/ace-builds-1.37.4.tgz error (ERR_SOCKET_TIMEOUT). Will retry in 1 minute. 1 retries left.
 ERR_SOCKET_TIMEOUT  request to https://registry.npmjs.org/@embroider/compat/-/compat-3.8.0.tgz failed, reason: Socket timeout

FetchError: request to https://registry.npmjs.org/@embroider/compat/-/compat-3.8.0.tgz failed, reason: Socket timeout
    at ClientRequest.<anonymous> (/usr/lib/node_modules/pnpm/dist/pnpm.cjs:66979:18)
    at ClientRequest.emit (node:events:517:28)
    at TLSSocket.socketErrorListener (node:_http_client:501:9)
    at TLSSocket.emit (node:events:529:35)
    at emitErrorNT (node:internal/streams/destroy:151:8)
    at emitErrorCloseNT (node:internal/streams/destroy:116:3)
    at process.processTicksAndRejections (node:internal/process/task_queues:82:21)

I, [2025-01-14T10:21:45.402602 #1]  INFO -- : Terminating async processes
I, [2025-01-14T10:21:45.402652 #1]  INFO -- : Sending INT to HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 39
107:signal-handler (1736850105) Received SIGTERM scheduling shutdown...
I, [2025-01-14T10:21:45.402684 #1]  INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 107
2025-01-14 10:21:45.402 UTC [39] LOG:  received fast shutdown request
2025-01-14 10:21:45.404 UTC [39] LOG:  aborting any active transactions
2025-01-14 10:21:45.406 UTC [39] LOG:  background worker "logical replication launcher" (PID 54) exited with exit code 1
2025-01-14 10:21:45.407 UTC [49] LOG:  shutting down
2025-01-14 10:21:45.431 UTC [39] LOG:  database system is shut down
107:M 14 Jan 2025 10:21:45.436 # User requested shutdown...
107:M 14 Jan 2025 10:21:45.436 * Saving the final RDB snapshot before exiting.
107:M 14 Jan 2025 10:21:45.441 * DB saved on disk
107:M 14 Jan 2025 10:21:45.441 # Redis is now ready to exit, bye bye...


FAILED
--------------------
Pups::ExecError: cd /var/www/discourse &amp;&amp; if [ -f yarn.lock ]; then
  if [ -d node_modules/.pnpm ]; then
    echo "This version of Discourse uses yarn, but pnpm node_modules are preset. Cleaning up..."
    find ./node_modules ./app/assets/javascripts/*/node_modules -mindepth 1 -maxdepth 1 -exec rm -rf {} +
  fi
  su discourse -c 'yarn install --frozen-lockfile &amp;&amp; yarn cache clean'
else
  su discourse -c 'CI=1 pnpm install --frozen-lockfile &amp;&amp; pnpm prune'
fi failed with return #&lt;Process::Status: pid 301 exit 1&gt;
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec failed with the params {"cd"=&gt;"$home", "hook"=&gt;"yarn", "cmd"=&gt;["if [ -f yarn.lock ]; then\n  if [ -d node_modules/.pnpm ]; then\n    echo \"This version of Discourse uses yarn, but pnpm node_modules are preset. Cleaning up...\"\n    find ./node_modules ./app/assets/javascripts/*/node_modules -mindepth 1 -maxdepth 1 -exec rm -rf {} +\n  fi\n  su discourse -c 'yarn install --frozen-lockfile &amp;&amp; yarn cache clean'\nelse\n  su discourse -c 'CI=1 pnpm install --frozen-lockfile &amp;&amp; pnpm prune'\nfi"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
58bc76b977b8eb7c806f0308caacabe389605c6242852e8f17c30076b728de67

يبدو أن الفشل ناتج عن عدم القدرة على جلب الحزم أو التبعيات (مثلًا، من GitHub أو npm) بسبب قيود الشبكة في البر الرئيسي للصين.

ما جربته

استخدام بروكسي: حاولت إعداد خادم بروكسي باستخدام Shell Clash ونجحت في الوصول إلى Google (الذي يتعذر الوصول إليه عادةً من البر الرئيسي للصين). إليك نتيجة الاختبار:

root@lavm-hypge0pc5w:/var/discourse# sudo wget google.com
--2025-01-14 18:35:22--  http://google.com/
Resolving google.com (google.com)... 198.18.0.5
Connecting to google.com (google.com)|198.18.0.5|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://www.google.com/ [following]
--2025-01-14 18:35:22--  http://www.google.com/
Resolving www.google.com (www.google.com)... 198.18.0.6
Connecting to www.google.com (www.google.com)|198.18.0.6|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html.2’

index.html.2                                       [ <=>                                                                                              ]  19.38K  --.-KB/s    in 0.05s   

2025-01-14 18:35:22 (372 KB/s) - ‘index.html.2’ saved [19841]

root@lavm-hypge0pc5w:/var/discourse# 

ومع ذلك، بعد تشغيل ./launcher rebuild app، ما زلت أحصل على نفس الخطأ السابق.

أسئلة

هل هناك أي طريقة لنشر Discourse بنجاح على خادم يقع في البر الرئيسي للصين؟

إعجابَين (2)

مرحباً :slight_smile:

هل اطلعت على 🇨🇳 Discourse Official Install Guide | Discourse 云平台安装 فهو يغطي المشكلات الشائعة عند تثبيت Discourse في الصين القارية.

إعجابَين (2)

نعم، لقد رأيت هذا المنشور. إنه في الأساس ترجمة صينية لـ INSTALL-cloud.md.

تم حل مشكلتي بإضافة السطر التالي إلى ملف app.yaml الخاص بي:
- "templates/web.china.template.yml"

إذا كنت تواجه مشكلة مماثلة، فقد تجد هذه المقالة مفيدة: دليل تثبيت Discourse.

وهو يغطي الأجزاء الخاصة بالصين، مثل المشكلة التي واجهتها:

لقد فاتني هذا السطر تمامًا. شكرًا جزيلاً!

إعجاب واحد (1)

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.