使用 docker 快速启动 laravel 开发环境(初级)

laravel 7 已经发布了。作为一个懒人我很不情愿在我的开发机器上安装composer、php、nginx以及数据库等组件,也包括Homestead虚拟机。 本文是我在尝鲜 laravel 7.3时完成的内容。所有的一切只需要系统装有docker。

一、composer初始化项目

创建 composer 容器并进入

linux/mac在项目根目录下运行如下命令:

 cdir="$(cd "$(dirname "$0")" && pwd)"
 docker run -it --rm -v ${cdir}:/app composer /bin/bash

windows我不会写路径,手动改吧。

docker run -it --rm -v D:\Github:/app composer /bin/bash

使用淘宝源

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

初始化项目

composer create-project --prefer-dist laravel/laravel web --ignore-platform-reqs

至此,一个laravel项目就初始化完成了。

退出容器

exit

composer 常用命令

 cdir="$(cd "$(dirname "$0")" && pwd)"
 docker run -it --rm -v ${cdir}:/app composer install --ignore-platform-reqs

二、增加php/nginx配置

在这个目录结构下分别增加nginx和php的配置文件,下载地址

1585379024946

三、运行php容器

在这里我运行了nginx、php、composer-install和yarn的容器:

docker-compose.yaml

version:  "3.2"

volumes:
  lnmpsock: {}
  yarnfile: {}

services:
  nginx:
    image: openresty/openresty:alpine
    restart: always
    container_name: nginx
    volumes:
      - ./:/var/www/html:rw
      - ./docker/openresty/conf.d:/etc/nginx/conf.d:rw
      - ./docker/openresty/conf/nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf:rw
      - ./docker/tmp/openresty:/etc/nginx/fastcgi_cache/one_hour:rw
      - ./docker/log:/log:rw
      - type: bind
        source: lnmpsock
        target: /sock
    ports:
      - "80:80"

  php:
    image: php:fpm-alpine
    restart: always
    container_name: phpfpm
    volumes:
      - ./:/var/www/html:rw
      - ./docker/php/php-fpm.d:/usr/local/etc/php-fpm.d
      - ./docker/php/conf/php-fpm.conf:/usr/local/etc/php-fpm.conf
      - ./docker/log:/log:rw
      - type: bind
        source: lnmpsock
        target: /sock

  composer-install:
    image: composer
    restart: "no"
    container_name: composer-install
    volumes:
      - ./:/app:rw
    entrypoint:  [ composer,install,--ignore-platform-reqs ]
    privileged: true

  yarn:
    image: kelvinblood/yarn
    restart: always
    container_name: yarn
    stdin_open: true
    tty: true
    volumes:
      - ./:/var/www/html:rw
      - type: bind
        source: yarnfile
        target: /usr/local/share/.cache/yarn
    entrypoint: [ "/bin/bash" ]

运行 docker-compose up -d

1585374016652

进入phpfpm容器中,赋文件夹权限和创建新的app key

chmod -R 777 bootstrap/cache
chmod -R 777 storage

php artisan key:generate

然后就能正常访问啦:

1585139032578

对于访问的IP你可能有点疑问,Windows下使用127.0.0.1即可。

如果遇到不能访问的,Windows下docker的默认网段为10.0.75.0/24,使用.1 .2也能访问,即10.0.75.2。

如果你是跑在局域网的服务器里,访问服务器的IP即可。

到这一步其实已经完成啦。由于laravel和前端项目关联也比较紧密,下面再记录一个和前端工具的绑定的容器步骤。

四、使用SaaS、Laravel Mix等前端工具

# 进入yarn容器:
$ docker exec -it yarn /bin/bash

# 设置源,安装依赖
yarn config set registry https://registry.npm.taobao.org
SASS_BINARY_SITE=http://npm.taobao.org/mirrors/node-sass yarn

# 安装常用前端组件
npm install vue vue-template-compiler jquery bootstrap --save-dev --production=false

修改一下 Mix 的配置文件 webpack.mix.js

mix.js('resources/js/app.js', 'public/js')
   .sass('resources/sass/app.scss', 'public/css')
   .version();

在末尾加了一个 version(),使 Mix 每次生成的静态文件后面加上一个类似版本号的参数,避免浏览器缓存。

增加一些简单的blade文件和SaaS文件,下载地址

1585379435769

