I have a very easy task of setting up reverse_proxy for services defined in docker-composse.yml with Caddy v2. Everything is working as expected, except for some reason I cannot seem to serve the build assets from create-react-app from any kind of Docker container.
I've tried both the following in the Dockerfile:
FROM nginx:alpine
COPY ./build /usr/share/nginx/html
FROM node:14-alpine
COPY ./build /app
COPY ./npm-shrinkwrap.json /app/.
COPY ./package.json /app/.
WORKDIR /app
RUN npm install -g serve && npm ci
CMD [ "serve", "-s", "/app", "-l", "80" ]
Note that in both cases I am able to connect through SSL without any issues at the network level. In both cases, I get a blank white screen with the error Manifest: Line: 1, column: 1, Syntax error. showing in the console. This error is reported on manifest.json, which is completely blank. I have verified the same file in the container has the expected content at the right location, so something must be preventing it from loading.
I have no idea where to even start. There seems to be something fishy going on down there I'm not privy to, which is never a good sign. Caddy simply reports 200 for the successful GET on index.html. The file is actually loading in the browser, it just has no content.
If this isn't just some obvious thing I'm missing than I will post up a fully working example project, but for debugging I started with the default output from create-react-app and just added the Dockerfile, docker-compose.yml, and Cadyfile.
{
# Global options block. Entirely optional, https is on by default
# Optional email key for lets encrypt
email [email protected]
# Optional staging lets encrypt for testing. Comment out for production.
# acme_ca https://acme-staging-v02.api.letsencrypt.org/directory
}
my-app.watheia.dev {
reverse_proxy / my-app:80
}
version: "3.1"
services:
caddy:
image: caddy/caddy:2.2.1-alpine
container_name: caddy-service
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
# from project root
- cady/Caddyfile:/etc/caddy/Caddyfile
# These start out empty and fil with cache data
- caddy/data:/data
- caddy/config:/config
my-app:
build: .
hostname: my-app.watheia.dev
container_name: my-app
depends_on:
- caddy
PS: Running serve -s ./build -l 8080 from host system works as expected, only without SSL support.
PPS: My knowledge gap here is mostly on create-react-app. This is the first time I've attempted to deploy one beyond localhost.
Whoops, silly me!
I was only proxying the
/path. Duh! I must have overlooked it a thousand times. It should be: