本文介绍如何通过阿里云的服务快速创建Sharepoint2016。

说明 本文示例由阿里云用户 肖伊 提供,仅供参考。

背景信息

  • 对象存储OSS

    海量、安全、低成本、高可靠的云存储服务,提供99.9999999999%(12个9)的数据可靠性。使用RESTful API,可以在互联网任何位置存储和访问。容量和处理能力可弹性扩展,并能提供多种可选择的存储类型,全面优化存储成本。

  • 资源编排ROS

    资源编排(Resource Orchestration)是一种简单易用的云计算资源管理及自动化运维服务。用户通过模板描述多个云计算资源的依赖关系及配置等,并自动完成所有资源的创建和配置,从而达到自动化部署及运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。

  • PowerShell

    PowerShell是Windows下的一种命令行外壳程序及环境脚本,用户可以编写.ps1脚本或利用.Net Framework进行脚本的编写和运行,与Linux下的.sh脚本类似。

  • Registry

    Windows注册表,本示例中用到了以下的KEY:

    HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon:

    AutoAdminLogon: 是否开启管理员自动登录,1: True 0: False

    DefaultUserName: 自动登录管理员的账号

    DefaultPassword: 自动登录管理员的密码

    在整个最佳实践当中,我们会组合使用阿里云的下列服务以完成整体工作:
    • 阿里云OSS:我们将使用该服务提供的存储能力,在通过本地网络下载SharePoint的安装文件后,在OSS上创建存储空间并保存安装文件,再以内网的形式提供给需要安装SharePoint的机器。
    • 阿里云资源编排ROS:我们将用到下文提到的ROS 模板,通过ROS自动实现从ECS创建到Sharepoint安装的整个过程。您只需在使用ROS 进行自动化安装前输入必要的参数即可。

