Merge pull request #14 from fredrikbaberg/dev

Dev
This commit is contained in:
Fredrik Baberg 2022-11-03 02:27:52 +01:00 committed by GitHub
commit 333fa212aa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
33 changed files with 163 additions and 257 deletions

View File

@ -10,7 +10,7 @@ jobs:
strategy:
matrix:
addon: ["3dprinter-octoprint"]
arch: ["aarch64", "amd64", "armhf", "armv7", "i386"]
arch: ["aarch64", "amd64", "armhf", "armv7"]
steps:
- name: Check out the repository
uses: actions/checkout@v3

View File

@ -0,0 +1,5 @@
- Update OctoPrint to 1.8.6
- Update icon to coloured nozzle.
- Clean-up Caddy config.
- Fixes to Caddy XDG paths
- Change reverse proxy from nginx to Caddy

View File

@ -0,0 +1,3 @@
# Dev
> image: ghcr.io/fredrikbaberg/addon-3dprinter-octoprint-{arch}

View File

@ -1,6 +1,6 @@
ARG BUILD_FROM="ghcr.io/home-assistant/amd64-base-debian:bullseye"
FROM ${BUILD_FROM}
ARG OCTOPRINT_VERSION="1.8.1"
ARG OCTOPRINT_VERSION="1.8.6"
ENV OCTOPRINT_VERSION=${OCTOPRINT_VERSION}
@ -9,14 +9,34 @@ ENV PYTHONPATH=/data/python/octoprint
ENV PYTHONUSERBASE=/data/python/octoprint
ENV PATH=/data/python/octoprint/bin:${PATH}
# Preparation for install of Caddy
RUN apt update \
&& apt install -y \
--no-install-recommends \
debian-keyring \
debian-archive-keyring \
apt-transport-https \
gpg \
&& curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg \
&& curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.d/caddy-stable.list
# Install dependencies
RUN apt update && \
apt install -y \
RUN apt update \
&& apt install -y \
--no-install-recommends \
python3-venv \
python3-dev \
python3-wheel \
build-essential \
nginx \
caddy \
# Extras.
# ffmpeg \
# avrdude \
# dfu-util \
# dfu-programmer \
# stm32flash \
# Development/testing
vim \
&& \
apt clean
@ -24,3 +44,4 @@ RUN apt update && \
COPY rootfs /
RUN chmod +x /etc/cont-init.d/*.sh
RUN chmod +x /etc/services.d/*/*
RUN chmod +x /scripts/*.sh

View File

@ -1,3 +1,5 @@
# 3DPrinter-OctoPrint
Provides OctoPrint as an addon to Home Assistant.
**Note: Currently not in a ready-to-use state.**

View File

@ -1,12 +1,12 @@
build_from:
aarch64: ghcr.io/home-assistant/aarch64-base-debian:bullseye
amd64: ghcr.io/home-assistant/amd64-base-debian:bullseye
armhf: ghcr.io/home-assistant/armhf-base-debian:bullseye
armv7: ghcr.io/home-assistant/armv7-base-debian:bullseye
i386: ghcr.io/home-assistant/i386-base-debian:bullseye
aarch64: ghcr.io/home-assistant/aarch64-base-debian:bullseye
amd64: ghcr.io/home-assistant/amd64-base-debian:bullseye
armhf: ghcr.io/home-assistant/armhf-base-debian:bullseye
armv7: ghcr.io/home-assistant/armv7-base-debian:bullseye
i386: ghcr.io/home-assistant/i386-base-debian:bullseye
labels:
org.opencontainers.image.title: "Home Assistant Add-on: 3DPrinter-OctoPrint add-on"
org.opencontainers.image.title: "Home Assistant Add-on: 3DPrinter-OctoPrint"
org.opencontainers.image.description: "3DPrinter-OctoPrint addon for Home-Assistant."
org.opencontainers.image.source: "https://github.com/fredrikbaberg/home-assistant-addons"
org.opencontainers.image.source: "https://github.com/fredrikbaberg/3dprinter-addons"
args:
OCTOPRINT_VERSION: "1.8.1"
OCTOPRINT_VERSION: "1.8.6"

View File

@ -1,5 +1,5 @@
name: "3DPrinter-OctoPrint"
version: "2022.7.005"
version: "2022.11.0"
slug: "3dprinter-octoprint"
description: "OctoPrint as an addon, no additional bells and whistles."
url: "https://github.com/fredrikbaberg/home-assistant-addons/tree/main/3dprinter-octoprint"
@ -20,12 +20,13 @@ gpio: true
uart: true
usb: true
ports:
80/tcp: null
5000/tcp: null
ports_description:
80/tcp: Web-based interface (Not required for Ingress)
5000/tcp: Web-based interface (Not required for Ingress)
options:
recovery: false
camera_url: "http://b7aa59c4-camera-mjpg-streamer/"
mode: normal
schema:
recovery: "bool"
image: ghcr.io/fredrikbaberg/addon-3dprinter-octoprint-{arch}
camera_url: "url?"
mode: "list(normal|recovery|reverse_proxy_test)"
tmpfs: true

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 74 KiB

View File

@ -0,0 +1,9 @@
# This file is a placeholder and will be replaced on launch.
{
debug
log {
format console
output file /var/log/caddy.log
}
}
# import configs/*.caddy

View File

@ -0,0 +1,2 @@
XDG_CONFIG_HOME="/data/config"
XDG_DATA_HOME="/data/config"

View File

@ -1,23 +0,0 @@
#!/usr/bin/with-contenv bashio
# ==============================================================================
# Add-on: 3dprinter-octoprint
# Configures NGINX
# ==============================================================================
# Generate Ingress configuration
bashio::var.json \
interface "$(bashio::addon.ip_address)" \
port "^$(bashio::addon.ingress_port)" \
ingress_entry "$(bashio::addon.ingress_entry)" \
| tempio \
-template /etc/nginx/templates/ingress.gtpl \
-out /etc/nginx/servers/ingress.conf
# Generate direct access configuration, if enabled.
if bashio::var.has_value "$(bashio::addon.port 80)"; then
bashio::var.json \
port "^$(bashio::addon.port 80)" \
| tempio \
-template /etc/nginx/templates/direct.gtpl \
-out /etc/nginx/servers/direct.conf
fi

View File

@ -4,13 +4,15 @@
# s6-overlay docs: https://github.com/just-containers/s6-overlay
# ==============================================================================
{ # Check if OctoPrint is installed
octoprint --version
} || { # Otherwise install
{ # Check if Python is available at `/data/python/octoprint` according to PATH)
{ # Check if OctoPrint is installed.
octoprint -b /data/config/octoprint --version
} || { # Otherwise install it.
{ # Check if Python is available (at `/data/python/octoprint` according to PATH)
python --version
} || { # Otherwise create Python virtual environment.
python3 -m venv /data/python/octoprint
# Install wheel to speed up future installs.
pip install wheel
}
pip install octoprint==$OCTOPRINT_VERSION
}
@ -26,6 +28,7 @@ if [ ! -f /data/config/octoprint/config.yaml ]; then
fi
fi
# TODO: Check if user already exists before setting password.
{ # Make sure Ingress user for OctoPrint exists.
bashio::log.notice "Ensure Ingress user (homeassistant) exist."
new_password=$(date +%s | sha256sum | base64 | head -c 32 ; echo)

View File

@ -0,0 +1,16 @@
#!/usr/bin/with-contenv bashio
# ==============================================================================
# Add-on: 3dprinter-octoprint
# Configures proxy
# ==============================================================================
# Generate proxy configuration
bashio::var.json \
interface "$(bashio::addon.ip_address)" \
port "^$(bashio::addon.ingress_port)" \
ingress_entry "$(bashio::addon.ingress_entry)" \
camera_host "$(bashio::config 'camera_url')" \
mode "$(bashio::config 'mode')" \
| tempio \
-template /usr/share/tempio/Caddyfile.gtpl \
-out /etc/caddy/Caddyfile

View File

@ -1,96 +0,0 @@
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
text/mathml mml;
text/plain txt;
text/vnd.sun.j2me.app-descriptor jad;
text/vnd.wap.wml wml;
text/x-component htc;
image/png png;
image/svg+xml svg svgz;
image/tiff tif tiff;
image/vnd.wap.wbmp wbmp;
image/webp webp;
image/x-icon ico;
image/x-jng jng;
image/x-ms-bmp bmp;
font/woff woff;
font/woff2 woff2;
application/java-archive jar war ear;
application/json json;
application/mac-binhex40 hqx;
application/msword doc;
application/pdf pdf;
application/postscript ps eps ai;
application/rtf rtf;
application/vnd.apple.mpegurl m3u8;
application/vnd.google-earth.kml+xml kml;
application/vnd.google-earth.kmz kmz;
application/vnd.ms-excel xls;
application/vnd.ms-fontobject eot;
application/vnd.ms-powerpoint ppt;
application/vnd.oasis.opendocument.graphics odg;
application/vnd.oasis.opendocument.presentation odp;
application/vnd.oasis.opendocument.spreadsheet ods;
application/vnd.oasis.opendocument.text odt;
application/vnd.openxmlformats-officedocument.presentationml.presentation
pptx;
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
xlsx;
application/vnd.openxmlformats-officedocument.wordprocessingml.document
docx;
application/vnd.wap.wmlc wmlc;
application/x-7z-compressed 7z;
application/x-cocoa cco;
application/x-java-archive-diff jardiff;
application/x-java-jnlp-file jnlp;
application/x-makeself run;
application/x-perl pl pm;
application/x-pilot prc pdb;
application/x-rar-compressed rar;
application/x-redhat-package-manager rpm;
application/x-sea sea;
application/x-shockwave-flash swf;
application/x-stuffit sit;
application/x-tcl tcl tk;
application/x-x509-ca-cert der pem crt;
application/x-xpinstall xpi;
application/xhtml+xml xhtml;
application/xspf+xml xspf;
application/zip zip;
application/octet-stream bin exe dll;
application/octet-stream deb;
application/octet-stream dmg;
application/octet-stream iso img;
application/octet-stream msi msp msm;
audio/midi mid midi kar;
audio/mpeg mp3;
audio/ogg ogg;
audio/x-m4a m4a;
audio/x-realaudio ra;
video/3gpp 3gpp 3gp;
video/mp2t ts;
video/mp4 mp4;
video/mpeg mpeg mpg;
video/quicktime mov;
video/webm webm;
video/x-flv flv;
video/x-m4v m4v;
video/x-mng mng;
video/x-ms-asf asx asf;
video/x-ms-wmv wmv;
video/x-msvideo avi;
}

View File

@ -1,15 +0,0 @@
proxy_http_version 1.1;
proxy_ignore_client_abort off;
proxy_read_timeout 86400s;
proxy_redirect off;
proxy_send_timeout 86400s;
proxy_max_temp_file_size 0;
proxy_set_header Accept-Encoding "";
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Real-IP $remote_addr;

View File

@ -1,6 +0,0 @@
root /dev/null;
server_name $hostname;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;

View File

@ -1,8 +0,0 @@
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;

View File

@ -1,3 +0,0 @@
upstream backend {
server 127.0.0.1:5000;
}

View File

@ -1,44 +0,0 @@
# Run nginx in foreground.
daemon off;
# This is run inside Docker.
user root;
# Pid storage location.
pid /var/run/nginx.pid;
# Set number of worker processes.
worker_processes 1;
# Enables the use of JIT for regular expressions to speed-up their processing.
pcre_jit on;
# Write error log to the add-on log.
error_log /proc/1/fd/1 error;
# Max num of simultaneous connections by a worker process.
events {
worker_connections 512;
}
http {
include /etc/nginx/includes/mime.types;
access_log off;
client_max_body_size 4G;
default_type application/octet-stream;
gzip on;
keepalive_timeout 65;
sendfile on;
server_tokens off;
tcp_nodelay on;
tcp_nopush on;
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
include /etc/nginx/includes/upstream.conf;
include /etc/nginx/servers/*.conf;
}

View File

@ -1,10 +0,0 @@
server {
listen {{ .port }} default_server;
include /etc/nginx/includes/server_params.conf;
include /etc/nginx/includes/proxy_params.conf;
location / {
proxy_pass http://backend;
}
}

View File

@ -1,14 +0,0 @@
server {
listen {{ .interface }}:{{ .port }} default_server;
include /etc/nginx/includes/server_params.conf;
include /etc/nginx/includes/proxy_params.conf;
location / {
allow 172.30.32.2;
deny all;
proxy_pass http://backend;
proxy_set_header X-Script-Name {{ .ingress_entry }};
}
}

View File

@ -1,9 +1,10 @@
#!/usr/bin/execlineb -S0
# ==============================================================================
# Add-on: mjpg-streamer
# Take down the S6 supervision tree when mjpg-streamer fails
# Add-on: 3dprinter-octoprint
# Take down the S6 supervision tree when OctoPrint fails
# ==============================================================================
if -n { s6-test $# -ne 0 }
if -n { s6-test ${1} -eq 256 }
s6-svscanctl -t /var/run/s6/services
# if -n { s6-test $# -ne 0 }
# if -n { s6-test ${1} -eq 256 }
#
# s6-svscanctl -t /var/run/s6/services

View File

@ -4,5 +4,7 @@
# Runs OctoPrint
# ==============================================================================
bashio::log.info "Starting OctoPrint..."
## Run your program
exec octoprint serve --iknowwhatimdoing --host 0.0.0.0 --port 5000 --basedir /data/config/octoprint
exec octoprint serve --iknowwhatimdoing --host 127.0.0.1 --port 80 --basedir /data/config/octoprint

View File

@ -1,9 +1,5 @@
#!/usr/bin/execlineb -S0
# ==============================================================================
# Add-on: 3dprinter-octoprint
# Take down the S6 supervision tree when Nginx fails
# Stop reverse proxy
# ==============================================================================
if -n { s6-test $# -ne 0 }
if -n { s6-test ${1} -eq 256 }
s6-svscanctl -t /var/run/s6/services

View File

@ -1,11 +1,12 @@
#!/usr/bin/with-contenv bashio
# ==============================================================================
# Add-on: 3dprinter-octoprint
# Runs the Nginx daemon
# Runs the reverse proxy.
# ==============================================================================
# Wait for web server to be available
bashio::net.wait_for 5000
bashio::net.wait_for 80
bashio::log.info "Starting NGinx..."
exec nginx
bashio::log.info "Starting proxy..."
exec caddy run --config /etc/caddy/Caddyfile --envfile /etc/caddy/env

View File

@ -2,12 +2,19 @@ accessControl:
autologinAs: homeassistant
autologinLocal: true
localNetworks:
- 127.0.0.0/8
- ::1/128
- 172.30.32.2
api:
allowCrossOrigin: true
folder:
generated: /tmp/octoprint/generated
timelapse_tmp: /tmp/octoprint/timelapse/tmp
server:
allowFraming: true
commands:
serverRestartCommand: /scripts/octoprint_restart.sh
systemRestartCommand: /scripts/system_restart.sh
systemShutdownCommand: /scripts/system_shutdown.sh
webcam:
ffmpeg: /usr/bin/ffmpeg

View File

@ -0,0 +1,5 @@
#!/usr/bin/with-contenv bashio
bashio::log.warning "Restart OctoPrint."
s6-svc -r /var/run/s6/legacy-services/octoprint

View File

@ -0,0 +1,5 @@
#!/usr/bin/with-contenv bashio
bashio::log.warning "Restart proxy."
s6-svc -r /var/run/s6/legacy-services/proxy

View File

@ -0,0 +1,5 @@
#!/usr/bin/with-contenv bashio
bashio::log.warning "Restart addon."
bashio::addon.restart

View File

@ -0,0 +1,5 @@
#!/usr/bin/with-contenv bashio
bashio::log.warning "Shutdown addon."
bashio::addon.stop

View File

@ -0,0 +1,36 @@
{
debug
log {
format console
output file /var/log/caddy.log
}
}
:8099 {
@ingress {
remote_ip 172.30.32.2
}
uri strip_prefix {{ .ingress_entry }}
handle {
{{ if eq .mode "recovery" }}
rewrite / /recovery
{{ else if eq .mode "reverse_proxy_test" }}
rewrite / /reverse_proxy_test
{{ end }}
reverse_proxy @ingress 127.0.0.1:80 {
header_up X-Script-Name {{ .ingress_entry }}
header_up -Origin
header_up Origin 172.30.32.2
header_up X-Forwarded-For 172.30.32.2
header_up X-Scheme {scheme}
flush_interval -1
}
}
}
# OctoPrint WebUI
:5000 {
reverse_proxy http://127.0.0.1:80 {
header_up X-Scheme {scheme}
}
}