人生最重要的不是努力,而是方向

0%

NFS是基于Sun的RPC(远程过程调用)构建的分布式文件系统协议。NFS在LAN网络环境中通常用于共享目录和文件,并且在许多网络附加存储(NAS)系统和云存储后端中也都采用了NFS。在典型的NFS部署中,NFS服务器将其本地文件系统的一部分导出为NFS共享,并且一个或多个远程NFS客户端在其自己的文件系统中安装和访问导出的共享。

这是在NFS服务器和客户端(都在CentOS 7上运行)之间设置NFS共享的方法

准备

在本教程中,将使用两台CentOS 7主机,一台用于NFS服务器,另一台用于NFS客户端。NFS中的许多读/写操作都涉及访问和更新时间戳,但是NFS本身没有任何机制可以在服务器和客户端之间同步时间。为了可靠地进行NFS操作,因此强烈建议在每台NFS服务器和客户端主机上设置NTP,以避免它们之间的时钟偏差。

在CentOS 7上设置NFS服务器

使用yum安装必要的NFS守护程序和实用程序:

1
sudo yum install nfs-utils

接下来,准备要通过NFS导出的文件夹。在此示例中,我将导出本地文件系统的/var/nfs

1
2
mkdir /var/nfs
chmod 777 /var/nfs

现在,使用文本编辑器打开/etc/exports,并使用以下其他导出选项指定该文件夹。

1
/var/nfs 192.168.1.0/24(rw,sync,no_subtree_check)

使用的导出选项指示以下内容。显然,您可以自定义选项以满足您的要求。

  • 192.168.1.0/24:只有IP地址为192.168.1.0/24的NFS客户端才能访问NFS共享。其他形式的ACL(例如192.168.1.175,*.imgl.net)也是可能的。
  • rw:此选项允许NFS客户端在共享上执行读取和写入操作。
  • sync:此选项使NFS服务器仅在成功将写入提交到存储后才回复写入请求,从而以性能为代价提高了可靠性。
  • no_subtree_check:此选项禁用子树检查,该子树检查可验证访问的文件是否具有正确的权限并属于导出的树。禁用子树检查可以以安全为代价提高性能。

注:使用*.imgl.net的目的是想建立域名imgl.net解析的服务器都可以访问的效果。

接下来,启动必要的服务并将其设置为在启动时自动启动。

1
2
3
4
systemctl enable rpcbind
systemctl start rpcbind
systemctl enable nfs-server
systemctl start nfs-server

如果修改/etc/exports,则需要通过运行以下命令来激活更改:

1
exportfs -a

最后,您应该按照以下步骤在默认防火墙中打开NFS服务使用的端口。

1
2
3
4
firewall-cmd --zone=public --add-service=nfs --permanent
firewall-cmd --zone=public --add-service=rpc-bind --permanent
firewall-cmd --zone=public --add-service=mountd --permanent
firewall-cmd --reload

要检查文件夹是否成功导出,请运行:

1
exportfs

/var/nfs 192.168.1.0/24

输出应指示将哪些文件夹(例如/var/nfs)导出到谁(例如:192.168.1.0/24)。

在CentOS 7上设置NFS客户端

现在,让我们看看如何设置远程NFS客户端以装载和访问导出的NFS共享。

在单独的CentOS 7主机上,安装必要的NFS守护程序和实用程序。

1
yum install nfs-utils

为NFS共享准备本地安装点。

1
mkdir /mnt/nfs

继续,如下所示,使用mount命令安装远程NFS共享。在此示例中,NFS服务器的IP地址为192.168.1.174。

1
mount -t nfs 192.168.1.174:/var/nfs /mnt/nfs

直接执行mount命令

df命令应显示从NFS共享额外的存储空间。

要卸载NFS共享,请使用umount命令。

1
umount /mnt/nfs

如果要在引导时自动安装远程NFS共享,则可以在/etc/fstab中添加以下行。

1
vi /etc/fstab

192.168.1.174:/var/nfs /mnt/nfs nfs defaults 0 0

请注意,已挂载的NFS共享会将由根创建的任何文件的所有权更改为nfsnobody用户。这是一个称为root squash的NFS功能,出于安全原因,从本质上减少了远程超级用户的访问权限。您可以使用no_root_squash导出选项禁用root squash ,但不建议这样做,因为任何远程root用户都可能以root特权不小心弄乱了共享文件夹。

