其实我最近不用Tinkerwell了,因为老是要我花钱更新。
要测试直接ssh 主机不就搞定啦不是?🙄
devin@m1Max:~$ssh www
Last login: Sat Dec 10 09:39:03 2022 from 172.23.0.1
dlaravel@1defe94ae59d:~$ tinker
Psy Shell v0.11.9 (PHP 8.1.11 X cli) by Justin Hileman
>
我的主机都是SSH容器中的Laravel环境,基本上到处是tinker。
在phpenv环境,最后两行已直接内建artisan跟tinker别名了。
https://github.com/DevinY/phpenv/blob/main/dockerfiles/bash_aliases
alias artisan='/usr/local/bin/php /var/www/html/artisan'
alias tinker='/usr/local/bin/php /var/www/html/artisan tinker'
以下是旧数据啦
前言
D-Laravel添加了ssh的image了,这意味著,我们可以使用Tinkerwell在D-Laravel的docker环境。
当然我相信ssh的运用不止於此。
如果您还没听过Tinkerwell,可以参考官网Demo:
https://tinkerwell.app/
关於build ssh的image(非必要)
我们可以使用dlaravel中的
dockerfiles/fpm/Dockerfile_php_ssh
Build我们自己的image,简单的运行...
#在D-Laravel的目录中
cd dockerfiles/fpm
./build ssh
如果您要不同的php版本,可自行调整Dockerfile_php_ssh档的第一行。
FROM php:7.4.2-fpm
ARG user
#安装ssh环境
ENV OSSH_USER ${user:-dlaravel}
RUN apt-get update&&apt-get install -y openssh-server git pwgen
RUN mkdir /var/run/sshd
略.....
或是用官方的命令,来build自己的image
docker build -t <myimage> -f Dockerfile_php_ssh .
眼尖的您或许会发现,build.sh的命令中,已经把官方build命令也列出来供您参考了。
build的命令,默认是找Dockerfile,但因为我们使用的非默认的文件,所以这里多了 -f 指定文件,最后的「.」代表了目前的目录。
切换Docker上PHP加ssh环境
在D-Laravel的简易bash上,切换到ssh的环境非常简单,如果您已是D-Laravel的使用者或许猜到了。
./console ssh
这个命令,会在D-Laravel的目录创建软连结,我们能透过./console link命令确认。
让我们来看看docker-compose-ssh.yml的内容吧
version: '3.6'
services:
#=== web service ======================
web:
image: nginx
dns: 8.8.8.8
ports:
# normal
- "80:80"
- "443:443"
- "2020:22"
volumes:
- ./sites:/var/www/html:cached
- ./etc:/etc/nginx/conf.d
- ./var/log/web:/var/log/nginx
hostname: web
networks:
- dlaravel_net
#=== php service ==========================
php:
network_mode: "service:web"
image: deviny/fpm:7.4.2ssh
volumes:
- ./etc/php:/usr/local/etc/php/conf.d
- ./sites:/var/www/html:cached
- ./etc/php-fpm.d/www.conf:/usr/local/etc/php-fpm.d/www.conf
- ~/.ssh:/home/dlaravel/.ssh
- ./etc/cache:/home/dlaravel/.composer/cache
environment:
- TZ=Asia/Taipei
#=== db service ===========================
db:
image: mysql:8.0.18
command: --default-authentication-plugin=mysql_native_password
hostname: db
ports:
- "127.0.0.1:3306:3306"
volumes:
- ./etc/mysql/conf.d:/etc/mysql/mysql.conf.d
- ./data:/var/lib/mysql
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD= "yes"
- TZ=Asia/Taipei
networks:
- dlaravel_net
#=== top-level netowks key ======================
networks:
dlaravel_net:
在上方的Yaml档中,重点请专注在php的容器服务(php:)上。
一、port
- "2020:22"
阿不是说专注在php:容器服务的设置上吗,这2020:22怎么在web服务(web:)?
请注意,这里的php网络模式在D-Laravel的设置中采用了
network_mode: servce:web
这里代表了他开的连结埠,会开在web服务上,所以是将-port的设置放在了web:。
如果您是docker新手,再提醒一下,冒号左边2020是host的连结埠,代表运行Docker的主人,就是我们自己的电脑,只要不冲突可依自己需求随意调整。
冒号右边的22是,容器内开启的连接埠,基本上是固定的不可调整。
二、ssh的image的部份,使用了7.4.2的php版本,并且有ssh功能的。
image: deviny/fpm:7.4.2ssh
三、挂载,在php:下的volumes:项目
- ~/.ssh:/home/dlaravel/.ssh
默认D-Laravel是直接挂载了我们自己的家目录下的.ssh数据夹(~/.ssh),当然您可以依自己的需求调整。
SSH公钥验证
透过D-Laravel所build出的ssh服务只可采用公钥验证登录,使用密码是行不通的。
OpenSSH会有两把钥匙,一把是没有.pub的私钥,一把是私钥。
首先,我们先进到~/.ssh目录,命令如下:
cd ~/.ssh
但是,您可能会出现,找不到.ssh目录的错误信息
cd: no such file or directory: /Users/devin/.ssh
如果,您出现了上方,目录不存在的错误,别紧张,这代表了您尚未创建过任何的OpenSSH钥匙,您可以用ssh-keygen生成一把。
我想给tinkerwell一把专用的钥匙,所以,我是这么做的。
cd ~/.ssh
ssh-keygen -C "tinkerwell"
实际运行图片如下:(非常重要,询问保存时,不要直接压Enter,否则会盖掉你自己的id_rsa,如果您先前有创建了)
询问密钥密码passphrase的部份,可以压enter空白。
运行ls tinkerwell,就会发现我们的目录下创建了tinkerwell的密钥对了。
$ls tinkerwell*
tinkerwell tinkerwell.pub
我们能用下方命令重导向,快速的把公钥,添加到authorized_keys
cat tinkerwell.pub >> authorized_keys
测试SSH登录php容器
透过ssh命令,快速测试,是否能用ssh连进容器内
ssh -i ~/.ssh/tinkerwell dlaravel@127.0.0.1 -p 2020
参数说明:
-i 指定我们要使用的私钥,在上方的设置中,我们有将tinkerwel.pub公钥,添加到authorized_keys中了。
-p 指定非标准的连接埠,D-Laravel会把port开在2020,所以这里指定连到2020。
成功登录,我们能透过Ctrl+d离开。
Tinkerwell设置
点选下图中,左方的第四个icon,ssh connect,进行设置:
接下来,就来试看看tinkerwell,选择密钥时,因为~/.ssh是隐藏数据夹,所以在MacOS的系统,我们可以透过
shift+cmd+g,来指定路径,并且选取我们的密钥
试跑看看罗:
搞定啦,成功让Tinkerwell在项目中运行啦。
No Comment
Post your comment