我想将我的Meteor应用程序部署到Heroku,并且只能通过HTTPS访问它。理想情况下,我希望尽可能便宜地做到这一点。
答案 0 :(得分:7)
运行这些命令以获取certbot-auto。 certbot-auto应该适用于大多数系统
wget https://dl.eff.org/certbot-auto
chmod 755 certbot-auto
此命令启动获取证书的过程。 -d
标志允许您传入您想要保护的域。或者,如果没有-d
标记,它会弹出一个提示,您可以在其中输入域名。
./certbot-auto certonly --manual -d app.yoursite.com
然后会问你以下内容。不要输入。
Make sure your web server displays the following content at
http://app.yoursite.com/.well-known/acme-challenge/SOME-LENGTHY-KEY before continuing:
SOME-LONGER-KEY
我建议使用此方法,因为在续订时,您只需要更新环境变量。您可以使用public/
,如下所示,但每次都需要重建整个应用
运行meteor add meteorhacks:picker
在服务器端文件中,添加以下内容
import { Picker } from 'meteor/meteorhacks:picker';
Picker.route('/.well-known/acme-challenge/:routeKey', (params, request, response) => {
response.writeHead('200', {'Content-Type': 'text/plain'});
response.write(process.env.SSL_PAGE_KEY)
response.end();
});
然后使用
将环境变量SSL_PAGE_KEY
设置为SOME-LONGER-KEY
heroku config:set SSL_PAGE_KEY=SOME-LONGER-KEY
在public
文件夹中创建目录路径。如果你没有,请创建一个。
mkdir -p public/.well-known/acme-challenge/
然后创建文件SOME-LENGTHY-KEY
并在其中放置SOME-LONGER-KEY
echo SOME-LONGER-KEY > public/.well-known/acme-challenge/SOME-LENGTHY-KEY
提交并推送更改到您的Heroku应用程序。
git push heroku master
现在按Enter键继续验证过程。你应该收到这样的消息
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/app.yoursite.com/fullchain.pem. Your cert will
expire on 2016-04-11. To obtain a new version of the certificate in
the future, simply run Let's Encrypt again.
要将证书上传到Heroku,请先启用SSL Beta
heroku labs:enable http-sni -a your-app
heroku plugins:install heroku-certs
然后将您的fullchain.pem
和privkey.pem
添加到Heroku。
sudo heroku _certs:add /etc/letsencrypt/live/app.yoursite.com/fullchain.pem /etc/letsencrypt/live/app.yoursite.com/privkey.pem
您可以使用
验证证书是否已上传heroku _certs:info
更新您的DNS以指向app.yoursite.com.herokudns.com
要检查是否已设置SSL,请运行以下命令。 -v
为您提供详细输出。 -I
仅显示文档信息。 -H
将标头传递给网址。我们传递的标头确保不使用缓存,并确保您获得新证书而不是旧证书。
curl -vI https://app.yoursite.com -H "Cache-Control: no-cache"
检查输出是否包含以下内容
* Server certificate:
* subject: C=US; ST=CA; L=SF; O=SFDC; OU=Heroku; CN=app.yoursite.com
如果subject
行不包含CN=app.yoursite.com
,请等待5到10分钟再试一次。如果确实如此,你几乎可以走了。
要完成此过程,您需要将ROOT_URL
环境变量更改为新的https
版本。
heroku config:set ROOT_URL=https://app.yoursite.com
然后,您要确保您的用户始终使用带有force-ssl
包的SSL
meteor add force-ssl
最后,如果您在应用中设置了任何OAuth登录信息(Facebook,Google等),则您需要为其提供新的https
版本的网址。
再次运行certbot-auto
./certbot-auto certonly --manual -d app.yoursite.com
可能提示您输入具有相同内容的相同端点。如果是,只需按Enter键。如果没有,则需要重复上述步骤。
然后它将创建新的证书文件,您将使用
上传到Herokuheroku certs:update /etc/letsencrypt/live/app.yoursite.com/fullchain.pem /etc/letsencrypt/live/app.yoursite.com/privkey.pem
然后确认,运行上面的验证SSL正在运行命令
来源