(踩坑)WSL2+docker+laradock 配置并安装 Laravel 框架

系统环境介绍:
wsl2(Ubuntu18.04) + docker + laradock

1、下载 laradock#

创建项目文件夹并在该文件夹下下载 laradock

$ mkdir laravel_test
$ cd laravel_test/
$ git clone https://github.com/laradock/laradock.git

目录结构:
laradock入门配置并安装Laravel框架

2、进入 ./laradock 目录,将 env-example 重命名.env#

$ cd laradock/
$ cp env-example .env

3、.env 文件中部分需要注意的变量#

# 这个变量通常默认就行,最后此时的项目目录会映射到 workspace 容器的 `/var/www/` 目录中
APP_CODE_PATH_HOST=../

# 像mysql等需要volume的数据会存放在宿主机中的位置,如果有需要可以修改一下
DATA_PATH_HOST=~/.laradock/data

# php版本(7.4 - 7.3 - 7.2 - 7.1 - 7.0 - 5.6)
PHP_VERSION=7.3


### MYSQL #################################################
# mysql版本,默认是lastest,根据需要修改
MYSQL_VERSION=5.7
# 默认数据库名字
MYSQL_DATABASE=laravel
# 数据库用户名
MYSQL_USER=default
# 数据库用户密码
MYSQL_PASSWORD=secret
# 数据库端口
MYSQL_PORT=3306
# 数据库root用户的密码
MYSQL_ROOT_PASSWORD=root


# 更换中国镜像源,改为true
CHANGE_SOURCE=true
# 上面 `CHANGE_SOURCE` 改为`true`之后,就会更换为aliyun镜像源
UBUNTU_SOURCE=aliyun


### WORKSPACE #############################################
# 将comoser更换为阿里镜像源(更改为其他国内镜像源也可以,否则速度不稳定)
WORKSPACE_COMPOSER_REPO_PACKAGIST=https://mirrors.aliyun.com/composer/
# 设置NVM安装node的淘宝镜像源
WORKSPACE_NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node
# 设置node的淘宝的registry
WORKSPACE_NPM_REGISTRY=https://registry.npm.taobao.org/
# 时间改为PRC
WORKSPACE_TIMEZONE=PRC

如果不需要 node,可以将以下配置改为 false,上面的 node 淘宝镜像源就不需要配置了

WORKSPACE_INSTALL_NODE=false
WORKSPACE_INSTALL_YARN=false
WORKSPACE_INSTALL_NPM_GULP=false
WORKSPACE_INSTALL_NPM_BOWER=false
WORKSPACE_INSTALL_NPM_VUE_CLI=false
WORKSPACE_INSTALL_NPM_ANGULAR_CLI=false

4、关于 ./laradock/workspace/ 目录的修改处理#

4.1、./laradock/workspace//Dockfile 的修改#

想要安装 node,还需要以下配置,否则运行 docker-compose 会出错

出错截图:
laradock入门配置并安装Laravel框架
原因分析:
通过上述红字并百度一堆各种对的或错的解答之后,应该是 node 是通过 nvm 来安装的,但是无法通过 raw.githubusercontent.com/creation... 下载安装 nvm。通过浏览器输入网址发现根本访问不了。
通过查看 ./laradock/workspace/Dockerfile 查找网址关键字,定位如下图:
laradock入门配置并安装Laravel框架
解决方案:

网络上的方法通常就三个方案:
第一:通过查找上述网址的 ip 地址,修改 host,让该网址对应 ip,但是根本不管用
第二:就是手动下载 sh 文件,并且修改 Dockerfile 的方法安装 nvm
第三:直接把.env 文件中的 node 全部 false,不要 node 了

