From 48fc1f2d78a96740fb2b3302d99418c249d5bfd6 Mon Sep 17 00:00:00 2001 From: Max Winterstein Date: Mon, 4 Jan 2021 00:14:55 +0100 Subject: [PATCH] Add OctoPrint Reverse Proxy --- README.md | 9 ++++-- octoprint-proxy/CHANGELOG.md | 4 +++ octoprint-proxy/Dockerfile | 11 ++++++++ octoprint-proxy/README.md | 7 +++++ octoprint-proxy/config.json | 37 +++++++++++++++++++++++++ octoprint-proxy/haproxy.cfg | 52 +++++++++++++++++++++++++++++++++++ octoprint-proxy/icon.png | Bin 0 -> 17884 bytes octoprint-proxy/logo.png | Bin 0 -> 40089 bytes octoprint-proxy/run.sh | 30 ++++++++++++++++++++ 9 files changed, 148 insertions(+), 2 deletions(-) create mode 100644 octoprint-proxy/CHANGELOG.md create mode 100644 octoprint-proxy/Dockerfile create mode 100644 octoprint-proxy/README.md create mode 100644 octoprint-proxy/config.json create mode 100644 octoprint-proxy/haproxy.cfg create mode 100644 octoprint-proxy/icon.png create mode 100644 octoprint-proxy/logo.png create mode 100644 octoprint-proxy/run.sh diff --git a/README.md b/README.md index c3eb41d..9da5799 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,17 @@ # Home Assistant Add-On repository (by Max Winterstein) +*Everything here is ment to be **experimental**. Happy to see feedback!* + Home Assistant Addon repository containing ## Eufy Home Assistant MQTT Bridge ([matijse/eufy-ha-mqtt-bridge](https://github.com/matijse/eufy-ha-mqtt-bridge)) -Forwards Eufy Security push notifications to Home Assistant via MQTT. **Experimental** +Forwards Eufy Security push notifications to Home Assistant via MQTT. ## ioBroker ([iobroker.net](http://iobroker.net)) -Run ioBroker as Add-on. **Experimental** +Run ioBroker as Add-on. + +## OctoPrint Reverse Proxy ([octoprint.org](http://octoprint.org)) +Small proxy to add OctoPrint to the Home Assistant. ## Installation Go to the *Supervisor* Panel, select *Add-on Store*, click the three little dots on the upper right and select *Repositories*. Now fill the *Add repository* testbox with `https://github.com/MaxWinterstein/homeassistant-addons/` and click *Add*. diff --git a/octoprint-proxy/CHANGELOG.md b/octoprint-proxy/CHANGELOG.md new file mode 100644 index 0000000..faea141 --- /dev/null +++ b/octoprint-proxy/CHANGELOG.md @@ -0,0 +1,4 @@ +# Changelog + +## [1.0.0] - 2021-01-03 +- Initial release \ No newline at end of file diff --git a/octoprint-proxy/Dockerfile b/octoprint-proxy/Dockerfile new file mode 100644 index 0000000..a02f849 --- /dev/null +++ b/octoprint-proxy/Dockerfile @@ -0,0 +1,11 @@ +ARG BUILD_FROM +FROM $BUILD_FROM + +ENV LANG C.UTF-8 + +RUN apk add haproxy + +COPY run.sh haproxy.cfg / + +RUN chmod a+x /run.sh +CMD [ "/run.sh" ] \ No newline at end of file diff --git a/octoprint-proxy/README.md b/octoprint-proxy/README.md new file mode 100644 index 0000000..07e7500 --- /dev/null +++ b/octoprint-proxy/README.md @@ -0,0 +1,7 @@ +# Home Assistant Add-on: OctoPrint Proxy + +Small *haproxy* based reverse proxy to have OctoPrint accessible from Home Assistant with a memory consumption less than 10Mbyte. + +Works great with OctoPi based installations, others not tested. Feedback welcome. + +**Remember to enable the *Show in sidebar* option.** \ No newline at end of file diff --git a/octoprint-proxy/config.json b/octoprint-proxy/config.json new file mode 100644 index 0000000..3bf83db --- /dev/null +++ b/octoprint-proxy/config.json @@ -0,0 +1,37 @@ +{ + "name": "OctoPrint Proxy", + "version": "1.0.0", + "slug": "octoprint_proxy", + "description": "Access OctoPrint from within Home Assistant", + "url": "https://github.com/MaxWinterstein/homeassistant-addons/", + "ingress": true, + "ingress_port": 80, + "panel_title": "OctoPrint", + "panel_icon": "mdi:printer-3d-nozzle", + "arch": [ + "armhf", + "armv7", + "aarch64", + "amd64", + "i386" + ], + "startup": "application", + "boot": "auto", + "options": { + "octoprint_host" : "octopi", + "octoprint_port" : "443", + "ssl": { + "enabled": true, + "verify": false + } + }, + "schema": { + "octoprint_host" : "str", + "octoprint_port" : "port", + "ssl": { + "enabled": "bool", + "verify": "bool" + } + }, + "hassio_api": false +} \ No newline at end of file diff --git a/octoprint-proxy/haproxy.cfg b/octoprint-proxy/haproxy.cfg new file mode 100644 index 0000000..436c836 --- /dev/null +++ b/octoprint-proxy/haproxy.cfg @@ -0,0 +1,52 @@ +global + log stdout format raw local0 + + chroot /var/lib/haproxy + pidfile /var/run/haproxy.pid + maxconn 4000 + user haproxy + group haproxy + daemon + + # turn on stats unix socket + stats socket /var/lib/haproxy/stats + +#--------------------------------------------------------------------- +# common defaults that all the 'listen' and 'backend' sections will +# use if not designated in their block +#--------------------------------------------------------------------- +defaults + mode http + log global + option httplog + option dontlognull + option http-server-close + option forwardfor except 127.0.0.0/8 + option redispatch + retries 3 + timeout http-request 10s + timeout queue 1m + timeout connect 10s + timeout client 1m + timeout server 1m + timeout http-keep-alive 10s + timeout check 10s + maxconn 3000 + +#--------------------------------------------------------------------- +# main frontend which proxys to the backends +#--------------------------------------------------------------------- +frontend main + mode http + option httplog + #capture request header X-Ingress-Path len 256 + + bind *:80 + default_backend octoprint + +backend octoprint + # ref https://community.octoprint.org/t/reverse-proxy-configuration-examples/ + http-request replace-path ^([^\ :]*)\ /local_octoprint_proxy/(.*) \1\ /\2 + http-request add-header X-Script-Name %[req.hdr(X-Ingress-Path)] + option forwardfor + server octoprint OCTOPRINT_HOST:OCTOPRINT_PORT USE_SSL VERIFY_SSL check diff --git a/octoprint-proxy/icon.png b/octoprint-proxy/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a8ce6fb4f767c9ea95b4fd00e0b9893c856ab09f GIT binary patch literal 17884 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 =eOP#BP_EZOq^~k zI^g=VoJ*g_#t!$~(EYLhBPM3ualtAeC|=tjp{#AJ07g`$tZYyUo{&yZKg}G5xNl0jP zLa!56Z?DO!vzkuWzwgK-=hI1je$P=BV5q3_f;rj!SaPb{9^dk0lsc~WlifH%epzz^ zk{5sP2OyJ^Oz=%&yoOSC7E1q1QAV(G{<0U*cQsfI!cXenNKaL3VSgJ zFkG546OCY7_&h{%IP#&wbZl_JSFOQAC$c;AOl9+jTSa@Z$=~xLTm@WASV>oO*0KRP z_>8|ewLz|;RJ$!U1v96;cb4?oA1pINDKccW)C3Tkc)v;_h<70M#Y7&kM6^|8puVqwnjg&YL7-}yEpJ?!v$^yDqa+{`u6E_`qC4p>X*S=ClBL8+PC4zxZma@^K0pFmGX(z_Y%`@ zo#w0o?^k1=qsM7*QX+agiXcC*jn@a}2%&Ib-)mj*r3g%PmNIwcxitWrK3x7CGj`=x%D!8;?9xWPArTJefq^a1D zJwx@G4YeOw6Y|ZRxV-;KwV2k&7w|(fGJ+dleAZG(v;TT#-PC1OLwO=d(o2#EkRyt{ z1e`!G9C3Ls(a_HYM6n;bTH_|#X{&+K*R&>8GFEL&WR)&ODtvLH^H@xk8_}i(31JQ( zj}Ud`7wQi6hcX_%^i}H8t9BMXe>*RseTUE?H@;{$J1iQQf)?_GQn|(wC~Et-mOk52 zBUsx%95zfd_WhK@BTgPO^|;ozqqT;Y4iOgY?4vm79BMQlxrB zD6%qoo3d@&A1l)osIu^#Y99=OF4)YcZN=dry)FhzGQ#@NHuhJ%AaE%XcqZC|GSNzJ zV@VoC@ViIkr}fuN4NROvo&@K7{mVE$YMBQte1d_`k;t(gvhC|kxa&94Fl18IdqdGg z%qhM2j?H>O<1Uq&vHWTZb)LV!T{ODC=8tK_!I2r>X+Asgso6W$!tl_!cA9uD!1559 zF~U7z<@7PqC7ycx^*91xl@Cd;<14yXbE_pNJBrx!uh}0C9^C4C+BX8WTb_^wib!!W z!*+Lstse=#y6Oe>)oR5&uz@T~wHH-W9>7`?r7~cCas`qdQ#ExDnk*}TjA8}k zmh;S->2V}n8!In-10*z9s0hsye<|8UXWZGZD}(isKmcyiVr5hzVI!;oAB{E-%HwUR zObZ9KTaaFE()i�lLmG(|*@;>}RA2qjOPybKcPtmyS#_D0FH}d-g$$2wmk|xfBl;P4M%>%CxG{n^x7r3IrLK+3Em;q zBq^V8C6y1kS_*Sy*@Xa+&DLIB&EbcBl`|==cYnj{CXGP7sw74RV-qdG$BIR&4^gP0 z4TK44ZN|}>>3I3F9thIRLkCN$6e)}X%147n_ZESmrvA{fXUl*tP=RXAC_ZoR_gBo~ zRvi@+{HXjE|JpFbelo6}I{Q=?Q6>&R2LK?P|NAe1MzbyHk*$p1FQ)H5IwJoPXFUi= zu|<<4fHarew;A*H{l@-A=nYOYK|YlMDSZn6dNib}`F!{ts%=^HH9&kgmymfOOmNsu z&%|n0G|=(I>*}CR}^Qy?7N(S zxW7LAI{tFqS~28u1p&b0zASmY7bhHCV*2y81K6wGSE;hg!1EGJJpUCXD|H{;P)erS zY$$iS$HMEHr?nhhA~fMRIr`vhFXQpyH<*uJHQijjcu^E*D3jsar+*4So>%_3qe*(- z3om*8Ves{2UE_=64gRyj9LRO=sYq?^N47g|ZgD^~nEu+g(yGg>SkScxeaL|64$4C; z@Tz-4`-xR1{LBRW)iA>E`X%u8=hUXY@kHc5y%TCn;|bU5t9~Oj2agTad55DeS7j6B z7$yUkD+XWv`EX0~A4cw3f2#3q*F$(>V3clpChdRlMMxJDi^j_esCo+d=jtjLT?F^7 z#5r%5doCn0z`l+IXx@nw1JFIU2xJjjtK%Ct;2Vhy-uKiS@C{APn4{vgn-T2YlvhiK z6~!gX={i+Wob__Lt^vqK#ODU}4Eb_w5-gW3{l>c@VM1taP5K-F^ICeF})eZ!$x^GqGqI%F4D-T^p^6!Vh&xL(~ z971-tqd&aISh0uDe$t_hXa22F7BOWrdCTBe(k^84Y*bjWgP+r zee)IFXwh!6m@O9B3j^I$i3Bj`3RavcNoYO7>MDfb1lpaLJh~BtCGb}JIF2ibz4Z)y zF-2=1J&bf&$H`pd#TDIm4X{tILF}Ua$Zi1@o?HT;Y=)0EAqE2LPLB~tv>st)GoW^4 zAqRj#8UK+bXajIBj06vtMq&V-^0U|-Q}C4La=4W(@Tskk;3yc(GzU13u(}RV*BOT# z7DWDSjlO&|`)(AdOQvVelL$nT$bXV6C)@%=8bFZxAm~im#jS%PWZJClHf-LONBT5# z`yc}Iecs>^a&VDfEd$IL!ekt*!P@u>{qQLDK&BytOtxV<2B3STWx?5?7lwTovRPB6 zO->RA$Rxs;f=n_{7il6F7`UKP9?cLS6qvBa`-4SDx90!*=V-25Ed&~xYcl|#AA!O< z3xz7}k~n|_q9lU}G6@cJaq24dfTJ$BQHO>id#u@z+n^Wp*$*s{wu}MTWm#l6LONhR zAHUyd+ix) zgKlP`b|9OTb&owciylM2wqTZX(HsQOvl81O+n`%NS$Aub)hg}O2VkGrMGvl^G2E+- zqg7*g2*81rGKMzjmG|MhkbEClLGb;UpFub+1KN*0h9$`V1;!4{W&5(QqyPW_07*qoM6N<$g03uE AkpKVy literal 0 HcmV?d00001 diff --git a/octoprint-proxy/logo.png b/octoprint-proxy/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d45d4c8042319a40f259219fab2e1820ce397d57 GIT binary patch literal 40089 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%0AEjbm_{EZUF%+2BVTftcTumv)l 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 z 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 literal 0 HcmV?d00001 diff --git a/octoprint-proxy/run.sh b/octoprint-proxy/run.sh new file mode 100644 index 0000000..1f92181 --- /dev/null +++ b/octoprint-proxy/run.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bashio +set -e + +bashio::log.info "Setting octoprint host: $(bashio::config octoprint_host)" +sed -i "s/OCTOPRINT_HOST/$(bashio::config octoprint_host)/g" /haproxy.cfg + +bashio::log.info "Setting octoprint port: $(bashio::config octoprint_port)" +sed -i "s/OCTOPRINT_PORT/$(bashio::config octoprint_port)/g" /haproxy.cfg + +if $(bashio::config.true ssl.enabled); then + bashio::log.info "SSL communitcation to octoprint enabled" + sed -i "s/USE_SSL/ssl/g" /haproxy.cfg + + if $(bashio::config.true ssl.verify); then + bashio::log.info "SSL verification enabled" + sed -i "s/VERIFY_SSL//g" /haproxy.cfg + else + bashio::log.info "SSL verification disabled" + sed -i "s/VERIFY_SSL/verify none/g" /haproxy.cfg + fi + +else + bashio::log.info "SSL communitcation to octoprint not enabled" + sed -i "s/USE_SSL VERIFY_SSL//g" /haproxy.cfg +fi + +bashio::log.info "Server line: $(cat /haproxy.cfg | grep 'server octoprint')" + +bashio::log.info "Starting haproxy" +haproxy -W -db -f /haproxy.cfg \ No newline at end of file