Unraid 安装 WindowsServer2019 虚拟机及 NGINX、PHP、Python 环境

一、安装虚拟机

使用 Unraid 安装。

项目 值
初始 内存: 4096 MB
最大值 内存: 6144 MB
机器: i440fx-7.2
BIOS: OVMF
启用 USB 启动引导: No
Hyper-V: 是
USB 控制器: 2.0(EHCI)
操作系统安装 ISO: windows_server_2019.iso
操作系统安装光盘总线: SATA
VirtIO 驱动程序 ISO: /mnt/user/isos/virtio-win-0.1.240.iso
VirtIO 驱动程序光盘总线: SATA
主要 虚拟磁盘位置: 固态
主要 虚拟磁盘总线: VirtIO
主要 串口: vdisk1
启用虚拟控制台拷贝/黏贴: 是
网络资源: br0
网络模式: virtio-net

随后通过 VM Console(VNC) 启动,并在 VNC 中立即回车 Enter 加载 ISO 。否则进入 BIOS 命令行。

二、配置基础设置

  • 安装 virtio-win-guest-tools 。

  • 激活

    Windows Server 2019 Standard: N69G4-B89J2-4G8F4-WWYCC-J464C

    或者使用其他手段。

  • 配置 IPv4 内网地址。

  • 配置 IPv6 公网地址(参考我的其他文章)。

  • 加载系统更新。

  • 安装 Edge 浏览器。

    安装 VSCode 。

    安装 Office 套件。

  • 卸载 微软OfficePLUS 。

    卸载 OneDrive 。

三、安装 NGINX

  1. 官网下载解压。

  2. 设置系统环境变量 PATH ,新增 C:\Service\nginx-1.24.0\ 。

  3. 下载 Github | RunHiddenConsole.exe 。

  4. 创建 nginx-start.bat 文件,备用开机自启动项目。

    @echo off
    C:\Service\nginx-1.24.0\nginx.exe
    
  5. 创建 nginx-stop.bat 文件,备用停止项目。

    C:\Service\nginx-1.24.0\nginx.exe -s stop
    
  6. 开放服务端口。

    • 进入 控制面板\系统和安全\Windows Defender 防火墙 ,确保防火墙打开。

    • 在 高级设置 -> 入站规则 中,新建规则 。

      • 规则类型: 端口

      • 应用: TCP

      • 特定本地端口 : 80, 443, 1000-5000 (举例)

  7. 双击 nginx-start.bat 测试,访问 http://localhost 。

三、安装 PHP

