目前在Swisscom云上运行的WordPress和MySQL实例。但上周突然wp-content,被删除,因内容缺失而无法正常运行网站。之后,我与Swisscom进行了沟通,他们解释了问题和可能的解决方案。他们建议使用外部服务来存储内容媒体文件和其他文档。但我不知道该怎么做。
如果有人解决了同样的问题,请提供解决方案或提出一些建议。
答案 0 :(得分:0)
编辑版本:
此解决方案不适合将wordpress生产部署到云端,因为短暂的文件系统会在应用程序重新启动或暂存时导致数据丢失。这可以随时发生。另一个问题可能是应用程序的水平扩展,其中多个实例都具有不同步的不同短暂文件系统。因此,该解决方案不能用于生产。
这是由于Wordpress的体系结构目前还没有为云环境而不是云本身做好准备。部署到云的应用程序应尊重twelve-factor app rules。
这个小小的方法可以用于博客以及备份足够且不需要多个实例的所有情况。
我尝试在Swisscom Cloud上进行wordpress的基本安装。 首先我下载了wordpress的代码。它应该出现一个名为“wp-config-sample.php”的文件。将其重命名为“wp-config.php”并替换文件中的以下行:
// ** Read MySQL service properties from _ENV['VCAP_SERVICES']
$services = json_decode($_ENV['VCAP_SERVICES'], true);
$service = $services['mariadb'][0]; // pick the first MySQL service
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', $service['credentials']['database']);
/** MySQL database username */
define('DB_USER', $service['credentials']['username']);
/** MySQL database password */
define('DB_PASSWORD', $service['credentials']['password']);
/** MySQL hostname */
define('DB_HOST', $service['credentials']['host'] . ':' . $service['credentials']['port']);
/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8');
/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');
这些行允许wordpress从环境变量中获取数据库凭据。在这种特定情况下,变量键指向Swisscom mariadb服务。如果应用重新启动,这些信息将自动提供给应用。
确保创建一个mariadb并将其绑定到应用程序。这可以通过不同方式和部署的不同阶段完成。
为了定期执行应用程序媒体的备份,我安装了一个插件来备份兼容的S3存储。 Swisscom动态存储服务是S3兼容存储,您可以将此服务与插件updraftplus一起使用。所以首先我使用wordpress插件管理器安装了插件。 然后我创建了一个附加到应用程序的动态存储服务。在重新分配应用程序之后,您可以使用Cloud Foundry cli列出应用程序的环境变量:
cf env appName
你应该得到这样的东西:
{
"VCAP_SERVICES": {
"dynstrg": [
{
"credentials": {
"accessHost": "ds31s3.swisscom.com",
"accessKey": "key",
"sharedSecret": "secret"
},
"label": "dynstrg",
"name": "test-ivan-dynstrg",
"plan": "usage",
"provider": null,
"syslog_drain_url": null,
"tags": [],
"volume_mounts": []
}
],
"mariadb": [
{
"credentials": {
"database": "database",
"database_uri": "mysql://uri",
"host": "10.0.20.18",
"jdbcUrl": "jdbc:mysql://uri",
"name": "name",
"password": "pass",
"port": 3306,
"uri": "uri",
"username": "user"
},
"label": "mariadb",
"name": "test-ivan-mariadb",
"plan": "small",
"provider": null,
"syslog_drain_url": null,
"tags": [],
"volume_mounts": []
}
]
}
}
记下“accessHost”,“accessKey”和“sharedSecret”。
此时您需要在动态存储上创建一个存储桶。您可以使用不同类型的应用程序执行此操作。 这一步非常重要。如果没有存储桶,插件就无法使用。
创建存储桶后,请记下其名称。
现在您可以配置“updraftplus”插件: 您需要选择S3兼容(通用)服务,并在S3端点字段中输入accessHost,在S3访问密钥中输入accessKey,在S3密钥中输入sharedSecret,并在字段S3位置输入存储桶的名称。 这应该正确配置插件。现在您可以备份这两个文件而不是数据库。
请记住,当应用程序重新启动时,将不再安装插件(它已安装在临时文件系统上),因此您需要重新安装它并在之后执行还原过程。
此解决方案仍可能导致数据丢失。备份可能比崩溃或重新启动应用程序更旧。
但是对于个人博客的用例可能很有用。