WSL 快速搭建 LNMP 环境

Windows Subsystem for Linux(简称 WSL )是一个为在 Windows 10 上能够原生运行 Linux 二进制可执行文件(ELF 格式)的兼容层。

强烈推荐在 Windows 使用 Docker 进行 LNMP 开发:https://github.com/khs1994-docker/lnmp

如何启用 WSL 这里不再赘述,下方执行命令过程中出错,可以使用 sudo 再次尝试执行。

注意。PHP-FPM 暂时只能通过监听 socket ,不能设置 listen 127.0.0.1:9000

基于如下软件

  • WSL Ubuntu 16.04.3
  • nginx 1.13.7
  • PHP 7.2.0
  • Mysql 5.7.20

nginx

编辑 /etc/apt/sources.list.d/nginx.list 文件。

deb http://nginx.org/packages/mainline/ubuntu/ xenial nginx

添加密钥

$ sudo apt-key adv --keyserver ha.pool.sks-keyservers.net --keyserver-options timeout=10 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62

安装

$ sudo apt update



$ sudo apt install nginx



$ sudo nginx

打开 127.0.0.1 看到 nginx 默认页面。

PHP

详细编译说明请查看:https://www.khs1994.com/php/development/php-build.html

这里简要说明一下。

安装依赖

$ sudo apt install autoconf \

                   dpkg-dev \

                   file \

                   libc6-dev \

                   make \

                   pkg-config \

                   re2c \

                   gcc g++ \

                   libedit-dev \

                   zlib1g-dev \

                   libxml2-dev \

                   libssl-dev \

                   libsqlite3-dev \

                   libfreetype6-dev \

                   libxslt1-dev \

                   libcurl4-gnutls-dev \

                   libpq-dev \

                   libmemcached-dev \

                   libzip-dev \

                   libpng-dev \

                   libjpeg-dev



                   # ubuntu 16.04 没有 libargon2-0 ,17.04 + 才有,php 7.2.0 新特性

                   # libargon2-0 \

下载并解压源码包

$ cd /usr/local

$ sudo chmod 777 src

$ cd src

$ wget -O php-7.2.0.tar.gz http://hk1.php.net/get/php-7.2.0.tar.gz/from/this/mirro

$ tar -zxvf php-7.2.0.tar.gz

$ cd php-7.2.0

编译

$ ./configure --prefix=/usr/local/php \

    --with-config-file-path=/usr/local/php/etc \

    --with-config-file-scan-dir=/usr/local/php/etc/conf.d \

    --disable-cgi \

    --enable-fpm \

    --with-fpm-user=nginx \

    --with-fpm-group=nginx \

    --enable-ftp \

    --with-curl \

    --with-gd \

    --with-gettext \

    --with-iconv-dir \

    --with-kerberos \

    --with-libedit \

    --with-openssl \

    --with-pcre-regex \

    --with-pdo-mysql \

    --with-pdo-pgsql \

    --with-xsl \

    --with-zlib \

    --with-mhash \

    --with-png-dir=/usr/lib \

    --with-jpeg-dir=/usr/lib\

    --with-freetype-dir=/usr/lib \

    --enable-mysqlnd \

    --enable-bcmath \

    --enable-libxml \

    --enable-inline-optimization \

    --enable-gd-native-ttf \

    --enable-gd-jis-conv \

    --enable-mbregex \

    --enable-mbstring \

    --enable-opcache \

    --enable-pcntl \

    --enable-shmop \

    --enable-soap \

    --enable-sockets \

    --enable-sysvsem \

    --enable-xml \

    --enable-zip \

    --enable-calendar \

    --enable-intl \

    --enable-exif



    # ubuntu 16.04 没有 libargon2-0 ,17.04 + 才有,php 7.2.0 新特性

    # --with-password-argon2 \

安装

$ make -j "$(nproc)"



$ sudo make install

设置环境变量

编辑 ~/.bash\_profile

export PATH=/usr/local/php/sbin:/usr/local/php/bin:$PATH

编辑 /etc/sudoers

Defaults    secure\_path="/usr/local/php/bin:/usr/local/php/sbin:..."