尽管CentOS / RHEL平台维护着几个正式的存储库(e.g., base, updates, contrib),但是在软件覆盖范围和发行周期方面却缺乏。为了弥合可用资源与常用需求之间的鸿沟,创建了第三方存储库来满足社区对常用软件包的需求。

用于CentOS / RHEL的此类第三方软件存储库之一是ELRepo(社区企业Linux存储库)。由于具有很高的维护质量,ELRepo实际上是少数“经过社区批准”的存储库之一。

什么是ELRepo储存库?

ELRepo是众所周知的CentOS / RHEL的硬件/设备驱动程序和主线内核映像的存储库。该存储库包含大量用于文件系统,图形卡,网卡,声卡,网络摄像头和显示器的最新驱动程序。如果您想增强基于CentOS / RHEL的企业Linux环境中各种硬件设备的使用体验,建议启用ELRepo存储库。ELRepo包含以下四个通道,您可以分别启用它们。

  • elrepo:提供CentOS / RHEL发行版中未包含的软件包。默认启用。
  • elrepo-kernel:提供LTS内核和最新的稳定内核。默认禁用。
  • elrepo-extras:提供替换或更新CentOS / RHEL发行版的软件包。默认禁用。
  • elrepo-testing:提供将很快移至elrepo的软件包。默认禁用。

在CentOS / RHEL上启用ELRepo存储库

要设置ELRepo存储库,您需要导入其官方GPG密钥,然后按如下所示安装ELRepo RPM。
在CentOS / RHEL 7上:

1
2
sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org  
sudo rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm

检查ELRepo存储库的内容

1
yum repolist enabled

但是个别时候,你需要显示指定使用ELRepo源,如下:

1
sudo yum --enablerepo=elrepo-kernel install kernel-ml

升级内核

开启 BBR 要求 4.10 以上版本 Linux 内核,可使用如下命令查看当前内核版本:

uname -r

可以得到类似如下的结果:

3.10.0-1062.el7.x86_64

如果当前内核版本低于 4.10,可使用 ELRepo 源更新:

sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org    
sudo rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
sudo yum --enablerepo=elrepo-kernel install kernel-ml -y

安装完成后,查看已安装的内核:

sudo rpm -qa | grep kernel

得到结果如下:

kernel-3.10.0-1062.el7.x86_64
kernel-tools-3.10.0-1062.el7.x86_64
kernel-tools-libs-3.10.0-1062.el7.x86_64
kernel-ml-5.3.8-1.el7.elrepo.x86_64

在输出中看到 kernel-ml-5.3.8-1.el7.elrepo.x86_64 类似的内容,表示安装成功。

修改grub2引导
执行:

sudo egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'

会得到如下结果:

