typo3 - 自定义 DDEV 拉取提供程序以更新本地数据库和用户生成的文件
问题描述
我正在尝试创建一个自定义 DDEV 提供程序,以从 Web 服务器导入当前数据库以及用户生成的文件。
我想将它与 TYPO3 项目一起使用,在那里我使用 DDEV 在本地开发 EXT(因为它很棒:))并且我想在该功能的帮助下更新我的本地数据库以及“fileadmin”文件ddev pull
。
我已经阅读了文档:Introduction to Hosting Provider Integration,并且我在 DDEV 容器 ( ddev ssh
) 中本地测试了 bash 命令,并且我能够连接到远程 Web 服务器并进行数据库转储并将其传输到本地 DDEV 容器。
因此,我将 bash 命令添加到 /provider/ 文件夹中的自定义提供程序 .yaml 文件中。
这是当前文件:
environment_variables:
DB_NAME: db_name
DB_USER: password
DB_PASSWORD: password
HOST_IP: 11.11.11.11
SSH_USERNAME: username
SSH_PASSWORD: password
SSH_PORT: 22
db_pull_command:
command: |
# Creates the .download folder if it doesn't exist
mkdir -p /var/www/html/.ddev/.downloads
# execute the mysqldump on the remote webserver via SSH
ssh -p ${SSH_PORT} ${SSH_USERNAME}@${HOST_IP} 'mysqldump -h 127.0.0.1 -u ${DB_USER} -p ${DB_PASSWORD} ${DB_NAME} > /tmp/${DB_NAME}.sql.gz'
# download to sql file to the ddev folder
scp -P ${SSH_PORT} ${SSH_USERNAME}@${HOST_IP}:/tmp/${DB_NAME}.sql.gz /var/www/html/.ddev/.downloads/db.sql.gz.
如果我执行拉动,ddev pull my-provider
我会收到以下错误:
Downloading database...
bash: 03: command not found
Pull failed: Failed to exec mkdir -p /var/www/html/.ddev/.downloads
我假设命令的执行方式与我在 DDEV 容器中的执行方式相同(带有ddev ssh
)。我错过了什么?
我的环境:
- TYPO3 v10.4.20
- 视窗 10 (WSL)
- Docker 桌面 3.5.2
- DDEV-本地版 v1.17.7
- 架构 amd64
- db drud/ddev-dbserver-mariadb-10.3:v1.17.7
- 数据库管理员 phpmyadmin:5
- ddev-ssh-agent drud/ddev-ssh-agent:v1.17.0
- 码头工人 20.10.7
- 码头工人撰写 1.29.2
Web 服务器在 Plesk 上运行。
注意:到目前为止,我只尝试实现 db pull 命令。
更新 09.11.21:
所以我已经走到了这一步,我可以更新并下载文件。但是,如果我对变量进行硬编码,我只能做到这一点。每次我尝试设置environment_variables:
我都会收到以下错误,如果我运行ddev pull myProvider
:
Downloading database...
bash: 03: command not found
这是我当前的 .yaml 文件environment_variables:
,它目前不起作用。我已经测试了其中的所有命令ddev ssh
,如果我手动调用它们,它就可以工作。
environment_variables:
DB_NAME: db_name
DB_USER: db_user
DB_PASSWORD: 'Password$'
HOST_IP: 10.10.10.10
SSH_USERNAME: username
SSH_PORT: 21
auth_command:
command: |
ssh-add -l >/dev/null || ( echo "Please 'ddev auth ssh' before running this command." && exit 1 )
db_pull_command:
command: |
mkdir -p /var/www/html/.ddev/.downloads
ssh -p ${SSH_PORT} ${SSH_USERNAME}@${HOST_IP} "mysqldump -h 127.0.0.1 -u ${DB_USER} -p'${DB_PASSWORD}' ${DB_NAME} > /tmp/${DB_NAME}.sql"
scp -P ${SSH_PORT} ${SSH_USERNAME}@${HOST_IP}:/tmp/${DB_NAME}.sql /var/www/html/.ddev/.downloads/db.sql
gzip -f /var/www/html/.ddev/.downloads/db.sql
files_pull_command:
command: |
scp -P ${SSH_PORT} -r ${SSH_USERNAME}@${HOST_IP}:/path/to/public/fileadmin/user_upload /var/www/html/.ddev/.downloads/files
我是否以错误的方式声明变量?或者我错过了什么?
对于在没有密码提示的情况下通过 ssh 连接时遇到问题的任何人,您可以运行以下命令:
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 22 username@host
- 之后,您应该能够在没有密码提示的情况下进行连接。尝试以下操作:
ssh -p 22 username@host
- 在你尝试之前你
ddev puul
必须执行ddev auth ssh
解决方案
感谢@rfay 为我指明了正确的方向。
问题是,我的密码包含一个$
需要转义的特殊字符(不是虽然)。
像这样正确转义后
environment_variables:
DB_PASSWORD: 'Password\&\'
ddev pull
作品。
我希望我的 .yaml 文件可以帮助需要从网络服务器中提取的其他人。
推荐阅读
- javascript - 如何禁用 href 链接上的“/”预设,以便在单击按钮时不会将完整的外部 URL 添加到站点链接?
- flutter - MDC 102 Flutter Material -- AppBar 未显示
- firebase - 我有一个火力基地开发和生产。如何使用应用目标 firebase.initializeApp 应用程序?
- r - 如何通过使用 dplyr 填充值范围来扩展数据框
- java - 如何在 Java 中将 ApiModelProperty 列表值移到“[”之外
- swift - 为 Xcode 12.2 安装命令行开发者工具
- javascript - Axios.post 拒绝与 SendGrid 的连接
- ios - 呈现新控制器后,UITabBarController 重置选项卡的选项卡标题颜色
- c# - 如何使用实体框架对 JSON 进行反序列化并保存到数据库
- javascript - 在 Typescript 中推断类型 - : vs =