diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index de51a78..7d08543 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -15,7 +15,7 @@ change-template: '- $TITLE (#$NUMBER)' no-changes-template: '- No changes' template: | - [docker-docker.yml](https://github.com/jamebal/jmal-cloud-server/blob/master/docker-compose.example2.yml) + [docker-docker.yml](https://github.com/jamebal/jmal-cloud-server/blob/master/docker-compose.base.yml) #### 更新前备份数据库 @@ -27,6 +27,11 @@ template: | docker-compose pull && docker-compose up -d ``` + #### 清理旧镜像 + ```shell + docker images --filter=reference='jmal/jmalcloud*' --filter "dangling=true" -q | xargs -r docker rmi + ``` + ## Changes in this release: $CHANGES diff --git a/.github/workflows/build-nginx-drawio.yml b/.github/workflows/build-nginx-drawio.yml new file mode 100644 index 0000000..572bd89 --- /dev/null +++ b/.github/workflows/build-nginx-drawio.yml @@ -0,0 +1,32 @@ +name: Build nginx with Draw.io Docker Image + +on: + workflow_dispatch: + +jobs: + build-and-push: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Build and push Docker image + uses: docker/build-push-action@v5 + with: + context: . + file: docker/nginx-drawio/Dockerfile + push: true + tags: jmal/nginx-drawio:latest + platforms: linux/amd64,linux/arm64 + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1acb9c4..bbd31d9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,4 +1,4 @@ -name: Build and Push Multi-Platform Docker Image +name: Build Docker Image on: workflow_dispatch: @@ -12,10 +12,10 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Set up Node.js 16.20.2 - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: node-version: 16.20.2 @@ -31,23 +31,30 @@ jobs: echo "PROJECT_VERSION=$VERSION" >> $GITHUB_ENV - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v3 - name: Login to Docker Hub - uses: docker/login-action@v1 + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ secrets.GHCR_IO_USERNAME }} + password: ${{ secrets.GHCR_IO_TOKEN }} + - name: Build and push Docker image - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v5 with: context: . file: ./Dockerfile push: true - tags: jmal/jmalcloud-nginx:${{ env.PROJECT_VERSION }},jmal/jmalcloud-nginx:latest + tags: | + jmal/jmalcloud-nginx:${{ env.PROJECT_VERSION }},jmal/jmalcloud-nginx:latest + ghcr.io/${{ secrets.GHCR_IO_USERNAME }}/jmalcloud-nginx:${{ env.PROJECT_VERSION }},ghcr.io/${{ secrets.GHCR_IO_USERNAME }}/jmalcloud-nginx:latest platforms: linux/amd64,linux/arm64 build-args: | VERSION=${{ env.PROJECT_VERSION }} - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} diff --git a/.github/workflows/pushAliyun.yml b/.github/workflows/pushAliyun.yml new file mode 100644 index 0000000..e0ca5d6 --- /dev/null +++ b/.github/workflows/pushAliyun.yml @@ -0,0 +1,87 @@ +name: Build and Push Docker Image to Aliyun + +on: + workflow_dispatch: + release: + types: [ published ] + tags: [ v* ] + +jobs: + build_and_push: + runs-on: ubuntu-latest + strategy: + matrix: + arch: + - amd64 + - arm64 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Node.js 16.20.2 + uses: actions/setup-node@v4 + with: + node-version: 16.20.2 + + - name: Install dependencies + run: npm install && npm install --save core-js@2 + + - name: Build + run: npm run build:prod + + - name: Extract project version from package.json + run: | + VERSION=$(node -p "require('./package.json').version") + echo "PROJECT_VERSION=$VERSION" >> $GITHUB_ENV + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to Aliyun Container Registry guangzhou + uses: docker/login-action@v3 + with: + registry: registry.cn-guangzhou.aliyuncs.com + username: ${{ secrets.ALIYUN_DOCKER_USERNAME }} + password: ${{ secrets.ALIYUN_DOCKER_PASSWORD }} + + - name: Log in to Aliyun Container Registry beijing + uses: docker/login-action@v3 + with: + registry: registry.cn-beijing.aliyuncs.com + username: ${{ secrets.ALIYUN_DOCKER_USERNAME }} + password: ${{ secrets.ALIYUN_DOCKER_PASSWORD }} + + - name: Set tag for amd64 + if: matrix.arch == 'amd64' + run: | + echo "TAG_LATEST_0=registry.cn-guangzhou.aliyuncs.com/jmalcloud/jmalcloud-nginx:latest" >> $GITHUB_ENV + echo "TAG_VERSION_0=registry.cn-guangzhou.aliyuncs.com/jmalcloud/jmalcloud-nginx:${{ env.PROJECT_VERSION }}" >> $GITHUB_ENV + echo "TAG_LATEST_1=registry.cn-beijing.aliyuncs.com/jmalcloud/jmalcloud-nginx:latest" >> $GITHUB_ENV + echo "TAG_VERSION_1=registry.cn-beijing.aliyuncs.com/jmalcloud/jmalcloud-nginx:${{ env.PROJECT_VERSION }}" >> $GITHUB_ENV + + - name: Set tag for non-amd64 + if: matrix.arch != 'amd64' + run: | + echo "TAG_LATEST_0=registry.cn-guangzhou.aliyuncs.com/jmalcloud/jmalcloud-nginx:latest-${{ matrix.arch }}" >> $GITHUB_ENV + echo "TAG_VERSION_0=registry.cn-guangzhou.aliyuncs.com/jmalcloud/jmalcloud-nginx:${{ env.PROJECT_VERSION }}-${{ matrix.arch }}" >> $GITHUB_ENV + echo "TAG_LATEST_1=registry.cn-beijing.aliyuncs.com/jmalcloud/jmalcloud-nginx:latest-${{ matrix.arch }}" >> $GITHUB_ENV + echo "TAG_VERSION_1=registry.cn-beijing.aliyuncs.com/jmalcloud/jmalcloud-nginx:${{ env.PROJECT_VERSION }}-${{ matrix.arch }}" >> $GITHUB_ENV + + - name: Build and push Docker image + uses: docker/build-push-action@v5 + with: + context: . + file: ./Dockerfile + platforms: linux/${{ matrix.arch }} + push: true + tags: | + ${{ env.TAG_LATEST_0 }} + ${{ env.TAG_VERSION_0 }} + ${{ env.TAG_LATEST_1 }} + ${{ env.TAG_VERSION_1 }} + build-args: | + VERSION=${{ env.PROJECT_VERSION }} diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index f02e72e..f2594cd 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -10,7 +10,7 @@ jobs: update_release_draft: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - uses: release-drafter/release-drafter@v5 with: config-name: release-drafter.yml diff --git a/.github/workflows/nightly-build.yml b/.github/workflows/test-build.yml similarity index 63% rename from .github/workflows/nightly-build.yml rename to .github/workflows/test-build.yml index 758bd73..d171787 100644 --- a/.github/workflows/nightly-build.yml +++ b/.github/workflows/test-build.yml @@ -1,4 +1,4 @@ -name: Build and Push Multi-Platform Docker Image +name: Build Test Docker Image on: push: @@ -11,10 +11,10 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Set up Node.js 16.20.2 - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: node-version: 16.20.2 @@ -30,23 +30,30 @@ jobs: echo "PROJECT_VERSION=$VERSION" >> $GITHUB_ENV - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v3 - name: Login to Docker Hub - uses: docker/login-action@v1 + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ secrets.GHCR_IO_USERNAME }} + password: ${{ secrets.GHCR_IO_TOKEN }} + - name: Build and push Docker image - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v5 with: context: . file: ./Dockerfile push: true - tags: jmal/jmalcloud-nginx:nightly + tags: | + jmal/jmalcloud-nginx:test + ghcr.io/${{ secrets.GHCR_IO_USERNAME }}/jmalcloud-nginx:test platforms: linux/amd64,linux/arm64 build-args: | VERSION=${{ env.PROJECT_VERSION }} - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} diff --git a/Dockerfile b/Dockerfile index 6e1b20b..d84c7cc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,11 +1,11 @@ -FROM nginx:latest +FROM jmal/nginx-drawio:latest COPY nginx.conf /etc/nginx/nginx.conf -COPY nginx.conf /etc/nginx/nginx.conf.template - COPY dist /var/www/public +COPY config.js.template /var/www/public/config.js.template + COPY docker-entrypoint.sh /docker-entrypoint.sh RUN chmod +x /docker-entrypoint.sh diff --git a/README.md b/README.md index d844bff..a388e69 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ JmalCloud 是一款私有云存储网盘项目,能够简单安全管理您的 ### 部署 - 必须安装:`Docker` 和 `Docker Compose v2.0+` -参考[docker-compose.yml](https://github.com/jamebal/jmal-cloud-server/blob/master/docker-compose.example2.yml) +参考[docker-compose.yml](https://github.com/jamebal/jmal-cloud-server/blob/master/docker-compose.base.yml) ```shell docker compose up -d @@ -44,7 +44,7 @@ docker restart jmalcloud_server ``` #### 恢复数据库 ```shell - docker exec -it jmalcloud_mongodb mongorestore -d jmalcloud --dir /dump/xxx --gzip --quiet + docker exec -it jmalcloud_mongodb mongorestore --gzip --nsInclude=jmalcloud.* --dir /dump/xxx --quiet ``` ### dev diff --git a/README_en_US.md b/README_en_US.md index 09b9ebf..72ae380 100644 --- a/README_en_US.md +++ b/README_en_US.md @@ -16,13 +16,13 @@ JmalCloud It's a private cloud storage project that makes it simple and secure t ✅ supports WebDAV ### Online Demo: -[View Demo](https://jmal.cc/demo) , username:demo, password:demo1234 +[Live Demo](https://jmal.cc/demo) , username:demo, password:demo1234 ### Deploy - Prerequisites:`Docker` and `Docker Compose v2.0+` -Refer to [docker-compose.yml](https://github.com/jamebal/jmal-cloud-server/blob/master/docker-compose.example2.yml) +Refer to [docker-compose.yml](https://github.com/jamebal/jmal-cloud-server/blob/master/docker-compose.base.yml) ```shell docker compose up -d diff --git a/config.js.template b/config.js.template new file mode 100644 index 0000000..5bfb8a9 --- /dev/null +++ b/config.js.template @@ -0,0 +1,4 @@ +window._env_ = { + API_URL: "${API_URL}", + API_OFFICE_URL: "${API_OFFICE_URL}" +}; diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 44b8c56..800ed91 100644 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -1,8 +1,4 @@ #!/bin/bash set -e - -# 使用envsubst命令替换nginx.conf.template文件中的环境变量 -envsubst '$API_BASE_URL $API_DRAWIO_URL $API_OFFICE_URL' < /etc/nginx/nginx.conf.template > /etc/nginx/nginx.conf - -# 启动Nginx +envsubst '${API_URL} ${API_OFFICE_URL}' < /var/www/public/config.js.template > /var/www/public/config.js exec "$@" diff --git a/docker/nginx-drawio/Dockerfile b/docker/nginx-drawio/Dockerfile new file mode 100644 index 0000000..921586b --- /dev/null +++ b/docker/nginx-drawio/Dockerfile @@ -0,0 +1,17 @@ +FROM nginx:latest + +RUN apt-get update && \ + apt-get install -y unzip wget && \ + mkdir -p /etc/nginx/servers /var/www && \ + wget https://github.com/jgraph/drawio/releases/download/v24.4.10/draw.war -O /var/www/draw.war && \ + wget https://github.com/mozilla/pdf.js/releases/download/v4.3.136/pdfjs-4.3.136-dist.zip -O /var/www/pdfjs.zip && \ + unzip /var/www/draw.war -d /var/www/draw && \ + unzip /var/www/pdfjs.zip -d /var/www/pdfjs && \ + rm -rf /var/www/pdfjs.zip /var/www/draw.war /var/www/draw/META-INF /var/www/draw/WEB-INF && \ + apt-get remove -y unzip wget && \ + apt-get autoremove -y && \ + apt-get clean + +COPY docker/nginx-drawio/drawio.conf /etc/nginx/servers/drawio.conf +COPY docker/nginx-drawio/pdfjs.conf /etc/nginx/servers/pdfjs.conf +COPY docker/nginx-drawio/mime.types /etc/nginx/mime.types diff --git a/docker/nginx-drawio/drawio.conf b/docker/nginx-drawio/drawio.conf new file mode 100644 index 0000000..e96cc86 --- /dev/null +++ b/docker/nginx-drawio/drawio.conf @@ -0,0 +1,10 @@ +server { + listen 8080; + server_name localhost; + root /var/www/draw; + + location / { + try_files $uri $uri/ /index.html; + index index.html index.htm; + } +} diff --git a/docker/nginx-drawio/mime.types b/docker/nginx-drawio/mime.types new file mode 100644 index 0000000..0ff4bda --- /dev/null +++ b/docker/nginx-drawio/mime.types @@ -0,0 +1,98 @@ +types { + text/html html htm shtml; + text/css css; + text/xml xml; + image/gif gif; + image/jpeg jpeg jpg; + application/javascript js mjs; + application/atom+xml atom; + application/rss+xml rss; + + text/mathml mml; + text/plain txt; + text/vnd.sun.j2me.app-descriptor jad; + text/vnd.wap.wml wml; + text/x-component htc; + + image/avif avif; + image/png png; + image/svg+xml svg svgz; + image/tiff tif tiff; + image/vnd.wap.wbmp wbmp; + image/webp webp; + image/x-icon ico; + image/x-jng jng; + image/x-ms-bmp bmp; + + font/woff woff; + font/woff2 woff2; + + application/java-archive jar war ear; + application/json json; + application/mac-binhex40 hqx; + application/msword doc; + application/pdf pdf; + application/postscript ps eps ai; + application/rtf rtf; + application/vnd.apple.mpegurl m3u8; + application/vnd.google-earth.kml+xml kml; + application/vnd.google-earth.kmz kmz; + application/vnd.ms-excel xls; + application/vnd.ms-fontobject eot; + application/vnd.ms-powerpoint ppt; + application/vnd.oasis.opendocument.graphics odg; + application/vnd.oasis.opendocument.presentation odp; + application/vnd.oasis.opendocument.spreadsheet ods; + application/vnd.oasis.opendocument.text odt; + application/vnd.openxmlformats-officedocument.presentationml.presentation + pptx; + application/vnd.openxmlformats-officedocument.spreadsheetml.sheet + xlsx; + application/vnd.openxmlformats-officedocument.wordprocessingml.document + docx; + application/vnd.wap.wmlc wmlc; + application/wasm wasm; + application/x-7z-compressed 7z; + application/x-cocoa cco; + application/x-java-archive-diff jardiff; + application/x-java-jnlp-file jnlp; + application/x-makeself run; + application/x-perl pl pm; + application/x-pilot prc pdb; + application/x-rar-compressed rar; + application/x-redhat-package-manager rpm; + application/x-sea sea; + application/x-shockwave-flash swf; + application/x-stuffit sit; + application/x-tcl tcl tk; + application/x-x509-ca-cert der pem crt; + application/x-xpinstall xpi; + application/xhtml+xml xhtml; + application/xspf+xml xspf; + application/zip zip; + + application/octet-stream bin exe dll; + application/octet-stream deb; + application/octet-stream dmg; + application/octet-stream iso img; + application/octet-stream msi msp msm; + + audio/midi mid midi kar; + audio/mpeg mp3; + audio/ogg ogg; + audio/x-m4a m4a; + audio/x-realaudio ra; + + video/3gpp 3gpp 3gp; + video/mp2t ts; + video/mp4 mp4; + video/mpeg mpeg mpg; + video/quicktime mov; + video/webm webm; + video/x-flv flv; + video/x-m4v m4v; + video/x-mng mng; + video/x-ms-asf asx asf; + video/x-ms-wmv wmv; + video/x-msvideo avi; +} diff --git a/docker/nginx-drawio/pdfjs.conf b/docker/nginx-drawio/pdfjs.conf new file mode 100644 index 0000000..f20d08f --- /dev/null +++ b/docker/nginx-drawio/pdfjs.conf @@ -0,0 +1,5 @@ +server { + listen 8081; + server_name localhost; + root /var/www/pdfjs; +} diff --git a/nginx.conf b/nginx.conf index 100ed68..2c8c339 100644 --- a/nginx.conf +++ b/nginx.conf @@ -89,6 +89,36 @@ http { index index.html index.htm; } + location = /blog { + proxy_pass http://jmalcloud:8088/articles; + proxy_set_header Host $proxy_host; + proxy_set_header X-real-ip $remote_addr; + } + + location = /blog/ { + proxy_pass http://jmalcloud:8088/articles; + proxy_set_header Host $proxy_host; + proxy_set_header X-real-ip $remote_addr; + } + + location /blog/api/ { + proxy_pass http://jmalcloud:8088/; + proxy_set_header Host $proxy_host; + proxy_set_header X-real-ip $remote_addr; + } + + location /blog/articles { + proxy_pass http://jmalcloud:8088/articles/; + proxy_set_header Host $proxy_host; + proxy_set_header X-real-ip $remote_addr; + } + + location /blog/ { + proxy_pass http://jmalcloud:8088/articles/; + proxy_set_header Host $proxy_host; + proxy_set_header X-real-ip $remote_addr; + } + location /api/ { proxy_pass http://jmalcloud:8088/; proxy_http_version 1.1; @@ -179,11 +209,29 @@ http { } location /drawio/webapp/ { - proxy_pass http://drawio-webapp:8080/; + proxy_pass http://localhost:8080/; proxy_http_version 1.1; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-PORT $remote_port; - proxy_set_header X-Forwarded-Host $the_host/drawio/webapp; + proxy_set_header X-Forwarded-Host $the_host//drawio/webapp; + proxy_set_header X-Forwarded-Proto $the_scheme; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $http_host; + proxy_set_header Scheme $scheme; + proxy_set_header Server-Protocol $server_protocol; + proxy_set_header Server-Name $server_name; + proxy_set_header Server-Addr $server_addr; + proxy_set_header Server-Port $server_port; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + } + + location /pdf.js/ { + proxy_pass http://localhost:8081/; + proxy_http_version 1.1; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Real-PORT $remote_port; + proxy_set_header X-Forwarded-Host $the_host//pdf.js; proxy_set_header X-Forwarded-Proto $the_scheme; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; diff --git a/package.json b/package.json index 848cec6..b13ddef 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "jmal-cloud-view", - "version": "2.8.3", + "version": "2.9.2", "description": "jmalcloud", "author": "Jmal ", "license": "MIT", @@ -16,7 +16,6 @@ }, "dependencies": { "ant-design-vue": "^1.6.5", - "artplayer": "^5.1.1", "clipboard": "^2.0.6", "cropperjs": "^1.5.6", "e-vue-contextmenu": "^0.1.3", diff --git a/prettier.config.js b/prettier.config.js new file mode 100644 index 0000000..e426cd3 --- /dev/null +++ b/prettier.config.js @@ -0,0 +1,8 @@ +module.exports = { + singleQuote: true, + semi: false, + trailingComma: 'es6', + tabWidth: 2, + printWidth: 80, + endOfLine: 'lf' +} diff --git a/public/config.js b/public/config.js new file mode 100644 index 0000000..64157ba --- /dev/null +++ b/public/config.js @@ -0,0 +1,4 @@ +window._env_ = { + API_URL: "", + API_OFFICE_URL: "", +}; diff --git a/public/index.html b/public/index.html index 4dfaa70..fe36c87 100644 --- a/public/index.html +++ b/public/index.html @@ -17,8 +17,8 @@ - - + + @@ -35,7 +35,9 @@ <%= webpackConfig.name %> + +