3.1 基本安装

  1. 安装 visual c++ 2017 (以上)
    官网:https://learn.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redist?view=msvc-170

  2. 官网下载解压。

  3. 设置系统环境变量 PATH ,新增 C:\Service\php-8.4.2-Win32-vs17-x64\ 。

  4. 下载 RunHiddenConsole.exe 。

  5. 复制 php.ini-development 为 php.ini ,并修改内容。

    • cgi.fix_pathinfo=1
    • extension_dir = "ext"
    • cgi.force_redirect = 0
    • disable_functions = ,( = 后无参数)。
    • extension=sqlite3
    • extension=zip
  6. 修改 NGINX 配置文件 nginx.conf 。

    ······
    http {
        ······
        server {
            ······
            location / {
                root   html;
                index  index.php index.html index.htm;
            }
            ······
            location ~ \.php$ {
                root           html;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
            }
            ······
        }
    }
    
    

    其中, fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; 中 /scripts ,变为 $document_root 。

    如果要设置仅允许特定的 PHP 文件运行访问:

    location ~ .php$ {
       deny all;
    }
    
    
    # 上传链接
    location = /php/upload.php {
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
    
    # 下载链接
    location = /php/download.php {
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
    
  7. 创建 php-cgi-start.bat 文件,备用开机自启动项目 ,并复制到桌面。

    C:\Service\php-8.4.2-Win32-vs17-x64\RunHiddenConsole.exe /l /r C:\Service\php-8.4.2-Win32-vs17-x64\php-cgi.exe -b 127.0.0.1:9000 -c C:\Service\php-8.4.2-Win32-vs17-x64\php.ini
    
  8. 创建 php-cgi-stop.bat 文件,备用停止项目,并复制到桌面。

    taskkill /f /im RunHiddenConsole.exe
    taskkill /f /im php-cgi.exe
    
  9. 在 NGINX C:\Service\nginx-1.24.0\html 文件夹下创建 index.php 文件,删除 index.html。

    <?php
    echo phpinfo();
    ?>
    
  10. 双击运行 php-cgi-start.bat 测试,访问 http://localhost 。

3.2 防护配置

在Windows环境下,Nginx不支持Unix Socket,所以无法直接实现不通过端口访问PHP - CGI。

要让PHP - CGI端口只提供给本机访问,可以通过以下几种方式来实现:

  1. 配置 php-cgi.exe 监听本地地址。

    在启动 php-cgi.exe 时,指定其只监听本地地址 127.0.0.1 ,这样外部网络就无法直接访问该端口。

    启动命令示例:

    php-cgi.exe -b 127.0.0.1:9000 -c 你的php解压目录\php.ini
    

    这里的 -b 127.0.0.1:9000 参数指定了 php-cgi.exe 绑定的地址和端口,只绑定在本地地址 127.0.0.1 上,外部网络无法通过其他IP地址访问该端口。

  2. 使用防火墙限制访问。

    通过 Windows 防火墙或其他防火墙软件,限制对 php-cgi.exe 端口的外部访问,只允许本地访问。

    以 Windows 防火墙为例:

    • 打开 控制面板 ,选择 系统和安全 中的 Windows Defender 防火墙 。

      点击 高级设置 ,打开 Windows Defender 防火墙与高级安全 。

      在左侧导航栏中,选择 入站规则 。

      点击 新建规则 ,选择 端口 ,点击 下一步 。

      指定要限制的端口号(如9000),选择 TCP 或 UDP ( php-cgi.exe 通常使用TCP),点击 下一步 。

      选择 阻止连接 ,点击 下一步 。

      在 配置文件 页面,根据需要选择适用的网络配置文件(如 域、私有、公共),点击 下一步 。

      给规则命名,例如输入 限制 PHP-CGI 端口 ,点击 完成 。

    这样设置后,外部网络将无法访问该端口,只有本机可以访问。

  3. 配置Nginx限制访问

    虽然这种方法主要是限制对Nginx端口的访问,但也可以间接保护PHP - CGI端口,因为Nginx是PHP - CGI的前端代理。

    在Nginx的配置文件中,可以使用allow和deny指令来限制对特定路径或服务的访问。例如,在nginx.conf文件中,可以添加以下配置:

    location / {
        allow 127.0.0.1;  # 允许本地访问
        deny all;         # 拒绝其他所有访问
        ...
    }
    

    这样配置后,只有来自本地的请求可以访问Nginx提供的服务,包括对PHP - CGI的请求。不过,这种方法主要是限制对Nginx层面的访问,对于直接访问PHP - CGI端口的情况,还是需要结合上述其他方法来实现更全面的保护。

四、安装 Python

4.1 配置 Python

  1. 勾选 use admin privileges when installing py.exe 。

    当安装时使用管理员权限。

    这是:当在 VS Code 上使用 PHP Server 可以执行 exec() 调动 python 程序,但通过 NGINX + PHP 环境下执行 exec() 调动 python 程序失败(总是返回 1)的主要原因。

  2. 勾选 Add python.exe to PATH 。

  3. 选择 Customize installation 。

  4. 勾选 Install Python 3.12 for all users 。

  5. 自定义安装地址。

  6. 选择 Disable path length limit 。

    取消路径长度限制,Python 安装程序会修改系统的注册表,取消 260 个字符的路径长度限制。这样,Python 可以处理更长的路径,避免因路径过长而导致的错误。

  7. 安装完成测试 python -V。

  8. 复制 python.exe 为 python3.exe 以统一支持 python3 命令。

4.2 配置 pip

在Windows Server 2019上,将pip的源更换为国内源可以加快Python包的下载速度。以下是几种常见的国内源以及更换源的方法:

常见的国内源

清华大学:https://pypi.tuna.tsinghua.edu.cn/simple
中国科技大学:https://pypi.mirrors.ustc.edu.cn/simple/
阿里云:https://mirrors.aliyun.com/pypi/simple/
中国科学院:https://pypi.mirrors.opencas.cn/simple/
华为云:https://mirrors.huaweicloud.com/pypi/simple/
网易:https://pypi.163.com/simple/
南京大学:https://pypi.nju.edu.cn/simple/

临时使用国内源

在使用pip命令时,可以通过-i参数临时指定国内源。例如,使用清华大学的源安装xlwings:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xlwings

永久更换国内源

要永久更换国内源,可以修改pip的配置文件。pip的配置文件通常位于用户目录下的.pip文件夹中,文件名为 pip.conf (Windows 系统中为 pip.ini )。如果该文件夹或文件不存在,可以手动创建。

  • 创建配置文件

    打开命令提示符(CMD)。

    输入以下命令创建.pip文件夹(如果不存在):

    mkdir %APPDATA%\pip
    

    使用文本编辑器(如记事本)创建pip.ini文件:

    notepad %APPDATA%\pip\pip.ini
    
  • 编辑配置文件

    在pip.ini文件中,添加以下内容(以清华大学源为例):

    [global]
    index-url = https://pypi.tuna.tsinghua.edu.cn/simple
    

    保存并关闭文件。

  • 验证配置

    为了验证配置是否成功,可以尝试安装一个包:

    pip install xlwings
    

    如果配置成功,pip将从指定的国内源下载包。

  • 其他常用命令

    查看当前配置

    pip config list
    

    查看帮助信息

    pip help
    

通过以上步骤,你可以将pip的源永久更换为国内源,从而加快Python包的下载速度。

常用项目依赖

pip install xlwings python-docx docx2pdf 

五、开机启动设置

Windows 菜单搜索 任务计划, 打开 任务计划程序 。

在 任务计划程序(本地) -> 任务计划程序库 创建 新文件夹 Web 。

在 Web 下创建基本任务 NGINX Server ,触发器选择 计算机启动时 ,操作选择 启动程序 ,选择 NGINX 脚本 C:\Service\nginx-1.24.0\nginx-start.bat 。

创建完成后,双击基本任务 NGINX Server ,打开 NGINX Server 属性 。

在 安全选项 中,设置使用用户账户 Administrator ,勾选 不管用户是否登录都要运行 ,不勾选 不存储密码······ ,勾选 使用最高权限运行 。

六、重启电脑测试

电脑重启后,NGINX 服务应该已启动。

因 PHP 调动 Python 程序的权限异常,故手动通过桌面 php-cgi-start.bat 启动 php-cgi 服务。

七、疑难杂症

  1. 无法访问其他共享资源

    运行 输入 gpedit.msc 打开 组策略编辑器 ,计算机配置 -> 管理模板 -> 网络 -> Lanman工作站 -> 启用不安全的来宾登录 -> 启用 。

  2. 关闭 Ctrl+Alt+Delete 解锁屏幕功能。

    Windows 菜单搜索 本地安全策略 ,在 安全设置 -> 本地策略 -> 安全选项 中,设置 交互式登录:无需按Ctrl+Alt+Del 启用。下次重启后即可。

参考

posted @ 2025-01-19 19:55  Yogile  阅读(620)  评论(0)    收藏  举报