目录
一、laravel 官方文档的容器安装方法对于国内是没办法安装的
二、使用 laravel 官方自带的 sail 命令安装 laravel 容器
1.首先,要获取一个 laravel 框架,使用 phpstudy 软件用 composer 拉取一个laravel 框架
2.Windows 系统使用 Terminal 工具进入 WSL2 子系统
3.添加项目的 linux 镜像源
4.修改 Dockerfile 里的内容
5.整理安装文件及目录
6.运行容器
三、配置开发环境是需要经历过九九八十一难的,所有的原因总结大致为最主要的两点(其它的在这里忽略了,也许我没有遇到):
参考社区文档:搭建 Laravel Sail 开发环境 - MacOS | Docker 开发环境 —— Sail |《构建 Laravel 开发环境 9.x》| Laravel China 社区 (learnku.com)
参考社区翻译后的 laravel 文档手册:安装 | 入门指南 |《Laravel 9 中文文档 9.x》| Laravel China 社区 (learnku.com)
他的命令是这样的:
curl -s https://laravel.build/example-app | bash
https://laravel/build 存放的是一段脚本,执行后直接拉取镜像,你无法修改里面的内容,比如说我们最关心的 composer 镜像源,执行到最后是下面这样的:
我以为是我的 WSL2 子系统没有设置好 composer 的镜像源, 我把子系统里的 composer 镜像源修改为阿里云的,结果还是像上面一样在拉取国外官方镜像源的包,如果是拉取国外的包,要么科学上网,有时网速又不快,会超时;要不洗洗睡了。
步骤这里省略了。
官网下载:小皮面板(phpstudy) - 让天下没有难配的服务器环境! (xp.cn)
$ cd ~
$ mkdir laravel
$ cd laravel
# 打开 VSCode 编辑器
$ Code .
从 VSCode 编辑器侧边栏复制获取到的 laravel 框架到上面增加的 laravel 目录里:
编辑器重新打开目录到项目的根目录,便于 VSCode 编辑器打开项目的根目录:
添加位置:
\\wsl$\Ubuntu-20.04\home\user\laravel\app\vendor\laravel\sail\runtimes\8.0\sources.list
截图如下:
镜像源文件内容如下,是清华大学的 Ubuntu21 的镜像源,如果用 Ubuntu20 的镜像源会报错:
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-updates main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-updates universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-updates multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu impish-security main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu impish-security universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu impish-security multiverse
主要是修改里面的镜像源,否则容器安装不上,内容如下:
FROM ubuntu:21.10
LABEL maintainer="Taylor Otwell"
ARG WWWGROUP
ARG NODE_VERSION=16
WORKDIR /var/www/html
ENV DEBIAN_FRONTEND noninteractive
ENV TZ=UTC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ADD sources.list /etc/apt/
RUN apt-get update \
&& apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 \
&& mkdir -p ~/.gnupg \
&& chmod 600 ~/.gnupg \
&& echo "disable-ipv6" >> ~/.gnupg/dirmngr.conf \
&& apt-key adv --homedir ~/.gnupg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys E5267A6C \
&& apt-key adv --homedir ~/.gnupg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C300EE8C \
&& echo "deb https://launchpad.proxy.ustclug.org/ondrej/php/ubuntu impish main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
&& apt-get update \
&& apt-get install -y php8.0-cli php8.0-dev \
php8.0-pgsql php8.0-sqlite3 php8.0-gd \
php8.0-curl php8.0-memcached \
php8.0-imap php8.0-mysql php8.0-mbstring \
php8.0-xml php8.0-zip php8.0-bcmath php8.0-soap \
php8.0-intl php8.0-readline php8.0-pcov \
php8.0-msgpack php8.0-igbinary php8.0-ldap \
php8.0-redis php8.0-swoole php8.0-xdebug \
&& curl -so /usr/bin/composer https://mirrors.aliyun.com/composer/composer.phar \
&& chmod a+x /usr/bin/composer \
&& composer --version \
&& curl -sL https://deb.nodesource.com/setup_$NODE_VERSION.x | bash - \
&& apt-get install -y nodejs \
&& npm install -g npm \
&& curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
&& echo "deb https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
&& apt-get update \
&& apt-get install -y yarn \
&& apt-get install -y mysql-client \
&& apt-get install -y postgresql-client \
&& apt-get -y autoremove \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN update-alternatives --set php /usr/bin/php8.0
RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.0
RUN groupadd --force -g $WWWGROUP sail
RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail
COPY start-container /usr/local/bin/start-container
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY php.ini /etc/php/8.0/cli/conf.d/99-sail.ini
RUN chmod +x /usr/local/bin/start-container
EXPOSE 8000
ENTRYPOINT ["start-container"]
根目录下运行:
php artisan sail:publish
此命令会做两个事情:
根目录下创建 docker 目录,并将 vendor/laravel/sail/runtimes 目录下的文件及目录复制过来;
更新 docker-compose.yml 文件,使用 docker 目录中的 Dockerfile。
在项目的根目录下,运行下面的命令:
./vendor/bin/sail up
此时此刻闭目养神,静静等待。。。。
第一个原因是,国内配置环境的时候各种各样的官方镜像源都在国外,由于被“墙”掉的原因,会报错误的,所以,把林林总总所需要的开发软件的镜像源替换成国内镜像源是成功的第一步;
第二个原因是,开发的软件使用的比较多,而且又是相互依存的,版本对上号是关键的第二步。比如 laravel 框架是高版本的 php 开发的,用低版本的 php 用作开发或者运行的环境,肯定是报错的;Ubuntu21 的环境,用 Ubuntu20 的镜像源来做环境,也是会包错的。