module Meroku # At the moment we run on one ec2 node # This class represents that node class Node include Meroku::Aws::Ec2 include Meroku::Tunnelable def initialize puts "run_instances()" @instance = make_instance @tunnel_ip = Meroku::Aws::IP @tunnel_username = "ubuntu" @tunnel_password = "password" @tunnel_key_name = Meroku::Aws::KEY_NAME print "sleep " 30.times { print sleep(1) } print "\n" end def associate_address ip = "eipalloc-139f7823" Meroku::Aws::Ec2.associate_address(ip, @instance.instance_id) self end def configure_keys str = <<~HEREDOC mkdir /home/ubuntu/.meroku sudo curl -s -o /etc/ssh/ssh_host_ecdsa_key #{Meroku::Aws.bucket_url}/ssh_host_ecdsa_key sudo curl -s -o /etc/ssh/ssh_host_ecdsa_key.pub #{Meroku::Aws.bucket_url}/ssh_host_ecdsa_key.pub curl -s -o /home/ubuntu/.meroku/letsencrypt_fullchain.pem #{Meroku::Aws.bucket_url}/letsencrypt_fullchain.pem curl -s -o /home/ubuntu/.meroku/letsencrypt_privkey.pem #{Meroku::Aws.bucket_url}/letsencrypt_privkey.pem curl -s https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - HEREDOC str.split("\n").each { |cmd| tunnel_run(cmd) } self end def add_sources str = <<~HEREDOC echo "Dpkg::Use-Pty "0";" | sudo tee /etc/apt/apt.conf.d/00usepty sudo apt-add-repository ppa:brightbox/ruby-ng --yes 2>/dev/null >/dev/null echo "deb http://archive.ubuntu.com/ubuntu/ trusty main universe" | sudo tee -a /etc/apt/sources.list echo "deb http://archive.ubuntu.com/ubuntu/ trusty-security main universe" | sudo tee -a /etc/apt/sources.list echo "deb http://archive.ubuntu.com/ubuntu/ trusty-updates main universe" | sudo tee -a /etc/apt/sources.list echo "deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main" | sudo tee -a /etc/apt/sources.list HEREDOC str.split("\n").each { |cmd| tunnel_run(cmd) } self end def ubuntu_updates str = <<~HEREDOC DEBIAN_FRONTEND=noninteractive sudo apt-get update -qq DEBIAN_FRONTEND=noninteractive sudo apt-get upgrade -yqq --force-yes 2>/dev/null >/dev/null HEREDOC str.split("\n").each { |cmd| tunnel_run(cmd) } self end def install_packages str = <<~HEREDOC DEBIAN_PRIORITY=critical DEBIAN_FRONTEND=noninteractive sudo apt-get install -q -y -o "Dpkg::Options::=--force-confdef" -o "Dpkg::Options::=--force-confold" autoconf bind9-host bison build-essential coreutils curl daemontools dnsutils ed git imagemagick iputils-tracepath language-pack-en libbz2-dev libcurl4-openssl-dev libev-dev libevent-dev libglib2.0-dev libjpeg-dev libmagickwand-dev libmysqlclient-dev libncurses5-dev librdkafka-dev libreadline6-dev libssl-dev libuv-dev libxml2-dev libxslt-dev netcat-openbsd openjdk-7-jdk openjdk-7-jre-headless openssh-client openssh-server python python-dev socat stunnel syslinux tar telnet zip zlib1g-dev ruby2.4 ruby2.4-dev nginx libsqlite3-dev nodejs libpq-dev postgresql-9.6 2>/dev/null >/dev/null HEREDOC str.split("\n").each { |cmd| tunnel_run(cmd) } self end def database_inits str = <<~HEREDOC sudo -u postgres createuser -e meroku sudo -u postgres createdb meroku sudo -u postgres psql -c "ALTER ROLE meroku WITH PASSWORD '#{ENV['SECRET']}';" sudo perl -pi -e "s#local.*all.*all.*peer#local all all md5#" /etc/postgresql/9.6/main/pg_hba.conf sudo service postgresql restart HEREDOC str.split("\n").each { |cmd| tunnel_run(cmd) } self end def git_clone str = <<~HEREDOC cd ~; git clone https://github.com/oystersauce8/meroku; HEREDOC str.split("\n").each { |cmd| tunnel_run(cmd) } self end def nginx_configs str = <<~HEREDOC sudo rm -f /etc/nginx/sites-enabled/* /etc/nginx/sites-available/* sudo cp ~/meroku/frontend/etc_nginx_sites-enabled_default /etc/nginx/sites-enabled/default sudo mkdir /sharedro && sudo chmod 777 /sharedro sudo cp /home/ubuntu/meroku/frontend/etc_nginx_sites-enabled_template /sharedro sudo chmod a+r /sharedro/etc_nginx_sites-enabled_template HEREDOC str.split("\n").each { |cmd| tunnel_run(cmd) } self end def start_rails str = <<~HEREDOC cd ~/meroku/frontend; sudo gem install bundler; bundle; cd ~/meroku/frontend; SECRET=#{ENV['SECRET']} RAILS_ENV=production bundle exec rails assets:precompile cd ~/meroku/frontend; SECRET=#{ENV['SECRET']} RAILS_ENV=production bundle exec rake db:migrate cd ~/meroku/frontend; SECRET=#{ENV['SECRET']} bundle exec puma -d -b unix:///home/ubuntu/meroku.sock sudo /usr/sbin/nginx -s reload HEREDOC str.split("\n").each { |cmd| tunnel_run(cmd) } self end end end