ちょっと試してみたいソフトウェアがあったから
Vagrantを使って仮想環境を作ったんだけど
丸2日ぐらい途方に暮れたから
その時やったことを書き溜めとく。
そもそもサーバー立ってる?
まず真っ先にサーバーが起動してないかもということで
ホスト(自分のパソコン)からcurlでアタック。
1 |
$ curl http://127.0.0.1:3333 |
.
.
.
.
反応なし
拒絶されているわけではないんだよなぁ。
次に仮想環境に入ってそこからcurlアタック
1 |
$ curl http://127.0.0.1:3000 |
即返ってきた。
やっぱりちゃんと起動はしているみたい。
0.0.0.0で起動
Rails4.2以上のバージョンはlocalhost起動だとホストブラウザからアクセスできない。
1 |
$ rails s |
これだとブラウザで表示できなくなるということで
ipを0.0.0.0指定して起動すると解決する。
Rails4.2以上は前から使ってたから
ぶっちゃけ意味は無いだろうけど...
1 2 3 4 5 |
$ ./bin/rails s -b 0.0.0.0 => Booting WEBrick => Rails 4.2.0 application starting in development on http://0.0.0.0:3000 => Run `rails server -h` for more startup options => Ctrl-C to shutdown server |
もちろんダメだった。
Vagrantでのポートフォワード設定に問題があるのかも。
Vagrantfileをチェック
当時のVagrantfieはこんな感じ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# -*- mode: ruby -*- # vi: set ft=ruby : # All Vagrant configuration is done below. The "2" in Vagrant.configure # configures the configuration version (we support older styles for # backwards compatibility). Please don't change it unless you know what # you're doing. # 仮想マシンのホスト名 HOST_NAME = "test-app-host" # VirtualBoxマネージャ上の仮想マシン名 MACHINE_NAME = HOST_NAME Vagrant.configure(2) do |config| # The most common configuration options are documented and commented below. # For a complete reference, please see the online documentation at # https://docs.vagrantup.com. # Every Vagrant development environment requires a box. You can search for # boxes at https://atlas.hashicorp.com/search. config.vm.box = "CentOS7.0" config.vm.host_name = MACHINE_NAME config.vm.provider :virtualbox do |virtualbox| virtualbox.name = MACHINE_NAME virtualbox.memory = 1024 end # Disable automatic box update checking. If you disable this, then # boxes will only be checked for updates when the user runs # `vagrant box outdated`. This is not recommended. # config.vm.box_check_update = false # Create a forwarded port mapping which allows access to a specific port # within the machine from a port on the host machine. In the example below, # accessing "localhost:8080" will access port 80 on the guest machine. #config.vm.network "forwarded_port", guest: 80, host: 8080 config.vm.network "forwarded_port", guest: 22, host: 2022, id: "ssh" config.vm.network "forwarded_port", guest: 3000, host: 3333 # Create a private network, which allows host-only access to the machine # using a specific IP. #config.vm.network "private_network", ip: "192.168.33.8" # Create a public network, which generally matched to bridged network. # Bridged networks make the machine appear as another physical device on # your network. # config.vm.network "public_network" # Share an additional folder to the guest VM. The first argument is # the path on the host to the actual folder. The second argument is # the path on the guest to mount the folder. And the optional third # argument is a set of non-required options. # config.vm.synced_folder "../data", "/vagrant_data" config.vm.synced_folder "../rails_dev/", "/vagrant" # Provider-specific configuration so you can fine-tune various # backing providers for Vagrant. These expose provider-specific options. # Example for VirtualBox: # # config.vm.provider "virtualbox" do |vb| # # Display the VirtualBox GUI when booting the machine # vb.gui = true # # # Customize the amount of memory on the VM: # vb.memory = "1024" # end # # View the documentation for the provider you are using for more # information on available options. # Define a Vagrant Push strategy for pushing to Atlas. Other push strategies # such as FTP and Heroku are also available. See the documentation at # https://docs.vagrantup.com/v2/push/atlas.html for more information. # config.push.define "atlas" do |push| # push.app = "YOUR_ATLAS_USERNAME/YOUR_APPLICATION_NAME" # end # Enable provisioning with a shell script. Additional provisioners such as # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the # documentation for more information about their specific syntax and use. # config.vm.provision "shell", inline: <<-SHELL # sudo apt-get update # sudo apt-get install -y apache2 # SHELL end |
ポートフォワードに何か変な書き込みがあるかどうか確認してみたけど、
そもそも大して書き込んでないし特別問題はないと。
仮想環境内でiptableに問題がありそう。
てかそれ以外あったらもうわからない(泣)
iptableのチェック
centosといったら(?)iptableだよね!!(もう投げやり)
ポート開くためにiptableに下記を書き込みたい。
1 |
-A INPUT -p tcp -m tcp --dport 3000 -j ACCEPT |
とりあえず設定を確認。
1 2 |
$ sudo cat /etc/sysconfig/iptables cat: /etc/sysconfig/iptables: そのようなファイルやディレクトリはありません |
ん?
iptableが無い!!!
作っちゃえばいいのかな??
勝手に作ってみたけど
何の解決にもならず途方にくれて丸2日
ふと目にしたサイトに
CentOS7から、iptablesではなく、firewalldに変わった!!
と書いてありました。
きました
firewall止めちゃえばいいんだね。
1 |
$ systemctl stop firewalld |
これで無事解決。
Centos7はiptableが無いから注意!!
これがまさにドツボの原因だった。
Centos7だったことすっかり忘れてた
じゃあね~