头图

WordPress是个很著名的内容管理平台(CMS),因为操作简单功能全面,从个人博客到大型企业官网,很多网站背后可能都是由它来支撑的。当你需要从零开始搭建一个WP站时,MySQL、Apache、PHP、WordPress各种安装和配置,你觉得自己能在多长时间内完成?

如果选择Linode云平台,难么在Cloud-init的帮助下,只需要1:58。

那么Cloud-init又是什么?

Cloud-init是一个广泛使用的开源软件包,用于在云计算环境中初始化和配置云实例(虚拟机或实例)。它常用于基础架构即服务(IaaS)和云平台,如Akamai Connected Cloud、Amazon Web Services(AWS)、Google Cloud Platform(GCP)、Microsoft Azure和其他各种云提供商。

Cloud-init允许我们在实例加载时或启动时定义并执行自定义脚本和配置。它通常会在云实例调配时提供与云实例有关的元数据。该元数据可包括用户数据,其中就包含脚本或YAML文件形式的云启动配置。

Cloud-init的主要功能和使用案例包括:

  • 操作系统配置:可以使用Cloud-init执行各种任务,如设置主机名、配置网络接口、设置用户等。
  • 软件包安装:Cloud-init可用于在新配置的实例上安装软件包、库或应用程序。
    * 用户数据:可以向实例传递特定用户的数据,这些数据可用于在启动时自定义实例行为。例如,可以用它来配置软件、安装附加软件包或运行脚本。
  • 安全性:可以使用Cloud-init设置SSH密钥以实现安全访问、设置防火墙规则或执行其他与安全相关的任务。
  • 自定义:Cloud-init允许我们定义特定实例的自定义功能,从而更轻松地自动设置和配置实例。
  • 与云提供商无关:虽然Cloud-init常用于各种云提供商,但它与特定云平台无关,可以在许多不同环境中使用。
  • 灵活性:能够以脚本或YAML文件的形式提供Cloud-init配置,从而灵活定义初始化和配置流程。

好吧,但我们该如何使用呢?其实很简单。在这个例子中,我们安装了5个软件包,并运行一些命令来下载WordPress、创建DB用户、准备wp-config文件等。

请确保使用更安全的密码和/或通过更妥善的方式将凭证传送到虚拟机。纯文本密码仅用于演示目的,在现实世界中,绝对不要这样做!

登录Linode云管理器界面,点击“Create Linode”按钮。

确保选择了可支持Cloud-init的发行版!这样的发行版名称旁会有一个“文件”图标。

image.png

下一步(除了选择区域、实例类型、密钥和密码外)是展开“User Data”部分并粘贴以下代码,然后点击“Deploy”。
image.png

#cloud-config
packages:
  - apache2
  - mysql-server
  - php8.1
  - libapache2-mod-php8.1
  - php8.1-mysql
