sammyjo20 / ssh-php
构建PHP SSH应用的超简单框架!🔥
Requires
- php: ^8.3
- joetannenbaum/chewie: ^0.1.2
- laravel/prompts: ^0.1.24
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.60
- pestphp/pest: ^2.34
- phpstan/phpstan: ^1.11
- symfony/var-dumper: ^7.1
This package is auto-updated.
Last update: 2024-09-03 22:17:20 UTC
README
🤫 SSH PHP
!
构建PHP SSH应用的超简单起点!🔥

这是什么壳?
我知道吗?我刚刚运行了 ssh localhost
,现在我的终端中运行了一个完整的PHP应用!什么!我也是。当我第一次看到Joe Tannenbaum 的推文,他展示了他的出色 ssh cli.lab.joe.codes
,我想我必须自己尝试。我正在秘密地进行一个项目,但在我的研究中,我设法调整了他的指南,以便使用Docker来运行charmbracelet/wish!
这个项目主要是用于构建TUIs,然而它也可以运行任何PHP脚本,所以你可以构建酷炫的表单、简历或你想要的一切!
为什么是Docker?
嗯,我不想在我的服务器上玩弄SSH。另外,如果我要让公众 SSH登录我的服务器,我想确保它是受保护的。使用Docker容器,它甚至比直接SSH登录服务器更受保护。
实时演示
想亲自看看吗?我已经将这个存储库部署到了一个仅运行Docker的Hetzner Cloud服务器上。
ssh yeehaw.dev
要求
- PHP 8.3(本地安装)
- Docker
该项目处于早期访问阶段,我对Docker相当新手,所以如果你认为这可以改进,请考虑贡献!请在问题/讨论中分享你的想法。谢谢!
安装
要开始,运行以下Composer create-project
命令。请确保将 ssh-app-name
重命名为你的项目名称。
composer create-project sammyjo20/ssh-php ssh-app-name
运行命令后,进入它刚刚创建的目录。
入门
你将拥有以下目录结构。以下是所有重要文件的说明。
.
├── .github # Contains workflows for running tests, PHP Stan and Code Style Fixers.
├── src # Your application's source files
├── tests # Automated tests (PEST)
├── docker-compose.yml # This file will be used to deploy your application to production.
└── Dockerfile # This file allows you to customise the production image and add extra PHP extensions.
你可以选择保留测试和 .github
文件夹。如果你不使用/不需要代码风格或PHP stan,可以通过从 composer.json
中删除它们并运行 composer update
来卸载它们。
构建你的SSH TUI(终端用户界面)
现在你有了构建SSH TUI的绝佳基础,去构建一些酷炫的东西吧。
在 src
目录中,你可以找到一个 index.php
文件。这个文件是SSH应用的入口点。你可以用这个文件做任何你想做的事。这个模板预装了 laravel/prompts 和 joetannenbaum/chewie,以展示如何使用它们。
你也可以考虑安装 nunomaduro/termwind
,这是一个很棒的工具,它让你可以在终端中写HTML。
以下是一些入门资源
- Joe Tannenbaum - 为了乐趣和利益而黑客Laravel Prompts
- Joe Tannenbaum - 构建TUIs的陷阱与好信息
- Laravel Prompts 文档
- joetannenbaum/chewie 文档
在开发过程中运行脚本
在开发过程中,建议使用以下命令运行脚本
php ./src/index.php
运行SSH服务器
显然,你肯定想亲眼看到SSH服务器!你可以通过运行以下命令来实现。
composer run-dev
这将在你的终端窗口中运行SSH服务器。在另一个窗口中,你应该能够运行以下命令
ssh localhost -p 2201
安装额外的PHP扩展
你可能需要添加额外的扩展,以便你的服务器能在生产环境中运行。你可以通过修改根目录下的Dockerfile
来实现。基础镜像运行Alpine Linux,包含一些常见的PHP扩展,但如果你需要的话,可以在这里添加更多。
RUN apk add php-redis
部署到生产环境
要求
你的服务器必须安装了Docker。
配置一切
首先,将docker-compose.yml
文件复制为docker-compose.prod.yml
,并打开它。在这里,将端口从2201:22
更改为22:22
。这意味着在生产环境中,你的应用程序将在常规SSH端口上运行。你可能还需要定义要构建的平台。
更改服务器上的默认OpenSSH端口
接下来,我们需要将服务器上的OpenSSH端口更改为除了22
之外的其他值,因为我们的应用程序将在这个端口上运行。在你的服务器上运行
sudo nano /etc/ssh/sshd_config
查找以Port开头的行。它可能被注释掉了,请取消注释并更改为你想要的任何数字(并且可用),例如2201。然后使用以下命令重新启动服务
sudo service ssh restart
现在,你需要更新防火墙规则,以确保端口没有被阻止。根据你使用的防火墙,这可能对你来说有所不同。对于ufw
sudo ufw allow 2201/tcp
注意
重要:在从服务器注销或关闭终端标签页之前,打开一个新的终端并确保你可以通过SSH访问你的服务器。如果不起作用,你将被锁定在服务器之外,所以保留在原始标签页上的登录状态将允许你解决任何问题。
下次你需要SSH连接到你的服务器时,你可以指定自定义端口。
ssh user@your-server -p 2201
如果你在这个服务器上使用Laravel Forge,请确保你在设置 > 服务器设置 > SSH端口下更改Forge连接到服务器的端口。
将项目克隆到服务器上
确保你提交了docker-compose.prod.yml
文件,然后将整个项目部署到服务器上。
部署时间!
现在你可以在服务器上运行以下命令。运行以下./deploy.sh
脚本。
如果你是第一次运行上述部署脚本,你可能需要使其可执行。
chmod u+x ./deploy.sh
./deploy.sh
如果你使用Laravel Forge,你可以在部署脚本中添加此命令,以自动更新SSH应用程序。
此命令运行后退出是完全正常的。如果你想检查Docker容器是否正在运行,你可以运行以下命令
docker ps
这就是全部了!✨
现在你可以通过SSH连接到你的服务器ssh your-server-ip
,你应该能看到你的精彩PHP应用程序!你甚至可以将DNS指向服务器IP,并使用它。
ssh your-server-ip
官方Docker仓库
本项目使用sammyjo20/ssh-php
Dockerfile。你可以通过以下链接查看此Dockerfile并进行贡献。
https://github.com/sammyjo20/ssh-php-docker
支持
如果你觉得这个项目很有用,请考虑一次性或定期赞助我。这有助于支付我维护和保持像这些项目一样活跃的时间。你可以在GitHub上通过点击这里赞助我。
鸣谢
- 非常感谢Joe Tannenbaum的出色博客文章以及他在Twitter/X DMs上的支持!
安全
如果您发现任何安全问题,请发送电子邮件至29132017+Sammyjo20@users.noreply.github.com