因为我自己想要尽可能完整的实现 laradock 的本该安装的东西,所以采用第二种方法:

  1. 在 github 上下载对应版本
    laradock入门配置并安装Laravel框架
    只需要下载 install.sh(install.sh 一定要确保是 unix 编码格式) 就可以了,为了方便下载到 ./laradock/workspace/ 目录中
  2. 修改 ./laradock/workspace/Dockerfile 文件,修改后如下图
    laradock入门配置并安装Laravel框架
    • COPY ./install.sh/tmp/install.sh:将下载的 install.sh 复制进 docker 容器中
    • /bin/sh -c /tmp/install.sh:运行 install.sh
    • 上两步已经完成了 注释掉的 curl

4.2、有概率会出现 /tmp/sources.sh: not found#

出错截图:
laradock入门配置并安装Laravel框架
原因分析:
sources.sh 不是以 unix 格式编码
参考:github.com/laradock/laradock/pull/...
解决方法:

  • 如果是 windows 系统,用 nodepad++ 等编辑器重新转为 Unix 编码即可
  • 如果是 Linux,进入 laradock 目录,执行以下命令即可:
    $ vi ./workspace/sources.sh
    $ :set ff=unix
    $ :wq

5、构建并启动 docker 容器#

要在 ./laradock 目录下 执行命令

默认会启动 workspace、php-fpm 和 composer 等都会自动配置

$ docker-compose up -d nginx mysql

6、构建完成后,进入 workspace,安装 Laravel 框架#

此时进入 workspace 容器后,会默认在 /var/www 项目目录下

# 进入workspace容器
$ docker-compose exec workspace /bin/bash

# 在容器中执行composer命令将Laravel框架安装在 ./laravel 目录中
root@b0cf8f8333e4:/var/www# composer create-project --prefer-dist laravel/laravel laravel "6.*"

此时的目录结构如下图:
laradock入门配置并安装Laravel框架

7、配置 nginx 站点:./laradock/nginx/sites/#

我自己习惯在浏览器中用 localhost 访问,然后为了方便,就直接把 laravel.conf.example 修改为 default.conf 了

所以主要是注释掉server_name修改项目站点目录
laradock入门配置并安装Laravel框架

8、重启 nginx 容器,是站点配置文件生效#

$ docker-compose restart nginx

此时已经可以在浏览器中通过 localhost 访问了,我是用 wsl2 环境搭建的,所以宿主机不支持 127.0.0.1,只能通过 localhost 访问

9、Laravel 中数据库配置:./laravel/.env#

laradock 的 mysql 容器不是以 ip 地址连接的,而是以 mysql 标签名连接的
所以 ./laravel/.env 中关于 DB_HOST 的值不是 ip 地址,而是 mysql 这个单词

参数修改为:
./laravel/.env

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=root

10、关于 msyql 数据库管理工具#

途径一:通过 phpmyadmin

  1. workspace 占用着 8080 端口,所以需要修改 ./laradock/.env 中的端口
    # 把phpmyadmin默认的8080改为不被占用的端口
    PMA_PORT=8081
  2. 启动 phpmyadmin
    $ docker-compose up -d phpmyadmin
  3. 浏览器网址:localhost:8081
    laradock入门配置并安装Laravel框架

途径二:通过 amdiner

  1. 修改 ./laradock/.env 中的端口
    # 把adminer默认的8080改为不被占用的端口
    ADM_PORT=8082
  2. 启动 adminer
    $ docker-compose up -d adminer
  3. 浏览器网址:localhost:8082
    laradock入门配置并安装Laravel框架

途径三:通过宿主机数据库管理工具管理:
数据库连接工具:
我的环境是 wsl2 环境,ip 地址就要改为 localhost,暂时不支持 127.0.0.1
laradock入门配置并安装Laravel框架

如果不是这样的环境,应该是 mysql? 这个我自己没有试验过,还不确定,但是 ip 地址应该无外乎上面的几个吧。

至此,基本的配置和安装都结束了。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 24
快乐壮

运行速度咋样,io 慢不?

5年前 评论
code386 (楼主) 5年前
快乐壮 (作者) 5年前
jcc123

自从上周我的 Homestead 蹦了之后~(非黑,单纯的不想再折腾了), 本地开发就换个 Laradock 折腾折腾~~

