I have been trying to get my typescript express application deployment to work but the logs show no red flags.
I have already
checked logs and the the console log is there (server started at port 8080!!
)
tried all trouble shooting steps
tried ssh
and the file system looks good (tried netstat and it does show that a node process is running on port 8080)
tried fly vm status
and application state is passing
Here’s my Dockerfile for reference
FROM node:17-alpine as build-image
WORKDIR /usr/src/app
COPY package*.json ./
COPY tsconfig.json ./
COPY ./src ./src
RUN npm ci
RUN npx tsc
FROM node:17-alpine
WORKDIR /usr/src/app
COPY package*.json ./
COPY --from=build-image /usr/src/app/dist ./dist
RUN npm ci --production
COPY . .
EXPOSE 8080
CMD [ "node", "dist/index.js" ]
Accessing the application from web gives 404 error whereas it works locally
If you have any suggestions do let me know,
Thank you.
If it is okay, can you share this app’s fly.toml
?
I hope the build step (npx tsc
) is transpiling up expected output in ./dist
. One way to check would be if the docker image responds to requests just fine locally on your PC.
Also, I’m curious about another npm ci
in your runner… Wouldn’t that be redundant? In fact, should you run npm ci --production
in the builder stage, instead?
1 Like
Thanks for responding,
ignoramous:
Also, I’m curious about another npm ci
in your runner… Wouldn’t that be redundant? In fact, should you run npm ci --production
in the builder stage, instead?
So for build stage devDependencies will be needed for compilation to work (eg: let’s say I replace npx tsc
with a build script that uses rimraf
)
For the production stage, devDepenedencies will not be needed hence installing them separately instead of copying the node_modules from build stage.
1 Like
Thanks,
in my case the issue was with .dockerignore
, it had many unnecessary files which might have caused the issue, after cleaning up .dockerignore
the issue was fixed.
Current .dockerignore
/dist
/node_modules
1 Like
Thanks.
I guess I thought wrong that npx tsc
would have bundled up all required dependencies into the output dir, dist/
.