Class: Meroku::CLI::Server

Inherits:
Thor
  • Object
show all
Includes:
Sanitychecks, Util
Defined in:
lib/meroku/cli/server.rb

Instance Method Summary collapse

Methods included from Sanitychecks

#admin_secrets_required

Instance Method Details

#_downallObject



11
12
13
14
# File 'lib/meroku/cli/server.rb', line 11

def _downall()
  admin_secrets_required
  ec2_client.terminate_instances({ instance_ids: [ production_servers.first ] }) if !production_servers.empty?
end

#activateObject



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
# File 'lib/meroku/cli/server.rb', line 52

def activate()
  admin_secrets_required
  # Terminate server with production ip
  if !production_servers.empty?
    ec2_client.terminate_instances({ instance_ids: [ production_servers.first ] })
  end

  standby_servers = unused_servers
  abort "Too many unused servers (#{standby_servers.size})" if standby_servers.size > 1

  ec2_client.associate_address(
    {
      allocation_id: 'eipalloc-139f7823', # this is eip 34.239.241.218
      instance_id: standby_servers.first
    }
  )
  puts "Associated 34.239.241.218 with #{standby_servers.first}"
  puts 'ping 34.239.241.218 -c 20'
  puts `ping 34.239.241.218 -c 20`
  puts `ssh -i ~/crypto/meroku/meroku.id_rsa -o "StrictHostKeyChecking=no" -v [email protected] pwd`
  # remove the next 3 lines later
  ssh3("34.239.241.218","cat meroku/rails_app/tmp/pids/server.pid")
  ssh3("34.239.241.218","kill -9 `cat meroku/rails_app/tmp/pids/server.pid`")
  ssh3("34.239.241.218","cd meroku/rails_app; RAILS_SERVE_STATIC_FILES=1 SECRET_KEY_BASE=fixme rails s -e production -d -b 0.0.0.0 && sleep 5")
  ssh3("34.239.241.218","sudo ls -la /opt/bitnami/nginx/conf/vhosts/") # for debugging
end

#backupObject



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
# File 'lib/meroku/cli/server.rb', line 23

def backup()
  admin_secrets_required
  timestamp=Time.now.to_i
  aws_exports="AWS_DEFAULT_REGION=us-east-1 AWS_ACCESS_KEY_ID=#{ENV['AWS_ACCESS_KEY_ID']} AWS_SECRET_ACCESS_KEY=#{ENV['AWS_SECRET_ACCESS_KEY']}"

  if production_servers.empty?
    puts "Not doing backup - No production servers"
    return
  end

  # DBs
  ssh3("34.239.241.218","PGPASSWORD=bitnami pg_dumpall -U postgres -f /tmp/#{timestamp}.postgres")
  ssh3("34.239.241.218","mysqldump -uroot -pbitnami --flush-privileges --all-databases > /tmp/#{timestamp}.mysql")
  ssh3("34.239.241.218","gzip -fv -9 /tmp/#{timestamp}.postgres /tmp/#{timestamp}.mysql")
  ssh("34.239.241.218","#{aws_exports} aws s3 cp /tmp/#{timestamp}.postgres.gz s3://meroku-database-backups/")
  ssh("34.239.241.218","#{aws_exports} aws s3 cp /tmp/#{timestamp}.postgres.gz s3://meroku-database-backups/postgres.gz")
  ssh("34.239.241.218","#{aws_exports} aws s3 cp /tmp/#{timestamp}.mysql.gz s3://meroku-database-backups/")
  ssh("34.239.241.218","#{aws_exports} aws s3 cp /tmp/#{timestamp}.mysql.gz s3://meroku-database-backups/mysql.gz")

  # HOME DIRS
  ssh3("34.239.241.218","sudo rm -f /tmp/home_dirs.tgz || true; sudo tar --exclude='/home/bitnami' -zcvf /tmp/home_dirs.gz /home/*")
  ssh("34.239.241.218","#{aws_exports} aws s3 cp /tmp/home_dirs.gz s3://meroku-database-backups/")
  ssh("34.239.241.218","#{aws_exports} aws s3 cp s3://meroku-database-backups/home_dirs.gz  s3://meroku-database-backups/#{timestamp}.home_dirs.gz")

  # CLEANUP
  ssh("34.239.241.218","sudo rm -f /tmp/*.mysql.gz /tmp/*.postgres.gz /tmp/home_dirs.gz")
end

#installObject



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# File 'lib/meroku/cli/server.rb', line 80

def install()
  admin_secrets_required
  ip = server_being_built

  ssh2(ip,"sudo apt-add-repository ppa:git-core/ppa -y")
  ssh2(ip,"sudo apt-get update -y")
  ssh2(ip,"sudo apt-get install -yqq libyaml-dev libsqlite3-dev sqlite3 libgmp-dev libgdbm-dev")
  ssh2(ip,"sudo apt-get install -yqq libncurses5-dev bison pkg-config libffi-dev")
  ssh2(ip,"sudo apt-get install -yqq libgmp-dev libreadline6-dev libssl-dev libpq-dev libmysqlclient-dev jq awscli")
  #ssh2(ip,"sudo apt-get install -yqq nodejs")
  ssh2(ip,"sudo npm install -g yarn")

  ssh2(ip,"sudo apt-get install git-core -y")
  ssh2(ip,"sudo rm /opt/bitnami/git/bin/git")
  ssh2(ip,"sudo ln -s /usr/bin/git /opt/bitnami/git/bin/git")

  ssh2(ip,"sudo addgroup meroku;")
  ssh2(ip,"sudo apt-get install emacs24-nox -y")
  ssh2(ip,"git clone --quiet https://github.com/meroku/meroku.git")

  ssh2(ip,"sudo mkdir /opt/githooks; sudo chmod 777 /opt/githooks")
  ssh2(ip,'cp ~/meroku/misc/githook_post-receive /opt/githooks/post-receive')
  ssh2(ip,'cp ~/meroku/misc/start_app /opt/githooks/start_app')
  ssh2(ip,'cp ~/meroku/misc/app_id_by_name /opt/githooks/app_id_by_name')
  ssh2(ip,'cp ~/meroku/misc/user_id_by_name /opt/githooks/user_id_by_name')
  
  ssh2(ip,"sudo chmod 777 /opt/githooks/* ")
  ssh2(ip,"sudo ln -s /usr/bin/install /bin/install")

  aws_exports="AWS_DEFAULT_REGION=us-east-1 AWS_ACCESS_KEY_ID=#{ENV['AWS_ACCESS_KEY_ID']} AWS_SECRET_ACCESS_KEY=#{ENV['AWS_SECRET_ACCESS_KEY']}"

  # postgres / mysql restore happens here
  ssh3(ip,"#{aws_exports} aws s3 cp s3://meroku-database-backups/postgres.gz /tmp/")
  ssh3(ip,"#{aws_exports} aws s3 cp s3://meroku-database-backups/mysql.gz /tmp/")
  ssh3(ip,"cd /tmp/ && gunzip postgres.gz && gunzip mysql.gz")
  ssh3(ip,"PGPASSWORD=bitnami psql -U postgres -f /tmp/postgres")
  ssh3(ip,"mysql -uroot -pbitnami < /tmp/mysql")
  ssh3(ip,"sudo rm -f /tmp/mysql /tmp/postgres")

  ssh2(ip,"sudo mkdir /opt/bitnami/nginx/keys/; ")
  puts `scp -i ~/crypto/meroku/meroku.id_rsa ~/crypto/meroku/meroku_site_fullchain.pem ubuntu@#{ip}:/home/bitnami/`
  ssh2(ip, 'sudo mv ~/meroku_site_fullchain.pem /opt/bitnami/nginx/keys/; ')
  puts `scp -i ~/crypto/meroku/meroku.id_rsa ~/crypto/meroku/meroku_site_privkey.pem ubuntu@#{ip}:/home/bitnami/`
  ssh2(ip,'sudo mv ~/meroku_site_privkey.pem /opt/bitnami/nginx/keys/; ')

  ssh2(ip,"sudo cp meroku/misc/gemrc /etc/gemrc")
  ssh2(ip,"cd meroku/rails_app; NOKOGIRI_USE_SYSTEM_LIBRARIES=1 bundle install")

  ssh3(ip,"cd meroku/rails_app; RAILS_ENV=production rake nginx:rebuild")

  # create unix users
  ssh3(ip,"cd meroku/rails_app; RAILS_ENV=production rake unix_users:rebuild")
  # create unix users directories
  ssh3(ip,"#{aws_exports} aws s3 cp s3://meroku-database-backups/home_dirs.gz /tmp/")
  ssh3(ip,"#{aws_exports} cd /; sudo tar xzvf /tmp/home_dirs.gz")
  ssh3(ip,"sudo rm -f /tmp/home_dirs.gz")

  ssh3(ip,"cd meroku/rails_app; RAILS_ENV=production rake rvm:rebuild")

  ssh3(ip,"cd meroku/rails_app; SECRET_KEY_BASE=fixme rake assets:precompile")
  ssh3(ip,"cd meroku/rails_app; RAILS_SERVE_STATIC_FILES=1 SECRET_KEY_BASE=fixme rails s -e production -d -b 0.0.0.0 && sleep 5")

  
  # start customer rails apps here wipwip
  ssh3(ip,"cd meroku/rails_app; RAILS_ENV=production rake meroku:start_apps")

  ssh3(ip,"sudo /opt/bitnami/ctlscript.sh stop apache")
  ssh3(ip,"sudo /opt/bitnami/ctlscript.sh restart nginx")
  ssh3(ip,"sudo ls -la /opt/bitnami/nginx/conf/vhosts/")
end

#revertObject



17
18
19
20
# File 'lib/meroku/cli/server.rb', line 17

def revert()
  puts `ssh -o 'StrictHostKeyChecking=no' -i ~/crypto/meroku/meroku.id_rsa [email protected] 'cd ~/meroku/ && git pull'`
  puts `ssh -o 'StrictHostKeyChecking=no' -i ~/crypto/meroku/meroku.id_rsa [email protected] 'sudo ~/meroku/rails_app/script/revert'`
end

#startObject



156
157
158
159
160
161
162
# File 'lib/meroku/cli/server.rb', line 156

def start()
  admin_secrets_required
  terminate_unused_servers
  instance_id = ec2_start_instance
  ec2_tag_instance(instance_id)
  ec2_await_boot(instance_id)
end