From 69258dbf1f24743151e37f5c42be4ef3f7074d81 Mon Sep 17 00:00:00 2001 From: Meng Sen Date: Tue, 5 Nov 2024 17:04:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E5=B8=83=20Windows=20=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Meng Sen --- .github/README.md | 1 + README.md | 1 + apps/windows/4.00/data.yml | 197 +++++++++++++++++++++++++ apps/windows/4.00/docker-compose.yml | 37 +++++ apps/windows/4.00/scripts/init.sh | 15 ++ apps/windows/4.00/scripts/uninstall.sh | 10 ++ apps/windows/4.00/scripts/upgrade.sh | 15 ++ apps/windows/README.md | 75 ++++++++++ apps/windows/data.yml | 14 ++ apps/windows/logo.png | Bin 0 -> 15096 bytes 10 files changed, 365 insertions(+) create mode 100644 apps/windows/4.00/data.yml create mode 100644 apps/windows/4.00/docker-compose.yml create mode 100644 apps/windows/4.00/scripts/init.sh create mode 100644 apps/windows/4.00/scripts/uninstall.sh create mode 100644 apps/windows/4.00/scripts/upgrade.sh create mode 100644 apps/windows/README.md create mode 100644 apps/windows/data.yml create mode 100644 apps/windows/logo.png diff --git a/.github/README.md b/.github/README.md index 3ec6bc0ee..4722a50c6 100644 --- a/.github/README.md +++ b/.github/README.md @@ -165,6 +165,7 @@ | 🟢 | | Uptime Kuma | https://uptime.kuma.pet/ | 自托管监控工具 | | | 🟢 | | Umami | https://umami.is/ | 为速度和效率而构建的网站分析 | | | 🟢 | | 路由设备监控 | https://github.com/aceberg/WatchYourLAN/ | 轻量级网络 IP 扫描器 | | +| 🟢 | | Windows 系统 | https://www.microsoft.com/ | Docker 容器内的 Windows | | | 🟢 | | WiseFlow | https://github.com/TeamWiseFlow/wiseflow/ | Wiseflow 首席情报官 | | | 🟢 | | 悟空IM | https://githubim.com/ | 让信息传递更简单 | | | 🟢 | | 迅雷 NAS版 | https://github.com/cnk3x/xunlei/ | 迅雷远程下载服务 NAS移植版 | | diff --git a/README.md b/README.md index 6a34b5541..b924d8285 100644 --- a/README.md +++ b/README.md @@ -148,6 +148,7 @@ | 🟢 | | Uptime Kuma | https://uptime.kuma.pet/ | 自托管监控工具 | | | 🟢 | | Umami | https://umami.is/ | 为速度和效率而构建的网站分析 | | | 🟢 | | 路由设备监控 | https://github.com/aceberg/WatchYourLAN/ | 轻量级网络 IP 扫描器 | | +| 🟢 | | Windows 系统 | https://www.microsoft.com/ | Docker 容器内的 Windows | | | 🟢 | | WiseFlow | https://github.com/TeamWiseFlow/wiseflow/ | Wiseflow 首席情报官 | | | 🟢 | | 悟空IM | https://githubim.com/ | 让信息传递更简单 | | | 🟢 | | 迅雷 NAS版 | https://github.com/cnk3x/xunlei/ | 迅雷远程下载服务 NAS移植版 | | diff --git a/apps/windows/4.00/data.yml b/apps/windows/4.00/data.yml new file mode 100644 index 000000000..df4f18437 --- /dev/null +++ b/apps/windows/4.00/data.yml @@ -0,0 +1,197 @@ +additionalProperties: + formFields: + - default: "/home/windows" + edit: true + envKey: WINDOWS_STORAGE_ROOT_PATH + labelZh: Windows 存储目录 + labelEn: Windows Storage Path + required: true + type: text + - default: "/home/windows" + edit: true + envKey: WINDOWS_SHARE_ROOT_PATH + labelZh: Windows 网上邻居共享目录 + labelEn: Windows Share Path + required: true + type: text + - default: "/home/windows" + edit: true + envKey: WINDOWS_OEM_ROOT_PATH + labelZh: Windows OEM 目录 + labelEn: Windows OEM Path + required: true + type: text + - default: 8006 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 3389 + edit: true + envKey: PANEL_APP_PORT_REMOTE + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "win11" + edit: true + envKey: VERSION + labelZh: Windows 版本 + labelEn: Windows Version + required: true + type: select + values: + - label: Windows 11 Pro (5.4GB) + value: "win11" + - label: Windows 11 LTSC (4.2GB) + value: "ltsc11" + - label: Windows 11 Enterprise (5.8GB) + value: "win11e" + - label: Windows 10 Pro (5.7GB) + value: "win10" + - label: Windows 10 LTSC (4.6GB) + value: "ltsc10" + - label: Windows 10 Enterprise (5.2GB) + value: "win10e" + - label: Windows 8.1 Pro (4.0GB) + value: "win8" + - label: Windows 8.1 Enterprise (3.7GB) + value: "win8e" + - label: Windows 7 Enterprise (3.0GB) + value: "win7" + - label: Windows Vista Enterprise (3.0GB) + value: "vista" + - label: Windows XP Professional (0.6GB) + value: "winxp" + - label: Windows Server 2025 (5.0GB) + value: "2025" + - label: Windows Server 2022 (4.7GB) + value: "2022" + - label: Windows Server 2019 (5.3GB) + value: "2019" + - label: Windows Server 2016 (6.5GB) + value: "2016" + - label: Windows Server 2012 (4.3GB) + value: "2012" + - label: Windows Server 2008 (3.0GB) + value: "2008" + - label: Windows Server 2003 (0.6GB) + value: "2003" + - default: "Administrator" + edit: true + envKey: USERNAME + labelZh: 用户名 + labelEn: Username + required: true + type: text + - default: "" + edit: true + envKey: PASSWORD + labelZh: 密码 + labelEn: Password + required: true + type: password + - default: "N" + edit: true + envKey: MANUAL + labelZh: 安装模式选择 + labelEn: Manual Mode + required: true + type: select + values: + - label: 自动化安装 + value: "N" + - label: 手动安装 + value: "Y" + - default: "8G" + edit: true + envKey: RAM_SIZE + labelZh: 内存大小 + labelEn: RAM Size + required: true + type: text + - default: 4 + edit: true + envKey: CPU_CORES + labelZh: CPU 核心数 + labelEn: CPU Cores + required: true + type: number + - default: "CN" + edit: true + envKey: LANGUAGE + labelZh: Windows 语言 + labelEn: Windows Language + required: true + type: select + values: + - label: 阿拉伯语 + value: "AE" + - label: 保加利亚语 + value: "BG" + - label: 简体中文 + value: "CN" + - label: 克罗地亚语 + value: "HR" + - label: 捷克语 + value: "CZ" + - label: 丹麦语 + value: "DK" + - label: 荷兰语 + value: "NL" + - label: 英语 + value: "GB" + - label: 爱沙尼亚语 + value: "EE" + - label: 芬兰语 + value: "FI" + - label: 法语 + value: "FR" + - label: 德语 + value: "DE" + - label: 希腊语 + value: "GR" + - label: 希伯来语 + value: "IL" + - label: 匈牙利语 + value: "HU" + - label: 意大利语 + value: "IT" + - label: 日语 + value: "JP" + - label: 韩语 + value: "KR" + - label: 拉脱维亚语 + value: "LV" + - label: 立陶宛语 + value: "LT" + - label: 挪威语 + value: "NO" + - label: 波兰语 + value: "PL" + - label: 葡萄牙语 + value: "PT" + - label: 罗马尼亚语 + value: "RO" + - label: 俄语 + value: "RU" + - label: 塞尔维亚语 + value: "RS" + - label: 斯洛伐克语 + value: "SK" + - label: 斯洛文尼亚语 + value: "SI" + - label: 西班牙语 + value: "ES" + - label: 瑞典语 + value: "SE" + - label: 泰语 + value: "TH" + - label: 土耳其语 + value: "TR" + - label: 乌克兰语 + value: "UA" diff --git a/apps/windows/4.00/docker-compose.yml b/apps/windows/4.00/docker-compose.yml new file mode 100644 index 000000000..b3120448b --- /dev/null +++ b/apps/windows/4.00/docker-compose.yml @@ -0,0 +1,37 @@ +networks: + 1panel-network: + external: true + +services: + windows: + image: dockurr/windows:4.00 + container_name: ${CONTAINER_NAME} + labels: + createdBy: "Apps" + restart: always + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8006 + - ${PANEL_APP_PORT_REMOTE}:3389/tcp + - ${PANEL_APP_PORT_REMOTE}:3389/udp + devices: + - /dev/kvm:/dev/kvm + - /dev/dri:/dev/dri + # - /dev/nvidia0:/dev/nvidia0 + # - /dev/nvidiactl:/dev/nvidiactl + # - /dev/nvidia-modeset:/dev/nvidia-modeset + # - /dev/nvidia-nvswitchctl:/dev/nvidia-nvswitchctl + # - /dev/nvidia-uvm:/dev/nvidia-uvm + # - /dev/nvidia-uvm-tools:/dev/nvidia-uvm-tools + # - /dev/video11:/dev/video11 + env_file: + - /etc/1panel/envs/global.env + - ${ENV_FILE:-/etc/1panel/envs/default.env} + volumes: + - ${WINDOWS_STORAGE_ROOT_PATH}/storage:/storage + - ${WINDOWS_SHARE_ROOT_PATH}/share:/data + - ${WINDOWS_OEM_ROOT_PATH}/oem:/oem + environment: + - REGION=en-US + - KEYBOARD=en-US diff --git a/apps/windows/4.00/scripts/init.sh b/apps/windows/4.00/scripts/init.sh new file mode 100644 index 000000000..77b849120 --- /dev/null +++ b/apps/windows/4.00/scripts/init.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/windows/4.00/scripts/uninstall.sh b/apps/windows/4.00/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/apps/windows/4.00/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/windows/4.00/scripts/upgrade.sh b/apps/windows/4.00/scripts/upgrade.sh new file mode 100644 index 000000000..77b849120 --- /dev/null +++ b/apps/windows/4.00/scripts/upgrade.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/windows/README.md b/apps/windows/README.md new file mode 100644 index 000000000..0b957967b --- /dev/null +++ b/apps/windows/README.md @@ -0,0 +1,75 @@ +# Windows 系统 + +Docker 容器内的 Windows + +![Windows](https://file.lifebus.top/imgs/windows_cover.jpg) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +Microsoft Windows,或称Windows操作系统,是微软以图形用户界面为主推出的一系列专有商业软件操作系统。 +它于1985年问世,起初为运行于MS-DOS之下的桌面环境,其后续版本逐渐发展成为主要为个人电脑和服务器用户设计的操作系统,并最终获得了世界个人电脑操作系统的垄断地位。 + +## 特性 + ++ 国际标准下载器 ++ KVM 加速 ++ 网络浏览器 + +## 安装说明 + +由于需要下载系统镜像,安装过程的快慢取决于您的网络,请耐心等待。 + +## 常见问题 + +### kvm 模块加载失败 + +请检查是否开启了虚拟化功能,或者在 BIOS 中开启虚拟化功能。 + +### 挂载更多磁盘 + +请修改 docker-compose.yml 参数配置 + +```yml +environment: + DISK2_SIZE: "32G" + DISK3_SIZE: "64G" +volumes: + - /home/example:/storage2 + - /mnt/data/example:/storage3 +``` + +### 如何直通磁盘 + +请修改 docker-compose.yml 参数配置 + +```yml +devices: + - /dev/sdb:/disk1 + - /dev/sdc:/disk2 +``` + +### 如何通过 USB 设备进行数据传输 + +请修改 docker-compose.yml 参数配置 + +```yml +environment: + ARGUMENTS: "-device usb-host,vendorid=0x1234,productid=0x1234" +devices: + - /dev/bus/usb +``` + +### 如何使用 RDP 进行连接 + +通过网页访问,一般情况下适用于系统安装过程中使用,因为其画质较低,且没有音频或剪贴板等功能。 + +您可以使用任何 Microsoft 远程桌面客户端连接到容器的 IP 地址,使用用户名 Docker ,并且密码留空。 + +安卓设备可以从应用商店下载 RDP 客户端,iOS 设备则可在苹果商店找到对应的客户端。Linux 用户可以使用 FreeRDP,而 Windows +用户只需在搜索框中输入 mstsc 即可。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/apps/windows/data.yml b/apps/windows/data.yml new file mode 100644 index 000000000..929111279 --- /dev/null +++ b/apps/windows/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: windows + name: Windows 系统 + tags: + - WebSite + - Local + shortDescZh: Docker 容器内的 Windows + shortDescEn: Windows in Docker container + type: website + crossVersionUpdate: true + limit: 0 + website: https://www.microsoft.com/ + github: https://github.com/dockur/windows/ + document: https://www.microsoft.com/ diff --git a/apps/windows/logo.png b/apps/windows/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..084b2ec375f4acbe9cc39a5c25cbf6540ca69300 GIT binary patch literal 15096 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 Z?|&gXe