Today I’m going to share a container setup for React based on Nginx.

To do this, we are going to create this docker-compose.yml
version: '3.1'
services:
nginx_frailstop:
build: .
container_name: nginx_frailstop
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./dist:/usr/share/nginx/html
- ./config/nginx/cache/:/var/cache/nginx/
- ./config/nginx/sites/:/etc/nginx/sites-enabled/
- ./config/nginx/config/nginx.conf:/etc/nginx/nginx.conf
Now we are going to create our Dockerfile
# syntax=docker/dockerfile:1 FROM nginx:alpine # Copy static files from the /dist folder to Nginx directory COPY dist /usr/share/nginx/html # Expose port 80 (Nginx default port) EXPOSE 80 # Command to start Nginx in foreground CMD ["nginx", "-g", "daemon off;"]
Finally, we will create the necessary folders
config
nginx
cache
config -> nginx.conf
sites
The nginx.conf file must contain
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#Disable cache:
fastcgi_cache_bypass $http_cache_control;
fastcgi_no_cache $http_cache_control;
#gzip on;
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
include /etc/nginx/conf.d/*.conf;
}
Remember that the React distribution folder generated with Vite is inside dist, you must place it in the root of this configuration.
So it looks like this

Now we will use the command
docker compose up -d
And we will be able to see the result on port 80: localhost:80.
