# إعداد Let's Encrypt مع عدة نطاقات / تحويلات

**URL:** https://meta.discourse.org/t/set-up-let-s-encrypt-with-multiple-domains-redirects/56685
**Category:** Sysadmins
**Tags:** how-to, letsencrypt
**Created:** [1 فبراير 2017، 2:21ص UTC](https://meta.discourse.org/t/set-up-let-s-encrypt-with-multiple-domains-redirects/56685 "2017-02-01T02:21:03Z")
**Posts on this page:** 20
**Page:** 5

<div class="post-metadata">

### Author: ![textkit](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/textkit/32/500981_2.png) [@textkit](https://meta.discourse.org/u/textkit)
#### Post date: [3 مايو 2025، 2:20ص UTC](https://meta.discourse.org/t/set-up-let-s-encrypt-with-multiple-domains-redirects/56685/156 "2025-05-03T02:20:43Z")

</div>

مرحباً @pfaffman، التعديل على المنشور الأصلي يحتوي على علامة `+` خاطئة في سطر `to:`، مما يكسر التعبير النمطي (regex). يجب إزالتها.

بشكل منفصل، الفقرة التالية تحتاج إلى تعديل لأنها لم تعد منطقية:

> هناك نمطان يحتاجان إلى استبدال، أحدهما ينتهي بـ `--keylength`، والآخر ينتهي بـ `--fullchainpath` (في الملف الفعلي، اسم النطاق الأصلي الخاص بك يأتي قبل كل من هذه المفاتيح). أدخل اسم النطاق الخاص بك (والنطاقات الفرعية الإضافية مسبوقة بـ `-d `) ثم أضف ما يلي إلى قسم `hooks` في ملف `app.yml` الخاص بك (نحو نهاية الملف):

أقترح:

استخدم `domain1` و `domain2` في هذا المنشور لإنشاء الكود الذي ستحتاجه. `domain1` هو اسم النطاق الأصلي الخاص بك و `domain2` هو اسم النطاق الإضافي الذي تريد إضافته. أضف كتلة `after_ssl:` الناتجة إلى قسم `hooks` في ملف `app.yml` الخاص بك وقم بتشغيل `launcher rebuild app`.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [3 مايو 2025، 9:28ص UTC](https://meta.discourse.org/t/set-up-let-s-encrypt-with-multiple-domains-redirects/56685/157 "2025-05-03T09:28:34Z")

</div>

عفوًا. لقد أزلت علامة + وقمت بتعديل النص. سألقي نظرة أخرى لاحقًا عندما أكون أمام جهاز كمبيوتر  
مرحبًا @textkit، هذه صفحة ويكي، لذا يمكنك إجراء المزيد من التعديلات إذا أردت.

---

<div class="post-metadata">

### Author: ![OrkoGrayskull](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/orkograyskull/32/275883_2.png) [@OrkoGrayskull](https://meta.discourse.org/u/OrkoGrayskull)
#### Post date: [28 يوليو 2025، 10:11ص UTC](https://meta.discourse.org/t/set-up-let-s-encrypt-with-multiple-domains-redirects/56685/158 "2025-07-28T10:11:01Z")

</div>

منذ آخر تحديث إلى 3.5.0.beta8-dev

> /etc/runit/1.d/letsencrypt  
> مفقود في حاوية docker. لذلك لن يتم بناؤه. حل بديل: [https://www.forcewww.com/](https://www.forcewww.com/)

لذلك توقف هذا عن العمل:

```plaintext
## إضافة شهادة Let's Encrypt لاسم النطاق غير www و www
  after_ssl:
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--keylength/
        to: "-d example.de -d www.example.de --keylength"

```

قبل إزالة مثل هذه الأدوات/الملفات الثنائية من حاوية Docker، سيكون من الجيد تلقي إشعار…

---

<div class="post-metadata">

### Author: ![pacharanero](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pacharanero/32/500583_2.png) [@pacharanero](https://meta.discourse.org/u/pacharanero)
#### Post date: [29 يوليو 2025، 11:38ص UTC](https://meta.discourse.org/t/set-up-let-s-encrypt-with-multiple-domains-redirects/56685/159 "2025-07-29T11:38:11Z")

</div>

هل هذا تغيير في كيفية تعامل Discourse مع LetsEncrypt أم تغيير في LetsEncrypt نفسها؟

لدي خادم يتأثر حاليًا بهذه المشكلة. في الوقت الحالي، الحل البديل الخاص بي هو التعليق على هذا الجزء من app.yml ولكني أشعر أننا بحاجة إلى طريقة لإضافة هذه الشهادات الإضافية إلى الإعداد في المستقبل.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [29 يوليو 2025، 12:12م UTC](https://meta.discourse.org/t/set-up-let-s-encrypt-with-multiple-domains-redirects/56685/160 "2025-07-29T12:12:26Z")

</div>

لقد نقلت Discourse ذلك إلى ملف آخر. إنه قيد العمل حاليًا. سأحاول إلقاء نظرة في الأيام القليلة القادمة لمعرفة ما هو مطلوب لدعم نطاقات فرعية متعددة.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [31 يوليو 2025، 8:55م UTC](https://meta.discourse.org/t/set-up-let-s-encrypt-with-multiple-domains-redirects/56685/161 "2025-07-31T20:55:36Z")

</div>

لقد قمت بتحرير OP بقالب جديد، لكنني لم أختبره بعد.

---

<div class="post-metadata">

### Author: ![nathank](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nathank/32/290039_2.png) [@nathank](https://meta.discourse.org/u/nathank)
#### Post date: [31 يوليو 2025، 10:20م UTC](https://meta.discourse.org/t/set-up-let-s-encrypt-with-multiple-domains-redirects/56685/162 "2025-07-31T22:20:03Z")

</div>

> [@pfaffman](#):
>
> (إذا حدث ذلك، فيرجى إخبار @pfaffman و/أو فقط قم بتحرير ما سبق واستبدله بهذا بمجرد أن ترى أنه يعمل).

لا، هذا لا يعمل:

> ## فشل
> 
> Errno::ENOENT: لا يوجد مثل هذا الملف أو الدليل @ rb\_sysopen - /usr/local/bin/letsencrypt  
> موقع الفشل: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/replace\_command.rb:11:in `read’  
> فشل الاستبدال بالمعلمات {“filename”=\>“/usr/local/bin/letsencrypt”, “from”=\>“/-d [spokes.nz/](http://spokes.nz/)”, “to”=\>“-d [spokes.nz](http://spokes.nz) -d [www.spokes.nz](http://www.spokes.nz)”}  
> فشل التمهيد برمز خروج 1  
> \*\* فشل التمهيد \*\* يرجى التمرير لأعلى والبحث عن رسائل خطأ سابقة، قد يكون هناك أكثر من رسالة واحدة.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [31 يوليو 2025، 10:45م UTC](https://meta.discourse.org/t/set-up-let-s-encrypt-with-multiple-domains-redirects/56685/163 "2025-07-31T22:45:14Z")

</div>

يبدو أن الوقت مبكر جدًا.

ربما حاول وضع الاستبدال في المقطع الموجود في الأسفل حيث كانت توجد إعدادات ssh إذا كان ذلك منطقيًا (أنا على هاتفي، سأحاول إلقاء نظرة غدًا)

---

<div class="post-metadata">

### Author: ![Paul\_King](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/paul_king/32/165426_2.png) [@Paul\_King](https://meta.discourse.org/u/Paul_King)
#### Post date: [1 أغسطس 2025، 9:02ص UTC](https://meta.discourse.org/t/set-up-let-s-encrypt-with-multiple-domains-redirects/56685/164 "2025-08-01T09:02:35Z")

</div>

مرحباً @nathank

تخمين مني، ولكن أتساءل عما إذا كان الخطأ الذي تواجهه قد يتعلق بمسافة مفقودة قبل الشرطة المائلة النهائية وعلامة الاقتباس النهائية في الأسطر المعنية من المقطع المقترح في ملف app.yml الخاص بك؟

أستنتج من رسالة الخطأ أن الأسطر المعنية لديك هي (حرفياً)

```plaintext
from: /-d spokes.nz/
to: “-d spokes.nz -d www.spokes.nz”

```

أقول هذا، لأنه في حالتي، الأسطر هي

```plaintext
from: /-d nzarchitecture.net.nz /
to: "-d nzarchitecture.net.nz -d www.nzarchitecture.net.nz "

```

ومع وجود مسافات قبل نهاية كل سطر كما هو موضح، يمكنني الآن إعادة بناء Discourse دون طرح هذا الخطأ. (إذا نظرت عن كثب، سترى أن المقطع المحدث لـ @pfaffman المنشور في بداية هذا الموضوع أظهر تلك المسافات الإضافية).

ليس لدي أي ملفات على الإطلاق في الدليل usr/local/bin/ (كما هو مذكور في رسالة الخطأ الخاصة بك) أيضاً، مما جعلني أشك في أن عدم وجود ملف letsencrypt هذا ليس هو ما يؤدي إلى الخطأ.

ومع ذلك، بالنسبة لي، بينما يعمل Discourse بشكل جيد على عنوان URL الخاص به [nzarchitecture.net.nz](http://nzarchitecture.net.nz)، للأسف ما زلت أواجه خطأ في الشهادة إذا كتبت [www.nzarchitecture.net.nz](http://www.nzarchitecture.net.nz) في المتصفح - سواء كان ذلك بسبب عدم وجود هذا الملف، لا أعرف.

---

<div class="post-metadata">

### Author: ![featheredtoast](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/featheredtoast/32/116994_2.png) [@featheredtoast](https://meta.discourse.org/u/featheredtoast)
#### Post date: [2 أغسطس 2025، 8:50م UTC](https://meta.discourse.org/t/set-up-let-s-encrypt-with-multiple-domains-redirects/56685/165 "2025-08-02T20:50:59Z")

</div>

أشير فقط إلى أنني أحاول حاليًا دمج هذا في متغيرات البيئة للتعامل معها مباشرة في discourse\_docker، شيء مثل قائمة مفصولة بفواصل من أسماء المضيفين البديلة. يبدو أن هذه حالة استخدام شائعة بما يكفي للتعامل معها مباشرة.

سيجعل هذا التكوين أسهل لهذه الحالة، لذلك لن يحتاج أحد إلى إجراء تعديلات على ملفات app.ymls الخاصة بهم.

خطتي الحالية هي مع DISCOURSE\_HOSTNAME`www.domain.com`

السماح لبيئة مثل:  
`DISCOURSE_HOSTNAME_ALIASES: domain.com,other.domain.com` سيجلب الشهادة، صالحة لجميع أسماء المضيفين.

(بينما أنا هناك، تجديدات Let’s Encrypt التلقائية لا تعمل بشكل صحيح أيضًا، لذا أقوم بإصلاحها أيضًا)

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2 أغسطس 2025، 8:56م UTC](https://meta.discourse.org/t/set-up-let-s-encrypt-with-multiple-domains-redirects/56685/166 "2025-08-02T20:56:47Z")

</div>

هذا رائع! شكراً جزيلاً. هذا بالتأكيد سيسهل الأمور!

---

<div class="post-metadata">

### Author: ![nathank](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nathank/32/290039_2.png) [@nathank](https://meta.discourse.org/u/nathank)
#### Post date: [3 أغسطس 2025، 8:10م UTC](https://meta.discourse.org/t/set-up-let-s-encrypt-with-multiple-domains-redirects/56685/167 "2025-08-03T20:10:06Z")

</div>

فاتني ذلك! فعلت كما اقترحت، لكن فشل التمهيد لا يزال قائماً:

> ## فشل
> 
> Errno::ENOENT: لا يوجد مثل هذا الملف أو الدليل @ rb\_sysopen - /usr/local/bin/letsencrypt  
> مكان الفشل: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/replace\_command.rb:11:in `read’  
> فشل الاستبدال بالمعلمات {“filename”=\>“/usr/local/bin/letsencrypt”, “from”=\>“/-d [spokes.nz](http://spokes.nz) /”, “to”=\>"-d [spokes.nz](http://spokes.nz) -d [www.spokes.nz](http://www.spokes.nz) "}  
> فشل التمهيد برمز خروج 1  
> \*\* فشل التمهيد \*\* يرجى التمرير لأعلى والبحث عن رسائل خطأ سابقة، قد يكون هناك أكثر من رسالة واحدة.

> [@featheredtoast](#):
>
> ألاحظ حاليًا أنني أحاول دمج هذا في متغيرات البيئة للتعامل معها مباشرة في discourse\_docker، شيء مثل قائمة مفصولة بفواصل من أسماء المضيفين المستعارة. يبدو أنها حالة استخدام شائعة بما يكفي للتعامل معها مباشرة.

رائع!!!

---

<div class="post-metadata">

### Author: ![Paul\_King](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/paul_king/32/165426_2.png) [@Paul\_King](https://meta.discourse.org/u/Paul_King)
#### Post date: [4 أغسطس 2025، 5:05ص UTC](https://meta.discourse.org/t/set-up-let-s-encrypt-with-multiple-domains-redirects/56685/168 "2025-08-04T05:05:48Z")

</div>

> [@nathank](#):
>
> فاتني ذلك! فعلت كما اقترحت، ولكن لا يزال فشل التمهيد:
> 
> ## فشل
> 
> Errno::ENOENT: لا يوجد مثل هذا الملف أو الدليل @ rb\_sysopen - /usr/local/bin/letsencrypt  
> موقع الفشل: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/replace\_command.rb:11:in `read’  
> فشل الاستبدال بالمعلمات {“filename”=\>“/usr/local/bin/letsencrypt”, “from”=\>“/-d [spokes.nz](http://spokes.nz) /”, “to”=\>“-d [spokes.nz](http://spokes.nz) -d [www.spokes.nz](http://www.spokes.nz) ”}  
> فشل التمهيد برمز خروج 1  
> \*\* فشل التمهيد \*\* يرجى التمرير لأعلى والبحث عن رسائل خطأ سابقة، قد يكون هناك أكثر من واحدة.

ربما ليس هذه هي المشكلة الرئيسية هنا، ولكن في محاولاتي، قمت أيضًا بتحديث إصدار Docker الذي يعمل على Digital Ocean من 20.0.4 (أعتقد) إلى 28.3.3 - ربما ساعد ذلك، على الأقل مع هذا الخطأ. إذا لم يكن هناك شيء آخر، فقد تخلصت من تحذيرات Docker “المهملة” التي كنت أتلقاها في بداية عملية إعادة البناء.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [4 أغسطس 2025، 9:07ص UTC](https://meta.discourse.org/t/set-up-let-s-encrypt-with-multiple-domains-redirects/56685/169 "2025-08-04T09:07:36Z")

</div>

تحتاج إلى إزالة الجزء الذي يحاول تعديل ملف lets encrypt والانتظار حتى يتم قبول طلب السحب.

---

<div class="post-metadata">

### Author: ![nathank](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nathank/32/290039_2.png) [@nathank](https://meta.discourse.org/u/nathank)
#### Post date: [5 أغسطس 2025، 2:40ص UTC](https://meta.discourse.org/t/set-up-let-s-encrypt-with-multiple-domains-redirects/56685/170 "2025-08-05T02:40:05Z")

</div>

لقد اكتشفت ذلك! لحسن الحظ، أنا في تثبيت حاويتين لذلك لا يمثل ذلك مشكلة كبيرة.

> [@featheredtoast](#):
>
> خطتي الحالية هي مع `DISCOURSE_HOSTNAME: www.domain.com`
> 
> السماح لبيئة مثل:  
> `DISCOURSE_HOSTNAME_ALIASES: domain.com,other.domain.com` سيجلب الشهادة، صالحة لجميع أسماء المضيفين.
> 
> (بينما أنا هناك، تجديدات Let’s Encrypt التلقائية لا تبدو أنها تعمل بشكل صحيح أيضًا، لذا أقوم بإصلاحها أيضًا)

هل هناك أي تقدم في هذا حتى الآن؟

---

<div class="post-metadata">

### Author: ![featheredtoast](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/featheredtoast/32/116994_2.png) [@featheredtoast](https://meta.discourse.org/u/featheredtoast)
#### Post date: [6 أغسطس 2025، 5:25م UTC](https://meta.discourse.org/t/set-up-let-s-encrypt-with-multiple-domains-redirects/56685/171 "2025-08-06T17:25:50Z")

</div>

نعم، لدي طلب سحب مفتوح هنا في انتظار المراجعة:

> <https://github.com/discourse/discourse_docker/pull/992>
>
> add comma-separated DISCOURSE\_HOSTNAME\_ALIASES to handle multiple aliases
> for l…etsencrypt domain generation over env vars
> 
> FIX: add letsencrypt renew location for .well-known and allow for multi-domain renewal
> Do not redirect to https on .well-known location for any domain
> so letsencrypt cert renewals can work properly.
> 
> FIX: better listening for ipv6 for ipv4 only
> Current letsencrypt assumes ipv6 in config. Check for ipv6 before listening

---

<div class="post-metadata">

### Author: ![featheredtoast](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/featheredtoast/32/116994_2.png) [@featheredtoast](https://meta.discourse.org/u/featheredtoast)
#### Post date: [19 أغسطس 2025، 9:29م UTC](https://meta.discourse.org/t/set-up-let-s-encrypt-with-multiple-domains-redirects/56685/172 "2025-08-19T21:29:21Z")

</div>

مرحباً بالجميع، للمتابعة، تم دمج نطاقات متعددة - في أحدث إصدار من discourse\_docker، يمكنك الآن تضمين قوالب ssl و letsencrypt وإعداد متغيرات البيئة بالشكل `DISCOURSE_HOSTNAME_ALIASES: domain.com,other.domain.com` لإعداد أسماء مضيفين بديلة.

سيقوم موقعك بالإضافة إلى ذلك بسحب أسماء المضيفين المهيأة مع طلب الشهادة دون أي تغييرات إضافية في التكوين.

---

<div class="post-metadata">

### Author: ![Paul\_King](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/paul_king/32/165426_2.png) [@Paul\_King](https://meta.discourse.org/u/Paul_King)
#### Post date: [20 أغسطس 2025، 10:42ص UTC](https://meta.discourse.org/t/set-up-let-s-encrypt-with-multiple-domains-redirects/56685/173 "2025-08-20T10:42:01Z")

</div>

[quote=“featheredtoast, post:172, topic:56685”]يمكنك الآن تضمين قوالب ssl و letsencrypt وإعداد متغيرات البيئة بالشكل `DISCOURSE_HOSTNAME_ALIASES: domain.com,other.domain.com` لإعداد أسماء مضيفين بديلة.

[/quote]

اعذروا جهلي، ولكن هل يمكن تعديل هذا عبر إعداد موقع معين، أم يجب تعديل شيء ما في app.yml؟

إذا كان الأول، فلم أوفق في العثور عليه بعد التحديث إلى الأحدث، وإذا كان الأخير، فما الذي يجب تعديله تحديدًا في app.yml؟

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [20 أغسطس 2025، 12:55م UTC](https://meta.discourse.org/t/set-up-let-s-encrypt-with-multiple-domains-redirects/56685/174 "2025-08-20T12:55:36Z")

</div>

> [@Paul\_King](#):
>
> سامحني على جهلي، ولكن هل يمكن تعديل هذا عبر إعداد موقع في أي مكان، أم يجب تعديل شيء ما في app.yml؟

يتم وضعه في `app.yml`. لا يتعامل معه Discourse، بل يتعامل معه NGINX في الحاوية ولا يمكنه الوصول إلى قاعدة بيانات Discourse.

> [@Paul\_King](#):
>
> إذا كان الخيار الأول، فلم أوفق في العثور عليه بعد التحديث إلى الأحدث، وإذا كان الخيار الثاني، فما الذي يجب تعديله تحديدًا في app.yml

يتم وضعه في قسم ENV

```plaintext
env:
   DISCOURSE_HOSTNAME_ALIASES: domain.com,other.domain.com

```

ستقوم بتضمين المجالات الإضافية فقط التي ترغب في أن يتمكن الأشخاص من الارتباط بها وإعادة توجيههم إلى اسم المضيف الفعلي لموقعك.

---

<div class="post-metadata">

### Author: ![Paul\_King](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/paul_king/32/165426_2.png) [@Paul\_King](https://meta.discourse.org/u/Paul_King)
#### Post date: [20 أغسطس 2025، 1:57م UTC](https://meta.discourse.org/t/set-up-let-s-encrypt-with-multiple-domains-redirects/56685/175 "2025-08-20T13:57:11Z")

</div>

> [@pfaffman](#):
>
> `DISCOURSE_HOSTNAME_ALIASES: domain.com,other.domain.com`

مثالي - كل شيء يعمل، شكرًا!

سيكون أفضل إذا كانت هناك طريقة ذكية لـ discourse لكتابة الأسماء المستعارة التي يوفرها المسؤول إلى app.yml نفسها عند التحديث التالي، أو لترك المعلومات حيث يمكن لتعليمات app.yml قراءتها.

[Previous page](https://meta.discourse.org/t/set-up-let-s-encrypt-with-multiple-domains-redirects/56685.md?page=4)

[Next page](https://meta.discourse.org/t/set-up-let-s-encrypt-with-multiple-domains-redirects/56685.md?page=6)
