totten / amp
CLI 接口到 *AMP-style 堆栈
Requires
- php: >=7.3
- lesser-evil/shell-verbosity-is-evil: ~1.0
- symfony/config: ~5.4
- symfony/console: ~5.4
- symfony/dependency-injection: ~5.4
- symfony/filesystem: ~5.4
- symfony/process: ~4.4
- symfony/templating: ~5.4
- symfony/yaml: ~5.4
- totten/process-helper: ^1.0
- dev-master
- 0.8.0
- 0.7.3
- 0.7.2
- 0.7.1
- 0.7.0
- 0.6.1
- v0.6.0
- 0.5.3
- 0.5.2
- 0.5.1
- v0.5.0
- 0.4.11
- 0.4.10
- 0.4.9
- 0.4.8
- 0.4.7
- 0.4.6
- 0.4.5
- 0.4.4
- 0.4.3
- 0.4.2
- 0.4.1
- 0.4.0
- 0.3.9
- 0.3.8
- 0.3.7
- 0.3.6
- 0.3.5
- 0.3.4
- 0.3.3
- 0.3.2
- 0.3.1
- 0.3
- 0.2
- 0.1
- dev-php82
- dev-master-dotyml
- dev-master-win
- dev-master-mysqld-path
- dev-master-perm-doc
- dev-master-logdir
This package is auto-updated.
Last update: 2024-09-02 23:47:37 UTC
README
sudo curl -LsS https://download.civicrm.org/amp/amp.phar -o /usr/local/bin/amp
sudo chmod +x /usr/local/bin/amp
构建和测试
构建和测试过程基于 composer
、phpunit
和 box
。
为了便于在 Linux 和 macOS 上使用多个版本的 php
和 mysqld
进行本地开发和测试,该仓库包含一些辅助工具:default.nix
、./scripts/run-tests.sh
和 ./scripts/run-build.sh
。这些辅助脚本需要 nix 包管理器。使用方法
## Get the code
git clone https://github.com/amp-cli/amp
cd amp
## Start a shell with php+composer
nix-shell
## Run the test suites
./scripts/run-tests.sh
## Run the build, creating "dist/amp.phar"
./scripts/run-build.sh
关于 amp
:愿景
amp
是一个用于促进 PHP 网络应用程序开发的工具。目标是补充 composer
(以及类似工具)通过添加一个(主要)自动化的步骤来设置新下载代码的数据库和 web 服务器。例如,检查项目的开发者可能会说
me@localhost:~/src$ composer create-project example/my-application --dev
me@localhost:~/src$ cd my-application
me@localhost:~/src/my-application$ ./bin/amp create --url=http://localhost:8003
URL: http://localhost:8003
Admin User: admin
Admin Password zFWx9D22
my-application
包依赖于 amp
包(使用 require-dev
或 suggest
)。amp create
步骤会在本地 mysqld 中创建一个新的数据库,在本地 httpd 中创建一个新的虚拟主机;然后它将必要的凭据(例如 mysql 用户名和密码)写入配置文件。
其他想法
amp
不是一个包含捆绑二进制的完整堆栈(对于 PHP、MySQL 等)。amp
不是一个用于远程服务器的集群管理工具。amp
不是一个一键安装程序。amp
不是一个系统管理套件。amp
主要是一个本地 *AMP 堆栈的接口——它旨在帮助应用开发者编写自己的安装脚本。amp
旨在是可移植的——以与常见的 PHP 开发环境(如 Debian/Ubuntu、MAMP、XAMPP 或 MacPorts)一起工作。amp
是为开发和技术测试而设计的。如果您需要在不同环境中自动安装从源代码复制应用程序的副本(用于集成测试、测试用例、演示、错误修复、培训、协作等),那么amp
可以帮助您。
关于 amp
:预-alpha 示例
在撰写本文时,amp
正在开发中,并未完全实现其愿景。在第三行,开发者不应该直接调用 amp create
;相反,my-application
的作者应包括一个 install.sh
脚本,下游开发者可以运行它
me@localhost:~/src$ composer create-project example/my-application --dev
me@localhost:~/src$ cd my-application
me@localhost:~/src/my-application$ ./bin/amp config
me@localhost:~/src/my-application$ ./bin/install.sh
Login to the application:
* URL: ${AMP_URL}
* Username: admin
* Password: default
amp config
命令确定如何连接到 MySQL 和 httpd。它可能会扫描本地系统中的常见配置(Ubuntu 与 MAMP 或 MacPorts;Apache 与 nginx),提示用户输入信息,并将信息(在 ~/.amp 中)保留供将来使用。
install.sh
主要针对特定应用程序,但它建立在 amp
之上,以解决设置 mysqld 和 httpd 的繁琐部分。例如,有人可能会说
#!/bin/bash
set -e
APPDIR=`pwd`
## Create a new database and virtual-host
eval $(amp create --root="$APPDIR/web")
amp datadir "$APPDIR/log" "$APPDIR/cache"
## Load DB
cat $APPDIR/sql/install.sql | mysql -u$AMP_DB_USER -p$AMP_DB_PASS $AMP_DB_NAME
## Create config file
cat > $APPDIR/conf/my-application.ini <<MYCONFIG
[mysql]
username=${AMP_DB_USER}
password=${AMP_DB_PASS}
database=${AMP_DB_NAME}
hostname=${AMP_DB_HOST}
MYCONFIG
echo "Login to the application:"
echo " * URL: ${AMP_URL}"
echo " * Username: admin"
echo " * Password: default"
待办事项
请参阅 doc/backlog.md
常见问题解答
问:amp
是否稳定?我应该现在就依赖它吗?
答:可能不是。 amp
是预-alpha。接口和工作流程可能会改变。
问:如何配置 amp
以在系统上工作?
答:运行 `amp config`
问:如何知道 amp
是否正在工作?
答:运行 amp test
问:amp
如何分配虚拟主机名和端口?
A: 您可以通过传递 --url
选项到 create
来指定一个。如果省略,它将使用 localhost
并分配一个替代端口。
Q: amp
如何命名数据库和数据库用户?
A: 名称是通过取目录名(例如 my-application
)并附加一些随机字符来计算的。目录名可能会被截断以满足 MySQL 的大小限制。数据库和用户名称相同。
Q: amp
将其配置数据存储在哪里?
A: 默认情况下,存储在 ~/.amp
。如果您定义了环境变量 AMPHOME,它将存储在指定的目录中。
Q: 我安装了五个网络应用。AMP如何区分它们?
A: 每个应用都应该有自己的目录(例如 /home/me/src/my-application-1
)。默认情况下,amp
假设每个目录对应一个单独的虚拟主机和一个单独的 MySQL 数据库。如果您需要为该应用添加额外的虚拟主机和数据库,请再次使用带 --name
参数的 create
调用。如果您想要额外的虚拟主机 XOR 数据库,指定 --skip-db
或 --skip-url
。
Q: 如何为 amp 构建独立的 PHAR 可执行文件?
A: 安装 Box。然后,在 amp 源目录中,运行 "php -d phar.readonly=0 which box
build"。
内部架构
amp
使用了 Symfony 2 的组件(例如 Console、Config 和 Dependency-Injection)。
在容器中定义了一些关键服务
db
-- 一个用于创建和销毁 MySQL 数据库的服务(基于DatabaseManagementInterface
)httpd
-- 一个用于创建和销毁 HTTP 虚拟主机的服务(基于HttpdInterface
)perm
-- 一个用于设置数据目录文件权限的服务(基于PermissionInterface
)hosts
-- 一个将主机名映射到本地 httpd 的服务(基于HostnameInterface
)instances
-- 一个用于 CRUD 网络应用实例的存储库(使用db
和httpd
服务),将元数据存储在 YAML(~/.app/instances.yml
)中。
可能有 db
、httpd
、hosts
和 perm
的竞争实现 -- 例如,一个实现可能连接到远程 mysqld,而另一个在 ramdisk 上启动本地 mysqld。这些可以在运行时通过调用如命令来选择
## Set options interactively
amp config
## Set options individually
amp config:set --httpd_type=XXX
amp config:set --db_type=XXX
amp config:set --perm_type=XXX
## Set options en masse
amp config:set --httpd_type=XXX --db_type=XXX --perm_type=XXX
参数和服务可以在 amp 的源树(app/defaults/services.yml
)或本地家目录(~/.amp/services.yml
)中进行配置。通过 CLI(amp config
、amp config:set
等)输入的参数存储在本地家目录(~/.amp/services.yml
)中。