i do need some help regarding Docker traefiks and nodeJS backend:
My Proxy settings with HTTPS and serving my frontend on port 5000 works fine. But for some reason i dont get my backend http routes working:
That is how backend config looks like:
<code>services:
backend:
image: node:latest
container_name: nodejs-backend
command: node /usr/src/app/index.js
volumes:
- ./dist:/usr/src/app
- ./img:/usr/src/app/img
networks:
- default
- web
labels:
- traefik.enable=true
- traefik.http.routers.backend.rule=Host(`backend.herzsprechen-app.de`) || (Host(`backend.herzsprechen-app.de`) && Path(`/registerNewPlayer`)) # some more routes
- traefik.http.routers.backend.tls=true
- traefik.http.routers.backend.tls.certresolver=lets-encrypt
- traefik.http.services.backend.loadbalancer.server.port=8080
networks:
web:
external: true
</code>
<code>services:
backend:
image: node:latest
container_name: nodejs-backend
command: node /usr/src/app/index.js
volumes:
- ./dist:/usr/src/app
- ./img:/usr/src/app/img
networks:
- default
- web
labels:
- traefik.enable=true
- traefik.http.routers.backend.rule=Host(`backend.herzsprechen-app.de`) || (Host(`backend.herzsprechen-app.de`) && Path(`/registerNewPlayer`)) # some more routes
- traefik.http.routers.backend.tls=true
- traefik.http.routers.backend.tls.certresolver=lets-encrypt
- traefik.http.services.backend.loadbalancer.server.port=8080
networks:
web:
external: true
</code>
services:
backend:
image: node:latest
container_name: nodejs-backend
command: node /usr/src/app/index.js
volumes:
- ./dist:/usr/src/app
- ./img:/usr/src/app/img
networks:
- default
- web
labels:
- traefik.enable=true
- traefik.http.routers.backend.rule=Host(`backend.herzsprechen-app.de`) || (Host(`backend.herzsprechen-app.de`) && Path(`/registerNewPlayer`)) # some more routes
- traefik.http.routers.backend.tls=true
- traefik.http.routers.backend.tls.certresolver=lets-encrypt
- traefik.http.services.backend.loadbalancer.server.port=8080
networks:
web:
external: true
If i start the backend like so, i can hit the /login route. But nothing more than that works.
So below are my routes:
<code>module.exports = class HttpRoutesConfiguration {
constructor(app) {
const storage = multer.diskStorage({
destination: (reg, file, cb) => {
cb(null, 'img') // for prod '/usr/src/app/img'
},
filename: (reg, file, cb) => {
cb(null, Date.now() + path.extname(file.originalname))
}
})
const upload = multer({ storage: storage });
app.use("/img", express.static('/img')); //serve static img files
app.post('/registerNewPlayer', upload.single("avatarPicture"), playerController.registerNewPlayer);
app.post('/login', bodyParser.json(), playerController.loginUser);
app.post('/addPlayer', upload.single("avatarPicture"), playerController.addPlayer);
app.post('/deleteUser', bodyParser.json(), playerController.deleteUser);
}
}
</code>
<code>module.exports = class HttpRoutesConfiguration {
constructor(app) {
const storage = multer.diskStorage({
destination: (reg, file, cb) => {
cb(null, 'img') // for prod '/usr/src/app/img'
},
filename: (reg, file, cb) => {
cb(null, Date.now() + path.extname(file.originalname))
}
})
const upload = multer({ storage: storage });
app.use("/img", express.static('/img')); //serve static img files
app.post('/registerNewPlayer', upload.single("avatarPicture"), playerController.registerNewPlayer);
app.post('/login', bodyParser.json(), playerController.loginUser);
app.post('/addPlayer', upload.single("avatarPicture"), playerController.addPlayer);
app.post('/deleteUser', bodyParser.json(), playerController.deleteUser);
}
}
</code>
module.exports = class HttpRoutesConfiguration {
constructor(app) {
const storage = multer.diskStorage({
destination: (reg, file, cb) => {
cb(null, 'img') // for prod '/usr/src/app/img'
},
filename: (reg, file, cb) => {
cb(null, Date.now() + path.extname(file.originalname))
}
})
const upload = multer({ storage: storage });
app.use("/img", express.static('/img')); //serve static img files
app.post('/registerNewPlayer', upload.single("avatarPicture"), playerController.registerNewPlayer);
app.post('/login', bodyParser.json(), playerController.loginUser);
app.post('/addPlayer', upload.single("avatarPicture"), playerController.addPlayer);
app.post('/deleteUser', bodyParser.json(), playerController.deleteUser);
}
}
and for testing purpose my cors config allow origin : ‘*’. I just want that every route after backend.my-domain.de/… hits the corresponding backend.
Here no route is working
– Host(backend.my-domain.de
) && PathPrefix(/registerNewPlayer
)
Here /login works. /registerNewPLayer returns 500 internal server error
– Host(backend.my-domain.de
)
/login works. /registerNewPLayer returns 500 internal server error
Host(backend.hmy-domain.de
) && ( PathPrefix(/login
) || PathPrefix(/registerNewPlayer
) )
/login works
Host(backend.my-domain.de
) && (PathPrefix(/login
))
/login works ; /registerNewPlayer doesnt work
Host(backend.my-domain.de
) || (Host(backend.my-domain.de
) && Path(/registerNewPlayer
))