10分钟完成Mac上的 LNMP 环境部署,Mac上快速搭建PHP开发环境(LNMP—docker方式)

  • 内容
  • 评论
  • 相关

一、前言

对于很多开发者来说,突然转到在 mac 系统开发,可能会非常难受,主要有以下几个原因

1、mac 上安装软件程序坑多,比如安装 PHP、Nginx,会存在很多使用 linux 或 windows 时没有遇到过的坑

2、对 mac 系统不熟悉,就导致排查错误很难快速定位,网上资料都是复制粘贴一顿抄,很难得到借鉴

3、mac 对文件的权限掌握比较烦,比如执行一个 find / -name … 都会报出一大趟 permission ,心情瞬间跌入谷底

4、windows 上用习惯的很多软件,到了 mac 系统,找不到了,并且一时半会还找不到替代品

基于此,用博主自己的难受经历,帮助后来者不再体会这种难受,让转到 mac 开发的开发者快速上手,不至于把时间浪费在环境不一致上。

可以采用的部署方案

1、使用 mac 自带的双系统功能,安装 windows 系统,完全放弃使用 mac 系统,改为使用熟悉的 windows 系统开发

2、在 mac 系统安装虚拟机,虚拟机上运行 windows 环境

3、使用 mac 的集成环境 mamp pro,它和 windows 上 phpstudy 类似,工具里可以选择使用 apache、nginx、mysql5.7,以及多个PHP 版本、Redis、MongoDB

4、使用 docker 在mac 系统上部署开发环境,不使用 mac 自身的软件,转而使用 docker 部署的环境,将 docker 容器的端口与 mac 系统的端口进行映射

最终采用的部署方案

前两种方案都是转为使用 windows 系统。

第三种方案是使用集成环境,就像在 windows 上使用 phpstudy 一样,只要简单的配置就可以快速集成开发,但因为其依托的还是Mac系统,因此mac系统上的文件权限以及一些其他问题,后期可能还是会出现,放弃使用。

第四种方案,使用docker部署 LNMP 环境,使整个开发环境独立于 mac 之外,好处在于容错率高,不受 mac 系统特性的约束,且其依托于 centos 运行,出现问题更易排查,并且使用 docker 可以方便后期快速以秒级实践微服务、集群等操作。

因此最终,决定使用第四种方案,采用 docker 部署 LNMP 环境,镜像包我之前已经制作过,属于拿来就可以用,预计采用这种方式部署完成 + 测试完成 时间不会超过 20 分钟,将大大的减少在环境部署上浪费的时间。

简单描述 docker 的作用

这里简单说下docker的作用,docker在团队中一般用于集成统一开发环境,并且 使用 docker 可以快速的部署集群,docker 的作用和虚拟机类似,但是它的性能却是秒级,甚至是毫秒级的,在对机器的性能利用上,远远超过虚拟机。

Docker 技术并不难掌握,使用起来却极为方便。

 

二、正文

1、下载 docker dmg包

官网下载地址:https://www.docker.com/products/docker-app

注:如果下载速度慢,可以下载我上传到天翼云的

下载地址

天翼云下载
天翼云登录不限速!登录方法:断开WiFi,用微信扫码登录

 

2、安装

这个就不说了,就和安装 phpstorm 是一个套路,安装后,它是长这个样子的:

 

3、你可以在 mac 的状态栏找到它

可以看到,我们可以在这里控制 docker 的关闭和重启

 

4、配置国内镜像
cd ~
cd .docker
vi daemon.json
#将文件内容替换为下面内容
{
"registry-mirrors": ["https://cr.console.aliyun.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"]
}

 

5、下载镜像

之前我制作了一个docker LNMP 环境镜像,这下子派上用场了。在mac终端执行:

docker pull xmyunwei/lnmp

注:docker 镜像地址:https://hub.docker.com/repository/docker/xmyunwei/lnmp

 

6、创建容器

这里就可以按照需求来自定义创建了。

下面这行代码同样是创建容器,不同的是,在创建时,指定了将宿主机的 /Users/data 与 容器内的 /data 同步,并且做了3个端口的映射。