配置步骤

  1. 新建 Bucket

    首先,在 OSS 中创建新的 Bucket,其中 Bucket ACL 建议设置为私有。

    OSS+ROS创建Sharepoint 2016_用户实践_对象存储 OSS 阿里云技术文档 第1张OSS+ROS创建Sharepoint 2016_用户实践_对象存储 OSS 阿里云技术文档 第2张

    Bucket 创建完成后,请从此处下载 img 文件,并存放至 OSS 中。

    OSS+ROS创建Sharepoint 2016_用户实践_对象存储 OSS 阿里云技术文档 第3张

    这里建议将 img 文件的读写权限设置成公共读。

    OSS+ROS创建Sharepoint 2016_用户实践_对象存储 OSS 阿里云技术文档 第4张

    该步骤完成后,我们可以获得一个阿里云提供的 URL 以访问该文件。

  2. 通过ROS新建资源栈

    ROS 以模板的形式申明资源(如 ECS 和 VPC)并配置资源之间的关系(如 ECS 属于哪个VPC),并支持在 ECS 部署结束后自动执行用户脚本。模板中定义的所有资源都属于一个栈,用户通过资源栈管理自己的云资源。

    1. 进入ROS管理控制台,单击 资源栈管理 > 新建资源栈,开始创建。OSS+ROS创建Sharepoint 2016_用户实践_对象存储 OSS 阿里云技术文档 第5张
    2. 在输入脚本页面当中,用户需要选择将脚本中所创建的机器部署到哪一个Region。OSS+ROS创建Sharepoint 2016_用户实践_对象存储 OSS 阿里云技术文档 第6张

      参考脚本如下:

      {
      "ROSTemplateFormatVersion": "2015-09-01",
      "Description": "One simple ECS instance and a security group. The user only needs to specify the image ID.",
      "Parameters": {
       "NewDomainNetbiosName": {
         "Type": "String",
         "Default": "ADXING"
       },
       "InternetMaxBandwidthOut": {
         "Type": "String",
         "Description": "Set internet output bandwidth of instance. Unit is Mbps(Mega bit per second). Range is [0,200]. Default is 1.While the property is not 0, public ip will be assigned for instance.  ",
         "MinLength": "1",
         "MaxLength": "41"
       },
       "ZoneId": {
         "Type": "String",
         "Description": "The available zone Id",
         "AllowedValues": [
           "cn-shenzhen-c"
         ]
       },
       "DomainName": {
         "Type": "String",
         "Default": "adxing.com"
       },
       "SPFarmAccountPassword": {
         "NoEcho": true,
         "Type": "String",
         "Default": "Banana#12345"
       },
       "SPISOImageURI": {
         "Type": "String",
         "AllowedPattern": "^(?i)(s3|http|https):\\/\\/.+",
         "Default": "http://sharepointbucket.oss-cn-shenzhen-internal.aliyuncs.com/officeserver.img"
       },
       "ImageId": {
         "Type": "String",
         "Description": "Image Id, represents the image resource to startup one ECS instance,, <a href='#/product/cn-shenzhen/list/imageList' target='_blank'>View image resources</a>",
         "Default": "win2012r2_64_dtc_17196_en-us_40G_alibase_20170915.vhd"
       },
       "SPFarmAccount": {
         "Type": "String",
         "Default": "spFarmAcc"
       },
       "InstanceType": {
         "Type": "String",
         "Description": "The instance type",
         "AllowedValues": [
           "ecs.c5.xlarge",
           "ecs.s1.small",
           "ecs.n4.small",
           "ecs.n4.large",
           "ecs.n4.xlarge",
           "ecs.mn4.small",
           "ecs.mn4.large",
           "ecs.mn4.xlarge",
           "ecs.n1.small",
           "ecs.n1.medium",
           "ecs.n1.large"
         ],
         "Default": "ecs.c5.xlarge"
       },
       "DomainAdminPassword": {
         "NoEcho": true,
         "Type": "String",
         "Default": "Banana#12345"
       },
       "DomainAdminUser": {
         "Type": "String",
         "Default": "spAdmin"
       },
       "Password": {
         "NoEcho": true,
         "Type": "String",
         "Default": "Banana12345"
       }
      },
      "Resources": {
       "WebServer": {
         "Type": "ALIYUN::ECS::Instance",
         "Properties": {
           "InternetMaxBandwidthOut": {
             "Ref": "InternetMaxBandwidthOut"
           },
           "UserData": {
             "Fn::Base64": {
               "Fn::Join": [
                 "",
                 [
                   "[powershell]\n",
                   "$webclient = New-Object System.Net.WebClient\n",
                   "$url = 'http://sharepointbucket.oss-cn-shenzhen.aliyuncs.com/ros/Archive.zip'\n",
                   "$file = 'C:/Archive.zip'\n",
                   "$webclient.DownloadFile($url,$file)\n",
                   "Expand-Archive -Path 'C:/Archive.zip' -DestinationPath 'C:/sp' -Force \n",
                   "$webclientSP = New-Object System.Net.WebClient\n",
                   "$officeserverfile = 'C:/officeserver.img'\n",
                   "$spURL = '",
                   {
                     "Ref": "SPISOImageURI"
                   },
                   "'\n",
                   "$webclientSP.DownloadFile($spURL,$officeserverfile)\n",
                   "[bat]\n",
                   "reg add 'HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon' /v AutoAdminLogon  /d 1 /f /reg:64\n",
                   "reg add 'HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon' /v DefaultUserName   /d administrator /f /reg:64 \n",
                   "reg add 'HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon' /v DefaultPassword   /d  ",
                   {
                     "Ref": "Password"
                   },
                   " /f /reg:64 \n",
                   "reg add 'HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce' /v Install /d 'powershell.exe -Command c:/sp/STEP1.ps1 ",
                   "-DomainName  ",
                   {
                     "Ref": "DomainName"
                   },
                   " -NewDomainNetbiosName  ",
                   {
                     "Ref": "NewDomainNetbiosName"
                   },
                   " -DomainAdminPassword  ",
                   {
                     "Ref": "DomainAdminPassword"
                   },
                   " -DomainAdminUser  ",
                   {
                     "Ref": "DomainAdminUser"
                   },
                   " -SPFarmAccount  ",
                   {
                     "Ref": "SPFarmAccount"
                   },
                   " -SPFarmAccountPassword  ",
                   {
                     "Ref": "SPFarmAccountPassword"
                   },
                   " ' /f /reg:64 \n",
                   "shutdown -r -t 2\n"
                 ]
               ]
             }
           },
           "SecurityGroupId": {
             "Ref": "SecurityGroup"
           },
           "ImageId": {
             "Ref": "ImageId"
           },
           "InstanceType": {
             "Ref": "InstanceType"
           },
           "Password": {
             "Ref": "Password"
           }
         }
       },
       "SecurityGroup": {
         "Type": "ALIYUN::ECS::SecurityGroup",
         "Properties": {
           "SecurityGroupIngress": [
             {
               "PortRange": "-1/-1",
               "Priority": 1,
               "SourceCidrIp": "0.0.0.0/0",
               "IpProtocol": "all",
               "NicType": "internet"
             }
           ],
           "SecurityGroupEgress": [
             {
               "PortRange": "-1/-1",
               "Priority": 1,
               "IpProtocol": "all",
               "DestCidrIp": "0.0.0.0/0",
               "NicType": "internet"
             }
           ]
         }
       }
      },
      "Outputs": {
       "InstanceId": {
         "Value": {
           "Fn::GetAtt": [
             "WebServer",
             "InstanceId"
           ]
         }
       },
       "PublicIp": {
         "Value": {
           "Fn::GetAtt": [
             "WebServer",
             "PublicIp"
           ]
         }
       },
       "SecurityGroupId": {
         "Value": {
           "Fn::GetAtt": [
             "SecurityGroup",
             "SecurityGroupId"
           ]
         }
       }
      }
      }
    3. 完成模版输入后,单击下一步,对资源栈进行参数配置。OSS+ROS创建Sharepoint 2016_用户实践_对象存储 OSS 阿里云技术文档 第7张

      需要配置的参数如下(关于参数的描述,请参考参数 ):

      ImageId:ECS 所使用的镜像,本示例中,我们使用 windows2012R2

      InternetMaxBandwidthOut:ECS 的出口带宽

      ZoneId:ECS 需要部署到的区域

      Password:ECS 的 Administrator 密码

      DomainName:示例中 Domain 的名称

      NewDomainNetbiosName:示例中的 NetbiosName

      DomainAdminPassword:Domain 管理员用户密码

      DomainAdminUser:Domain 用户名称

      SPFarmAccount:SharePoint 服务场管理员的账户名称

      SPFarmAccountPassword:SharePoint 服务场管理员的账户密码

      SPISOImageURI:SharePoint 的镜像地址,请使用将 img 文件上传至 OSS 后获取的URL

      InstanceType:ECS的规格。

    4. 模版创建完成后,在启动资源栈前输入参数内容。输入完成后,单击创建 按钮。ROS会根据脚本以及输入的参数开始创建资源。

      资源创建完成后,可以在资源栈管理列表当中看到相应的资源栈。

      OSS+ROS创建Sharepoint 2016_用户实践_对象存储 OSS 阿里云技术文档 第8张

      以上是整个执行流程中需要用到的参数文件。

  3. UserData 执行

    ROS 模板中 UserData 的执行分为五个过程,其中的四个过程是通过四个PS1文件执行完成的。各过程的描述如下:

    1. 通过 UserData 的方式对机器进行设定,使其在启动时下载 SharePoint 镜像,并启用自动登录。
    2. 安装 Domain 功能,并重启。
    3. 在新安装的 Domain 下创建用户,并安装 Sharepoint 所需要的模块及 MSSQL,并重启。
    4. 安装 SharePoint 服务并重启。
    5. 配置 SharePoint 服务。

    具体执行步骤如下:

    1. 机器首次启动后,系统将会下载 OSS 中的 SharePoint 文件,同时修改 Windows 的注册表,启用系统免密码自动登录。此外,系统还会设定在下一次启动时运行 Domain 的安装脚本。OSS+ROS创建Sharepoint 2016_用户实践_对象存储 OSS 阿里云技术文档 第9张
    2. SharePoint 文件下载完成后,系统将会重启,并且开始执行 Domain 的安装脚本。该脚本会对用户在 ROS 中设定的 Domain 进行配置。并将下一步需要执行的脚本写入注册表,等待下一次启动时运行。OSS+ROS创建Sharepoint 2016_用户实践_对象存储 OSS 阿里云技术文档 第10张OSS+ROS创建Sharepoint 2016_用户实践_对象存储 OSS 阿里云技术文档 第11张
    3. 创建用户并安装必要先决服务及软件。
      1. 系统将会根据用户在ROS当中设定的DomainAdminUserSPFarmAccount创建2个用户,分别用于管理 Domain 和 SP 服务器场。
      2. 开始安装以下内容:.NET Framework Feature, ‘Application Server’ role, ‘Web Server’ role, WAS Feature, 及 Windows Identity Foundation FeatureOSS+ROS创建Sharepoint 2016_用户实践_对象存储 OSS 阿里云技术文档 第12张
      3. 开始下载并安装 MS SQL SERVER EXPRESS 2012 版本(这里演示程序默认下载EXPRESS 版本的MSSQL)
        C:\SQLEXPR_x64_ENU.exe" /Q /IACCEPTSQLSERVERLICENSETERMS /ACTION=install  /ROLE=AllFeatures_WithDefaults  /INSTANCENAME=$($instanceName) /SQLSVCACCOUNT="$($serviceAccount)
      4. 关闭 IE Esc 选项,并离线下载和安装 SharePoint 2016 Preparation softer ware。因为某些原因,直接联网下载 Preparation softer ware 可能会失败,所以这里配置了脚本,使系统先下载文件,再进行安装。OSS+ROS创建Sharepoint 2016_用户实践_对象存储 OSS 阿里云技术文档 第13张OSS+ROS创建Sharepoint 2016_用户实践_对象存储 OSS 阿里云技术文档 第14张
    4. 当所有的先决服务和软件都安装成功后,脚本自动开始运行 SharePoint 的安装程序。安装程序会首先检查先决服务和软件是否安装完成。OSS+ROS创建Sharepoint 2016_用户实践_对象存储 OSS 阿里云技术文档 第15张

      如果所有的准备工作都已完成,系统开始正式安装 SharePoint。

      OSS+ROS创建Sharepoint 2016_用户实践_对象存储 OSS 阿里云技术文档 第16张OSS+ROS创建Sharepoint 2016_用户实践_对象存储 OSS 阿里云技术文档 第17张
    5. SharePoint 安装完成后,系统将进行更新,并开始进入下一个阶段,进行 SharePoint 的配置。OSS+ROS创建Sharepoint 2016_用户实践_对象存储 OSS 阿里云技术文档 第18张

      系统会在 MSSQL 中创建相应的数据库,并开放端口(9527)作为默认的管理端登录端口。

      OSS+ROS创建Sharepoint 2016_用户实践_对象存储 OSS 阿里云技术文档 第19张
    6. 配置过程完成后,我们可以打开http://localhost:9527/default.aspx进入 SharePoint 的管理站点。OSS+ROS创建Sharepoint 2016_用户实践_对象存储 OSS 阿里云技术文档 第20张

      在管理员站点当中,我们可以创建自己的 Web application。

      OSS+ROS创建Sharepoint 2016_用户实践_对象存储 OSS 阿里云技术文档 第21张

      在该网站集下,我们可以继续创建自己的站点。

      OSS+ROS创建Sharepoint 2016_用户实践_对象存储 OSS 阿里云技术文档 第22张OSS+ROS创建Sharepoint 2016_用户实践_对象存储 OSS 阿里云技术文档 第23张

      完成站点的创建后,我们就可以开始体验 SharePoint 上的功能了。

      OSS+ROS创建Sharepoint 2016_用户实践_对象存储 OSS 阿里云技术文档 第24张