runcmd:
  - mkdir -p /var/www/html  # Create the /var/www/html directory if it doesn't exist
  - rm -f /var/www/html/index.html  # Remove the default index.html file
  - [wget, https://wordpress.org/latest.tar.gz, -O, /tmp/wordpress.tar.gz]
  - [tar, -xvzf, /tmp/wordpress.tar.gz, -C, /var/www/html]
  - mv /var/www/html/wordpress/* /var/www/html/  # Move WordPress files to the root of the web directory
  - [chown, -R, www-data:www-data, /var/www/html]
  - |
    mysql -u root -e "CREATE DATABASE wordpress;"
    mysql -u root -e "CREATE USER 'wordpressuser'@'localhost' IDENTIFIED BY 'ComplexPassword123#';"
    mysql -u root -e "GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpressuser'@'localhost';"
    mysql -u root -e "FLUSH PRIVILEGES;"
  - cp /var/www/html/wp-config-sample.php /var/www/html/wp-config.php
  - sed -i 's/database_name_here/wordpress/g' /var/www/html/wp-config.php
  - sed -i 's/username_here/wordpressuser/g' /var/www/html/wp-config.php
  - sed -i 's/password_here/ComplexPassword123#/g' /var/www/html/wp-config.php
  - a2enmod php8.1  # Enable PHP module
  - systemctl restart apache2  # Restart Apache to apply the changes

打开浏览器,访问服务器的IP地址,不到2分钟后,我们就会看到WordPress的“完成设置”页面。在这里我们需要指定自己的电子邮件地址、用户名和密码。

image.png

使用“metadata”块并对Cloud-init脚本进行Base64编码,就能通过Terraform实现同样的功能。

resource "linode_instance" "wordpressviacloudinit" {
  label = "Wordpress-via-cloudinit"
  image = "linode/ubuntu22.04"
  region = "us-iad"
  type = "g6-standard-1"
  authorized_keys = ["ssh-rsa AAAA...Gw== user@example.local"]
  root_pass = "terr4form-test"
 metadata {
    user_data = "I2Nsb3VkLWNvbmZpZwpwYWNrYWdlczoKICAtIGFwYWNoZTIKICAtIG15c3FsLXNlcnZlcgogIC0gcGhwOC4xCiAgLSBsaWJhcGFjaGUyLW1vZC1waHA4LjEKICAtIHBocDguMS1teXNxbApydW5jbWQ6CiAgLSBta2RpciAtcCAvdmFyL3d3dy9odG1sICAjIENyZWF0ZSB0aGUgL3Zhci93d3cvaHRtbCBkaXJlY3RvcnkgaWYgaXQgZG9lc24ndCBleGlzdAogIC0gcm0gLWYgL3Zhci93d3cvaHRtbC9pbmRleC5odG1sICAjIFJlbW92ZSB0aGUgZGVmYXVsdCBpbmRleC5odG1sIGZpbGUKICAtIFt3Z2V0LCBodHRwczovL3dvcmRwcmVzcy5vcmcvbGF0ZXN0LnRhci5neiwgLU8sIC90bXAvd29yZHByZXNzLnRhci5nel0KICAtIFt0YXIsIC14dnpmLCAvdG1wL3dvcmRwcmVzcy50YXIuZ3osIC1DLCAvdmFyL3d3dy9odG1sXQogIC0gbXYgL3Zhci93d3cvaHRtbC93b3JkcHJlc3MvKiAvdmFyL3d3dy9odG1sLyAgIyBNb3ZlIFdvcmRQcmVzcyBmaWxlcyB0byB0aGUgcm9vdCBvZiB0aGUgd2ViIGRpcmVjdG9yeQogIC0gW2Nob3duLCAtUiwgd3d3LWRhdGE6d3d3LWRhdGEsIC92YXIvd3d3L2h0bWxdCiAgLSB8CiAgICBteXNxbCAtdSByb290IC1lICJDUkVBVEUgREFUQUJBU0Ugd29yZHByZXNzOyIKICAgIG15c3FsIC11IHJvb3QgLWUgIkNSRUFURSBVU0VSICd3b3JkcHJlc3N1c2VyJ0AnbG9jYWxob3N0JyBJREVOVElGSUVEIEJZICdDb21wbGV4UGFzc3dvcmQxMjMjJzsiCiAgICBteXNxbCAtdSByb290IC1lICJHUkFOVCBBTEwgUFJJVklMRUdFUyBPTiB3b3JkcHJlc3MuKiBUTyAnd29yZHByZXNzdXNlcidAJ2xvY2FsaG9zdCc7IgogICAgbXlzcWwgLXUgcm9vdCAtZSAiRkxVU0ggUFJJVklMRUdFUzsiCiAgLSBjcCAvdmFyL3d3dy9odG1sL3dwLWNvbmZpZy1zYW1wbGUucGhwIC92YXIvd3d3L2h0bWwvd3AtY29uZmlnLnBocAogIC0gc2VkIC1pICdzL2RhdGFiYXNlX25hbWVfaGVyZS93b3JkcHJlc3MvZycgL3Zhci93d3cvaHRtbC93cC1jb25maWcucGhwCiAgLSBzZWQgLWkgJ3MvdXNlcm5hbWVfaGVyZS93b3JkcHJlc3N1c2VyL2cnIC92YXIvd3d3L2h0bWwvd3AtY29uZmlnLnBocAogIC0gc2VkIC1pICdzL3Bhc3N3b3JkX2hlcmUvQ29tcGxleFBhc3N3b3JkMTIzIy9nJyAvdmFyL3d3dy9odG1sL3dwLWNvbmZpZy5waHAKICAtIGEyZW5tb2QgcGhwOC4xICAjIEVuYWJsZSBQSFAgbW9kdWxlCiAgLSBzeXN0ZW1jdGwgcmVzdGFydCBhcGFjaGUyICAjIFJlc3RhcnQgQXBhY2hlIHRvIGFwcGx5IHRoZSBjaGFuZ2VzCg=="
  }
  group = "foo"
  tags = [ "foo" ]
  swap_size = 512
  private_ip = false
}

当然,我们可以用Cloud-init来做任何事,但最理想的用法是引导实例,这样我们的配置管理工具就能在Terraform创建实例后接管。

还想知道Linode云平台上有什么高效简单的操作技巧或者类似这种的方便解决方案?关注Akamai思否机构号吧,我们会定期发文,与大家分享更多方便实用的技巧。敬请期待。


Akamai
1 声望1 粉丝

Akamai 支持并保护网络生活。全球各大优秀公司纷纷选择 Akamai 来打造并提供安全的数字化体验,为数十亿人每天的生活、工作和娱乐提供助力。 我们横跨云端和边缘的计算平台在全球广泛分布,不仅能让客户轻松开发...