laradock 搭建php环境

1. 安装docker

移除旧版本:

1
2
3
4
5
6
7
8
9
10
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine

安装必要的系统工具:

1
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

添加软件源信息:

1
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新 yum 缓存:

1
sudo yum makecache fast

安装 Docker-ce:

1
sudo yum -y install docker-ce

启动 Docker 后台服务:

1
sudo systemctl start docker

安装docker-compose:

1
2
3
4
5
6
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

也可以直接去官网下载相应版本
https://github.com/docker/compose/releases
然后重命名并修改权限
2. 部署php环境
  1. 克隆laradock
    laradock 官方文档:http://laradock.io/
    laradock github:https://github.com/laradock/laradock

Already have a PHP project: 在项目里

1
2
3
git clone https://github.com/Laradock/laradock.git
进入laradock:
cp env-example .env

Don’t have a PHP project yet: 和项目同级目录

1
2
3
4
5
git clone https://github.com/laradock/laradock.git
进入laradock:
cp env-example .env
修改为项目文件名称:
APP_CODE_PATH_HOST=../project-z/
  1. 直接用 docker-compose 运行需要启用的服务:
    1
    docker-compose up -d nginx mysql php-fpm
3. laravel 配置文件

Laravel 配置文件需要注意的问题是,在 .env 文件中,mysql 和 redis 的地址需填写成这样,而不是 ip 地址形式:

1
2
3
4
5
6
7
8
9
10
DB_CONNECTION=mysql 
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=xxxx
DB_USERNAME=root
DB_PASSWORD=root

REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379
4. nginx配置

在laradock文件夹,nginx/sites/中配置*.conf文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
server {

listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

# For https
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server ipv6only=on;
# ssl_certificate /etc/nginx/ssl/default.crt;
# ssl_certificate_key /etc/nginx/ssl/default.key;

server_name xxxxx.com www.xxxxx.com;
root /var/www/public; ### 注:root为容器内的路径
index index.php index.html index.htm;

location / {
try_files $uri $uri/ /index.php$is_args$args;
}

location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_pass php-upstream;
fastcgi_index index.php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fixes timeouts
fastcgi_read_timeout 600;
include fastcgi_params;
}

location ~ /\.ht {
deny all;
}

location /.well-known/acme-challenge/ {
root /var/www/letsencrypt/;
log_not_found off;
}
}

重启nginx操作:
在laradock文件夹内

1
2
3
4
docker-compose restart nginx
或者:
docker-compose stop nginx
docker-compose up -d nginx
5. 执行composer

执行 composer 等操作,需要进入到 workspace 容器中进行,使用命令:

1
docker-compose exec workspace bash

进入到 workspace 容器,就可以进行 compose 命令等操作了。
具体使用上的问题请参加 laradock 官方文档,上面都有说明。

6. MySQL8修改验证方式

mysql 8.0 将密码验证方式由以前的 mysql_native_password 改为了 caching_sha2_password 。可以进入 mysql 容器 bash,登录 mysql ,将验证方式修改成原来的:

1
2
3
4
5
6
7
8
9
#在laradock文件夹中执行:
docker-compose exec mysql bash

mysql -uroot -p
mysql> grant all PRIVILEGES on *.* to root@'%' WITH GRANT OPTION;
mysql> ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root'; // 设置root远程登录
mysql> ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'; // 设置root本地登录
mysql> FLUSH PRIVILEGES;
mysql> exit;

现在就可以用 root 登录了。为了使新建用户的验证方式默认为 mysql_native_password ,可以修改 my.cnf 文件,在 [mysqld] 部分中添加:

1
default_authentication_plugin = mysql_native_password
7. laradock 默认装的是 mysql 最新版本(mysql8),也可以更换成低版本的 mysql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 修改 .env 文件
MYSQL_VERSION=5.7 # 默认为 latest

#停止mysql容器
docker-compose stop mysql

# 删除旧数据库数据
rm -rf ~/.laradock/data/mysql

# 重新构建新 mysql
docker-compose build mysql

# 重新创建容器
docker-compose up -d nginx mysql

# 查看现有 mysql 版本
docker inspect laradock_mysql_1

# 修改MySQL密码
mysql> alter user 'root'@'localhost' identified by '123';
或者
mysql> USE mysql;
mysql> UPDATE user SET authentication_string=PASSWORD("NEWPASSWORD") WHERE User='root';
8. 添加Redis配置

去修改 redis 的配置的时候,才发现默认安装的时候并没有添加 redis 的配置。所以重装配置下:
修改laradock/redis/Dockerfile:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
FROM redis:latest

LABEL maintainer="Mahmoud Zalt <mahmoud@zalt.me>"

## For security settings uncomment, make the dir, copy conf, and also start with the conf, to use it
RUN mkdir -p /usr/local/etc/redis
COPY redis.conf /usr/local/etc/redis/redis.conf

VOLUME /data

EXPOSE 6379

CMD ["redis-server", "/usr/local/etc/redis/redis.conf"]
#CMD ["redis-server"]

编辑配置文件:
默认情况 redis 目录下有 redis.conf 文件,修改以下两点即可

  1. 注释 bind 127.0.0.1
  2. protected-mode 改为 no
    其他配置根据自己情况进行修改。

重装 redis:

  1. 切换到 laradock 目录
  2. 停止redis docker-compose stop redis
  3. 重装 docker-compose build --no-cache redis
  4. 启动 docker-compose up -d redis