5年前 评论
西巴以及 5年前
jcc123 (作者) 5年前

楼主如何用 phpstorm 编辑 wsl2 里面部署的项目啊,我直接打开后编辑不能保存,phpstorm 会警告

5年前 评论
code386 (楼主) 5年前
海的幽灵 (作者) 5年前

在 wsl 执行 git status 命令会很慢,项目是放在宿主机上的,之前是每次执行命令必现,最近重装之后时每日一次; 查过是 IO 问题,无解

5年前 评论
海的幽灵 5年前

Step 160/316 : RUN if [ ${INSTALL_NODE} = true ]; then mkdir -p $NVM_DIR && curl -o- github.com/nvm-sh/nvm/blob/93990ab... | bash && . $NVM_DIR/nvm.sh && nvm install ${NODE_VERSION} && nvm use ${NODE_VERSION} && nvm alias ${NODE_VERSION} && npm config set fetch-retries ${NPM_FETCH_RETRIES} && npm config set fetch-retry-factor ${NPM_FETCH_RETRY_FACTOR} && npm config set fetch-retry-mintimeout ${NPM_FETCH_RETRY_MINTIMEOUT} && npm config set fetch-retry-maxtimeout ${NPM_FETCH_RETRY_MAXTIMEOUT} && if [ ${NPM_REGISTRY} ]; then npm config set registry ${NPM_REGISTRY} ;fi && if [ ${INSTALL_NPM_GULP} = true ]; then npm install -g gulp ;fi && if [ ${INSTALL_NPM_BOWER} = true ]; then npm install -g bower ;fi && if [ ${INSTALL_NPM_VUE_CLI} = true ]; then npm install -g @vue/cli ;fi && if [ ${INSTALL_NPM_ANGULAR_CLI} = true ]; then npm install -g @angular/cli ;fi && ln -s npm bin --global /home/laradock/.node-bin ;fi ---> Running in 493b27c30fb9 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0bash: line 7: syntax error near unexpected token newline' bash: line 7:' 100 12703 0 12703 0 0 15839 0 --:--:-- --:--:-- --:--:-- 15839 curl: (23) Failed writing body (955 != 1370) ERROR: Service 'workspace' failed to build : The command '/bin/sh -c if [ ${INSTALL_NODE} = true ]; then mkdir -p $NVM_DIR && curl -o- github.com/nvm-sh/nvm/blob/93990ab... | bash && . $NVM_DIR/nvm.sh && nvm install ${NODE_VERSION} && nvm use ${NODE_VERSION} && nvm alias ${NODE_VERSION} && npm config set fetch-retries ${NPM_FETCH_RETRIES} && npm config set fetch-retry-factor ${NPM_FETCH_RETRY_FACTOR} && npm config set fetch-retry-mintimeout ${NPM_FETCH_RETRY_MINTIMEOUT} && npm config set fetch-retry-maxtimeout ${NPM_FETCH_RETRY_MAXTIMEOUT} && if [ ${NPM_REGISTRY} ]; then npm config set registry ${NPM_REGISTRY} ;fi && if [ ${INSTALL_NPM_GULP} = true ]; then npm install -g gulp ;fi && if [ ${INSTALL_NPM_BOWER} = true ]; then npm install -g bower ;fi && if [ ${INSTALL_NPM_VUE_CLI} = true ]; then npm install -g @vue/cli ;fi && if [ ${INSTALL_NPM_ANGULAR_CLI} = true ]; then npm install -g @angular/cli ;fi && ln -s npm bin --global /home/laradock/.node-bin ;fi' returned a non-zero code: 2

4年前 评论

www.ipaddress.com/ 查询 raw.githubusercontent.com 的真实 IP, 然后手工添加到 /etc/hosts(Windows 下对应文件路径是 C:\Windows\System32\drivers\etc\hosts), 比如 199.232.28.133 raw.githubusercontent.com

2年前 评论