nginx+nodejs
Dockerfile
Dockerfile
FROM node:14.17.6
RUN npm install npm@latest -g
nginx.conf
conf
user root;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 0;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/nginx_access.log;
error_log /var/log/nginx/nginx_error.log;
gzip on;
gzip_disable "msie6";
server {
listen ${HTTPS_PORT} ssl;
server_name localhost;
ssl_certificate ${SSL_CERTIFICATE};
ssl_certificate_key ${SSL_CERTIFICATE_KEY};
ssl_session_timeout 2m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_pass ${HTTP_SERVER};
}
}
}
Makefile
Makefile
WORK_DIR := /root/project
CACHE_DIR := /root/.cache
IMAGE_TAG := node14
DOCKER_RUN := docker run \
--rm -it \
-v $(PWD):$(WORK_DIR) \
-v $(PWD)/cache:$(CACHE_DIR) \
-w $(WORK_DIR) \
$(IMAGE_TAG)
build:
docker build . -t $(IMAGE_TAG)
install:
$(DOCKER_RUN) npm install
dev:
$(DOCKER_RUN) npm run dev
release:
$(DOCKER_RUN) npm run build
cert:
openssl req -new -newkey rsa:4096 -days 3650 -nodes -x509 \
-subj "/C=US/ST=WO/L=Stan/O=microsoft.com/CN=ms" -keyout ./nginx/cert/privkey.pem -out ./nginx/cert/fullchain.pem
docker-compose.yml
yml
version: '3'
services:
frontend:
build:
context: .
dockerfile: Dockerfile
image: node14
restart: always
volumes:
- ./:/root/project
- ./cache:/root/.cache
working_dir: /root/project
command: npm run dev
ports:
- "127.0.0.1:8000:8000"
nginx:
image: nginx:1.20.1
restart: always
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.template
- ./nginx/cert:/etc/nginx/cert
- ./cache/nginx:/var/log/nginx
environment:
HTTP_SERVER: http://127.0.0.1:8000
HTTPS_PORT: 19443
SSL_CERTIFICATE: /etc/nginx/cert/fullchain.pem
SSL_CERTIFICATE_KEY: /etc/nginx/cert/privkey.pem
command: /bin/bash -c "envsubst < /etc/nginx/nginx.template > /etc/nginx/nginx.conf && nginx -g 'daemon off;'"
depends_on:
- frontend
network_mode: host