- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
如何在 Elastic beanstalk 上运行 Let's encrypt Certbot 的自动化可扩展版本?尚未在网上找到答案,所以我整理了这个 .ebextension。希望对你有帮助。
最佳答案
Requirements:
- ElasticBeanstalk Environmnet
- Ec2-elastic-beanstalk-service-role with access to Route53 Resource
- TCP Loadbalancer in front of EC2 instances
- Deployment policy rolling (one instance at a the time)
- NFS mount
这是一个单一的 .ebextension:
需要jq包:
packages:
yum:
jq: []
创建 json:
files:
"/usr/local/bin/certbot/add_json.sh":
mode: "000550"
owner: root
group: root
content: |
#!/bin/bash
#Create TXT record JSON
cat > $1_TXT.json << END
{
"Comment": "TXT Verification for CertBOT",
"Changes": [
{
"Action": "$1",
"ResourceRecordSet": {
"Name": "_acme-challenge.$CERTBOT_DOMAIN",
"Type": "TXT",
"TTL": 300,
"ResourceRecords": [
{
"Value": "\"$CERTBOT_VALIDATION\""
}
]
}
}
]
}
END
删除对 Route53 的 Hook :
"/usr/local/bin/certbot/remove_txt_hook.sh":
mode: "000550"
owner: root
group: root
content: |
#!/bin/bash
PWD=`pwd`
APEX_DOMAIN=$(expr match "$CERTBOT_DOMAIN" '.*\.\(.*\..*\)')
ZONE_ID=`aws route53 list-hosted-zones --output text | awk '$4 ~ /^ *'$APEX_DOMAIN'/''{print $3}' | sed 's:.*/::'`
aws route53 change-resource-record-sets \
--hosted-zone-id $ZONE_ID --change-batch file://$PWD/DELETE_TXT.json
rm CREATE_TXT.json
rm DELETE_TXT.json
为 Route53 添加钩子(Hook):
"/usr/local/bin/certbot/add_txt_hook.sh":
mode: "000550"
owner: root
group: root
content: |
#!/bin/bash
PWD=`pwd`
APEX_DOMAIN=$(expr match "$CERTBOT_DOMAIN" '.*\.\(.*\..*\)')
ZONE_ID=`aws route53 list-hosted-zones --output text | awk '$4 ~ /^ *'$APEX_DOMAIN'/''{print $3}' | sed 's:.*/::'`
./add_json.sh CREATE
./add_json.sh DELETE
aws route53 change-resource-record-sets \
--hosted-zone-id $ZONE_ID --change-batch file://$PWD/CREATE_TXT.json
sleep 30
部署:
"/usr/local/bin/certbot/start_process.sh":
mode: "000550"
owner: root
group: root
content: |
#!/bin/bash
MY_DOMAIN=$(/opt/elasticbeanstalk/bin/get-config environment | jq -r '.MY_DOMAIN')
EFS_NAME=$(/opt/elasticbeanstalk/bin/get-config environment | jq -r '.EFS_NAME')
PWD=`pwd`
if [ "$MY_DOMAIN" = example.com ]; then
if [ ! -d /etc/letsencrypt ]; then
mkdir -p /etc/letsencrypt
fi
if ! grep -qs ' /etc/letsencrypt ' /proc/mounts; then
mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 $EFS_NAME:/.certificates/.letsencrypt /etc/letsencrypt || exit
fi
if [ ! -f certbot-auto ]; then
yum -y install mod24_ssl augeas-libs libffi-devel python27-tools system-rpm-config
wget https://dl.eff.org/certbot-auto
chmod 550 certbot-auto
fi
if [ ! -f /etc/letsencrypt/live/$MY_DOMAIN/fullchain.pem ]; then
./certbot-auto certonly --debug -n --no-bootstrap --email <your e-mail> --agree-tos --manual-public-ip-logging-ok --manual --preferred-challenges=dns --manual-auth-hook $PWD/add_txt_hook.sh --manual-cleanup-hook $PWD/remove_txt_hook.sh -d $MY_DOMAIN
fi
echo "00 15 * * SUN root cd /usr/local/bin/certbot && ./renewal.sh >> certbot.log 2>&1" > /etc/cron.d/cron_certbot
fi
更新:
"/usr/local/bin/certbot/renewal.sh":
mode: "000550"
owner: root
group: root
content: |
##!/bin/bash
MY_DOMAIN=$(/opt/elasticbeanstalk/bin/get-config environment | jq -r '.MY_DOMAIN')
PWD=`pwd`
ENV_ID=`{"Ref": "AWSEBEnvironmentId" }`
METADATA=/opt/aws/bin/ec2-metadata
INSTANCE_ID=`$METADATA -i | awk '{print $2}'`
REGION=`$METADATA -z | awk '{print substr($2, 0, length($2)-1)}'`
TODAY=`date +%Y-%m-%d`
STATUS=`aws elasticbeanstalk describe-environments --environment-ids $ENV_ID --region $REGION | awk '/"Status"/ {print substr($2, 1, length($2)-1)}' | sed 's/\"//g'`
while [ "$STATUS" != "Ready" ]; do
STATUS=`aws elasticbeanstalk describe-environments --environment-ids $ENV_ID --region $REGION | awk '/"Status"/ {print substr($2, 1, length($2)-1)}' | sed 's/\"//g'`
sleep 10
done
if ! /usr/local/bin/certbot/one_instance.sh; then
i="0"
while [ "$i" -lt 180 ] && [ ! -f /etc/letsencrypt/renewed_$TODAY ]; do
i=$[$i+1]
sleep 2
done
if [ ! -f /etc/letsencrypt/renewed_$TODAY ]; then
exit
else
/etc/init.d/httpd graceful; exit
fi
fi
./certbot-auto renew --debug --no-bootstrap --renew-hook "/etc/init.d/httpd graceful; touch /etc/letsencrypt/renewed_$TODAY; find /etc/letsencrypt/ -type f -name 'renewed_*' -mtime +0 -exec rm {} \;"
仅在一个实例中:
"/usr/local/bin/certbot/one_instance.sh":
mode: "000550"
owner: root
group: root
content: |
#!/bin/bash
METADATA=/opt/aws/bin/ec2-metadata
INSTANCE_ID=`$METADATA -i | awk '{print $2}'`
REGION=`$METADATA -z | awk '{print substr($2, 0, length($2)-1)}'`
ASG=`aws ec2 describe-tags --filters "Name=resource-id,Values=$INSTANCE_ID" \
--region $REGION --output text | awk '/aws:autoscaling:groupName/ {print $5}'`
SOLO_I=`aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names $ASG \
--region $REGION --output text | awk '/InService/ {print $4}' | sort | head -1`
[ "$SOLO_I" = "$INSTANCE_ID" ]
执行:
commands:
01_start_certbot_deploy:
command: "/usr/local/bin/certbot/start_process.sh &>> certbot.log"
cwd: "/usr/local/bin/certbot"
02_delete_bak_files:
command: "rm -f *.bak"
cwd: "/usr/local/bin/certbot"
Let me know if you have some remarks or improvement suggestions.
谢谢!
关于amazon-web-services - Amazon 的 AWS ElasticBeanstalk 让我们加密 CertBot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51086738/
我创建了一个多域证书并忘记了我包含在其中的域。 我怎么能看到他们?我怎样才能得到这个列表? 到目前为止,我只找到了一种获取到期日期的方法 $ sudo openssl x509 -noout -dat
我正在尝试在我的 Ubuntu 16.04 上安装 certbot 以获取 letencrypt 证书。 添加存储库出错。有人可以帮忙吗?提前致谢! wordpress@MV-WP02:~$ sudo
我正在设置一个 nginx 网络服务器,并且对我的服务器 block 配置有疑问。 FWIW,它是 Ubuntu 16.04,Nginx 1.13.10。 我想根据 Nginx Using If 使用
由于我在 Debian 10 上安装了 certbot,它总是显示此错误: root@HypeTime:/home/sinusbot# apt update Hit:1 http://security
我的域(domain.com 和 www.domain.com)都有一个 LetsEncrypt SSL 证书。现在,我想将 workflow.domain.com 添加到证书中。我尝试通过以下命令使
我有一个 api.mydomain.com 形式的域使用我正在尝试更新的 Letsencrypt 证书。 root@prod-app-1:/home/ninesalt# certbot certifi
所以我尝试在脚本中稍微自动化 certbot。当我运行此 sudo certbot --nginx -d your_domain -d www.your_domain 我得到以下信息: Please
我在学习 Docker所以如果这个问题听起来很傻,我很抱歉。无论如何,我的目标是创建一个 LAMP在一个地方处理所有数据库的容器,而且我想为许多站点设置多个虚拟主机。对于我想使用的每个站点 certb
我正在尝试在 RHEL 服务器上安装 certbot。 Instructions to enable epel-release # yum install https://dl.fedoraproje
使用 --work-dir 标志创建证书。所以我所有的证书都存储在一个不是默认 letsencrypt 目录的目录中。当我运行 certbot renew 时,我得到以下信息: 未尝试续订。 我在任何
我被难住了。我有 2 个不同的域,我正在尝试在 Digital Ocean Ubuntu 服务器上使用 Certbot 安装 SSL 证书。这是我为获取 SSL 证书而运行的最后一个命令: sudo
我有 certbot,包括在与客户的多个安装中使用的自动续订。 现在我一直在这里阅读: https://community.letsencrypt.org/t/2018-01-11-update-re
我使用以下命令在我的 ubuntu 16.04 机器上安装了 letsencrypt。 sudo apt-get install letsencrypt 现在,我想定义一个 cronjob 以使用以下
我使用 CentOS7 和 certbot 制作 ssl 证书,但是证书的默认目录是 "/etc/letsencript/live/first-host",如何用 "/etc/letsencript/
我正在设置服务器的后端,但我无法让 certbot 使用 https 在我的 API 上工作。只有我的网站被重定向到 https。 我只是不太熟悉nginx,我不知道如何解决这个问题。我需要最后一台服
我是否应该始终将/.well-known/acme-challenge暴露在服务器上? 这是我的HTTP配置: server { listen 80; location '/.well-known
我正在尝试为我的域生成证书。我可以 ping 我的域,但仍然出错。我已将入站防火墙规则添加到我的 digital ocean 服务器以接受 ipv4 和 ipv6 上的端口 80。不知道出了什么问题。
我正在尝试使用 docker build 启动一个 webapp。为了生成证书,我想使用 certbot。但是,如果我只是把 RUN certbot --nginx, 我明白了 Enter email
Kubernetes中有使用certbot的容器。 https://hub.docker.com/r/choffmeister/kubernetes-certbot/ 它使用1.3.0版本。我想构建相
我正在编写一个 bash 脚本,它在新安装的服务器中引导整个项目基础设施,我想使用 letcecrypt certbot 配置 ssl 安装。在我执行行之后: certbot --nginx -d $
我是一名优秀的程序员,十分优秀!