升级 pecl

$ sudo pecl update-channels

配置

将源文件中的 php.ini-development 复制到安装目录中的 etc 子目录 ,并改名为 php.ini

将安装目录中的 etc 子目录中的 php-fpm.conf.default 复制为 php-fpm.conf

将安装目录中的 etc/php-fpm.d 子目录中的 www.conf.default 复制为 www.conf

非常重要!

编辑 /usr/local/php/etc/php-fpm.d/www.conf

# 务必与 nginx 运行用户一致



user = nginx

group = nginx



# 编译安装默认为 IP:端口 ,apt 反之

# listen = 127.0.0.1:9000



listen = /run/php-fpm.sock



listen.owner = nginx

listen.group = nginx

listen.mode = 0660

启动

$ sudo php-fpm -t



$ sudo php-fpm -D | -F

MySQL

使用 Docker for Windows

$ docker run -it -d --name wsl-lnmp-mysql -p 3306:3306 -e MYSQL\_ROOT\_PASSWORD=mytest -e MYSQL\_DATABASE=test --mount src=wsl-lnmp-mysql-data,target=/var/lib/mysql mysql

nginx 配置

编辑 /etc/nginx/conf.d/php.conf

server {

  server\_name 127.0.0.1;

  listen 80;

  root /app/test;

  index index.html index.php;

  location / {

    try\_files $uri $uri/ /index.php?$query\_string;

  }

  location ~ .\*\.php(\/.\*)\*$ {

    # fastcgi\_pass  127.0.0.1:9000;

    fastcgi\_pass  unix:/run/php-fpm.sock;

    fastcgi\_index  index.php;

    fastcgi\_param  SCRIPT\_FILENAME  $document\_root$fastcgi\_script\_name;

    include fastcgi\_params;

  }

}

尝试通过 pecl 安装 PHP 扩展

$ sudo pecl install redis

编辑配置文件 /usr/local/php/lib/php.ini 在其最后添加

extension=redis.so

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Jerry的SAP技术分享

如何上传HTML5应用到SAP云平台的Cloud Foundry环境下

先使用WebIDE创建一个HTML5应用。New->Project from Template:

3424
来自专栏前端人人

React多页面应用8(webpack4 gulp自动化发布到多个环境,生成版本号,打包成zip等)

本教程总共9篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章! 1、React多页面应用1(webpack4 开发环境搭建,...

2966
来自专栏LIN_ZONE

macOS apache配置及开启虚拟服务器的开启,apache开启重写模式

今天把自己的mac系统升到最新版,但是,apache却不能用了,因为mac上的apache是系统自带的,因为是mac目前的最新系统,所以出现了好多问题,整理了一...

704
来自专栏魏艾斯博客www.vpsss.net

Windows VPS 如何添加伪静态

1152
来自专栏Jerry的SAP技术分享

如何上传HTML5应用到SAP云平台的Cloud Foundry环境下

先使用WebIDE创建一个HTML5应用。New->Project from Template:

3546
来自专栏魏艾斯博客www.vpsss.net

军哥 LNMP 1.5 测试版发布

1793
来自专栏散尽浮华

git push上传代码到gitlab上,报错401/403(或需要输入用户名和密码)

之前部署的gitlab,采用ssh方式连接gitlab,在客户机上产生公钥上传到gitlab的SSH-Keys里,git clone下载和git push上传都...

55210
来自专栏王小雷

Ubuntu16.04安装Docker1.12+开发实例+hello world+web应用容器

本次主要是详细记录Docker1.12在Ubuntu16.04上的安装过程,创建Docker组(避免每次敲命令都需要sudo),Docker常用的基本命令的总结...

2558
来自专栏沈唁志

PHP获取指定网站的favicon图标API

3442
来自专栏菩提树下的杨过

64位centos 下编译 hadoop 2.6.0 源码

64位os下为啥要编译hadoop就不解释了,百度一下就能知道原因,下面是步骤: 前提:编译源码所在的机器,必须能上网,否则建议不要尝试了 一. 下载必要的组件...

1965

扫码关注云+社区