如何使用Rails应用程序保存SSL证书并在NGINX中创建虚拟主机?

我有一个Rails应用程序,它使用gem Rails Let’s Encrypt为自定义域生成SSL证书。

gem非常简单易用。 安装/配置后,我可以生成证书,数据将存储在数据库中。

我想将certificate CRTcertificate KEY保存在相应的NGINX文件夹中: /etc/nginx/ssl/

在那之后,我想:

  • 复制文件/etc/nginx/sites-available/default并使用名称/etc/nginx/sites-available/customdomain.com保存

  • 使用以下命令更改文件customdomain.com

内容:

 server { listen 80; listen 443 ssl; server_name www.customdomain.com; ssl_certificate /etc/nginx/ssl/customdomain.crt; ssl_certificate_key /etc/nginx/ssl/customdomain.key; passenger_enabled on; root /home/ubuntu/myapp/current/public; gzip on; gzip_http_version 1.1; gzip_vary on; gzip_comp_level 6; gzip_proxied any; gzip_types text/plain text/css application/json application/javascript application/x-javascript text/javascript gzip_disable "msie6"; location ^~ /assets/ { expires max; add_header Cache-Control public; } } 
  • 使用以下代码在sites-enabled创建指向此文件的链接: sudo ln -s /etc/nginx/sites-available/customdomain.com /etc/nginx/sites-enabled/

  • 重启nginx: sudo service nginx restart

我手动完成了这些步骤,SSL工作正常。 如何以编程方式执行此操作?

请记住,当使用Rails生成证书时,步骤开始。 必须有一些方法来执行这些步骤。 我感谢任何帮助! TKS!

我的环境:

 ruby -v: ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux] rails -v: Rails 4.2.3 nginx -v: nginx/1.8.0 passenger -v: Phusion Passenger version 5.0.10 Ubuntu 14.04.2 LTS Amazon EC2 instance (without load balancer, because LB requires only one certificate in the https) 

编辑1

也许,有一种使用通配符配置的方法。 我不是为每个域创建一个虚拟主机,而是只创建一个文件,如下所示:

/etc/nginx/sites-enabled/wildcard

在这个文件中,我有一个像这样的修改:

 server_name {{customdomain_url}}; ssl_certificate /etc/nginx/ssl/{{customdomain}}.crt; ssl_certificate_key /etc/nginx/ssl/{{customdomain}}.key; 

如果可能,那就更好了,因为作业只保存证书文件。 并且不需要重启nginx

编辑2 – 方式

我在/user/local/bin/myscript.sh创建了一个shell脚本,在这个脚本中,我在/etc/nginx/sites-available/创建了一个vhost文件进行测试。 在rails console ,我运行代码: sudo /user/local/bin/myscript.sh mydomain.com ,shell脚本正确创建文件。

这是一个测试,但有效。 我将创建最终版本并在此处发布最终解决方案。