搭建基于SQL Server vNext和PHP7的LNMP
本文最后更新于 2710 天前,其中的信息可能已经有所发展或是发生改变。

前言

其实 SQL Server 2016 本身已经非常的划时代了,是一个非常强大的关系型数据库,不过微软为了更佳适应云时代,因此推出了基于 SQL Server 2016 的 SQL Server vNext,支持在 Windows 、Linux 和 Docker 容器的部署,对云计算的弹性伸缩更好的适应,可以显着降低成本、提高性能,以及在不添加更多硬件的情况下轻松扩展和部署额外存储和计算资源的能力。更多的特性可以在 MSDN 查看。

这里介绍一下如何在  Ubuntu 16.04 安装 Nginx + PHP 7.0 + SQL Server vNext 安装 phpBB。

提醒1:安装 SQL Server vNext 在 Linux 平台至少需要 3.25G内存,使用 Docker 容器则至少需要 4G内存,最高不可大于256G。RHEL 系统支持XFS 或 EXT4 两种文件系统,Ubuntu 则只支持 EXT4 一种文件系统。

提醒2:SQL Server vNext 虽然提供了 Linux 的支持,但依旧是一个闭源软件,且商业用途需要购买授权。

安装 SQL Server vNext

软件源(推荐)

使用微软的软件源可以获得及时的更新,但是国内的速度非常不理想,也期待有相关组织提供相关国内镜像。

一、安装密钥

curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -

二、下载库文件并更新软件源

curl https://packages.microsoft.com/config/ubuntu/16.04/mssql-server.list | sudo tee /etc/apt/sources.list.d/mssql-server.list
apt-get update

三、安装 SQL Server

apt-get install -y mssql-server

软件包安装

因为软件源的速度问题,在国内如果真的忍不了那个下载速度,我们还可以用二进制包安装。

版本下载地址
Debian package14.0.1.246-6mssql-server 14.0.1.246-6 Engine Debian package
mssql-server 14.0.1.246-6 High Availability Debian package

例如我安装的是 mssql-server 14.0.1.246-6 Engine Debian package,那么运行:

apt-get install libc++1 libjemalloc1 resource-agents
curl https://packages.microsoft.com/ubuntu/16.04/mssql-server/pool/main/m/mssql-server/mssql-server_14.0.1.246-6_amd64.deb
curl https://packages.microsoft.com/ubuntu/16.04/mssql-server/pool/main/m/mssql-server-ha/mssql-server-ha_14.0.1.246-6_amd64.deb
dpkg -i mssql-server_14.0.1.246-6_amd64.deb mssql-server-ha_14.0.1.246-6_amd64.deb

初始配置

无论是软件源还是软件包,安装好后都会出现:

+-------------------------------------------------------------------+
| Please run /opt/mssql/bin/sqlservr-setup to complete the setup of |
| Microsoft(R) SQL Server(R).                                       |
+-------------------------------------------------------------------+

让我们运行 /opt/mssql/bin/sqlservr-setup ,类似 MySQL 的 mysql_secure_installation

root@ivmm-MF8-biz/home/ivmm# /opt/mssql/bin/sqlservr-setup
Microsoft(R) SQL Server(R) Setup

You can abort setup at anytime by pressing Ctrl-C. Start this program
with the --help option for information about running it in unattended
mode.

Please enter a password for the system administrator (SA) account: 输入管理员密码
Please confirm the password for the system administrator (SA) account: 再次输入

Setting system administrator (SA) account password...

Do you wish to start the SQL Server service now? [y/n]: 输入 y,以启动 SQL Server
Do you wish to enable SQL Server to start on boot? [y/n]: 输入y,设置开机启动

Setup completed successfully. 搞定了~~

安装 SQL Server tools

这里就不详细介绍了

curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-tools.list
exit
apt-get update
apt-get install mssql-tools

安装 LEMP 环境

讲道理,Linux + Nginx + MSSQL + PHP 貌似还是 LEMP 哈哈~

安装软件

apt-get install nginx php-fpm php-mysql php-curl php-gd php-mbstring php-mcrypt php-xml php-xmlrpc php-zip -y

配置

安装完成后,编辑 /etc/php/7.0/fpm/php.ini 替换 ;cgi.fix_pathinfo=1cgi.fix_pathinfo=0

vim /etc/php/7.0/fpm/php.ini

直接输入

:%s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g

然后按 ESC 再按 :wq 再按回车保存并退出

重启 PHP7.0-fpm

systemctl restart php7.0-fpm

我们开始编辑 Nginx 的默认配置文件 /etc/nginx/sites-available/default

vim /etc/nginx/sites-available/default

输入或编辑以下内容

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index index.php index.html index.htm;

#默认第一个域名,可以替换 _ 为 example.com 或不作处理
    server_name _;

    location / {
        try_files $uri $uri/ =404;
    }

#开启 PHP7.0-fpm 模式
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

然后重启 Nginx

nginx -s reload

默认的目录为: /var/www/html

安装数据库连接拓展

sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/mssql-ubuntu-xenial-release/ xenial main" > /etc/apt/sources.list.d/mssqlpreview.list'
apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893
apt-get update
apt-get install msodbcsql unixodbc-dev-utf16 -y
pecl install sqlsrv pdo_sqlsrv
echo "extension=sqlsrv.so" >> /etc/php/7.0/fpm/conf.d/sqlsrv.ini
echo "extension=pdo_sqlsrv.so" >> /etc/php/7.0/fpm/conf.d/pdo_sqlsrv.ini

测试连接数据库

接下来,我们创建一个测试用的数据库 riceDB
sqlcmd -S localhost -U sa -P your_password -Q "CREATE DATABASE riceDB;"

然后,我们在 /var/www/html/ 目录下,创建数据库连接测试文件

<?php
$serverName = "localhost";
$connectionOptions = array(
"Database" => "riceDB",
"Uid" => "sa",
"PWD" => "your_password"
);
//Establishes the connection
$conn = sqlsrv_connect($serverName, $connectionOptions);
if($conn)
echo "Connected!"
?>

注:这里的 "your_password" 就是你之前设置的管理员密码。

然后我们就可以实现在 Linux 下安装支持以 SQL Server 作为数据库的 PHP 程序了,例如 phpBB、laravel 都是支持的。

如果需要像 phpMyAmin 这样的 GUI 方式管理 SQL Server,利用 Visual Studio 或者 SSMS 即可。不过 SQL Server vNext 必须使用 SMSS v17 才可以管理,VS 需要是 2017 版。

SMSS 下载地址:https://msdn.microsoft.com/en-us/library/mt238290.aspx

评论

  1. 7年前
    2016-11-21 6:27:09

    终于来新文章了哈。

    • 妙正灰
      博主
      Vans爱好者
      7年前
      2016-11-21 12:37:11

      哈哈,沉寂了好多天了

本文评论已关闭
上一篇
下一篇