背景
iview 服务容器化,实质,构建镜像,方便部署,iview 使用打包纯静态服务
iview 构建镜像
前期准备
修改 setting.env.ts
publicPath 路径修改, 这个构建静态文件访问的绝对路径,涉及到NGINX配置
/**
* Admin Plus 开发配置
* */
const env = process.env.NODE_ENV;
const Setting = {
// 是否使用 Mock 的数据,默认 开发环境为 true,生产环境为 false
isMock: env === 'development',
// 部署应用包时的基本 URL
publicPath: '/admin_static/',
// 生产环境构建文件的目录名
outputDir: 'admin',
// 放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录。
assetsDir: '',
// 开发环境每次保存时 lint 代码,会将 lint 错误输出为编译警告
// true || false || error
lintOnSave: true
};
module.exports = Setting;
涉及到证书,通过openssl生成一个,方便本地测试
openssl genrsa 1024 > server.key
openssl req -new -key server.key > server.csr
openssl req -x509 -days 3650 -key server.key -in server.csr > server.crt
nginx.conf
cors 配置
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, PUT, POST, DELETE, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Content-Type,*';
admin.conf
server {
listen 8090;
server_name loc-admin.atomgit.com;
charset utf-8;
root /usr/nginx/wwwroot/admin/;
index index.html;
location ^~ / {
try_files $uri $uri/ /index.html;
}
location ^~ /admin_static {
alias /usr/nginx/wwwroot/admin;
}
}
server {
listen 443 ssl;
server_name loc-admin.atomgit.com;
ssl_certificate /etc/nginx/conf.d/server.crt;
ssl_certificate_key /etc/nginx/conf.d/server.key;
charset utf-8;
root /usr/nginx/wwwroot/admin/;
index index.html;
location ^~ / {
try_files $uri $uri/ /index.html;
}
location ^~ /admin_static {
alias /usr/nginx/wwwroot/admin;
}
}
Dockerfile
两个阶段构建镜像
# build
FROM node:lts-alpine as build
WORKDIR /app
COPY package*.json ./
RUN npm install -g cnpm --registry=https://registry.npm.taobao.org
RUN cnpm install
COPY . .
RUN npm run build:dev
# deploy
FROM nginx:stable-alpine as deploy
COPY docker/conf/admin.conf /etc/nginx/conf.d/admin.conf
COPY docker/ssl/server.* /etc/nginx/conf.d/
COPY --from=build /app/admin/ /usr/nginx/wwwroot/admin
EXPOSE 443
EXPOSE 8090
CMD ["nginx", "-g", "daemon off;"]
测试
docker build -t xxx/xxx .
docker run xxx/xxx
到此, 镜像构建成功,本地绑定host,测试服务是否正常。 真实环境部署情况一般情况下是外网流量先到网关或者NGINX转到内部地址(服务 pod service等)
外网NGINX转发内网NGINX
外网NGINX
这里需要注意一下 上面修改的 publicPath: '/admin_static/' 前缀需要时保持一致(admin),否则下面一个 location admin 不能匹配成功
server {
listen 443 ssl;
server_name www.xxx.com;
ssl_certificate server.crt;
ssl_certificate_key server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
#location ~ ^/admin {
# proxy_set_header Host $http_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;
# proxy_http_version 1.1;
# #proxy_pass https://@admin;
# proxy_pass https://loc-admin.atomgit.com;
#}
location ~ ^/admin {
proxy_set_header Host $http_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;
proxy_http_version 1.1;
proxy_pass http://@admin;
}
}
upstream @admin {
server x.x.x.x:8090;
}
浏览器访问 自己定义的域名测试是否正常