Is it possible to host a web page at the same time as Octoprint?
I imagine that might cause security issues if it was public, but I'm thinking for just within the household.
Sure, you can set up nginx or apache on the same computer as the one you are running. Or you can start your own small http server with a Python script. But OctoPrint has no built-in functionality to host files other than its own dynamic and static content.
I had a problem starting the apache server, I'd assumed it was in conflict with Octoprint, not least because the instructions tell you to point your browser at the IP address, which is where the Octopi server lives...
What port are you starting apache on? If you are trying to use port 80, make sure that you don't have eg HAProxy forwarding port 80 to OctoPrint; no two services can use the same port at the same time.
On a general note, if you say "I had a problem..." without saying what the problem was, all we can do is guess. Our guess may be accurate, or it may be a waste of time.
You can actually create a UIPlugin mixin implementation, or possibly work with a HTTRoute hook in a plugin for it to serve a specific page you upload.
Sorry, I added an edit, but forgot to post it.
The problem that I'd had was "Config variable ${APACHE_RUN_DIR} is not defined", which I'm sure I can find the answer to if I read the instructions more carefully, but the thing with the IP address led me to the opinion that I needed to ask someone who knows.
Sorry jneilliii, that's Greek to me. :?
I guess the bigger question is what are you trying to display? If you just want to give them read only access to octoprint you can do that with granular permissions in the latest octoprint version.
I want to display some information that is totally unrelated to Octoprint.
It's just that Octopi is what's on the hardware.
A todo list and rota for the household perhaps?
Yeah, your best bet is to get a web server running on its own port. A default octopi image is already using port 5000 (octoprint web server), 8080 (webcam streamer), 80 (unsecure haproxy), and 443 (secure haproxy). If you bind Apache to port 8081 for example, you can then edit /etc/haproxy/haproxy.cfg
to redirect a specific subfolder to the address with that custom 8081 port. The webcam streamer and octoprint are configured that way.
Example haproxy.cfg
global
maxconn 4096
user haproxy
group haproxy
log /dev/log local1 debug
defaults
log global
mode http
compression algo gzip
option httplog
option dontlognull
retries 3
option redispatch
option http-server-close
option forwardfor
maxconn 2000
timeout connect 5s
timeout client 15min
timeout server 15min
frontend public
bind :::80 v4v6
bind :::443 v4v6 ssl crt /etc/ssl/snakeoil.pem
option forwardfor except 127.0.0.1
use_backend webcam if { path_beg /webcam/ }
use_backend family if { path_beg /family/ }
default_backend octoprint
backend octoprint
acl needs_scheme req.hdr_cnt(X-Scheme) eq 0
reqrep ^([^\ :]*)\ /(.*) \1\ /\2
reqadd X-Scheme:\ https if needs_scheme { ssl_fc }
reqadd X-Scheme:\ http if needs_scheme !{ ssl_fc }
option forwardfor
server octoprint1 127.0.0.1:5000
errorfile 503 /etc/haproxy/errors/503-no-octoprint.http
backend webcam
reqrep ^([^\ :]*)\ /webcam/(.*) \1\ /\2
server webcam1 127.0.0.1:8080
errorfile 503 /etc/haproxy/errors/503-no-webcam.http
backend family
reqrep ^([^\ :]*)\ /family/(.*) \1\ /\2
server family1 127.0.0.1:8081
Then when you go to octoprint's address appended with /family/
it will redirect it to apache.
http://octopi.local/family/ or https;//octopi.local/family/ or http://192.168.0.2/family/ or https://192.168.0.2/family/
OK, thank you, I'll take a look at that.
the modified octopi image which is used with the pandaPi shield host an additional website to edit and compile Marlin.
But i don't have found the Source so far...
I've been thinking about this some more, and technically you could create a single file web page, manually edited/updated and use the errorfile 503
directive in a fake backend that is configured for a non-existent server.
If you are trying to use port 80, make sure that you don't have eg HAProxy forwarding port 80 to OctoPrint; no two services can use the same port at the same time.
Personally, I might spin up a NodeJS website on the same Pi as OctoPrint (as I've done before) on port 3000, for example, the default port for an Express-generated app.
As suggested, NGINX is also easy enough to setup.