设置:
一个运行 OpenVPN 服务器和几个 Vagrant 虚拟机的盒子
问题:
我想像普通机器一样直接从 VPN 客户端访问 Vagrant 盒子,而不仅仅是在几个转发端口上。
配置:
OpenVPN 有接口 tun0:
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.69.69.1 P-t-P:10.69.69.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:110348 errors:0 dropped:0 overruns:0 frame:0
TX packets:89923 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:18322866 (18.3 MB) TX bytes:16651955 (16.6 MB)
Run Code Online (Sandbox Code Playgroud)
Vagrant 配置了具有特定 ip 的 public_networks:
config.vm.network "public_network", :bridge => "tun0", ip:"10.69.69.101", :auto_config => "false", :netmask => "255.255.255.0"
Run Code Online (Sandbox Code Playgroud)
但它不起作用,我猜是因为我无法将 Vagrant 桥接到 OpenVpn 接口?。从日志:
DEBUG network: Normalized configuration: …Run Code Online (Sandbox Code Playgroud) 我在配置 CentOS 6 Vagrant 设置以在启动时启动 Apache 服务时遇到问题。我曾尝试使用 chkconfig 并且操作系统似乎只是忽略它。
当我跑步时sudo chkconfig --list httpd,我得到
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
Run Code Online (Sandbox Code Playgroud)
我认为这是运行命令的结果
sudo chkconfig httpd on
sudo chkconfig --levels 235 httpd on
sudo chkconfig --levels 345 httpd on
Run Code Online (Sandbox Code Playgroud)
在我的配置脚本中正确配置这个东西的不同尝试。我没有使用 Puppet 或 Chef,我也真的不想使用。我在另一台主机上运行了这个,但在第二台主机上它似乎由于某种原因停止工作。
手动启动服务sudo service httpd start工作正常,但只要我这样做,vagrant halt && vagrant up或者vagrant reload当虚拟机恢复时服务将不会启动。
令人沮丧的是,我以完全相同的方式配置的 mysqld 服务在启动时完全正常。
我的 /var/log/httpd/error_log 是这样说的:
[Thu Apr 17 09:31:09 2014] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Thu Apr 17 09:31:09 …Run Code Online (Sandbox Code Playgroud) 默认情况下,Vagrant 使用在使用 vagrant ssh 登录机器时使用的不安全私钥。
Vagrant 支持通过 private_key_path 指定不同的私钥,但是我不清楚如何最好地将这个密钥与 box 文件一起传递。我发现的教程和网站通常假设用户已将密钥安装在公共位置。
但是,我只想提供一个盒子文件,而无需额外的设置步骤。
我只能使用 vagrant 的标准 ssh 密钥执行此操作吗?
我正在尝试在 vagrant 上设置一个工作主管/gunicorn/django。当代码发生更改时,我正在使用 python-watchdog 尝试重新启动 gunicorn。
我正在为 gunicorn 使用以下主管配置:
[program:someapp]
environment=PYTHONPATH='/vagrant/libs/unmodified/django-error-capture-middleware/src:/vagrant:/home/vagrant/.virtualenvs/someapp/lib/python2.7/site-packages:/vagrant/wsgi',DJANGO_SETTINGS_MODULE=someapp.settings.vagrant
command=/home/vagrant/.virtualenvs/someapp/bin/gunicorn --bind 0.0.0.0:80 --pid=/home/vagrant/.gunicorn.pid --preload --workers=1 --debug --log-level debug --error-logfile - --access-logfile - vagrant_wsgi:application
user=root
group=root
redirect_stderr=true
stdout_logfile = /vagrant/logs/gunicorn.log
stderr_logfile = /vagrant/logs/gunicorn.log
stdout_logfile_maxbytes=0
autostart=true
autorestart=true
stdout_events_enabled=true
loglevel=debug
Run Code Online (Sandbox Code Playgroud)
这一切都很好。看门狗也工作正常。但是,当我使用看门狗运行 . 时kill -HUP [pidofgunicorn],有时它实际上不会完全重新加载。有时 django 甚至会报告模块在之前存在时丢失(我根本没有修改 sys.path)。
如果我使用看门狗运行一个supervisorctl restart someapp,它工作正常。但是,它需要更长的时间,尤其是在 virtualbox 实例上。
有什么我可以做的让 gunicorn 优雅地重新加载,并实际看到所做的更改?
我有一个运行 Ubuntu 15.04 的 Vagrant 盒子,它有一个 upstart 脚本,可以在系统启动时启动一个服务。它有一个start on vagrant-mounted节,因为该服务要求 Vagrant 挂载 /vagrant 目录。
我现在正在将此脚本迁移到 systemd(我是全新的)并且无法在引导期间成功运行脚本,因为 /vagrant 在脚本运行时未安装。After=vagrant-mounted不起作用,但可能有助于显示我正在尝试做的事情。
在引导期间挂载 Vagrant 目录时,如何运行 systemd 单元?
注意systemctl start my.service 确实成功启动了服务,并且服务被systemctl enabled'ed。
我正在尝试在基于 centos 的 vagrant 盒子上安装带有 ansible 的 rvm。
我正在运行的命令是:
vars:
user: "foo"
- name: install rvm
action: command sudo -u $user bash /home/$user/rvm-install.sh stable creates=$home/.rvm
Run Code Online (Sandbox Code Playgroud)
它几乎有效,但 Ansible 认为它失败了。
Ansible 输出是:
failed: [127.0.0.1] => {"changed": true, "cmd": ["sudo", "-u", "foo", "bash", "/home/foo/rvm-install.sh", "stable"], "delta": "0:00:21.102322", "end": "2012-10-09 12:33:19.917874", "rc": 1, "start": "2012-10-09 12:32:58.815552"}
stderr: % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1081k 100 1081k 0 0 54170 0 0:00:20 …Run Code Online (Sandbox Code Playgroud) Chef-solo 缺乏环境支持似乎很有争议。一方面,环境的特征之一是能够将食谱固定到特定环境,而这对于 Chef-solo 来说完全没有意义。另一方面,我们很多人都希望在使用 Vagrant 进行测试时能够合并环境级别的属性并使用特定于环境的运行列表。我想我可能已经找到了一个简单的方法来解决这个问题。假设我在所有环境和角色中使用 JSON 语法,并且我坚持以下约定来设置属性(从最低到最高优先级):
看起来我可以自己解析这些文件并使用 -j 选项将属性注入到chef-solo中。例如,我可以在我的 Vagrantfile 中做这样的事情:
chef_env_conf = parse_json("./environments/#{ENV['CHEF_ENVIRONMENT']}.json")
chef.json = chef_env_conf["override_attributes"]
Run Code Online (Sandbox Code Playgroud)
由于通过 -j 选项设置的属性在正常优先级级别应用,因此这可以是覆盖角色默认值的另一种方法,并且这可能是您在未自动拉入环境的上下文中所需的全部内容。
您可以执行类似的操作来获取每个环境的运行列表(通过解析角色文件):
chef_role_conf = parse_json("./roles/#{role}.json")
chef.run_list = chef_role_conf["env_run_lists"][ENV['CHEF_ENVIRONMENT']]
Run Code Online (Sandbox Code Playgroud)
我意识到这不是最优雅的 hack,但对于某些人来说,这似乎是一个可行的解决方案。有没有人认为这是一个非常糟糕的主意?
似乎 Vagrant 不允许我使用 Vmware 在 Windows 上自动配置 Ansible 配置器。
我不确定 Ansible 是否必须安装在主机上(在我的情况下为 Windows)或来宾上。
我尝试使用以下 shell 脚本自动配置来宾机器:
#!/usr/bin/env bash
apt-get update -y
apt-get install openssh-client openssh-server python-pycurl software-properties-common python-software-properties nano -y
sleep 2
echo "deb http://ppa.launchpad.net/rquillo/ansible/ubuntu precise main" >> /etc/apt/sources.list
echo "deb-src http://ppa.launchpad.net/rquillo/ansible/ubuntu precise main" >> /etc/apt/sources.list
sleep 2
apt-get install ansible -y
Run Code Online (Sandbox Code Playgroud)
安装 Ansible 非常好,但我的命令提示符告诉我以下消息:
The executable ansible-playbook Vagrant is trying to run was not found in the %PATH% variable
Run Code Online (Sandbox Code Playgroud)
在检查来宾并尝试执行“ansible-playbook”后,它完全正确地识别了该命令。
然后我想也许 Vagrant 在来宾的路径环境变量中需要“ansible-playbook”。
我运行以下命令将“ansible-playbook”添加到我的 linux 客户机上的 PATH 变量中。
export …Run Code Online (Sandbox Code Playgroud) 我正在尝试将 vagrant 设置为在本地部署,而我们也想部署到 elasticbeanstalk。那么如何让我的本地 Cent OS Vagrant VM 尽可能接近 Amazon EMI?
我的同事建议可能将 Amazon 机器上 /etc/yum/yum.repos.d 下的所有内容安装到 Vagrant Cent OS 机器上。
有什么建议?谢谢
我正在尝试更新我的 vagrant box 以使用 PHP 5.6,我基本上是在命令行上执行以下过程。
前两个步骤看起来不错,但是在执行“设置安装过程”的最后一步时,我收到以下错误:
Error: php56w-common conflicts with php-common-5.3.3-46.el6_6.x86_64
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
Run Code Online (Sandbox Code Playgroud)
我需要上述所有与 PHP 5.6 兼容的模块,有人可以建议我下一步应该做什么才能使其正常工作吗?