docker自动vite打包
This commit is contained in:
1 parent
d04757c5ed
commit
e1d6b6da18
4 files changed
+25
-33
No files matched your search
+22
-4
@@ -1,4 +1,4 @@
|
||||
FROM docker.1ms.run/node:18-alpine AS builder
|
||||
FROM docker.1ms.run/node:18-alpine AS backend-builder
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
@@ -9,6 +9,23 @@ RUN cd server && npm install --production --no-package-lock --no-audit
|
||||
# 复制其余服务器代码
|
||||
COPY server/ ./server/
|
||||
|
||||
# 前端构建阶段
|
||||
FROM docker.1ms.run/node:18-alpine AS frontend-builder
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# 复制前端项目依赖和配置文件
|
||||
COPY package.json package-lock.json* ./
|
||||
# 安装依赖
|
||||
RUN npm ci --no-audit || npm install --no-audit
|
||||
|
||||
# 复制源代码和配置文件
|
||||
COPY vite.config.js ./
|
||||
COPY web/ ./web/
|
||||
|
||||
# 构建前端
|
||||
RUN npm run build:docker
|
||||
|
||||
# 第二阶段:极小镜像
|
||||
FROM docker.1ms.run/alpine:3.16
|
||||
|
||||
@@ -19,9 +36,10 @@ RUN apk add --no-cache nodejs nginx && \
|
||||
rm -rf /var/cache/apk/*
|
||||
|
||||
# 复制服务器文件和静态文件
|
||||
COPY --from=builder /app/server/node_modules /app/server/node_modules
|
||||
COPY --from=builder /app/server/*.js /app/server/
|
||||
COPY dist/ /app/web/
|
||||
COPY --from=backend-builder /app/server/node_modules /app/server/node_modules
|
||||
COPY --from=backend-builder /app/server/*.js /app/server/
|
||||
# 从前端构建阶段复制构建好的文件,而不是复制dist目录
|
||||
COPY --from=frontend-builder /app/dist/ /app/web/
|
||||
|
||||
# 优化的Nginx配置
|
||||
RUN cat > /etc/nginx/nginx.conf <<'EOF'
|
||||
|
||||
+2
-1
@@ -1,11 +1,12 @@
|
||||
{
|
||||
"name": "nodecrypt",
|
||||
"version": "1.0.0",
|
||||
"description": "- **登录与加入房间弹窗**:支持输入用户名、房间名、房间密码,禁止输入空格和特殊符号,支持通过分享链接自动填充房间信息。\r - **房间分享链接自动生成与复制**:可一键生成当前房间的专属链接(含密码),并复制到剪贴板,便于邀请他人加入。\r - **多房间(节点)支持**:可同时加入多个房间,左侧房间栏支持动态切换,房间状态独立保存。\r - **聊天消息实时同步**:支持文本与图片消息,消息自动同步到所有在线成员。\r - **图片粘贴、拖拽、附件上传发送**:支持直接粘贴、拖拽图片或通过附件按钮上传图片,自动压缩大图片,限制单张图片最大5MB。\r - **图片可点击全屏预览**:聊天图片点击后可全屏预览,支持缩放、拖动、双击还原,ESC或点击关闭。\r - **系统消息提示**:如用户加入/退出、房间状态变更等,系统消息以特殊气泡样式居中显示。\r - **在线成员列表实时更新**:右侧成员栏实时显示在线成员昵称与头像,自动区分自己与他人。\r - **支持自定义头像**:基于用户名自动生成 SVG 头像,所有头像样式统一,支持昵称变更自动刷新头像。\r - **输入框多行自适应高度**:输入区高度随内容自动扩展,支持多行输入,采用 Telegram 风格占位符。\r - **禁止用户名、房间名、密码输入空格和特殊符号**:输入时自动过滤,提升安全性和一致性。\r - **响应式布局**:支持侧边栏和右侧成员栏宽度拖拽调整,适配不同屏幕宽度。\r - **前端防止 XSS 攻击**:所有用户输入内容均进行 HTML 转义,防止脚本注入。\r - **退出房间彻底销毁连接**:退出房间时断开与服务器的连接,清理房间数据,支持全部房间关闭后自动刷新页面。\r - **主要交互均有动画与友好提示**:如菜单弹出、系统消息、按钮反馈等,提升用户体验。",
|
||||
"description": "端到端加密节点",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"build": "vite build",
|
||||
"build:docker": "vite build",
|
||||
"dev": "vite"
|
||||
},
|
||||
"repository": {
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
var Xa=Object.create;var Wr=Object.defineProperty;var $a=Object.getOwnPropertyDescriptor;var ja=Object.getOwnPropertyNames;var Va=Object.getPrototypeOf,Ya=Object.prototype.hasOwnProperty;var T=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports);var Za=(r,e,t,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let f of ja(e))!Ya.call(r,f)&&f!==t&&Wr(r,f,{get:()=>e[f],enumerable:!(a=$a(e,f))||a.enumerable});return r};var W0=(r,e,t)=>(t=r!=null?Xa(Va(r)):{},Za(e||!r||!r.__esModule?Wr(t,"default",{value:r,enumerable:!0}):t,r));var Lt=T(()=>{});var Tt=T(()=>{});var Xr=T((qc,Q0)=>{(function(){"use strict";var r="input is invalid type",e=typeof window=="object",t=e?window:{};t.JS_SHA256_NO_WINDOW&&(e=!1);var a=!e&&typeof self=="object",f=!t.JS_SHA256_NO_NODE_JS&&typeof process=="object"&&process.versions&&process.versions.node;f?t=global:a&&(t=self);var c=!t.JS_SHA256_NO_COMMON_JS&&typeof Q0=="object"&&Q0.exports,s=typeof define=="function"&&define.amd,b=!t.JS_SHA256_NO_ARRAY_BUFFER&&typeof ArrayBuffer<"u",v="0123456789abcdef".split(""),_=[-2147483648,8388608,32768,128],m=[24,16,8,0],w=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],F=["hex","array","digest","arrayBuffer"],B=[];(t.JS_SHA256_NO_NODE_JS||!Array.isArray)&&(Array.isArray=function(E){return Object.prototype.toString.call(E)==="[object Array]"}),b&&(t.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW||!ArrayBuffer.isView)&&(ArrayBuffer.isView=function(E){return typeof E=="object"&&E.buffer&&E.buffer.constructor===ArrayBuffer});var P=function(E,q){return function(C){return new U(q,!0).update(C)[E]()}},N=function(E){var q=P("hex",E);f&&(q=D(q,E)),q.create=function(){return new U(E)},q.update=function(p){return q.create().update(p)};for(var C=0;C<F.length;++C){var R=F[C];q[R]=P(R,E)}return q},D=function(E,q){var C=Lt(),R=Tt().Buffer,p=q?"sha224":"sha256",i;R.from&&!t.JS_SHA256_NO_BUFFER_FROM?i=R.from:i=function(x){return new R(x)};var n=function(x){if(typeof x=="string")return C.createHash(p).update(x,"utf8").digest("hex");if(x==null)throw new Error(r);return x.constructor===ArrayBuffer&&(x=new Uint8Array(x)),Array.isArray(x)||ArrayBuffer.isView(x)||x.constructor===R?C.createHash(p).update(i(x)).digest("hex"):E(x)};return n},k=function(E,q){return function(C,R){return new Y(C,q,!0).update(R)[E]()}},$=function(E){var q=k("hex",E);q.create=function(p){return new Y(p,E)},q.update=function(p,i){return q.create(p).update(i)};for(var C=0;C<F.length;++C){var R=F[C];q[R]=k(R,E)}return q};function U(E,q){q?(B[0]=B[16]=B[1]=B[2]=B[3]=B[4]=B[5]=B[6]=B[7]=B[8]=B[9]=B[10]=B[11]=B[12]=B[13]=B[14]=B[15]=0,this.blocks=B):this.blocks=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],E?(this.h0=3238371032,this.h1=914150663,this.h2=812702999,this.h3=4144912697,this.h4=4290775857,this.h5=1750603025,this.h6=1694076839,this.h7=3204075428):(this.h0=1779033703,this.h1=3144134277,this.h2=1013904242,this.h3=2773480762,this.h4=1359893119,this.h5=2600822924,this.h6=528734635,this.h7=1541459225),this.block=this.start=this.bytes=this.hBytes=0,this.finalized=this.hashed=!1,this.first=!0,this.is224=E}U.prototype.update=function(E){if(!this.finalized){var q,C=typeof E;if(C!=="string"){if(C==="object"){if(E===null)throw new Error(r);if(b&&E.constructor===ArrayBuffer)E=new Uint8Array(E);else if(!Array.isArray(E)&&(!b||!ArrayBuffer.isView(E)))throw new Error(r)}else throw new Error(r);q=!0}for(var R,p=0,i,n=E.length,x=this.blocks;p<n;){if(this.hashed&&(this.hashed=!1,x[0]=this.block,this.block=x[16]=x[1]=x[2]=x[3]=x[4]=x[5]=x[6]=x[7]=x[8]=x[9]=x[10]=x[11]=x[12]=x[13]=x[14]=x[15]=0),q)for(i=this.start;p<n&&i<64;++p)x[i>>>2]|=E[p]<<m[i++&3];else for(i=this.start;p<n&&i<64;++p)R=E.charCodeAt(p),R<128?x[i>>>2]|=R<<m[i++&3]:R<2048?(x[i>>>2]|=(192|R>>>6)<<m[i++&3],x[i>>>2]|=(128|R&63)<<m[i++&3]):R<55296||R>=57344?(x[i>>>2]|=(224|R>>>12)<<m[i++&3],x[i>>>2]|=(128|R>>>6&63)<<m[i++&3],x[i>>>2]|=(128|R&63)<<m[i++&3]):(R=65536+((R&1023)<<10|E.charCodeAt(++p)&1023),x[i>>>2]|=(240|R>>>18)<<m[i++&3],x[i>>>2]|=(128|R>>>12&63)<<m[i++&3],x[i>>>2]|=(128|R>>>6&63)<<m[i++&3],x[i>>>2]|=(128|R&63)<<m[i++&3]);this.lastByteIndex=i,this.bytes+=i-this.start,i>=64?(this.block=x[16],this.start=i-64,this.hash(),this.hashed=!0):this.start=i}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},U.prototype.finalize=function(){if(!this.finalized){this.finalizeLine truncated
|
||||
/*! Bundled license information:
|
||||
|
||||
js-sha256/src/sha256.js:
|
||||
(**
|
||||
* [js-sha256]{@link https://github.com/emn178/js-sha256}
|
||||
*
|
||||
* @version 0.11.0
|
||||
* @author Chen, Yi-Cyuan [emn178@gmail.com]
|
||||
* @copyright Chen, Yi-Cyuan 2014-2024
|
||||
* @license MIT
|
||||
*)
|
||||
|
||||
aes-js/index.js:
|
||||
(*! MIT License. Copyright 2015-2018 Richard Moore <me@ricmoo.com>. See LICENSE.txt. *)
|
||||
|
||||
ieee754/index.js:
|
||||
(*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> *)
|
||||
|
||||
buffer/index.js:
|
||||
(*!
|
||||
* The buffer module from node.js, for the browser.
|
||||
*
|
||||
* @author Feross Aboukhadijeh <https://feross.org>
|
||||
* @license MIT
|
||||
*)
|
||||
*/
|
||||
+1
-1
@@ -50,7 +50,7 @@ import {
|
||||
* debug: 是否开启调试模式
|
||||
*/
|
||||
window.config = {
|
||||
wsAddress: 'ws://127.0.0.1:8088',
|
||||
wsAddress: '/ws',
|
||||
debug: true
|
||||
};
|
||||
|
||||
|
||||
Reference in new issue
Block a user