一、安装虚拟机
使用 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
-
官网下载解压。
-
设置系统环境变量
PATH
,新增C:\Service\nginx-1.24.0\
。 -
下载 Github | RunHiddenConsole.exe 。
-
创建
nginx-start.bat
文件,备用开机自启动项目。@echo off C:\Service\nginx-1.24.0\nginx.exe
-
创建
nginx-stop.bat
文件,备用停止项目。C:\Service\nginx-1.24.0\nginx.exe -s stop
-
开放服务端口。
-
进入
控制面板\系统和安全\Windows Defender 防火墙
,确保防火墙打开。 -
在
高级设置 -> 入站规则
中,新建规则
。-
规则类型:
端口
-
应用:
TCP
-
特定本地端口
:80, 443, 1000-5000
(举例)
-
-
-
双击
nginx-start.bat
测试,访问http://localhost
。
三、安装 PHP
3.1 基本安装
-
安装 visual c++ 2017 (以上)
官网:https://learn.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redist?view=msvc-170 -
官网下载解压。
-
设置系统环境变量
PATH
,新增C:\Service\php-8.4.2-Win32-vs17-x64\
。 -
下载 RunHiddenConsole.exe 。
-
复制
php.ini-development
为php.ini
,并修改内容。cgi.fix_pathinfo=1
extension_dir = "ext"
cgi.force_redirect = 0
disable_functions =
,(=
后无参数)。extension=sqlite3
extension=zip
-
修改 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-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
-
创建
php-cgi-stop.bat
文件,备用停止项目,并复制到桌面。taskkill /f /im RunHiddenConsole.exe taskkill /f /im php-cgi.exe
-
在 NGINX
C:\Service\nginx-1.24.0\html
文件夹下创建index.php
文件,删除index.html
。<?php echo phpinfo(); ?>
-
双击运行
php-cgi-start.bat
测试,访问http://localhost
。
3.2 防护配置
在Windows环境下,Nginx不支持Unix Socket,所以无法直接实现不通过端口访问PHP - CGI。
要让PHP - CGI端口只提供给本机访问,可以通过以下几种方式来实现:
-
配置
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地址访问该端口。 -
使用防火墙限制访问。
通过 Windows 防火墙或其他防火墙软件,限制对
php-cgi.exe
端口的外部访问,只允许本地访问。以 Windows 防火墙为例:
-
打开
控制面板
,选择系统和安全
中的Windows Defender 防火墙
。点击
高级设置
,打开Windows Defender 防火墙与高级安全
。在左侧导航栏中,选择
入站规则
。点击
新建规则
,选择端口
,点击下一步
。指定要限制的端口号(如9000),选择
TCP
或UDP
(php-cgi.exe
通常使用TCP),点击下一步
。选择
阻止连接
,点击下一步
。在
配置文件
页面,根据需要选择适用的网络配置文件(如域
、私有
、公共
),点击下一步
。给规则命名,例如输入
限制 PHP-CGI 端口
,点击完成
。
这样设置后,外部网络将无法访问该端口,只有本机可以访问。
-
-
配置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
-
勾选
use admin privileges when installing py.exe
。当安装时使用管理员权限。
这是:当在 VS Code 上使用
PHP Server
可以执行exec()
调动 python 程序,但通过NGINX + PHP
环境下执行exec()
调动 python 程序失败(总是返回1
)的主要原因。 -
勾选
Add python.exe to PATH
。 -
选择
Customize installation
。 -
勾选
Install Python 3.12 for all users
。 -
自定义安装地址。
-
选择
Disable path length limit
。取消路径长度限制,Python 安装程序会修改系统的注册表,取消 260 个字符的路径长度限制。这样,Python 可以处理更长的路径,避免因路径过长而导致的错误。
-
安装完成测试
python -V
。 -
复制
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
服务。
七、疑难杂症
-
无法访问其他共享资源
运行
输入gpedit.msc
打开组策略编辑器
,计算机配置 -> 管理模板 -> 网络 -> Lanman工作站 -> 启用不安全的来宾登录
->启用
。 -
关闭
Ctrl+Alt+Delete
解锁屏幕功能。Windows 菜单搜索
本地安全策略
,在安全设置 -> 本地策略 -> 安全选项
中,设置交互式登录:无需按Ctrl+Alt+Del
启用。下次重启后即可。
参考
- Kimi.ai - 帮你看更大的世界 (现在 AI 真是厉害)。