Commit 0433524f3831eacfe86b449a2dd0840689bde0d2
1 parent
77730dfe
Exists in
master
and in
36 other branches
Add `preconfig` target to setup SSH on reverseproxy
`rake preconfig` must be the very first step in the deploy process
Showing
6 changed files
with
57 additions
and
2 deletions
Show diff stats
README.md
... | ... | @@ -34,6 +34,7 @@ First you have to bring up the development virtual machines: |
34 | 34 | |
35 | 35 | ```bash |
36 | 36 | $ vagrant up |
37 | +$ rake preconfig | |
37 | 38 | $ rake bootstrap_common |
38 | 39 | ``` |
39 | 40 | |
... | ... | @@ -52,6 +53,17 @@ $ rake converge:$server # deploys only $server |
52 | 53 | * TODO: document creation of `prod.yaml`. |
53 | 54 | * TODO: document SSH configuration |
54 | 55 | |
56 | +The very first step is | |
57 | + | |
58 | +``` | |
59 | +$ rake preconfig SPB_ENV=production | |
60 | +``` | |
61 | + | |
62 | +This will perform some initial configuration to the system that is required | |
63 | +before doing the actual deployment. | |
64 | + | |
65 | +After that: | |
66 | + | |
55 | 67 | ```bash |
56 | 68 | $ rake SPB_ENV=production # deploys all servers |
57 | 69 | $ rake nodes SPB_ENV=production # lists all servers | ... | ... |
Rakefile
... | ... | @@ -35,7 +35,7 @@ task :test do |
35 | 35 | end |
36 | 36 | |
37 | 37 | file 'ssh_config.erb' |
38 | -file 'config/local/ssh_config' => ['nodes.yaml', 'config/local/ips.yaml', 'ssh_config.erb'] do |t| | |
38 | +file 'config/local/ssh_config' => ['nodes.yaml', 'config/local/ips.yaml', 'ssh_config.erb', 'Rakefile'] do |t| | |
39 | 39 | require 'erb' |
40 | 40 | template = ERB.new(File.read('ssh_config.erb')) |
41 | 41 | File.open(t.name, 'w') do |f| |
... | ... | @@ -50,3 +50,22 @@ unless ENV['nodeps'] |
50 | 50 | task 'converge:integration' => 'converge:database' |
51 | 51 | task 'converge:social' => 'converge:database' |
52 | 52 | end |
53 | + | |
54 | +$ALT_SSH_PORT = config.fetch('alt_ssh_port', 2222) | |
55 | + | |
56 | +$nodes.find { |n| n.hostname == 'reverseproxy' }.data['ssh_port'] = $ALT_SSH_PORT | |
57 | +desc 'Makes configurations needed before the bootstrap phase' | |
58 | +task :preconfig => ssh_config_file do | |
59 | + preconfig_file = "tmp/preconfig.#{$SPB_ENV}.stamp" | |
60 | + if File.exist?(preconfig_file) | |
61 | + puts "I: preconfig already done." | |
62 | + puts "I: delete #{preconfig_file} to force running again" | |
63 | + else | |
64 | + sh 'scp', '-F', ssh_config_file, 'utils/reverseproxy_ssh_setup', 'reverseproxy.unconfigured:/tmp' | |
65 | + sh 'ssh', '-F', ssh_config_file, 'reverseproxy.unconfigured', 'sudo', '/tmp/reverseproxy_ssh_setup', $ALT_SSH_PORT.to_s | |
66 | + | |
67 | + File.open(preconfig_file, 'w') do |f| | |
68 | + f.puts($ALT_SSH_PORT) | |
69 | + end | |
70 | + end | |
71 | +end | ... | ... |
Vagrantfile
... | ... | @@ -33,5 +33,9 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| |
33 | 33 | end |
34 | 34 | config.vm.define 'reverseproxy' do |reverseproxy| |
35 | 35 | reverseproxy.vm.network 'private_network', ip: ips['reverseproxy'] |
36 | + if File.exist?('tmp/preconfig.local.stamp') | |
37 | + reverseproxy.ssh.port = File.read('tmp/preconfig.local.stamp').strip.to_i | |
38 | + reverseproxy.ssh.host = ips['reverseproxy'] | |
39 | + end | |
36 | 40 | end |
37 | 41 | end | ... | ... |
config/local/config.yaml
ssh_config.erb
... | ... | @@ -9,7 +9,13 @@ Host * |
9 | 9 | <% $nodes.each do |node| %> |
10 | 10 | Host <%= node.hostname %> |
11 | 11 | Hostname <%= node.data['peers'][node.hostname] %> |
12 | + Port <%= node.data.fetch('ssh_port', 22) %> | |
12 | 13 | IdentityFile <%= (Dir.glob(".vagrant/machines/#{node.hostname}/*/private_key") + [File.expand_path('~/.vagrant.d/insecure_private_key')]).find { |f| File.exists?(f) }.tap { |f| File.expand_path(f) } %> |
13 | 14 | <% end %> |
14 | 15 | |
16 | +Host reverseproxy.unconfigured | |
17 | + Hostname <%= $nodes.first.data['peers']['reverseproxy'] %> | |
18 | + Port 22 | |
19 | + IdentityFile <%= (Dir.glob(".vagrant/machines/reverseproxy/*/private_key") + [File.expand_path('~/.vagrant.d/insecure_private_key')]).find { |f| File.exists?(f) }.tap { |f| File.expand_path(f) } %> | |
20 | + | |
15 | 21 | # vim: ft=sshconfig | ... | ... |
... | ... | @@ -0,0 +1,14 @@ |
1 | +#!/bin/sh | |
2 | + | |
3 | +set -e | |
4 | + | |
5 | +port="$1" | |
6 | + | |
7 | +# switch SSH to port $port | |
8 | +sed -i -e 's/^#\?\s*Port\s*[0-9]\+\s*$/Port '$port'/g' /etc/ssh/sshd_config | |
9 | + | |
10 | +# Tell SELinux to allow the new port | |
11 | +semanage port -a -t ssh_port_t -p tcp "$port" | |
12 | + | |
13 | +# Restart SSH | |
14 | +systemctl restart sshd | ... | ... |