CentOS Linux (5.3.8-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (3.10.0-1062.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-49749ad159a449e69c079ae4285e2036) 7 (Core)

由于序号从0开始,设置默认启动项为0并重启系统:

sudo grub2-set-default 0

最后,重新生成GRUB配置

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

有如下提示:

Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.3.8-1.el7.elrepo.x86_64
Found initrd image: /boot/initramfs-5.3.8-1.el7.elrepo.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-1062.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1062.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-49749ad159a449e69c079ae4285e2036
Found initrd image: /boot/initramfs-0-rescue-49749ad159a449e69c079ae4285e2036.img
done

重启

reboot

重启完成后,重新登录并重新运行uname命令来确认你是否使用了正确的内核:

uname -r

得到如下结果则升级成功:

5.3.8-1.el7.elrepo.x86_64

删除旧内核

yum -y remove kernel* #说明:删除旧内核的目的是为了防止 yum 更新旧版内核之后覆盖了 grub 默认启动项

如果需要安装相同内核版本的devel或者headerstools等,请运行如下命令:

sudo yum --enablerepo=elrepo-kernel list | grep kernel-ml

结果如下显示:

kernel-ml.x86_64                        5.3.8-1.el7.elrepo             @elrepo-kernel
kernel-ml-devel.x86_64                  5.3.8-1.el7.elrepo             elrepo-kernel
kernel-ml-doc.noarch                    5.3.8-1.el7.elrepo             elrepo-kernel
kernel-ml-headers.x86_64                5.3.8-1.el7.elrepo             elrepo-kernel
kernel-ml-tools.x86_64                  5.3.8-1.el7.elrepo             elrepo-kernel
kernel-ml-tools-libs.x86_64             5.3.8-1.el7.elrepo             elrepo-kernel
kernel-ml-tools-libs-devel.x86_64       5.3.8-1.el7.elrepo             elrepo-kernel

其中kernel-ml我们已经安装过了,下面执行:

sudo yum --enablerepo=elrepo-kernel install kernel-ml*

会自动滤过我们安装后的内核,转而全装其他组件。

本教程以ubuntu18.04为例

修改 ubuntu 默认源站为清华大学开源镜像站,操作如下:

Ubuntu 的软件源配置文件是 /etc/apt/sources.list。将系统自带的该文件做个备份,将该文件替换为下面内容,即可使用 TUNA 的软件源镜像。

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse

deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse

deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse

deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse

deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse

安装nginx

1.执行安装命令

1
sudo apt install nginx

2.启动

1
sudo systemctl start nginx

3.验证状态

1
sudo systemctl status nginx

如下图,代表安装启动成功。

4.设置开机启动

1
sudo systemctl enable nginx

安装php

ubuntu 18.04 源站更新了最新的php7.2,开始安装.

1.安装php7.2

1
sudo apt install php7.2 php7.2-fpm

2.启动

1
sudo systemctl start php7.2-fpm

3.验证状态

1
sudo systemctl status php7.2-fpm

如下图,代表安装启动成功。

4.设置开机启动

1
sudo systemctl enable php7.2-fpm

安装mysql-server

ubuntu 18.04 源站更新了最新的mysql5.7,开始安装.我们可以使用如下命令得到如图所示的包名,方便我们安装.

1
sudo apt search mysql-server

1.安装mysql-server5.7

1
sudo apt install mysql-server

2.启动

1
sudo systemctl start mysql

3.验证状态

1
sudo systemctl status mysql

如下图,代表安装启动成功。

4.设置开机启动

1
sudo systemctl enable mysql

5.安全设置

1
mysql_secure_installation

如下:

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No: #这里直接回车
Please set the password for root here.

New password: #这里设置root密码

Re-enter new password: #这里重复输入
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y #输入y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y #输入y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y #输入y
- Dropping test database...
Success.

- Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y #输入y
Success.

All done!

到这一步 nginx php mysql 安装完毕.

设置nginx和php 反向代理

在ubuntu18.04中,nginx的默认站点配置文件在/etc/nginx/sites-enabled/,一次执行如下命令:

1
cd /etc/nginx/sites-enabled/
1
vi default

找到下图部分

修改如下:

# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
    include snippets/fastcgi-php.conf;
#
#   # With php-fpm (or other unix sockets):
    fastcgi_pass unix:/run/php/php7.2-fpm.sock;
#   # With php-cgi (or other tcp sockets):
#   fastcgi_pass 127.0.0.1:9000;
}

保存后,执行命令使nginx生效:

1
systemctl reload nginx

/var/www/html创建index.php,输入内容:

1
2
<?php
phpinfo();

最后请求http://IP/index.php ,如下图所示,即表示环境配置成功!

一、什么是Portainer?

Portainer是Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型单位对容器管理的全部需求。

二、下载Portainer镜像

环境用的还是linux的环境,在linux安装Portainer来管理docker集群,执行命令:

1
docker search portainer #查询当前有哪些Portainer镜像
1
docker pull portainer/portainer #下载镜像

三、运行Portainer

如果仅有一个docker宿主机,则可使用单机版运行,运行以下命令就可以启动了:

1
2
3
4
5
docker run -d -p 9000:9000 \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
--name prtainer-test \
portainer/portainer

该语句用宿主机9000端口关联容器中的9000端口,并给容器起名为portainer-test。启动成功后,使用该机器IP:PORT即可访问Portainer。

首次登陆需要注册用户,给admin用户设置密码:

前提条件

Docker 要求 linux 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的 linux 版本是否支持 Docker。

通过 uname -r 命令查看你当前的内核版本

uname -r

使用脚本安装 Docker

wget -qO- https://get.docker.com/ | sh

启动docker 后台服务

systemctl start docker #centos6使用 service docker start 

