I need your help today as I’m really stuck with an issue. For a school project, I’m trying to get localhost running with HTTPS using an SSL certificate. However, I keep facing various errors – either permission errors at startup, or my page shows a connection error with no logs to guide me. I’ve been struggling with this for 3 days now, and my files are starting to get messy since I’ve tried so many different approaches.
I’m working with Node, Express, and React, and I’ve containerized my project with Docker. During the Docker setup, I decided to migrate my project to Linux.
Here’s a brief overview of my project structure and files:
Bubble-2.0-master/├── docker-compose.yaml├── cert.pem├── key.pem├── .env├── nginx.conf├── default.conf├── Dockerfile├── package.json├── package-lock.json├── src/│├── Dockerfile.react│├── index.js│├── App.js│├── components/││├── Component1.js││├── Component2.js││└── ...│├── pages/││├── Page1.js││├── Page2.js││└── ...│├── styles/││├── style1.css││├── style2.css││└── ...│└── ...├── server/│├── Dockerfile.node│├── server.js│├── routes/││├── route1.js││├── route2.js││└── ...│├── controllers/││├── controller1.js││├── controller2.js││└── ...│├── models/││├── model1.js││├── model2.js││└── ...│└── ...├── docker-entrypoint-initdb.d/│└── init.sql└── nginx└── DockerfileI’ve also made sure to configure cert.pem and key.pem properly for localhost when generating the files. I’ve even tried disabling my firewall, but nothing seems to work. So, I’m reaching out for help, whether it’s to reorganize and restructure my files, or to understand why I can’t get HTTPS working for my localhost page.
Currently, I’m facing the following errors when starting my project using docker-compose up. Previously, I didn’t have any errors at startup or in the logs, but the page at localhost:3000 was very slow and eventually showed a connection error.
I’ve attached the relevant files and error messages below. Any advice or help would be greatly appreciated!
Error :Error message
Files :Docker-compose.yaml :
services: backend: build: context: . dockerfile: server/Dockerfile.node container_name: backend ports: - "3001:3001" environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: ${DB_NAME} MYSQL_USER: ${DB_USER} MYSQL_PASSWORD: ${DB_PASSWORD} volumes: - .:/usr/src/app - /usr/src/app/node_modules - ./cert.pem:/usr/src/app/cert.pem - ./key.pem:/usr/src/app/key.pem depends_on: db: condition: service_healthy command: nodemon /usr/src/app/server/server.js dns: - 8.8.8.8 - 8.8.4.4 frontend: build: context: . dockerfile: src/Dockerfile.react container_name: frontend ports: - "3000:3000" volumes: - .:/usr/src/app - /usr/src/app/node_modules depends_on: - backend command: sh -c "npm run build && chmod -R 777 /usr/src/app && npm start" dns: - 8.8.8.8 - 8.8.4.4 nginx: build: context: . dockerfile: nginx/Dockerfile container_name: nginx ports: - "80:80" - "443:443" volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro - ./default.conf:/etc/nginx/conf.d/default.conf:rw - ./cert.pem:/etc/nginx/ssl/cert.pem - ./key.pem:/etc/nginx/ssl/key.pem depends_on: - frontend - backend dns: - 8.8.8.8 - 8.8.4.4 db: image: mysql:5.7 container_name: db environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: ${DB_NAME} MYSQL_USER: ${DB_USER} MYSQL_PASSWORD: ${DB_PASSWORD} ports: - "3306:3306" volumes: - mysqldbvolume:/var/lib/mysql - ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d command: --init-file /docker-entrypoint-initdb.d/init.sql healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s timeout: 5s retries: 5 dns: - 8.8.8.8 - 8.8.4.4volumes: mysqldbvolume: driver: localdockerfile.react :
FROM node:20RUN useradd -ms /bin/bash myuserWORKDIR /usr/src/appUSER rootRUN mkdir -p /home/myuser/.npm-globalRUN npm config set prefix '/home/myuser/.npm-global'RUN echo 'export PATH=/home/myuser/.npm-global/bin:$PATH'>> /home/myuser/.profileRUN . /home/myuser/.profileRUN npm config set registry https://registry.npmjs.org/RUN npm config set strict-ssl falseCOPY package*.json ./RUN rm -rf node_modulesRUN npm cache clean --forceRUN npm install npm@latest -gRUN npm installRUN npm rebuildRUN chmod -R +x /usr/src/app/node_modules/.binRUN chmod +x /usr/src/app/node_modules/.bin/*RUN chown -R myuser:myuser /usr/src/app/node_modulesRUN npm install -g concurrentlyRUN chmod -R 755 /usr/src/appRUN npm install --save-dev cross-env react-scriptsCOPY . .RUN mkdir -p /usr/src/app/buildRUN chown -R myuser:myuser /usr/src/app/buildRUN chmod -R 777 /usr/src/appRUN chmod -R 777 /usr/src/app/buildUSER myuserEXPOSE 3000CMD ["npm", "start"]Dockerfile.node :
FROM node:20RUN useradd -ms /bin/bash myuserWORKDIR /usr/src/appUSER rootRUN mkdir -p /home/myuser/.npm-globalRUN npm config set prefix '/home/myuser/.npm-global'RUN echo 'export PATH=/home/myuser/.npm-global/bin:$PATH'>> /home/myuser/.profileRUN . /home/myuser/.profileRUN npm config set registry https://registry.npmjs.org/RUN npm config set strict-ssl falseCOPY package*.json ./RUN rm -rf node_modulesRUN npm cache clean --forceRUN npm install npm@latest -gRUN npm installRUN npm rebuildRUN chmod -R +x /usr/src/app/node_modules/.binRUN chmod +x /usr/src/app/node_modules/.bin/*RUN chown -R myuser:myuser /usr/src/app/node_modulesRUN npm install -g concurrently nodemonRUN chown -R myuser:myuser /usr/src/appRUN chown -R node:node /usr/src/appRUN npm install --save-dev cross-env react-scriptsCOPY . .RUN chown root:root /usr/src/app/cert.pem /usr/src/app/key.pemUSER myuserEXPOSE 3001CMD ["nodemon", "server/server.js"]nginx:nginx.conf :
user nginx;worker_processes auto;error_log /var/log/nginx/error.log warn;pid /var/run/nginx.pid;events { worker_connections 1024;}http { include mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; add_header X-Content-Type-Options nosniff always; add_header X-Frame-Options DENY always; add_header X-XSS-Protection "1; mode=block" always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always; include /etc/nginx/conf.d/*.conf;}default.conf :
server { listen 80; server_name localhost; return 301 https://$host$request_uri;}# Serveur HTTPSserver { listen 443 ssl; server_name localhost; ssl_certificate /etc/nginx/ssl/cert.pem; ssl_certificate_key /etc/nginx/ssl/key.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256"; location / { proxy_pass http://frontend:3000; proxy_set_header Host $host; 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; }}I've already tried generating different SSL certificates, disabling the Windows firewalls, messing around with the permissions, changing the order of actions in my Dockerfiles, and switching versions in case of conflicts. I can't find anything. Please be kind, I'm just getting started. thx appreciate !