在开始这篇文章之前,我觉得有必要先交代一下笔者所使用的开发环境。电脑是一台 MacBook Pro. 我相信很多从事 PHP 项目开发的小伙伴都有过这样的一些问题,自己电脑上很难配置出于生产环境一样的运行环境。比如,生产环境用的是 Linux 系统,而自己电脑上又是 macOS 系统,而且我发现 macOS 环境下想要安装 PHP 扩展也是一件非常麻烦的事情,这其中当然也有部分原因是得益于咱们特有的局域网环境问题。当然,笔者也不推荐在 macOS 环境下用 Homebrew 安装的 PHP 运行环境。这里推荐大家使用 Docker 环境来运行咱们的 PHP 项目。

使用 Docker 来运行 PHP 项目考虑是有原因的:

  • Docker 中咱们可以使用 Linux 的系统,基本上可以跟生产服务器所使用的环境一样了。
  • Docker 中可以配置多种环境,无论是老版本的 PHP 5.x 还是最新的 PHP 7.4 都是可以根据需要自行安装的。
  • Linux 下 PHP 环境更加简单,社区文档更加丰富,所有操作起来会更加简单,避免踩上很多无用的坑。

1. 说明

本文将讲述创建一个博客网站的过程。

项目名称:blog

测试域名:blog.local

操作系统:Ubuntu 18.04

PHP 版本:PHP 7.2

数据库:MySQL

数据库名称:db_blog

数据库用户名:db_blog

数据库密码:saJXUFS9

2. 构建 Ubuntu-LNMP 镜像

镜像构建文件见: https://github.com/ismdeep/dockerfile/tree/master/ubuntu-lnmp

git clone https://github.com/ismdeep/dockerfile.git
cd dockerfile/ubuntu-lnmp
docker build -t ubuntu-lnmp .

3. 运行 Ubuntu-LNMP 容器

  1. 首先创建一个空的文件夹 blog ,本文使用目录为 /Users/ismdeep/Data/blog

  2. 运行容器:

    docker run --name blog \
    -v /Users/ismdeep/Data/blog:/var/www/blog \
    -p 80:80 \
    -p 3306:3306 \
    -d ubuntu-lnmp
    
  3. 进入 Docker 容器并初始化项目。

    docker exec -it blog bash
    cd /var/www
    composer create-project --prefer-dist laravel/laravel blog
    
  4. 配置 Nginx

    Nginx 配置目录在 /etc/nginx/sited-enabled

    Nginx 配置如下

    server {
        listen 80;
        root /var/www/blog/public;
        index index.php;
        server_name blog.local;
    
        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }
        location ~\.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        }
    
        location ~/\.ht {
            deny all;
        }
    }
    
  5. 配置 MySQL 数据库

    为了能够通过 PhpStorm 等开发软件能够连接 MySQL 数据库,我们需要将 /etc/mysql/mysql.conf.d/mysqld.cnf 文件中 bind-address = 127.0.0.1 注释起来。并重启数据库。重启方法嘛,直接重启 Docker 不就成了?

  6. 创建数据库及用户

    在 Docker 容器中,运行以下命令,即可进入 MySQL.

    mysql -uroot -p
    
    create database db_blog default character set utf8mb4 collate utf8mb4_unicode_ci;
    CREATE USER 'db_blog'@'%' IDENTIFIED WITH mysql_native_password BY 'saJXUFS9';
    grant all privileges on db_blog.* to 'db_blog'@'%';
    flush privileges;
    
  7. 将项目使用的 MySQL 配置信息写入项目的 .env 文件中

    image-20201021114119538

4. PHP 命令说明

对于项目开发过程中所需要使用的 php artisan 的命令,当然我们需要去 Docker 容器中执行了。

php artisan migrate