测试运行hello-world

docker run hello-world

镜像加速

鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决,我使用的是网易的镜像地址:http://hub-mirror.c.163.com。

新版的 Docker 使用 /etc/docker/daemon.json(Linux) 或者 %programdata%\docker\config\daemon.json(Windows) 来配置 Daemon。

请在该配置文件中加入(没有该文件的话,请先建一个):

{
    "registry-mirrors": ["http://hub-mirror.c.163.com"]
}

在linux下一般用scp这个命令来通过ssh传输文件。

1、从服务器上下载文件

scp username@servername:/path/filename /var/www/local_dir(本地目录)

例如

scp root@192.168.0.101:/var/www/test.txt  #把192.168.0.101上的/var/www/test.txt 的文件下载到/var/www/local_dir(本地目录)

2、上传本地文件到服务器

scp /path/filename username@servername:/path

例如

scp /var/www/test.php  root@192.168.0.101:/var/www/  #把本机/var/www/目录下的test.php文件上传到192.168.0.101这台服务器上的/var/www/目录中

3、从服务器下载整个目录

scp -r username@servername:/var/www/remote_dir/(远程目录) /var/www/local_dir(本地目录)

例如:

scp -r root@192.168.0.101:/var/www/test  /var/www/  

4、上传目录到服务器

scp  -r local_dir username@servername:remote_dir

例如:

scp -r test  root@192.168.0.101:/var/www/   #把当前目录下的test目录上传到服务器的/var/www/ 目录

如过有端口的话,可已使用 -P 后面跟上端口,比如:

scp -r -P 端口号 root@192.168.0.101:/var/www/test  /var/www/  

注:目标服务器要开启写入权限。

在使用域用户登陆的windows系统时,常常需要在电脑上安装软件,累死如下图所示的情况,我想在系统中安装迅雷极速版

如过我们没有对操作系统进行配置上的修改,默认情况下如上图所指,安装包上面会有一个盾牌,熟悉操作系统的都知道,像这种安装包的意思就是我们需要进行管理员权限授权才能运行。

有两种解决方法,第一种就是切换到域用户本机的管理员账户下,在管理员账户下进行安装,然后再切换回域用户,这样就没有问题了,这样做是建立在本机管理员账户没有被禁用的情况,像域用户主机我们在登陆域用户以后,有些时候管理员账户默认是被禁用的,如果我们再使用这个方法是不可行的。并且这个过程切换麻烦点,下面介绍一个便捷的方法。

快捷方法

如下图,我们直接在域用户模式下直接运行安装程序,提示我们输入账户和密码

看到这个界面很多人第一时间想到的就是输入本机的账户和管理员密码,其实不对,这里要求我们输入的是域服务器的管理员账户和密码,下面我就刚才的情况输入我的域服务器管理员账户和密码进行测试下

如上面两幅图所示,通过输入域服务器管理员账户和密码,我成功运行了安装包,并且在安装以后成功在域用户下运行了迅雷极速版。

在配置环境以前, 有两个知识点我们需要了解, 一句话概括就是说: 你需要知道nginx和php是如何配合的, 进而如何将php动态网页转给客户端浏览器

  • fastcgi
  • nginx反向代理

FastCGI

FastCGI是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口。多数流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等。同时,FastCGI也被许多脚本语言支持,其中就有PHP。

FastCGI是从CGI发展改进而来的。

CGI工作原理和缺点:
每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后将结果返回给HTTP服务器。

这在处理高并发访问时几乎是不可用的。另外传统的CGI接口方式安全性也很差,现在已经很少使用了。

FastCGI工作原理和优点:
FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。

这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

另外fastCGI程序与CGI程序与服务器的交互方式也不同
CGI程序通过环境变量、命令行、标准输入输出进行交互,因此CGI程序进程必须与服务器进程在同一台物理计算机上,而fastCGI程序与服务器进程通过网络连接交互,因此fastCGI程序可以分布在不同的计算机上,这不但可以提高性能,同时也提高了系统的扩展能力。

nginx反向代理

为什么我们要讲反向代理, 是因为Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用, 而这个调用过程就是通过反向代理实现的。FastCGI接口在Linux下是socket(这个socket可以是文件socket,也可以是ip socket)。如下图:

