Ayarlamak için bu doğru yolu mu cron'u Apache 2'de edelim şifreleme sertifika yenilenmesi için? Ubuntu 16.04 kullanıyorum.
@monthly letsencrypt renew && service apache2 reload
Ayarlamak için bu doğru yolu mu cron'u Apache 2'de edelim şifreleme sertifika yenilenmesi için? Ubuntu 16.04 kullanıyorum.
@monthly letsencrypt renew && service apache2 reload
Yanıtlar:
Aylık yeterli sıklıkta değildir. Bu komut dosyası en az haftada bir, tercihen de günlük olarak çalışmalıdır. Unutmayın ki, sertifikalar sona erme süresine yakın olmadıkça yenilenmez ve aylık olarak mevcut sertifikalarınızın yenilenmeden önce zaman zaman sona ermesine neden olur.
Programın adı, adı certbot
değiştirildi letsencrypt
. Hala kullanıyorsanız letsencrypt
, geçerli sürüme güncellemeniz gerekir.
Bu sorunların yanı sıra, benim cron işlerimle aynı.
43 6 * * * certbot renew --post-hook "systemctl reload nginx"
18.04 LTS'de letsencrypt paketinin (nihayet) certbot olarak yeniden adlandırıldığını unutmayın. Artık systemctl enable certbot.timer
ve ile certbot yenilemeleri zamanlamak için etkinleştirebileceğiniz bir sistem zamanlayıcı içerir systemctl start certbot.timer
. Ancak, Ubuntu kancaları belirtmenin bir yolunu vermedi. Ubuntu bunu düzeltene kadar istediğiniz komut satırını certbot.service
geçersiz kılmak için bir geçersiz kılma ayarlamanız gerekir ExecStart=
.
--renew-hook
yerine --post-hook
, yalnızca sertifika başarılı bir şekilde yenilendiğinde yeniden başlatmak daha iyi olabilir .
certbot renew
sadece ™ çalışacaktır
ExecStartPost=/usr/sbin/service nginx reload
. Benim için çalıştı!
ExecStartPost=
iyi bir fikirdir. Bunu neden düşünmedim? Ancak service
komutun kullanımdan kaldırıldığının farkında olun ; sonsuza dek etrafta olmayacak. İlgili systemctl
komutlara geçin .
Yorum yapacak kadar itibarım yok, bu yüzden burada cevaplayacağım. Geçenlerde (Ekim 2017) bir Ubuntu 16.04 sunucusuna certbot koydum ve otomatik olarak bir yenileme cron işi oluşturuldu /etc/cron.d/certbot
.
İşte yaratılan cron işi:
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew
Bir crontab girişi oluşturmadan önce bu dosyanın zaten mevcut olup olmadığını kontrol etmek iyi bir fikir olacaktır.
certbot renew
eğer /run/systemd/system
mevcutsa - - Bu yerine systemd zamanlayıcı certbot çalıştığı nedeni certbot ve burada systemd zamanlayıcılar hakkında daha fazla bilgi .
43 6 * * *
her gün saat 6: 43'te çalışmasını sağlar. Günde bir kez yeterli olmalı, ancak biri iyi çalışıyor.
Certbot dokümantasyon günde iki kez komut dosyası çalıştıran önerir:
Not:
Bir cron veya sistem işi oluşturuyorsanız, günde iki kez çalıştırmanızı öneririz (sertifikalarınızın yenilenmesi veya iptal edilmesine kadar hiçbir şey yapmaz, ancak düzenli olarak çalıştırılması sitenize çevrimiçi kalma şansı verir. Bazı nedenlerden dolayı bir Let Encrypt tarafından başlatılan iptal işlemi gerçekleşti). Lütfen yenileme görevleriniz için saat içinde rastgele bir dakika seçin.
Michael Hampton'ın adından da anlaşılacağı gibi, ismin certbot olarak değiştiği belirtiliyor ancak yine de kendisini sürekli güncel tutan -auto seçeneğini sunuyor. certbot-auto
Cron komut satırı şöyle görünmelidir böylece komut çalıştırmak için kök ayrıcalıkları gerekir:
52 0,12 * * * root /full/path/to/certbot-auto renew --quiet
Benim durumumda certbot-auto
script git-kullanıcının ana klasörüne yerleştirildi. Kesin komut o zaman
52 0,12 * * * root /home/git/certbot-auto renew --quiet
Belgelerdeki örnekte, kafa karıştırıcı olabilecek nokta ile belirtilen göreceli bir yola karşılık geldiğine dikkat edin:
./path/to/certbot-auto renew --quiet
Sertifikanın yenilenmesi nedeniyle bir şey olmuyorsa, yolu test etmek için, yenileme komutunu önceden bir kabuk içinde test ettiğinizden emin olun ( --quiet
ne olduğunu görmek için bu testi bayraksız yapın).
Sertifika bu şekilde yenilendiğinde sunucuyu yeniden yüklemek kesinlikle gerekli değildir, çünkü canlı sertifikaya giden yol doğru kurulursa değişmez.
Apache kullanıyorsanız bu doğrudur - nginx için aşağıdaki gibi bir yenileme kancası eklemeyi düşünün:
52 0,12 * * * root certbot renew --renew-hook 'service nginx reload'
--renew-hook
Başarılı Yenileme sonrasında sadece yeniden başlatma için: guyrutenberg.com/2017/01/01/...
Hiçbir şey ayarlamak zorunda değilsin. Certbot'un herhangi bir yeni Debian / Ubuntu kurulumu bir sistem zamanlayıcı ve bir cron işi kurmalıdır (ve cron işi sadece sistem certbot
aktif değilse çalışacaktır ).
Sistemd zamanlayıcılarınızı komut kullanarak kontrol edebilirsiniz systemctl list-timers
(ya systemctl list-timers --all
da inaktif zamanlayıcıları da göstermek istiyorsanız). Bunun gibi bir şey:
% 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
Sertifika zamanlayıcısı burada olmalı /lib/systemd/system/certbot.timer
ve belirtilen komutu uygulayacaktır./lib/systemd/system/certbot.service
certbot.timer
`certbot.service hizmetini 12 saate kadar (43200 saniyeye kadar) rastgele bir gecikmeden sonra saat 12 ve 12'de gerçekleştirecektir.
# 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
ve certbot.service
yenileme komutunu uygulayacaktır.
# 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
Diğerlerinin de belirttiği gibi, içine kurulmuş bir cron işi var /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
Bu yapıyor:
test -x /usr/bin/certbot -a \! -d /run/systemd/system
- /usr/bin/certbot
Çalıştırılabilir bir dosya /run/systemd/system
olup olmadığını ve bir dizin olup olmadığını kontrol edin . Sadece bu kontrol başarılı olursa bir sonraki bit ile devam edin.
perl -e 'sleep int(rand(43200))'
- 0 saniye ile 12 saat arasında rastgele bir miktar uyku (43200 = 12 x 60 x 60).certbot -q renew
sertifikalarınızı kontrol edin ve gerekirse yenileyin. -q
Bayrak "sessiz" dir - Bir hata olmadığı sürece herhangi bir çıktı üretmez.Başlangıçta cron işi tarafından sistemd nedeniyle çalışmayacağı için kafam karışmıştı, peki certbot nasıl çalıştırılırdı? Cevabı bu forum yazısında buldum .
/etc/cron.d/certbot
var, systemctl list-timers
gösterileri var certbot.timer
, ama param yenilenmedi. certbot
Elle koşmak iyi çalıştı, bu yüzden ne olduğunu bilmiyorum. Eski bir okul crontab
girişi ekleyerek sona erdi .
test
etkin olup olmadığını kontrol etmek için bir çalıştırması ve cron işinin çalışmadan hemen çıkmadan devam etmesidir certbot
- cron işi ile ilgili metne bakın. Metni daha kesin olacak şekilde düzenleyeceğim.
LetsEncrypt sertifika yenilemesi için genellikle getssl kullanıyorum . SSH bağlantısı ile diğer makinelere sertifika bile yükleyebilen çok kullanışlı bir kabuk ambalajıdır.
Cron girişi şudur:
01 23 * * * root /root/scripts/getssl/getssl -u -a -q >>/var/log/getssl.log 2>&1 ; /usr/sbin/apache2ctl graceful
Daha önce de belirtildiği gibi, günlük olarak veya daha iyisi günde iki kez çalıştırmalısınız.
Glaux tarafından daha önce belirtildiği gibi:
Not: Bir cron veya sistem işi oluşturuyorsanız, günde iki kez çalıştırmanızı öneririz (sertifikalarınızın yenilenmesi veya iptal edilmesi gerekene kadar hiçbir şey yapmaz, ancak düzenli olarak çalıştırılması sitenize kalma şansını verir bazı nedenlerden dolayı, Let Encrypt tarafından başlatılan bir iptal işlemi olması durumunda çevrimiçi olabilir). Lütfen yenileme görevleriniz için saat içinde rastgele bir dakika seçin.
Kaynak: https://certbot.eff.org/all-instructions/#debian-8-jessie-apache
Ben de bunu kullanarak bittim (koşmak günde iki kez, 01: 00'da ve her gün 13: 00'da):
6 1,13 * * * certbot renew --post-hook "service apache2 restart"
veya daha da iyisi:
6 1,13 * * * certbot renew --renew-hook "service apache2 restart"
Test etmedim ama bu da işe yaramalı:
6 1,13 * * * certbot renew --post-hook "/etc/init.d/apache2 restart"
6 1,13 * * * certbot renew --renew-hook "/etc/init.d/apache2 restart"
- Ön-kanca ve - Ön-kanca kancaları her yenileme denemesinden önce ve sonra çalıştırılır. Kancanızın ancak başarılı bir yenilemeden sonra çalışmasını istiyorsanız, --renew-hook komutunu böyle bir komutla kullanın.
--renew-hook
notuma göre, yalnızca gerçekte yenilendiğinde sunucunuzu yeniden başlatan daha iyi olurdu .
--post-hook
ve --renew-hook
olmamalı ? service apache2 restart
service restart apache2
service restart apache2
Doğru komut / hizmeti değildir.
Kullandığım şey bu:
/opt/letsencrypt/letsencrypt-auto renew
çıktı olarak verir:
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)
Ve apache'nin şimdiden başlatıldığını söylemesi, tekrar yapmanıza gerek yok. Tekrar çalıştırırsam:
Cert not yet due for renewal
bu nedenle günlük sertifikayı yenilemek sorun değil, benim cronum:
@daily /opt/letsencrypt/cronautorenew.sh
Dosyayı ayırmak için günlüğü değiştirmek için komut dosyası kullanıyorum, işte benim 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
Diğer üyeler zaten çok daha ayrıntılı cevaplar verdi. Ama burada belirtmeliyim gibi görünüyor.
Certbot sürüm 0.21.1'den itibaren --renew-hook
bayrak, --deploy-hook
kullanımdan kaldırılmış bayrak kullanmadığınızdan emin olun.
certbot renew --deploy-hook "systemctl restart myservice"
Göre EFF certbot rehberi
Çoğu Linux dağıtımı, sistem paket yöneticileri aracılığıyla yüklenen paketleri kullandığınızda otomatik yenileme sağlar.
Eğer sistem bu zaten otomatik olup olmadığını emin değilseniz, sistem kontrol crontab tipik içinde ( /etc/crontab/
ve /etc/cron.*/*
$ crontab -l
ve systemd zamanlayıcılar $ systemctl list-timers
.
/etc/cron.d/certbot