valet是mac下开发php、laravel的极简环境,docker是一种趋势。
本地我先搭好了valet的环境,
homebrew安装了php7.1、mysql5.7。
编译安装了redis、swoole、yar。
几个常用命令
php -m //
php -i |grep php.ini //查看php.ini位置
php --ri swoole //读取swoole信息
redis-cli //用于启动redis客户端
brew services start mysql //brew 开启mysql
brew services stop mysql //关闭
brew services restart mysql // 重启
mysql -uroot -p //进入命令行mysql
学习docker,搭了一个mysql8+adminer的环境,但是开发还是觉得laradock比较省心好用功能齐全。
安装laradock
git clone https://github.com/Laradock/laradock.git laradock
进入 laradock 目录将 env-example 重命名为 .env:
cd laradock
cp env-example .env
在.env里添加
DB_HOST=mysql
REDIS_HOST=redis
QUEUE_HOST=beanstalkd
运行容器
docker-compose up -d nginx mysql redis beanstalkd
建立目录链接
添加代码目录:创建一个与 laradock 同级的 code 目录,
编辑 .env 中的 APP_CODE_PATH_HOST 配置项,与新建的目录名保持一致。
# Point to the path of your applications code on your host
APP_CODE_PATH_HOST=../Code/
这步是建立链接,使该目录与虚拟容器中的/var/www/目录关联,所有该目录下的文件,都会共享在容器中的/var/www/目录下。
确认nginx成功启动
查看laradock/nginx/sites/default.conf为
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
server_name localhost;
root /var/www/public; //访问入口目录
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
在code目录下新建public目录,然后添加index.php文件,里面输出php信息。
<?php
echo phpinfo();
浏览器访问localhost,会出现phpinfo界面,如果访问不到,执行下面命令
docker-compose up -d nginx
docker-compose restart nginx
这时候其实可能不那么顺利,因为这时候valet和laradock有些端口是冲突的。主要就mysql和nginx的端口。还有redis。这时候先关掉valet就好了
valet stop
修改mysql端口
在docker-compose.yml文件
command+ f 搜索mysql
### MySQL ################################################
mysql:
build:
context: ./mysql
args:
- MYSQL_VERSION=${MYSQL_VERSION}
environment:
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- TZ=${WORKSPACE_TIMEZONE}
volumes:
- ${DATA_PATH_HOST}/mysql:/var/lib/mysql
- ${MYSQL_ENTRYPOINT_INITDB}:/docker-entrypoint-initdb.d
ports:
# - "${MYSQL_PORT}:3306" #修改这一行,我将其注释掉了
- "3308:3306" #改成不冲突的端口
networks:
- backend
command+ f 搜索nginx
### NGINX Server #########################################
nginx:
build:
context: ./nginx
args:
- PHP_UPSTREAM_CONTAINER=${NGINX_PHP_UPSTREAM_CONTAINER}
- PHP_UPSTREAM_PORT=${NGINX_PHP_UPSTREAM_PORT}
volumes:
- ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}
- ${NGINX_HOST_LOG_PATH}:/var/log/nginx
- ${NGINX_SITES_PATH}:/etc/nginx/sites-available
ports:
# - "${NGINX_HOST_HTTP_PORT}:80" #修改这一行
- "9999:80" #改为不冲突的端口
- "${NGINX_HOST_HTTPS_PORT}:443"
depends_on:
- php-fpm
networks:
- frontend
- backend
command+ f 搜索redis
### Redis ################################################
redis:
build: ./redis
volumes:
- ${DATA_PATH_HOST}/redis:/data
ports:
#- "${REDIS_PORT}:6379" #注释掉这行
- "6378:6379" #改为不冲突的端口
networks:
- backend
重启容器
docker-compose up -d nginx mysql redis
docker-compose restart nginx
docker-compose restart mysql
docker-compose restart redis
查看容器
➜ docker-compose ps
➜
Name Command State Ports
-----------------------------------------------------------------------------------------------------------------
laradock_beanstalkd_1 /usr/bin/beanstalkd Up 0.0.0.0:11300->11300/tcp
laradock_docker-in-docker_1 dockerd-entrypoint.sh Up 2375/tcp
laradock_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3308->3306/tcp
laradock_nginx_1 nginx Up 0.0.0.0:443->443/tcp, 0.0.0.0:9999->80/tcp
laradock_php-fpm_1 docker-php-entrypoint php-fpm Up 9000/tcp
laradock_redis_1 docker-entrypoint.sh redis ... Up 0.0.0.0:6378->6379/tcp
laradock_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp
➜
浏览器使用valet方式访问
浏览器访问laradock
上一步将laradock的80端口映射到本机的9999端口了
laradock mysql8.0 navcat连接
这时候使用navicat连接mysql还是不行的,因为mysql8修改了加密方式,依次执行如下命令
docker-compose exec mysql bash
root@e8d56a0bad78:/ mysql -uroot -p
mysql> grant all PRIVILEGES on *.* to root@'%' WITH GRANT OPTION;
mysql> ALTER user 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
mysql> ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
navicat连接成功
本地的mysql5.7依旧正常。