集成动态S3(用于存储WP-CONTENT文件夹),SQL数据库和WordPress在Swisscom应用程序云中



当前在Swisscom Cloud上运行的WordPress和MySQL实例。但是上周突然,WP-content被删除,由于缺少内容而无法正确运行网站。之后,我与Swisscom进行了交流,他们解释了问题和可能的解决方案。他们建议使用外部服务来存储内容媒体文件和其他文档。但是我不知道该怎么做。

如果有人解决了相同的问题,请提供您的解决方案或提供一些建议。

在这里,Swisscom产品管理的官方答案:

我们不对应用程序云上的WordPress进行迫切支持。那里 是否有许多有关如何在云铸造厂部署WordPress的示例 可用,但它们仅适用于某些配置。到 我们最好的知识是没有有效的,通用的解决方案 适用于每个WordPress安装和配置。 因此,我们不公平地支持它。这些问题存在于 文件系统区域(WordPress需要非临时文件系统 工作)和意识到WordPress及其插件,它们可能是 在多个实例中运行(如果水平缩放)

编辑版本:

此解决方案不适合将WordPress的生产部署到云中,因为短暂文件系统随时在应用程序重新启动或上演时会导致数据丢失。这可以随时发生。另一个问题可能是应用程序的水平缩放,其中多个实例都具有不同的短暂文件系统未同步。因此,该解决方案不能用于生产。

这是由于WordPress的架构造成的,目前尚未准备好云环境而不是云本身。部署到云的应用程序应尊重十二个因素应用规则。

可以将这个小的howto用于博客,以及备份足够且不超过一个实例的所有情况。

我试图在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从环境变量中获取数据库凭据。在这种特定情况下,变量键指向瑞士杂志MariaDB服务。如果应用程序重新启动,这些信息将自动用于应用程序。

确保创建一个玛丽亚德B并将其绑定到应用程序。这可以以不同的方式和部署的不同阶段进行。

要定期执行应用程序媒体的备份,我安装了一个插件,以备份兼容兼容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": []
   }
  ]
 }
}

记下" Access -Host"," AccessKey"one_answers" sharedSecret"。

此时,您需要在动态存储上创建一个存储桶。您可以使用不同类型的应用程序来执行此操作。此步骤非常重要。没有水桶,插件不起作用。

创建了桶后记下它的名称。

现在您可以配置" updraftplus"插件:您需要选择S3兼容(通用)服务,然后在S3终点字段中输入AccessHost,S3 Access Key中的AccessKey,S3 Secret键中的共享Secret以及该字段S3位置中的存储桶名称。这应该正确配置插件。现在,您可以备份两个文件,而不是数据库。

请记住,当应用重新启动时,插件将不再安装(已安装在短暂文件系统上),因此您需要重新安装它并在之后执行Restore Process。

此解决方案仍然会导致数据丢失。备份可能比崩溃或重新启动应用程序更古老。

但对于个人博客的用例,可能很有用。

最新更新