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-developmentphp.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),选择 TCPUDPphp-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.exepython3.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 启用。下次重启后即可。

参考

作者:Yogile

出处:https://www.cnblogs.com/Yogile/p/18679869

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Yogile  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee
· 用 DeepSeek 给对象做个网站,她一定感动坏了
· .NET 8.0 + Linux 香橙派,实现高效的 IoT 数据采集与控制解决方案
· .NET中 泛型 + 依赖注入 的实现与应用
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up light_mode palette
选择主题