视频地址

学徒卡夫 - 卡夫的Mac 03 - Mac下使用Docker配置PHP环境
https://www.bilibili.com/vide...

安装 Docker

https://www.docker.com/docker...

下载镜像

# 安装基础镜像 - ubuntu:14.04
# 拉取镜像(拉取镜像经常会失败,尝试几次就好了)
docker pull ubuntu:14.04
# 设置以守护进程在后台运行
docker run -dit --name my-lnmp ubuntu:14.04

配置容器内的lnmp环境

  1. 更换apt-get源提高安装速度
# 进入容器内部
docker exec -it my-lnmp bin/bash
# 如果需要退出容器使用`exit`即可
# 更新
apt-get update
以上的更新报错
# 可能出现以下错误, 由于没有公钥, 无法验证以下签名
W: GPG error: http://extras.ubuntu.com trusty Release: The following signatures couldn't     be verified because the public key is not available: NO_PUBKEY 16126D3A3E5C1192
# 解决 --recv-keys 后面跟着报错提示的密钥(这里操作成功后,退出Docker跟服务器了,重新进入就可以了 docker exec -it my-lnmp bin/bash )
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 16126D3A3E5C1192
# 重新更新
apt-get update
# 安装常用工具
apt-get install -y curl vim
# 解决有可能存在的语言问题
apt-get install -y language-pack-en-base
locale-gen en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
  1. 安装Nginx
# 安装
sudo apt-get install -y nginx
# 配置文件位置
#> /etc/nginx/nginx.conf
#> /etc/nginx/conf.d/*.conf
# 默认主目录
#> /usr/share/nginx/html/
# 管理nginx服务
service nginx start   // 启动
service nginx stop    // 停止
service nginx restart // 重启

测试
curl localhost

如果出现Welcome to nginx!类似的字样,说明nginx安装成功了

  1. 安装 PHP7
# 添加php的仓库
apt-get install -y software-properties-common
# 中途按下回车
add-apt-repository ppa:ondrej/php
# 安装php7.0,可以选择指定版本,我看了下5.4以上的有,安装前先使用apt-cache search php7.0类似命令搜索下
sudo apt-get update
中途报错
1. W: GPG error: http://ppa.launchpad.net trusty InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 4F4EA0AAE5267A6C

# 注意后面的KEY要对应
gpg --keyserver keyserver.ubuntu.com --recv 4F4EA0AAE5267A6C
gpg --export --armor 4F4EA0AAE5267A6C > key.asc
cat key.asc | sudo apt-key add -

安装

apt-get install -y php7.0 php7.0-mysql php7.0-fpm php7.0-curl php7.0-xml php7.0-mcrypt php7.0-json php7.0-gd php7.0-mbstring php7.0-zip php-mongodb php-memcached php-redis
# 测试 (如果有结果,则表示安装成功)
php -v
# 配置php.ini
vim /etc/php/7.0/fpm/php.ini
# 将cgi.fix_pathinfo=1这一行去掉注释,将1改为0
#>  / 是vi查找的命令
#配置php-fpm
vim /etc/php/7.0/fpm/pool.d/www.conf
# 修改
listen = /var/run/php/php7.0-fpm.sock
# 配置nginx
vim /etc/nginx/sites-enabled/default
将`index index.html index.htm;`改成`index index.php index.html index.htm;`
在`service`里面,`location /{}`下面增加以下配置
location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
    # With php5-cgi alone:
    # fastcgi_pass 127.0.0.1:9000;
    # With php5-fpm:
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}
  1. 运行
#启动php-fpm
service php7.0-fpm start

# 重启 Nginx ,检测配置是否成功
# service nginx stop
# service nginx start
service nginx reload
# 创建项目目录,并给权限
mkdir apps
chmod -R 777 /apps/
# 新建 index.php 测试文件
# 写入内容,保存
# :wq

# 执行
curl localhost
# 如果看到`hello world!`表示运行成功
  1. 安装MySQL
# 安装过程中会提示输入密码及确认密码,输入即可
apt-get install -y mysql-server-5.6
# 启动
service mysql start
# 测试
mysql -uroot -p
# 输入密码后进入到mysql表示安装成功
# 退出
exit
  1. 设置容器开机启动项
# 在.bashrc写入开机启动项
vim ~/.bashrc
# 写入以下内容,保存

