1、 docker-compose 安装 nginx
构建镜像、运行
docker-compose up -d nginx-web
nginx-web:
image: nginx:1.26.2
container_name: nginx-web
environment:
# 时区上海
TZ: Asia/Shanghai
ports:
- "80:80"
- "443:443"
volumes:
# 证书映射
- /opt/project/docker/nginx/cert:/etc/nginx/cert
# 配置文件映射
- /opt/project/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
# 配置目录
- /opt/project/docker/nginx/conf/webConf:/usr/share/nginx/conf/webConf
# 页面目录
- /opt/project/docker/nginx/html:/usr/share/nginx/html
# 日志目录
- /opt/project/docker/nginx/log:/var/log/nginx
network_mode: "host"
# 容器重启策略,容器崩溃时自动重启
# restart: unless-stopped
# logging:
# driver: "json-file"
# options:
# max-size: "10m" # 限制每个日志文件的最大大小
# max-file: "30" # 保留最近的 30 个日志文件
2、 拉取代码
我的地址:gitee.com/onionCircle…(基于源码地址同步的)
nodejs 官网地址:nodejs.org/en/download
1、打开 .env.development 文件,修改后台接口
# 代理设置,可配置多个,不能换行,格式:[访问接口的根路径, 代理地址, 是否保持Host头]
VITE_PROXY = [["/api","http://127.0.0.1:18080/api",false]]
# 访问接口的根路径
VITE_GLOB_API_URL =
2、运行、打包
# 安装依赖
yarn install --registry=https://registry.npmmirror.com
# 开发环境运行
yarn serve
# 编译打包后运行访问
yarn preview
# 打包
yarn build
3、 将打包出来的dist压缩上传到服务器
1、解压压缩包
unzip dist.zip
2、如果报错找不到 zip 命令
apt install unzip
server {
listen 10000;
server_name localhost;
# 根目录和默认首页配置
location / {
root /usr/share/nginx/html/thingsboard/dist;
index index.html index.htm;
# 尝试访问静态文件或转发到 index.html
try_files $uri $uri/ /index.html;
# 启用静态文件缓存(例如,HTML、CSS、JS)
expires 1d;
add_header Cache-Control "public";
}
# API 代理配置
location /api {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://106.119.162.97:18080/api;
# 可选:设置代理超时
proxy_connect_timeout 10s;
proxy_send_timeout 10s;
proxy_read_timeout 10s;
# 配置大响应内容的缓冲区
proxy_buffering on;
proxy_buffers 16 4k;
proxy_buffer_size 2k;
}
# 可选:错误页面处理
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# 安全增强(可选)
# 禁止访问隐藏文件(例如 .git,.env)
location ~ /. {
deny all;
}
}
# 根据系统的 CPU 核心数自动设置 worker 进程数量
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
# 根据需求调节
worker_connections 1024;
# 提高连接接受的效率
multi_accept on;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
# 优化性能,减少磁盘和网络延迟
tcp_nopush on;
keepalive_timeout 65;
# 限制上传文件最大尺寸
client_max_body_size 100m;
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;
# 启用 Gzip 压缩
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
# 设置压缩级别,1-9,默认是 1,6 是平衡的压缩等级
gzip_comp_level 6;
# 最小压缩文件大小,减少小文件的压缩开销
gzip_min_length 1024;
upstream server {
# 保证同一用户的请求路由到同一台服务器
ip_hash;
# gateway 地址
server 127.0.0.1:8080;
# 根据需要可以启用负载均衡的第二台后端服务器
# server 127.0.0.1:8081;
}
include /usr/share/nginx/conf/webConf/*.conf;
server {
listen 80;
server_name localhost;
# https配置参考 start
#listen 443 ssl;
# 证书直接存放 /docker/nginx/cert/ 目录下即可 更改证书名称即可 无需更改证书路径
#ssl on;
#ssl_certificate /etc/nginx/cert/xxx.local.crt; # /etc/nginx/cert/ 为docker映射路径 不允许更改
#ssl_certificate_key /etc/nginx/cert/xxx.local.key; # /etc/nginx/cert/ 为docker映射路径 不允许更改
#ssl_session_timeout 5m;
#ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#ssl_prefer_server_ciphers on;
# https配置参考 end
# 演示环境配置 拦截除 GET POST 之外的所有请求
# if ($request_method !~* GET|POST) {
# rewrite ^/(.*)$ /403;
# }
# location = /403 {
# default_type application/json;
# return 200 '{"msg":"演示模式,不允许操作","code":500}';
# }
# 限制外网访问内网 actuator 相关路径
location ~ ^(/[^/]*)?/actuator.*(/.*)?$ {
return 403;
}
location / {
root /usr/share/nginx/html; # docker映射路径 不允许更改
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /prod-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 86400s;
# sse 与 websocket参数
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 关闭代理缓冲区,确保实时响应
proxy_buffering off;
# 禁用代理缓存,确保请求不被缓存
proxy_cache off;
proxy_pass http://server/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
4、登录访问地址
账号:sysadmin@thingsboard.org 密码sysadmin