Works.
parent
f4925356fe
commit
428f216dd1
|
@ -3,12 +3,18 @@ require "bunny"
|
|||
# A wrapper around AMQP to stay DRY. Will make life easier if we ever need to
|
||||
# change protocols
|
||||
class Transport
|
||||
OPTS = { read_timeout: 10, heartbeat: 10, log_level: 'info' }
|
||||
# Temporary until production RMQ is properly vetted - RC 24 JUL 18
|
||||
LEGACY = "amqp://guest:guest@localhost:5672"
|
||||
PW = ENV["ADMIN_PASSWORD"]
|
||||
HOST = ENV["MQTT_HOST"]
|
||||
LOCAL = PW && HOST && "amqp://admin:#{PW}@#{HOST}:5672"
|
||||
OPTS = { read_timeout: 10, heartbeat: 10, log_level: "info" }
|
||||
|
||||
def self.amqp_url
|
||||
@amqp_url ||= ENV['CLOUDAMQP_URL'] ||
|
||||
ENV['RABBITMQ_URL'] ||
|
||||
"amqp://admin:#{ENV.fetch("ADMIN_PASSWORD")}@#{ENV.fetch("MQTT_HOST")}:5672"
|
||||
@amqp_url ||= ENV["CLOUDAMQP_URL"] ||
|
||||
ENV["RABBITMQ_URL"] ||
|
||||
LOCAL ||
|
||||
LEGACY
|
||||
end
|
||||
|
||||
def self.default_amqp_adapter=(value)
|
||||
|
@ -76,6 +82,7 @@ class Transport
|
|||
require "rabbitmq/http/client"
|
||||
|
||||
def self.username
|
||||
binding.pry
|
||||
@username ||= URI(Transport.amqp_url).user || "admin"
|
||||
end
|
||||
|
||||
|
|
|
@ -12,9 +12,15 @@ namespace :api do
|
|||
sh "PORT=3000 bundle exec foreman start --procfile=Procfile.dev"
|
||||
end
|
||||
|
||||
desc "Run __LEGACY__ Webpack and Rails"
|
||||
task legacy_start: :environment do
|
||||
sh "PORT=3000 bundle exec foreman start --procfile=mqtt_legacy/Procfile.legacy"
|
||||
end
|
||||
|
||||
desc "Pull the latest Farmbot API version"
|
||||
task(update: :environment) { same_thing }
|
||||
|
||||
desc "Pull the latest Farmbot API version"
|
||||
task(upgrade: :environment) { same_thing }
|
||||
|
||||
end
|
||||
|
|
|
@ -10,4 +10,15 @@ namespace :mqtt do
|
|||
retry
|
||||
end
|
||||
end
|
||||
|
||||
desc "Bootstraps the old MQTT server"
|
||||
task legacy_start: :environment do
|
||||
begin
|
||||
require_relative '../../mqtt_legacy/server.rb'
|
||||
rescue Errno::ECONNREFUSED
|
||||
puts "API is not up yet. Waiting 5 seconds..."
|
||||
sleep 5
|
||||
retry
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
# Run Rails & Webpack concurrently
|
||||
rails: rails s -e development -p ${API_PORT:-3000} -b 0.0.0.0
|
||||
log_service: rails r lib/log_service_runner.rb
|
||||
webpack: npm run webpack
|
||||
worker: rake jobs:work
|
|
@ -0,0 +1,30 @@
|
|||
% THIS FILE IS AUTO GENERATED BY `rabbitmq.config.erb`.
|
||||
% DO NOT MODIFY `rabbitmq.config` MANUALLY!
|
||||
|
||||
[
|
||||
{
|
||||
rabbit, [
|
||||
{ loopback_users, [] },
|
||||
{ tcp_listeners, [5672] },
|
||||
{ ssl_listeners, [ ] },
|
||||
{ hipe_compile, false },
|
||||
{
|
||||
auth_backends, [
|
||||
rabbit_auth_backend_internal,
|
||||
rabbit_auth_backend_jwt
|
||||
]}
|
||||
] },
|
||||
{ rabbitmq_mqtt, [
|
||||
{vhost, <<"/">>},
|
||||
{retained_message_store, rabbit_mqtt_retained_msg_store_noop}
|
||||
]
|
||||
},
|
||||
{ rabbitmq_web_mqtt, [{ port, 3002 }, {vhost, <<"/">>}]},
|
||||
{
|
||||
rabbitmq_management, [{listener, [ { port, 15672 }, { ssl, false }] } ] },
|
||||
|
||||
{ rabbit_auth_backend_jwt, [
|
||||
{ farmbot_api_key_url, "http://192.168.1.207:3000/api/public_key" },
|
||||
{ farmbot_vhost, <<"/">>}
|
||||
]}
|
||||
].
|
|
@ -1,24 +1,26 @@
|
|||
require 'erb'
|
||||
|
||||
puts "\n" * 10
|
||||
puts "=== THIS IS A LEGACY BROKER. DONT USE THIS UNLESS YOU HAVE A GOOD REASON."
|
||||
puts "\n" * 10
|
||||
puts "=== Retrieving container info"
|
||||
PLUGIN_PATH = "mqtt/jwt_plugin/plugins/rabbit_auth_backend*"
|
||||
PLUGIN_IS_BUILT = Dir[PLUGIN_PATH].any?
|
||||
FORCE_REBUILD = ENV["FORCE_REBUILD"].present?
|
||||
DOCKER_IMG_NAME = "farmbot-mqtt"
|
||||
IMG_IS_BUILT = `cd mqtt; sudo docker images`.include?(DOCKER_IMG_NAME)
|
||||
PLUGIN_PATH ||= "mqtt_legacy/jwt_plugin/plugins/rabbit_auth_backend*"
|
||||
PLUGIN_IS_BUILT ||= Dir[PLUGIN_PATH].any?
|
||||
FORCE_REBUILD ||= ENV["FORCE_REBUILD"].present?
|
||||
DOCKER_IMG_NAME ||= "farmbot-mqtt-legacy"
|
||||
IMG_IS_BUILT ||= `cd mqtt_legacy; sudo docker images`.include?(DOCKER_IMG_NAME)
|
||||
|
||||
puts "=== Setting config data"
|
||||
CONFIG_PATH = "./mqtt"
|
||||
CONFIG_FILENAME = "rabbitmq.config"
|
||||
CONFIG_OUTPUT = "#{CONFIG_PATH}/#{CONFIG_FILENAME}"
|
||||
NO_API_HOST = "\nYou MUST set API_HOST to a real IP address or " +
|
||||
CONFIG_PATH ||= "./mqtt_legacy"
|
||||
CONFIG_FILENAME ||= "rabbitmq.config"
|
||||
CONFIG_OUTPUT ||= "#{CONFIG_PATH}/#{CONFIG_FILENAME}"
|
||||
NO_API_HOST ||= "\nYou MUST set API_HOST to a real IP address or " +
|
||||
"domain name (not localhost).\n" +
|
||||
"API_PORT is also mandatory."
|
||||
TEMPLATE_FILE = "./mqtt/rabbitmq.config.erb"
|
||||
TEMPLATE = File.read(TEMPLATE_FILE)
|
||||
RENDERER = ERB.new(TEMPLATE)
|
||||
PROTO = ENV["FORCE_SSL"] ? "https:" : "http:"
|
||||
VHOST = ENV.fetch("MQTT_VHOST") { "/" }
|
||||
TEMPLATE_FILE ||= "./mqtt_legacy/rabbitmq.config.erb"
|
||||
TEMPLATE ||= File.read(TEMPLATE_FILE)
|
||||
RENDERER ||= ERB.new(TEMPLATE)
|
||||
PROTO ||= ENV["FORCE_SSL"] ? "https:" : "http:"
|
||||
VHOST ||= ENV.fetch("MQTT_VHOST") { "/" }
|
||||
|
||||
if !ENV["API_HOST"] || !ENV["API_PORT"]
|
||||
puts NO_API_HOST
|
||||
|
@ -31,35 +33,38 @@ farmbot_api_key_url = ENV.fetch("API_PUBLIC_KEY_PATH") do
|
|||
end
|
||||
|
||||
# Write the config file.
|
||||
File.write(CONFIG_OUTPUT, RENDERER.result(binding))
|
||||
conf = RENDERER.result(binding)
|
||||
file = CONFIG_OUTPUT
|
||||
|
||||
File.write(file, conf)
|
||||
|
||||
# Re-init docker stuff
|
||||
|
||||
processes = `sudo docker ps -a -f "name=farmbot-mqtt" -q`
|
||||
processes = `sudo docker ps -a -f "name=farmbot-mqtt-legacy" -q`
|
||||
|
||||
if processes.present?
|
||||
puts "=== Stopping pre-existing farmbot containers"
|
||||
sh "cd mqtt && sudo docker stop #{processes}"
|
||||
sh "cd mqtt && sudo docker rm #{processes}"
|
||||
sh "cd mqtt_legacy && sudo docker stop #{processes}"
|
||||
sh "cd mqtt_legacy && sudo docker rm #{processes}"
|
||||
end
|
||||
|
||||
if IMG_IS_BUILT
|
||||
puts "=== Destroying old docker images"
|
||||
sh "cd mqtt; sudo docker rmi #{DOCKER_IMG_NAME} --force"
|
||||
sh "cd mqtt_legacy; sudo docker rmi #{DOCKER_IMG_NAME} --force"
|
||||
end
|
||||
|
||||
puts "=== Building docker image"
|
||||
sh "cd mqtt; sudo docker build -t farmbot-mqtt ."
|
||||
sh "cd mqtt_legacy; sudo docker build -t farmbot-mqtt-legacy ."
|
||||
|
||||
puts "=== Starting MQTT"
|
||||
|
||||
exec [
|
||||
'cd mqtt;',
|
||||
'cd mqtt_legacy;',
|
||||
'sudo docker run',
|
||||
'-p "5672:5672"', # AMQP (RabbitMQ)
|
||||
'-p "1883:1883"', # MQTT
|
||||
'-p "8883:8883"', # MQTT over TLS/SSL
|
||||
'-p "3002:15675"', # MQTT over WebSockets
|
||||
'--name "farmbot-mqtt"',
|
||||
'farmbot-mqtt'
|
||||
'--name "farmbot-mqtt-legacy"',
|
||||
'farmbot-mqtt-legacy'
|
||||
].join(" ")
|
||||
|
|
Loading…
Reference in New Issue