fix(deploy): 404 missing assets instead of HTML fallback; ship public STUN config
- nginx: asset extensions use try_files $uri =404 so a missing file (e.g. config/ice-servers.js) no longer serves index.html with the wrong content type - add config/ice-servers.prod.js (public STUN, no secrets); Dockerfile copies it to the git-ignored config/ice-servers.js so the operator-override path exists
This commit is contained in:
@@ -9,6 +9,12 @@ COPY deploy/nginx.conf /etc/nginx/nginx.conf
|
|||||||
# Serve the repository (src/, assets/, libs/, dist/, config/, logo/, sw.js, ...).
|
# Serve the repository (src/, assets/, libs/, dist/, config/, logo/, sw.js, ...).
|
||||||
COPY . /usr/share/nginx/html
|
COPY . /usr/share/nginx/html
|
||||||
|
|
||||||
|
# config/ice-servers.js is git-ignored (it can hold operator TURN credentials),
|
||||||
|
# so it is absent from the build context. Provide the public-STUN production
|
||||||
|
# override so the operator-override path is populated and nothing 404s.
|
||||||
|
RUN cp /usr/share/nginx/html/config/ice-servers.prod.js \
|
||||||
|
/usr/share/nginx/html/config/ice-servers.js
|
||||||
|
|
||||||
# Fly.io health checks and routing target this port.
|
# Fly.io health checks and routing target this port.
|
||||||
EXPOSE 8080
|
EXPOSE 8080
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
// Production ICE override baked into the Fly.io image (no secrets — public STUN
|
||||||
|
// only). The Dockerfile copies this to config/ice-servers.js, which is otherwise
|
||||||
|
// git-ignored. Users who want a TURN relay can add one via "Advanced network
|
||||||
|
// settings"; to ship an operator TURN here, add it below (TURN credentials are
|
||||||
|
// visible to every browser, so rotate them if exposed).
|
||||||
|
window.SECUREBIT_ICE_SERVERS = [
|
||||||
|
{ urls: 'stun:stun.cloudflare.com:3478' },
|
||||||
|
{ urls: 'stun:stun.l.google.com:19302' },
|
||||||
|
{ urls: 'stun:stun1.l.google.com:19302' }
|
||||||
|
];
|
||||||
+8
-1
@@ -58,7 +58,14 @@ http {
|
|||||||
add_header Cache-Control $sb_cache always;
|
add_header Cache-Control $sb_cache always;
|
||||||
add_header Service-Worker-Allowed "/" always;
|
add_header Service-Worker-Allowed "/" always;
|
||||||
|
|
||||||
# SPA-style fallback so unknown routes still load the app shell.
|
# Real asset files must return 404 when missing — never fall back to the
|
||||||
|
# HTML shell, which would be served with the wrong content type and break
|
||||||
|
# module/script loading (e.g. a missing config/ice-servers.js).
|
||||||
|
location ~* \.(js|mjs|jsx|css|json|map|woff2?|ttf|otf|png|jpe?g|gif|webp|svg|ico|mp3|mp4|webm)$ {
|
||||||
|
try_files $uri =404;
|
||||||
|
}
|
||||||
|
|
||||||
|
# SPA-style fallback so unknown navigation routes still load the app shell.
|
||||||
location / {
|
location / {
|
||||||
try_files $uri $uri/ /index.html;
|
try_files $uri $uri/ /index.html;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user