docker run -itd --name lnmp --privileged --hostname xm-server -p 6379:6379 -p 80:80 -p 3366:3306 -p 33899:22 -v /Users/XmYunWei.CoM/SynologyDrive/XM-Server:/data xmyunwei/lnmp /usr/sbin/init

注意:mac 上复制这条命令执行可能会报错 invalid reference format.,原因是一些字符在复制的过程中变了,因此一定要自己敲。

在docker中,进行端口的映射通过 -p 参数,可以在run时,指定多个 -p(端口映射)。

在docker中,进行文件目录的共享(映射)通过 -v 参数,同样可以在 run 时,指定多个 -v(文件映射)

 

 

7、进入容器
docker exec -it lnmp bash

发现没,终于是我们最熟悉的linux界面了,太亲切了…

注:退出容器 exit

 

8、快速搭建一个测试站点

(1)在mac 上执行 sudo vi /etc/hosts

将要测试的域名添加到这里,比如这样:


(2)写nginx站点配置文件

先到容器中

docker exec -it lnmp bash

然后到 /server/nginx/vhost 目录下创建一个名为 my.yunwei.com.conf 的文件,内容如下:

server
{
    listen 80;
    server_name my.xmyunwei.com;
    index index.php index.html index.htm default.php default.htm default.html;
    root /data/xmyunwei;

    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    #proxy_intercept_errors on;
    #fastcgi_intercept_errors on;
    #error_page 404             /404.html;
    #error_page 500 502 503 504 /50x.html;
    #ERROR-PAGE-END

    #PHP-INFO-START  PHP引用配置,可以注释或修改
    include enable-php-74.conf;
    #PHP-INFO-END

    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
    include ../rewrite/default.conf;

    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
        error_log off;
        access_log /dev/null;
    }

    location ~ .*\.(js|css)?$
    {
        expires      12h;
        error_log off;
        access_log /dev/null;
    }
    access_log  var/log/my.xmyunwei.com.log;
    error_log  var/log/my.xmyunwei.com.error.log;
}

(3)到 定义的网站目录下编写一个测试的PHP文件

cd /data
mkdir xmyunwei
vi index.php
<?php 
phpinfo();

 
 

9、收获的时候到了,mac 浏览器 访问 my.xmyunwei.com

如果不出意外,会返回 PHPINFO 的信息:

 

10、结语

到这里,就已经很简单的配置好了 MAC 上的 PHP开发环境,并能够正常访问了,并且除了 hosts 文件外,并没有其他任何文件涉及到 mac 本身的,都是 linux 的,完美实现前期的期望。

三、程序管理

注:这里的管理是管理容器内的程序。

1、Nginx 的管理:

systemctl status/start/stop/restart/reload nginx

站点的配置文件放在 /server/nginx/vhost 目录下

2、PHP 的管理

systemctl status/start/stop/restart/reload php-fpm

php.ini 文件位于/server/php/74/etc/php.ini

phpize全局可用

3、MySQL 的管理

systemctl status/start/stop/restart/reload mysql

MySQL 数据文件、慢查询日志、错误日志位于 /usr/local/mysql/data 目录下
配置文件位于 /etc/my.cnf

初始密码:空

注1:可以通过设置mysql错误日志级别 log_error_verbosity 来减少mysql错误日志的记录,默认是都记录,建议添加 log_error_verbosity = 1,即只记录error

注2:如果restart报错,则执行 chown -R mysql:mysql /usr/local/mysql/ (这个过程大约会用1分钟左右的时间),然后再restart
注3:注:如果你的云服务器配置没有到 2核cpu-4G内存,那很有可能会出现 mysql 重启失败 ,这是内存容量导致的。因此建议运行docker的云服务器配置不说太高,但是2核4G是基本要求。

云服务器可以和我一样,选购摩西云的,主要是cpu性能不阉割,价格还便宜 。点击进入购买摩西云限时秒杀

4、Redis 的管理

systemctl status/start/stop/restart/reload redis

conf配置文件位于 /server/redis/etc/redis.conf,哨兵sentinel配置文件位于 /server/redis/etc/redis-sentinel.conf

初始密码:空

5、memcached 的管理

systemctl status/start/stop/restart/reload memcached

@熊猫运维 https://www.xmyunwei.com

评论

0条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注