class WcoHosting::Serverhost
def self.list
def self.list [[nil,nil]] + all.map { |s| [s.name, s.id] } # all.map { |s| [s.name, s.id] } end
def add_docker_service app
def add_docker_service app @obj = app Wco::Log.puts! nil, '#add_docker_service', obj: @obj ac = ActionController::Base.new ac.instance_variable_set( :@app, app ) ac.instance_variable_set( :@workdir, WORKDIR ) # rendered_str = ac.render_to_string("wco_hosting/docker-compose/dc-#{app.tmpl.kind}") rendered_str = ac.render_to_string("wco_hosting/docker-compose/dc-any") Wco::Log.puts! rendered_str, 'add_docker_service rendered_str', obj: @obj file = Tempfile.new('prefix') file.write rendered_str file.close # puts! file.path, 'file.path' cmd = "scp #{file.path} #{ssh_host}:#{WORKDIR}/dc-#{app.service_name}.yml " do_exec cmd cmd = "ssh #{ssh_host} 'cd #{WORKDIR} ; \ docker compose -f dc-#{app.service_name}.yml up -d #{app.service_name} ; \ echo ok #add_docker_service ' " do_exec cmd end
def add_nginx_site app
def add_nginx_site app @obj = app ac = ActionController::Base.new ac.instance_variable_set( :@app, app ) rendered_str = ac.render_to_string("wco_hosting/scripts/nginx_site.conf") Wco::Log.puts! rendered_str, 'add_nginx_site rendered_str', obj: @obj file = Tempfile.new('prefix') file.write rendered_str file.close cmd = "scp #{file.path} #{ssh_host}:/etc/nginx/sites-available/#{app.service_name}.conf " do_exec cmd cmd = "ssh #{ssh_host} 'ln -s /etc/nginx/sites-available/#{app.service_name}.conf /etc/nginx/sites-enabled/#{app.service_name}.conf ' " do_exec cmd cmd = "ssh #{ssh_host} 'nginx -s reload ' " do_exec cmd end
def create_appliance app
def create_appliance app # puts! app, 'Serverhost#create_appliance' create_subdomain( app ) create_volume( app ) add_docker_service( app ) add_nginx_site( app ) # load_database( app ) update({ next_port: app.serverhost.next_port + 1 }) end
def create_subdomain app
def create_subdomain app @obj = app Wco::Log.puts! @obj, '#create_subdomain...', obj: @obj client = DropletKit::Client.new(access_token: DO_TOKEN_1) record = DropletKit::DomainRecord.new( type: 'A', name: app.subdomain, data: app.serverhost.public_ip, ) client.domain_records.create(record, for_domain: app.domain ) Wco::Log.puts! record, 'created subdomain?', obj: @obj end
def create_volume app
def create_volume app @obj = app Wco::Log.puts! app.service_name, 'Serverhost#create_volume', obj: @obj ac = ActionController::Base.new ac.instance_variable_set( :@app, app ) ac.instance_variable_set( :@workdir, WORKDIR ) rendered_str = ac.render_to_string("wco_hosting/scripts/create_volume") Wco::Log.puts! rendered_str, 'create_volume rendered_str', obj: @obj file = Tempfile.new('prefix') file.write rendered_str file.close # puts! file.path, 'file.path' cmd = "scp #{file.path} #{ssh_host}:#{WORKDIR}/scripts/create_volume" do_exec( cmd ) cmd = "ssh #{ssh_host} 'chmod a+x #{WORKDIR}/scripts/create_volume ; #{WORKDIR}/scripts/create_volume ' " do_exec( cmd ) end
def create_wordpress_volume app
def create_wordpress_volume app @obj = app ac = ActionController::Base.new ac.instance_variable_set( :@app, app ) ac.instance_variable_set( :@workdir, WORKDIR ) rendered_str = ac.render_to_string("wco_hosting/scripts/create_volume") Wco::Log.puts! rendered_str, 'create_volume rendered_str', obj: @obj file = Tempfile.new('prefix') file.write rendered_str file.close # puts! file.path, 'file.path' cmd = "scp #{file.path} #{ssh_host}:#{WORKDIR}/scripts/create_volume" do_exec cmd cmd = "ssh #{ssh_host} 'chmod a+x #{WORKDIR}/scripts/create_volume ; \ #{WORKDIR}/wco_hosting/scripts/create_volume ' " do_exec cmd end
def do_exec cmd
def do_exec cmd Wco::Log.puts! cmd, '#do_exec', obj: @obj stdout, stderr, status = Open3.capture3(cmd) status = status.to_s.split.last.to_i Wco::Log.puts! stdout, 'stdout', obj: @obj Wco::Log.puts! stderr, 'stderr', obj: @obj Wco::Log.puts! status, 'status', obj: @obj end