# 开机启动项
service php7.0-fpm start
service mysql start
service nginx start
#tail -f /var/log/nginx/error.log

这里遇到几个问题

1. nginx 报502错误
解决方法:查看当前端口
netstat -tunpl

显示
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      -
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      15277/nginx
    tcp6       0      0 :::80                   :::*                    LISTEN      15277/nginx

正常会显示fpm的9000端口
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
    tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      3552/php-fpm
    tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      2400/mysqld
    tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      3535/nginx
    tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      906/sshd
    udp        0      0 115.28.143.123:123          0.0.0.0:*                               1232/ntpd
    udp        0      0 10.144.130.187:123          0.0.0.0:*                               1232/ntpd
    udp        0      0 127.0.0.1:123               0.0.0.0:*                               1232/ntpd
    udp        0      0 0.0.0.0:123                 0.0.0.0:*                               1232/ntpd

查看fpm是否开启
    ps -ef | grep php-fpm

发现也是正常的
    root     15492     1  0 10:51 ?        00:00:00 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)
    www-data 15493 15492  0 10:51 ?        00:00:00 php-fpm: pool www
    www-data 15494 15492  0 10:51 ?        00:00:00 php-fpm: pool www
    root     15567 15286  0 11:14 ?        00:00:00 grep --color=auto php-fpm

查看nginx的错误日志
    cat /var/log/nginx/error.log

报错是找不到php7.0-fpm.sock
    2016/09/18 11:55:32 [crit] 15281#0: *7 connect() to unix:/var/run/php7.0-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: ::1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php7.0-fpm.sock:", host: "localhost"

找到问题是 /etc/nginx/sites-enabled/default 配置写错了
    /var/run/php7.0-fpm.sock
    # 更改 
    /var/run/php/php7.0-fpm.sock
  1. 安装常用
sudo apt-get install zip unzip php-zip

Composer安装

  1. 安装
sudo curl -sS https://getcomposer.org/installer | sudo php -d detect_unicode=Off
  1. 更改文件权限
sudo chmod a+x composer.phar
  1. 切换到全局安装文件夹
sudo mv composer.phar /usr/local/bin/composer
  1. 更新
sudo composer self-update
  1. 将 Composer 源更换为国内
composer config -g repo.packagist composer https://packagist.phpcomposer.com
 #### 如果 Composer 更新仍然慢,就在项目中执行以下命令
   composer config repo.packagist composer https://packagist.phpcomposer.com
   #### 上述命令将会在当前项目中的 composer.json 文件的末尾自动添加镜像的配置信息(你也可以自己手工添加):
   "repositories": {
           "packagist": { 
                   "type": "composer", 
                   "url" : "https://packagist.phpcomposer.com" 
           }
   }
  1. Composer 更新项目 可能产生以下报错
网上说因为镜像使用的是http,而原地址是需要https,所以配置下关掉https就好了。
解决:composer config -g secure-http false
没安装Git。
解决:sudo apt-get install git
更新项目时,超时。
解决:export COMPOSER_PROCESS_TIMEOUT=2000

将配置好的Docker容器,打包

  1. 将容器打包成镜像
# 退出 Docker
exit
# 查看当前容器对应CONTAINER ID
docker ps -a
# 将容器打包新的镜像 (ID: 2c10b080cf8c)
docker commit 2c10b080cf8c kfk-lnmp
# 查看新的镜像/Pull的镜像
docker images
# 使用刚打包的镜像,创建新的容器
docker run -dit -p 80:80 -p 3306:3306 -v /var/www/:/apps/  --name nginx-mysql-php7-composer new-lnmp /bin/bash
# -p 端口映射
# -v 本地目录映射到容器内
# 测试
在浏览器通过访问`localhost`响应成功,则大功告成

配置一个Laravel项目

mkdir /apps/vhost
vi /apps/vhost/laravel.cc.conf
server {
    listen 80;
    root /apps/laravel/public;
    index index.php index.html index.htm;
    server_name laravel.cc;
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
    }    
}
vi /etc/nginx/nginx.conf
# 加入
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
include /apps/vhost/*.conf;
service nginx reload
# 测试

在浏览器通过访问 http://laravel.cc 响应成功


学徒卡夫
26 声望1 粉丝