如图所示, php-cgi.exe在服务器内部是以服务的形式, 通过9000端口与nginx进行通讯的, 中间过程是反向代理, 最后通过nginx返给客户端

下载多个php版本与运行nginx

先下载windows版本的web服务器nginx程序到电脑上 (这一步不做演示), 如下图中, 我这里下载的是最新版的 1.17.1 , 把nginx拷贝解压到 C:\nginx , 下面我们需要进行一点自定义配置,修改 conf/nginx.conf 创建两个server块级配置,具体如下:

server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            #fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi_params;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

server {
        listen       8080;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html2;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html2;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            root           html2;
            fastcgi_pass   127.0.0.1:9001;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            #fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi_params;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

说明一下,其实我们最需要更改的是两个部分,在第一个和第二个server中,我们把

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;#注意这里修改了
    #fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    include        fastcgi_params;
}

这一块#去掉,不同的在第二个server中,首先我们再nginx.exe同级目录中创建html2,然后将第二个server中全部的的 root html -> root html2 ,同样是把上面所示的那一部分中的#号去掉,并把 9000 改成 900180 改为 8080

然后打开cmd或者powershell ,执行命令

cd 
start nginx

或者直接执行

nginx

第一种情况是以后台进程的方式运行的,我们关掉命令窗口即可,nginx进程不会停止掉,但是如过你使用的是第二种,是以前台进程的方式运行,这时候你不能随意的关闭这个命令窗口,但是如过你想停止掉nginx进程,只需要关闭命令窗口即可,具体那种方式适合你,这个自己斟酌选择。

我们打开浏览器,输入 http://localhost , 就可以看到如上图所示,nginx服务进程已经启动了。

