অ্যাপাচি 2 তে লেটস এনক্রিপ্ট শংসাপত্র পুনর্নবীকরণের জন্য ক্রোন সেট করার এই সঠিক উপায়টি কি? আমি উবুন্টু 16.04 ব্যবহার করি।
@monthly letsencrypt renew && service apache2 reload
অ্যাপাচি 2 তে লেটস এনক্রিপ্ট শংসাপত্র পুনর্নবীকরণের জন্য ক্রোন সেট করার এই সঠিক উপায়টি কি? আমি উবুন্টু 16.04 ব্যবহার করি।
@monthly letsencrypt renew && service apache2 reload
উত্তর:
মাসিক পর্যাপ্ত ঘন হয় না। এই স্ক্রিপ্টটি কমপক্ষে সাপ্তাহিক, এবং প্রায়শই দৈনিক চালানো উচিত। মনে রাখবেন যে শংসাপত্রগুলি মেয়াদ শেষ হওয়ার কাছাকাছি না হলে পুনর্নবীকরণ হয় না এবং মাসিক আপনার বিদ্যমান শংসাপত্রগুলি পুনর্নবীকরণের আগেই মাঝে মধ্যে ইতিমধ্যে শেষ হয়ে যায়।
প্রোগ্রামটির নাম certbot
, যা থেকে নতুন নামকরণ করা হয়েছিল letsencrypt
। আপনি যদি এখনও ব্যবহার letsencrypt
করে থাকেন তবে আপনার বর্তমান সংস্করণে আপডেট করতে হবে।
এই বিষয়গুলি বাদ দিয়ে, এটি আমার ক্রোন জবগুলির মতোই।
43 6 * * * certbot renew --post-hook "systemctl reload nginx"
দ্রষ্টব্য যে 18.04 এলটিএসে লেটসনক্রিপ প্যাকেজটির (শেষ অবধি) নামকরণ করা হয়েছে সার্টবোটে। এটিতে এখন একটি সিস্টেমযুক্ত টাইমার অন্তর্ভুক্ত যা আপনি সেরেটবোট নবায়নগুলি সুনির্দিষ্ট করতে সক্ষম করতে পারবেন systemctl enable certbot.timer
এবং এর সাথে systemctl start certbot.timer
। তবে উবুন্টু হুক নির্দিষ্ট করার কোনও উপায় সরবরাহ করেনি। আপনার পছন্দসই কমান্ড লাইনটি certbot.service
ওভাররাইড করার জন্য আপনাকে ওভাররাইড সেট আপ করতে হবে ExecStart=
, যতক্ষণ না উবুন্টু এটি ঠিক করে না।
--renew-hook
পরিবর্তে ব্যবহারকারীর পক্ষে এটির চেয়ে ভাল হতে পারে --post-hook
কেবলমাত্র পুনরায় আরম্ভ করার জন্য যদি প্রত্যয়টি সফলভাবে নবায়ন করা হয়।
certbot renew
ExecStartPost=/usr/sbin/service nginx reload
। আমার জন্য কাজ!
ExecStartPost=
করা একটি ভাল ধারণা। কেন আমি তা ভেবে দেখিনি? তবে সচেতন হোন যে service
আদেশটি হ্রাস পেয়েছে; এটি চিরকাল থাকবে না। সংশ্লিষ্ট systemctl
কমান্ডগুলিতে স্যুইচ করুন ।
আমার মন্তব্য করার মতো খ্যাতি নেই, তাই আমি এখানে উত্তর দেব। আমি সম্প্রতি (অক্টোবর 2017) একটি উবুন্টু 16.04 সার্ভারে সার্টিবোট ইনস্টল করেছি এবং চালিয়েছি এবং স্বয়ংক্রিয়ভাবে একটি নবায়ন ক্রোন জব তৈরি হয়েছিল /etc/cron.d/certbot
।
এখানে ক্রোন জব তৈরি করা হয়েছিল:
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew
ক্রন্টব এন্ট্রি তৈরি করার আগে এই ফাইলটি ইতিমধ্যে উপস্থিত থাকলে এটি পরীক্ষা করা ভাল ধারণা হবে।
certbot renew
/run/systemd/system
43 6 * * *
এটিকে প্রতিদিন সকাল 6:43 টায় চালাতে পারে। দিনে একবার পর্যাপ্ত হওয়া উচিত, তবে হয় উভয়ই সূক্ষ্ম কাজ করে।
Certbot ডকুমেন্টেশন দিনে দুবার স্ক্রিপ্ট চালাতে বিশেষ পরামর্শ দেওয়া হচ্ছে:
বিঃদ্রঃ:
যদি আপনি ক্রোন বা সিস্টেমযুক্ত কাজ সেট আপ করেন তবে আমরা এটি প্রতিদিন প্রতিবার চালানোর পরামর্শ দিই (আপনার শংসাপত্রগুলি পুনর্নবীকরণের জন্য বা বাতিল না করা পর্যন্ত এটি কিছুই করবে না, তবে এটি নিয়মিত চালানো আপনার সাইটকে অনলাইনে থাকার সুযোগ দেবে) কেস লেটস এনক্রিপ্ট-চালু করা প্রত্যাহারটি কোনও কারণে ঘটেছে)। আপনার পুনর্নবীকরণ কাজের জন্য অনুগ্রহ করে এক ঘন্টার মধ্যে একটি এলোমেলো মিনিট নির্বাচন করুন।
মাইকেল হ্যাম্পটন উল্লেখ করেছেন যে নামটি সেরিটবোটে পরিবর্তিত হয়েছে, তবে তারা এখনও -আউটো বিকল্প সরবরাহ করে যা নিজেকে আপডেট রাখে। certbot-auto
কমান্ড চালানোর জন্য root পরিচয়ে সুবিধা দেয়া প্রয়োজন, তাই আপনার ক্রন লিপিতে লাইন ভালো কিছু হওয়া উচিত:
52 0,12 * * * root /full/path/to/certbot-auto renew --quiet
আমার নিজের ক্ষেত্রে certbot-auto
স্ক্রিপ্টটি গিট-ব্যবহারকারীর হোম ডিরেক্টরিতে স্থাপন করা হয়েছে। সঠিক আদেশ তখন
52 0,12 * * * root /home/git/certbot-auto renew --quiet
নোট করুন যে ডকুমেন্টেশনের উদাহরণটি কোনও আপেক্ষিক পথের সাথে মিলে যায়, বিন্দুর দ্বারা নির্দেশিত যা বিভ্রান্ত হতে পারে:
./path/to/certbot-auto renew --quiet
পাথ পরীক্ষা করার জন্য আগে শেলের মধ্যে নবায়ন কমান্ডটি পরীক্ষা করার বিষয়টি নিশ্চিত করুন, যদি শংসাপত্র পুনর্নবীকরণের কারণে না হয় তবে কিছুই ঘটবে না ( --quiet
কী হচ্ছে তা দেখার জন্য পতাকা ছাড়াই এই পরীক্ষাটি চালান )।
এইভাবে শংসাপত্রটি পুনর্নবীকরণ করা হলে সার্ভারটি পুনরায় লোড করা কঠোরভাবে প্রয়োজন হয় না, যেহেতু লাইভ শংসাপত্রের পথটি সঠিকভাবে সেট আপ করা না হলে পরিবর্তন হয় না।
আপনি যদি অ্যাপাচি চালিয়ে যাচ্ছেন তবে এটি সত্য - এনজিনেক্সের জন্য, একটি পুনর্নবীকরণ হুক যুক্ত করুন, যেমন:
52 0,12 * * * root certbot renew --renew-hook 'service nginx reload'
--renew-hook
একটি সফল পুনর্নবীকরণের পরে কেবল পুনরায় চালু করতে ব্যবহারের তথ্যের জন্য এই পোস্টটি দেখুন : guyrutenberg.com/2017/01/01/…
আপনার কিছু সেট আপ করা উচিত নয়। সার্টবোটের সাম্প্রতিক যে কোনও ডেবিয়ান / উবুন্টু ইনস্টল করা উচিত সিস্টেমড টাইমার এবং একটি ক্রোন জব ইনস্টল করা উচিত (এবং ক্রোন জব তখনই চলবে certbot
যদি সিস্টেমড সক্রিয় না থাকে, সুতরাং আপনি উভয়ই চলমান পাবেন না)।
আপনি কমান্ডটি ব্যবহার করে আপনার সিস্টেমেড টাইমারগুলি পরীক্ষা করতে পারেন systemctl list-timers
(বা systemctl list-timers --all
আপনি যদি নিষ্ক্রিয় টাইমার প্রদর্শন করতে চান তবে)। এটার মতো কিছু:
% sudo systemctl list-timers
NEXT LEFT LAST PASSED UNIT ACTIVATES
Fri 2018-08-03 06:17:25 UTC 10h left Thu 2018-08-02 06:27:13 UTC 13h ago apt-daily-upgrade.timer apt-daily-upgrade.service
Fri 2018-08-03 11:43:29 UTC 15h left Thu 2018-08-02 16:54:52 UTC 3h 7min ago certbot.timer certbot.service
Fri 2018-08-03 12:44:58 UTC 16h left Thu 2018-08-02 19:14:58 UTC 47min ago apt-daily.timer apt-daily.service
Fri 2018-08-03 19:43:44 UTC 23h left Thu 2018-08-02 19:43:44 UTC 18min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Mon 2018-08-06 00:00:00 UTC 3 days left Mon 2018-07-30 00:00:09 UTC 3 days ago fstrim.timer fstrim.service
সার্টবোট টাইমারটি এখানে থাকা উচিত /lib/systemd/system/certbot.timer
এবং এটি নির্দিষ্ট কমান্ডটি কার্যকর করবে ute/lib/systemd/system/certbot.service
certbot.timer
12 ঘন্টা (43200 সেকেন্ড) পর্যন্ত এলোমেলো বিলম্বের পরে, সকাল 12 টা এবং 12 টায় t certbot.service সম্পাদন করবে।
# cat /lib/systemd/system/certbot.timer
[Unit]
Description=Run certbot twice daily
[Timer]
OnCalendar=*-*-* 00,12:00:00
RandomizedDelaySec=43200
Persistent=true
[Install]
WantedBy=timers.target
এবং certbot.service
পুনর্নবীকরণ কমান্ড কার্যকর করা হবে।
# cat /lib/systemd/system/certbot.service
[Unit]
Description=Certbot
Documentation=file:///usr/share/doc/python-certbot-doc/html/index.html
Documentation=https://letsencrypt.readthedocs.io/en/latest/
[Service]
Type=oneshot
ExecStart=/usr/bin/certbot -q renew
PrivateTmp=true
অন্যরা যেমন উল্লেখ করেছে, সেখানে একটি ক্রোন জবও ইনস্টল করা রয়েছে /etc/cron.d/certbot
:
# Eventually, this will be an opportunity to validate certificates
# haven't been revoked, etc. Renewal will only occur if expiration
# is within 30 days.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew
এটি করছে:
test -x /usr/bin/certbot -a \! -d /run/systemd/system
- যদি পরীক্ষা /usr/bin/certbot
একটি এক্সিকিউটেবল ফাইল এবং যে /run/systemd/system
হয় না একটি নির্দেশিকা। এই চেকটি সফল হলে কেবল পরবর্তী বিটটিতে চালিয়ে যান।
perl -e 'sleep int(rand(43200))'
- 0 সেকেন্ড থেকে 12 ঘন্টা (43200 = 12 x 60 x 60) এর মধ্যে এলোমেলো পরিমাণে ঘুমান।certbot -q renew
আপনার শংসাপত্রগুলি পরীক্ষা করুন এবং প্রয়োজনে যেকোনকে নবায়ন করুন। -q
ফ্ল্যাগ "শান্ত" হয় - কোন আউটপুট উত্পাদন না করার একটি ত্রুটি নেই।আমি ক্রোন জব দ্বারা মূলত বিভ্রান্ত হয়ে পড়েছিলাম কারণ এটি সিস্টেমেডের কারণে চলবে না, তাহলে কীভাবে সার্টবোট চালিত হবে? আমি এই ফোরাম পোস্টে উত্তরটি পেয়েছি যা আমি এই উত্তরটির ভিত্তি করেছিলাম।
/etc/cron.d/certbot
উপস্থিত রয়েছে, systemctl list-timers
শো রয়েছে, certbot.timer
কিন্তু আমার শংসাপত্রগুলি পুনর্নবীকরণ হয়নি। চলমান certbot
ম্যানুয়ালি জরিমানা কাজ, তাই আমি জানি না কি হচ্ছে। একটি পুরানো স্কুল crontab
এন্ট্রি যোগ শেষ ।
test
সক্রিয় কিনা তা পরীক্ষা করতে একটি চালায় এবং যদি তা হয় তবে ক্রোন জব তত্ক্ষণাত্ চালানো ছাড়াই বাইরে চলে যায় certbot
- ক্রোন জব সম্পর্কে লেখাটি দেখুন। আমি আরও সুনির্দিষ্ট হওয়ার জন্য পাঠ্যটি সম্পাদনা করব।
লেটসক্রিপ্ট শংসাপত্র পুনর্নবীকরণের জন্য, আমি সাধারণত getsl ব্যবহার করি । এটি একটি খুব সহজ শেল র্যাপার যা এমনকি এসএসএইচ সংযোগের মাধ্যমে অন্য মেশিনগুলিতে শংসাপত্র ইনস্টল করতে পারে।
ক্রোন এন্ট্রি নিম্নলিখিত:
01 23 * * * root /root/scripts/getssl/getssl -u -a -q >>/var/log/getssl.log 2>&1 ; /usr/sbin/apache2ctl graceful
ইতিমধ্যে প্রস্তাবিত হিসাবে, আপনার এটি প্রতিদিন চালানো উচিত, আরও ভাল, দিনে দু'বার।
যেমন ইতিমধ্যে গ্লাক্স দ্বারা উল্লিখিত:
দ্রষ্টব্য: আপনি যদি ক্রোন বা সিস্টেমেড চাকুরী সেট আপ করেন তবে আমরা এটি প্রতিদিন প্রতিবার চালানোর পরামর্শ দিই (আপনার শংসাপত্রগুলি পুনর্নবীকরণের জন্য বা বাতিল না করা পর্যন্ত এটি কিছুই করবে না, তবে এটি নিয়মিত চালানো আপনার সাইটকে থাকার সুযোগ দেয়) অনলাইনে যদি কোনও কারণে চ্যালেঞ্জ এনক্রিপ্ট-শুরু করা প্রত্যাহার ঘটে থাকে)। আপনার পুনর্নবীকরণ কাজের জন্য অনুগ্রহ করে এক ঘন্টার মধ্যে একটি এলোমেলো মিনিট নির্বাচন করুন।
সূত্র: https://certbot.eff.org/all-instructions/#debian-8-jessie-apache
সুতরাং আমি এটি ব্যবহার করে শেষ হয়েছি (দৌড়াতে দিনে দু'বার হয়, 01:00 এবং প্রতিদিন 13:00 এ):
6 1,13 * * * certbot renew --post-hook "service apache2 restart"
বা আরও ভাল:
6 1,13 * * * certbot renew --renew-hook "service apache2 restart"
আমি পরীক্ষা করিনি তবে এটিতেও কাজ করা উচিত:
6 1,13 * * * certbot renew --post-hook "/etc/init.d/apache2 restart"
6 1,13 * * * certbot renew --renew-hook "/etc/init.d/apache2 restart"
--প্রি-হুক এবং - পোস্ট-হুক হুকগুলি প্রতিটি পুনর্নবীকরণের চেষ্টার আগে এবং পরে চালিত হয়। আপনি যদি নিজের হুক কেবল সফল নবায়নের পরে চালাতে চান তবে এইভাবে একটি কমান্ডে নতুন-হুক ব্যবহার করুন।
--renew-hook
, যা আপনার সার্ভারটি পুনরায় আরম্ভ করবে কেবল তখনই যখন শংসাপত্রটি নতুনভাবে শুরু হয়।
--post-hook
ও --renew-hook
হওয়া উচিত নয় ? service apache2 restart
service restart apache2
service restart apache2
সঠিক কমান্ড / সেবা নয়।
এটি আমি ব্যবহার করি:
/opt/letsencrypt/letsencrypt-auto renew
আউটপুট হিসাবে দেয়:
Upgrading certbot-auto 0.8.1 to 0.9.1...
Replacing certbot-auto...
Creating virtual environment...
...
new certificate deployed with reload of apache server; fullchain is
/etc/letsencrypt/live/host.simplecoin.cz/fullchain.pem
-------------------------------------------------------------------------------
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/host.simplecoin.cz/fullchain.pem (success)
এবং এর বলছে যে অ্যাপাচি ইতিমধ্যে পুনরায় শুরু হয়েছে, সুতরাং এটি আর করা হবে না। যদি আমি এটি আবার চালাই:
Cert not yet due for renewal
সুতরাং প্রতিদিন শংসাপত্র পুনর্নবীকরণে সমস্যা হয় না, আমার ক্রোনটি তখন:
@daily /opt/letsencrypt/cronautorenew.sh
আমি আলাদা স্ক্রিনে লগিং টুইঙ্ক করতে স্ক্রিপ্ট ব্যবহার করি, সুতরাং এখানে আমার ক্রোনআউটোরনেউ.শ:
#!/usr/bin/env bash
printf "\nattempt to renew certificates" >>/var/log/letsencrypt_cron.log 2>&1
date >>/var/log/letsencrypt_cron.log 2>&1
/opt/letsencrypt/letsencrypt-auto renew >>/var/log/letsencrypt_cron.log 2>&1
printf "renew finished\n" >>/var/log/letsencrypt_cron.log 2>&1
অন্যান্য সদস্যরা ইতিমধ্যে আরও অনেক বিস্তারিত উত্তর সরবরাহ করেছেন। তবে দেখে মনে হচ্ছে এখানে এটি উল্লেখ করা উচিত।
সার্টবোট সংস্করণ অনুসারে 0.21.1 --renew-hook
পতাকাটি পরিবর্তিত হয়েছে তা --deploy-hook
নিশ্চিত করুন যে আপনি অবহেলিত পতাকা ব্যবহার করছেন না।
certbot renew --deploy-hook "systemctl restart myservice"
ইএফএফের সার্টবোট গাইড অনুসারে
আপনি যখন তাদের সিস্টেম প্যাকেজ ম্যানেজারের মাধ্যমে ইনস্টল করা প্যাকেজগুলি ব্যবহার করেন তখন অনেকগুলি লিনাক্স ডিস্ট্রিবিউশন স্বয়ংক্রিয় নবায়ন সরবরাহ করে।
আপনার সিস্টেমে এটি ইতিমধ্যে স্বয়ংক্রিয়ভাবে আছে কি না তা আপনি যদি নিশ্চিত না হন তবে আপনার সিস্টেমের ক্রন্টব (সাধারণত /etc/crontab/
এবং /etc/cron.*/*
$ crontab -l
এবং সিস্টেমড টাইমারগুলিতে) পরীক্ষা করুন $ systemctl list-timers
।
/etc/cron.d/certbot