Make local dev stack react to file changes reliably
- Poll for file changes (Vite, watchfiles) since host bind mounts don't deliver events - Limit uvicorn reload to the app directory - Dev nginx config re-resolves container names per request to avoid 502 after restarts Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
0481b71192
commit
5c1f4a77ef
3 files changed
+48
-2
No files matched your search
+12
-2
@@ -15,8 +15,10 @@ services:
|
|||||||
- ADMIN_EMAILS=${ADMIN_EMAILS:-}
|
- ADMIN_EMAILS=${ADMIN_EMAILS:-}
|
||||||
- SMTP_HOST=mailpit
|
- SMTP_HOST=mailpit
|
||||||
- SMTP_PORT=1025
|
- SMTP_PORT=1025
|
||||||
|
# Bind mounts from Windows/macOS hosts don't deliver file events; poll instead
|
||||||
|
- WATCHFILES_FORCE_POLLING=true
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
command: uvicorn app.main:app --host 0.0.0.0 --port 5000 --reload
|
command: uvicorn app.main:app --host 0.0.0.0 --port 5000 --reload --reload-dir app
|
||||||
|
|
||||||
frontend:
|
frontend:
|
||||||
build:
|
build:
|
||||||
@@ -31,6 +33,8 @@ services:
|
|||||||
- ./frontend/tsconfig.json:/app/tsconfig.json
|
- ./frontend/tsconfig.json:/app/tsconfig.json
|
||||||
- ./frontend/tsconfig.node.json:/app/tsconfig.node.json
|
- ./frontend/tsconfig.node.json:/app/tsconfig.node.json
|
||||||
- /app/node_modules # Reset node_modules by running with '--renew-anon-volumes'
|
- /app/node_modules # Reset node_modules by running with '--renew-anon-volumes'
|
||||||
|
environment:
|
||||||
|
- CHOKIDAR_USEPOLLING=true
|
||||||
command: npm run dev -- --host 0.0.0.0 --port 8000
|
command: npm run dev -- --host 0.0.0.0 --port 8000
|
||||||
|
|
||||||
mailpit:
|
mailpit:
|
||||||
@@ -47,7 +51,13 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- "8020:8080"
|
- "8020:8080"
|
||||||
volumes:
|
volumes:
|
||||||
- ../nginx.conf:/etc/nginx/conf.d/default.conf:ro
|
- ./nginx.dev.conf:/etc/nginx/conf.d/default.conf:ro
|
||||||
|
command:
|
||||||
|
- sh
|
||||||
|
- -c
|
||||||
|
- |
|
||||||
|
echo "resolver $$(awk '/^nameserver/{print $$2; exit}' /etc/resolv.conf) valid=5s ipv6=off;" > /etc/nginx/resolver.conf
|
||||||
|
exec nginx -g 'daemon off;'
|
||||||
depends_on:
|
depends_on:
|
||||||
- backend
|
- backend
|
||||||
- frontend
|
- frontend
|
||||||
|
|||||||
@@ -3,4 +3,6 @@ import react from "@vitejs/plugin-react";
|
|||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
plugins: [react()],
|
plugins: [react()],
|
||||||
|
// Bind mounts from Windows/macOS hosts don't deliver file events; poll instead
|
||||||
|
server: { watch: { usePolling: true, interval: 300 } },
|
||||||
});
|
});
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
# Dev variant of ../nginx.conf: container names are re-resolved on every request.
|
||||||
|
# Static upstreams are resolved once at startup, so a restarted container (new IP) causes 502s.
|
||||||
|
# resolver.conf is generated by the nginx command in compose.yml (resolver IP differs between Docker and Podman).
|
||||||
|
include /etc/nginx/resolver.conf;
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 8080;
|
||||||
|
server_name _;
|
||||||
|
set $backend_upstream backend:5000;
|
||||||
|
set $frontend_upstream frontend:8000;
|
||||||
|
|
||||||
|
location /api/ {
|
||||||
|
# Image uploads are limited to 10 MB by the frontend; nginx defaults to 1 MB.
|
||||||
|
client_max_body_size 11m;
|
||||||
|
proxy_pass http://$backend_upstream;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection 'upgrade';
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_cache_bypass $http_upgrade;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://$frontend_upstream;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection 'upgrade';
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_cache_bypass $http_upgrade;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in new issue
Block a user