diff --git a/docs/tech_docs/cloud-init.md b/docs/tech_docs/cloud-init.md new file mode 100644 index 0000000..e1eb1ff --- /dev/null +++ b/docs/tech_docs/cloud-init.md @@ -0,0 +1,60 @@ +Here's a simple example of using cloud-init to automate the configuration of an instance on first boot: + +```yaml +#cloud-config + +# Update packages on first boot +package_update: true +package_upgrade: true + +# Install additional packages +packages: + - nginx + - php-fpm + +# Write files to the system +write_files: + - path: /var/www/html/index.php + content: | + + +# Run commands on first boot +runcmd: + - systemctl start nginx + - systemctl enable nginx + +# Create a user +users: + - name: webadmin + groups: sudo + shell: /bin/bash + sudo: ['ALL=(ALL) NOPASSWD:ALL'] + ssh_authorized_keys: + - ssh-rsa AAAAB3NzaC1yc2EAA...your_public_ssh_key_here + +# Configure SSH access +ssh_pwauth: false +disable_root: true +``` + +In this example: + +1. The `package_update` and `package_upgrade` directives ensure that the system packages are updated on first boot. + +2. The `packages` section specifies additional packages to be installed, in this case, `nginx` and `php-fpm`. + +3. The `write_files` section is used to create a file on the system. Here, it creates a simple PHP script at `/var/www/html/index.php`. + +4. The `runcmd` section specifies commands to be executed on first boot. In this case, it starts and enables the Nginx service. + +5. The `users` section is used to create a user named `webadmin` with sudo privileges and an authorized SSH key. + +6. The `ssh_pwauth` and `disable_root` directives are used to configure SSH access, disabling password authentication and root login. + +To use this cloud-init configuration, you would save it as a YAML file (e.g., `cloud-config.yaml`) and provide it to your cloud provider or provisioning tool when launching a new instance. + +Cloud-init will execute the specified configuration on the instance's first boot, automating the process of updating packages, installing software, creating files and users, and configuring SSH access. + +This is just a simple example, but cloud-init supports a wide range of directives and modules for configuring various aspects of an instance, such as networking, storage, and more. \ No newline at end of file