自定义 DDEV 拉取提供程序以更新本地数据库和用户生成的文件
custom DDEV pull provider to update local database and user generated files
我正在尝试创建自定义 DDEV 提供程序,以导入当前数据库以及用户从 Web 服务器生成的文件。
我想将它与 TYPO3 项目一起使用,我在其中使用 DDEV 在本地开发 EXT(因为它很棒 :))并且我想更新我的本地数据库以及借助 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
- Windows 10 (WSL)
- Docker 桌面版 3.5.2
- DDEV-本地版本v1.17.7
- 架构 amd64
- db drud/ddev-dbserver-mariadb-10.3:v1.17.7
- dba phpmyadmin:5
- ddev-ssh-agent drud/ddev-ssh-agent:v1.17.0
- docker 20.10.7
- docker-撰写 1.29.2
网络服务器运行正在 Plesk 上。
注意:到目前为止,我只尝试执行 db pull 命令。
更新 09.11.21:
到目前为止,我已经可以更新和下载文件了。但是,如果我对变量进行硬编码,我只能这样做。每次我尝试设置 environment_variables:
我都会收到以下错误,如果我 运行 ddev pull myProvider
:
Downloading database...
bash: 03: command not found
这是我当前的带有 environment_variables:
的 .yaml 文件,目前无法使用。我已经测试了 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 文件可以帮助其他需要从网络服务器中提取数据的人。
我正在尝试创建自定义 DDEV 提供程序,以导入当前数据库以及用户从 Web 服务器生成的文件。
我想将它与 TYPO3 项目一起使用,我在其中使用 DDEV 在本地开发 EXT(因为它很棒 :))并且我想更新我的本地数据库以及借助 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
- Windows 10 (WSL)
- Docker 桌面版 3.5.2
- DDEV-本地版本v1.17.7
- 架构 amd64
- db drud/ddev-dbserver-mariadb-10.3:v1.17.7
- dba phpmyadmin:5
- ddev-ssh-agent drud/ddev-ssh-agent:v1.17.0
- docker 20.10.7
- docker-撰写 1.29.2
网络服务器运行正在 Plesk 上。
注意:到目前为止,我只尝试执行 db pull 命令。
更新 09.11.21:
到目前为止,我已经可以更新和下载文件了。但是,如果我对变量进行硬编码,我只能这样做。每次我尝试设置 environment_variables:
我都会收到以下错误,如果我 运行 ddev pull myProvider
:
Downloading database...
bash: 03: command not found
这是我当前的带有 environment_variables:
的 .yaml 文件,目前无法使用。我已经测试了 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 文件可以帮助其他需要从网络服务器中提取数据的人。