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依舊正常。