# 继续在容器内运行如下命令,自动编译
npm run watch-poll

然后就看到运行成功啦:

1585380294717

访问网页如下:

1585379532437


如何确定某网卡是哪个容器在使用?

55038137449

最近在做kubernetes的网络测试,排查问题时需要通过网卡确认时哪个容器在跑,具体过程如下:

  1. 确认问题网卡

    route -n
    

    1584609896662

    这是我们的目标网卡 calif036cbd2081

    查看它的接口索引值:

    ip link show calif036cbd2081
    

    1584610154380

    记住前面输出的数字 191

  2. 在所有容器中查看网卡信息。

    以下是运行脚本 test.sh,将在本机上所有容器中运行 ip a 命令

    1584626118231

    运行命令:

    ./test @if191
    

    1584610212163

    在此我们找到了目标容器

  3. 进入容器中确认,确实是这个IP的拥有者

    1584610305790


树莓派新手步骤

最近入手了树莓派4b,这篇文章记录一些使用的要点。5年前也曾买过类似的开发板,可以看这里: BB-Black

照片

1584420813388

1584420822971

1584420830181

1584420834660

查看型号

树莓派是一款来源于英国慈善组织“Raspberry Pi 基金会”的卡片电脑,至今已经发行在售了 9 个型号:

在命令行中输入:

cat /proc/cpuinfo

会打印类似下面的信息:

Hardware        : BCM2835
Revision        : c03111
Serial          : 100000001f00eb37
Model           : Raspberry Pi 4 Model B Rev 1.1

Revision 是板卡型号编码,Model 是型号名称。

Hardware: BCM2835 代表树莓派系列的硬件架构码。

生成树莓派系统信息截图

Neofetch 是用 Bash 脚本编写的,创建系统信息截图的开源工具,可以识别近 150 种不同的操作系统,当然也包含树莓派 Raspbian 操作系统。

sudo apt-get install neofetch
neofetch

修改 ~/.config/neofetch/config.conf 文件还能定制系统信息。下面是我的树莓派截图。

1584447502431

设置开机不加载图形化界面

树莓派性能应该留在刀刃上,图形界面这种吃性能的东西应该默认关闭。

$ raspi-config 

“Boot Options” -> “Desktop / CLI” -> “Console”

开启ssh服务

systemctl enable ssh
systemctl restart ssh

更换系统源

先确认树莓派使用的源地址:

$ /bin/cat /etc/apt/sources.list
deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi

可以确认该树莓派基于 debian buster

将其备份后使用清华的源,使用同样 buster 版本。如果你的是其它版本的,查看其他版本的。https://mirror.tuna.tsinghua.edu.cn/help/raspbian/

更换pip源

pip国内的一些镜像

  阿里云 http://mirrors.aliyun.com/pypi/simple/   中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/   豆瓣(douban) http://pypi.douban.com/simple/   清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/   中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/

修改源:

mkdir -p  ~/.pip/
vi ~/.pip/pip.conf

index-url = https://pypi.tuna.tsinghua.edu.cn/simple

扫描局域网查看树莓派IP

https://www.advanced-ip-scanner.com/cn/

安装好扫描本局域网的IP即可。

1584420390098

安装docker

curl -sSL https://get.docker.com| sh
sudo usermod -aG docker pi && sudo reboot

由于树莓派基于arm平台,和我们平时所用的x86服务器不相同,所以常见的镜像在这里都是不能用的,需要从dockerfile重新构建镜像才可使用。

打印GPIO管脚信息

pinout

1584447755471

查看ARM板参数

cat /proc/cpuinfo 

ARMV7 processor rev 3(v71) 是指基于ARM V7 指令集的处理器。

1584582725796

参考资料


树莓派安装 node-exporter 备忘

源码安装

wget https://github.com/prometheus/node_exporter/releases/download/v0.14.0/node_exporter-0.14.0.linux-armv7.tar.gz

tar zxvf node_exporter-0.14.0.linux-armv7.tar.gz
mv node_exporter-0.14.0.linux-armv7/node_exporter /usr/local/bin

运行

直接运行

/usr/local/bin/node_exporter &

systemd 管理运行

vi /usr/lib/systemd/system/node_exporter.service

[Unit]
Description=node_exporter
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target

设定开机启动并启动:

systemctl enable node_exporter
systemctl start node_exporter

查看启动状态

systemctl status node_exporter