我正在创建一个AWS实例,并尝试在创建时运行Vault服务器。我的问题是创建过程永远不会完成,因为服务器没有在后台运行。这是我的配置:
resource "aws_instance" "web" {
ami = "ami-466768ac"
instance_type = "t2.micro"
key_name = "my_key"
tags {
Name = "Vault"
}
provisioner "remote-exec" {
connection {
type = "ssh"
agent = false
user = "ec2-user"
private_key = "${file("/path/to/my_key")}"
}
inline = [
"curl -O https://releases.hashicorp.com/vault/0.10.4/vault_0.10.4_linux_amd64.zip",
"unzip vault_0.10.4_linux_amd64.zip",
"./vault server -dev -dev-listen-address=0.0.0.0:8200"
]
}
}
基本上,我通过curl
下载Vault并运行开发服务器。服务器实际上是运行的(我在终端日志中看到它),但实例创建(由Terraform)永远不会完成:
aws_instance.web: Still creating... (40s elapsed)
aws_instance.web: Still creating... (50s elapsed)
aws_instance.web: Still creating... (1m0s elapsed)
aws_instance.web: Still creating... (1m10s elapsed)
aws_instance.web: Still creating... (1m20s elapsed)
aws_instance.web: Still creating... (1m30s elapsed)
...
我试图添加<代码>
如何在创建实例时以后台模式启动服务器?
编辑
我也试过nohup:
nohup ./vault server -dev -dev-listen-address=0.0.0.0:8200
但当terraform完成时服务器并没有启动。。。
这不是Terraform特定的东西,如果你SSH一个实例并运行你的命令,你会看到它在进程处于前台时被阻塞,如果你通过添加来背景化它
这里的解决方案是使用
nohup
,以便Vault服务器进程将忽略您的HUP
(或挂断)信号,该信号在您的会话存在时触发。
因此,您应该将命令更改为:
...
inline = [
"curl -O https://releases.hashicorp.com/vault/0.10.4/vault_0.10.4_linux_amd64.zip",
"unzip vault_0.10.4_linux_amd64.zip",
"nohup ./vault server -dev -dev-listen-address=0.0.0.0:8200 &"
]
...
最后,正如@StephenKing在评论中告诉我的那样,我创建了一个systemd服务。这是我的配置:
resource "aws_instance" "web" {
ami = "ami-466768ac"
instance_type = "t2.micro"
key_name = "my_key"
tags {
Name = "Vault"
}
//upload vault.service file (systemd unit)
provisioner "file" {
connection {
type = "ssh"
agent = false
user = "ec2-user"
private_key = "${file("/path/to/my/key")}"
}
source = "./vault.service"
destination = "/home/ec2-user/vault.service"
}
//download vault and start service
provisioner "remote-exec" {
connection {
type = "ssh"
agent = false
user = "ec2-user"
private_key = "${file("/path/to/my/key")}"
}
inline = [
"curl -O https://releases.hashicorp.com/vault/0.10.4/vault_0.10.4_linux_amd64.zip",
"unzip vault_0.10.4_linux_amd64.zip",
"sudo mv /home/ec2-user/vault.service /etc/systemd/system/",
"sudo systemctl start vault.service"
]
}
}
vault.service
[Unit]
Description=Vault dev server
[Service]
ExecStart=/home/ec2-user/vault server -dev -dev-listen-address=0.0.0.0:8200
问题内容: 我在CI和CD上创建了Jenkinsfile,Dockerfile,Dockerfile.test到CI和CD,在GitHub上构建了我的服务器API,我在Jenkins上构建了该构建,并且构建成功,并且我的docker在Jenkinsfile阶段也在容器上运行,我创建了用于测试和部署在服务器API上,并使用docker作为容器 我也使用docker-compose在docker上运行
我有一个Cucumber测试套件,由Jenkins在一个服务器池上执行,该服务器池有时在服务器池中并发运行。 当服务器a上的测试运行更改了数据库存储的设置时,我遇到了竞争情况,这会导致服务器B上的测试运行失败,因为它正在寻找处于不同状态的设置 有没有办法将cucumber tests或Jenkins配置为在服务器B上运行场景,等待服务器a上运行的场景完成后再继续?
问题内容: 对于具有Java背景的开发人员,我也有兴趣探索使用ASP.NET工具/平台进行软件开发。 Java Web应用程序(.jsp和servlet)可以在许多服务器平台上运行。 问题 :.NET Web应用程序能否在基于Linux的服务器上运行?考虑到无法使用Windows服务器托管Web应用程序的情况。 问题答案: 这取决于您使用的是哪种特定的.NET技术。该Mono项目提供运行ASP.N
问题内容: 我从以下位置下载了针对Apache 2.2和python 2.7(64bit)的mod_wsgi 。(我正在尝试让django在我的计算机上运行)。 每当我添加以下行时: Apache无法启动。谁能告诉我这个问题可能是什么? 问题答案: 您需要执行以下操作来为Django设置Apache。我假设您在安装了WAMP服务器( 32位* )的Windows( 32 位 )上使用Python
问题内容: 我将Selenium与Java(1.8)中的Chromedriver结合使用来进行一些自动的网络爬网: 我正在尝试迁移到Ubuntu 16.04服务器。在服务器上,我安装了Ubuntu chromedriver版本2.37,chrome版本65。根据chromedriver文档,这些版本兼容。我已经更改了指定chromedriver在Ubuntu中的位置的代码: 在运行程序之前,我先启
问题内容: 这是一个简单的node.js代码。 我将其上传到cpanel托管服务器上并安装了node.js并运行它。如果服务器是普通服务器,我可以通过访问’http:// {serverip}:8080’检查脚本结果。但是在cpanel上托管域和子域,并且每个域都由每个站点匹配。甚至http:// {serverip}也不是有效的网址。如何访问我的node.js结果?请教我。谢谢。bingbing