修改laradock端口,让valet和laradock完美共存

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信息。

浏览器访问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方式访问


valet方式访问

浏览器访问laradock
上一步将laradock的80端口映射到本机的9999端口了


laradock访问

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连接成功


laradock-mysql

本地的mysql5.7依旧正常。

你可能感兴趣的:(修改laradock端口,让valet和laradock完美共存)