WordPress是个很著名的内容管理平台(CMS),因为操作简单功能全面,从个人博客到大型企业官网,很多网站背后可能都是由它来支撑的。当你需要从零开始搭建一个WP站时,MySQL、Apache、PHP、WordPress各种安装和配置,你觉得自己能在多长时间内完成?
延伸阅读,点击链接了解 Akamai Cloud Computing
如果选择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的发行版!这样的发行版名称旁会有一个“文件”图标。
下一步(除了选择区域、实例类型、密钥和密码外)是展开“User Data”部分并粘贴以下代码,然后点击“Deploy”。
#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的“完成设置”页面。在这里我们需要指定自己的电子邮件地址、用户名和密码。
使用“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创建实例后接管。
—————————————————————————————————————————————————
如您所在的企业也在考虑采购云服务或进行云迁移,
点击链接了解Akamai Linode的解决方案