下面开始配置PHP,因为是多个版本,这里我门下在php5.6和php7.2两大主流版本。这里我们去php的官网(https://windows.php.net/download/)去下载, 如下图所示

下载64位或者32位根据自身系统需要,另外细心的你可能发现我为什么没有 Thread Safe 版本,是因为这个版本不适合我们今天所讲的东西,我摘了一下官网的解释,自己体会,看不懂的话,也没有关系,后期自行补脑。

官方解析:我选择哪个版本?

IIS
如果您使用PHP作为FastCGI与IIS,您应该使用PHP的非线程安全(NTS)版本。

Apache
请使用Apache Lounge提供的Apache版本。它们为x86和x64提供了Apache的VC14,VC15和VS16版本。我们使用他们的二进制文件来构建Apache SAPI。

使用Apache,您必须使用PHP的线程安全(TS)版本。

TS和NTS
TS指的是支持多线程的构建。NTS指的是仅单线程构建。TS二进制文件的用例涉及与作为模块加载到Web服务器中的多线程SAPI和PHP的交互。对于NTS二进制文件,广泛的用例是通过FastCGI协议与Web服务器交互,不使用多线程(但也使用CLI)。

至于5.6版本,我们需要到(https://windows.php.net/downloads/releases/archives/)这里去下在,可已通过浏览器搜索关键字 php-5.6.40-nts-Win32-VC11-x64 ,定位我们要下载的版本。

配置多个php版本

下载完成以后我们分别解压到 C盘C:\php-5.6.40-nts-Win32-VC11-x64C:\php-7.3.7-nts-Win32-VC15-x64 , 然后进入分别进入两个php版本相应的目录,找到下图所示的程序名称,[ 右键 ]->[ 发送到 ]->[ 桌面快捷方式 ],并将两个快捷方式重命名,最后[ 右键 ]->[ 属性 ]->[ 目标 ]这里追加 -b 127.0.0.1:9000 ,另一个改为 -b 127.0.0.1:9001 ,如下图所示,

并且将同目录下的 php.ini-development 重命名为 php.ini ,最后双击两个快捷方式运行。

如果出现图上所示的错误提示,说明我们缺少相应的c++运行时,因为windows下的php运行库是通过Vc++进行开发编译的,具体要下载哪个版本,我们可已通过php文件夹上的名字来判断,x64我们就需要64位的vc++,然后根据VC11是vc++2012, VC15是vc++2015, 去微软官方或者百度搜索下进行下载,这里不做演示。

启动php-cgi以后,最终结果是如下图所示的样子

最后我们再html和html2中,分别创建index.php,内容:

1
2
<php?
phpinfo();

然后保存。

最后我们在浏览器中输入 http://localhost/index.phphttp://localhost:8080/index.php , 如果能看到如下面两个图所示,就说明我们配置成功了。

注:本教程只讲述基本入门配置,另外需要优化的升级配置自行研究。

本安装教程在Windows server 2008 r2上测试通过, 其他windows服务器安装类似

第一步

我们需要把域服务器的ip地址设置成静态ip地址, 我这里的dns是虚拟机分配的, 正常使用过程用一般是我们内网的路由器ip, 常见的有 192.168.1.1 等等当然ip也是 192.168.1.* 号段的, 如下图:

第二步

为windows server服务器安装角色, 依次点击[ 开始 ]->[ 管理工具 ]->[ 服务管理器 ], 找到添加角色, 选择[ Active Directory ], 如下图, 中间有提示选择[ ], 然后一直下一步, 最后点击安装

第三步

安装完成以以后, 我们需要进行配置, 再次点击[ 开始 ]->[ 管理工具 ]->[ 服务管理器 ], 会看到如下界面, 我们点击图片中的划线部分

然后再次点击下图中所标记的地方

然后选择[ 在新林中新建域 ], 如果有下图的错误提示, 可以跟我一样做下处理, 首先是给administrator账户设置密码保护, 然后在系统中打开cmd或者powershell, 执行如下代码:

net user administrator /passwordreq:yes 

然后下一步要我们配置我们的域名是什么, 这点根据自己的情况输入, 比如我的是[ imgl.net ], 那么我就输入[ imgl.net ], 如下图:

然后我们选择[ windows server 2008 ]

然后紧接着还有一个我们依旧选择[ windows server 2008 ], 到达下面这个页面

默认是选中[ DNS 服务器 ]的, 这一个一定要勾选, 然后点击下一步, 中间它会检查dns配置, 等待, 喝茶

完事以后会抛出如下提示, 不要管它, 选择[ ]

然后到下面这个步骤, 我们不用更改这些东西, 默认就行

然后一路下一步, 到下面这个情况, 等待它配置完成即可.

最后点击完成即可, 如下图:

然后提示我们重启服务器, 点击重启即可.

第四步

如下图, 服务器重启以后我们发现之前配置的dns变成了 127.0.0.1 , 并且网络标志也出现了感叹号, 这点不用管他, 这是系统给我们设定的, 不要随意修改

创建域组织及用户

再次点击[ 开始 ]->[ 管理工具 ]->[ Active Directory 用户和计算机 ], 然后右键单击域名根部, 如图中划线的部分, 在弹出的菜单中选择[ 新建 ]->[ 组织单位 ]

在弹出的对话框中我们随便输入个名字, 我这里以[ 技术部 ]为例, 如下图:

创建组织这一步可已忽略

最后我们在技术部( 没有创建的可已直接在根部 )那里[ 右键 ]->[ 新建 ]->[ 用户 ], 然后可已根据需求录入信息, 我这里随便录了一个测试数据供参考

然后下一步, 如下图, 这一步必须输入密码, 可已根据需求选择[ 用户下次登录时需修改密码 ]

最后下一步完成

第五步

找一台客户机测试一下, 是否能够使用, 老样子, 我们需要配置一下客户机的ip地址, 在配置界面, 我们可以选择ip自动获取( 不建议 ), 但是dns需要我们手动配置, 如下图所示

值得注意的是, 在配置dns时, 我们需要把域服务器的ip加入到dns中, 如上图

然后我们[ 右击 ]->[ 我的电脑 ]->[ 属性 ], 然后点击下图中的所示的[ 更改设置 ]->[ 更改 ]->[ ], 输入我们刚才创建的 域名 , 最后单击[ 确认 ]

最后会提示我们输入我们刚才创建域用户, 如下图

输入完成后我们点击确认, 最后系统友好的欢迎了我们, 如下图

最后依次关闭, 然后提示 重启 , 我们 重启 即可, 重启以后会要求我们 Ctrl+Alt+Del , 如下图 , 我们点击切换用户, 输入我刚才创建的 zs 和密码, 最后Enter登陆

最后我们, 点击[ 开始 ]就能看到我们确实是用我们创建的域用户登陆了系统 , 自此以后系统默认要求我们登陆的用户就是我们创建的域用户了