https://github.com/mjtechguy/do-gpu-terraform
Terraform code to deploy and configure a DigitalOcean GPU node
https://github.com/mjtechguy/do-gpu-terraform
ai artificial-intelligence digitalocean inference-engine ollama terraform
Last synced: about 2 months ago
JSON representation
Terraform code to deploy and configure a DigitalOcean GPU node
- Host: GitHub
- URL: https://github.com/mjtechguy/do-gpu-terraform
- Owner: mjtechguy
- License: mit
- Created: 2025-01-25T04:17:40.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-01-25T20:37:15.000Z (over 1 year ago)
- Last Synced: 2025-09-27T07:03:03.981Z (9 months ago)
- Topics: ai, artificial-intelligence, digitalocean, inference-engine, ollama, terraform
- Language: HCL
- Homepage:
- Size: 11.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Digital Ocean GPU With Terraform
This project utilizes Terraform to deploy a GPU-optimized Droplet on DigitalOcean, configured with essential packages and tools for performance monitoring and system management. The deployment is automated using a cloud-init script to streamline the setup process.
## Prerequisites
Before you begin, ensure you have the following:
- Terraform: Installed on your local machine.
- DigitalOcean Account: Access to create Droplets and manage resources.
- DigitalOcean API Token: Generate a personal access token from your DigitalOcean account.
- Account approved for GPU usage: Ensure your account is approved for GPU usage on DigitalOcean. Contact support if you need to enable GPU access.
## Cloud-Init Script
The `cloud-init.yaml` script is used to automate the initial configuration of the Droplet. It performs the following actions:
- Updates and upgrades existing packages
- Installs essential packages: htop, tar, git, wget, curl, nano, unzip, and nvtop
- Downloads and installs btop for resource monitoring. (which inlcudes the option to monitor GPU usage)
- Optional: Uncomment lines to install ollama and pull llama3.3 for inferencing
## Firewall Configuration
The `firewall.tf` file configures the DigitalOcean firewall to restrict access to the Droplet. By default, only the IP addresses specified in the `allowed_ips` variable are allowed to access all ports on the Droplet.
## Variables
The following table outlines the variables in the `terraform.tfvars` file used in this project:
| Variable | Description | Type | Default | Required |
|----------------------|-------------------------------------------------------|--------|--------------------------|----------|
| `do_token` | DigitalOcean API token | string | | yes |
| `project_name` | Name of the project where Droplet will be created | string | `gpu-terraform` | yes |
| `droplet_name` | Name of the Droplet | string | `gpu-droplet` | no |
| `region` | Region to deploy the Droplet | string | `nyc2` | no |
| `size` | Droplet size slug | string | `gpu-h100x1-80gb` | no |
| `image` | Droplet image slug | string | `gpu-h100x1-base` | no |
| `ssh_key_name` | Name for the SSH key | string | `my-custom-key` | no |
| `allowed_ips` | List of IPs allowed to access all ports | list | `["192.0.2.1/32"]` | no |
| `enable_destroy_cron`| Enable or disable the creation of the delete cronjob | bool | `false` | no |
| `destroy_after_minutes`| Time in minutes before the Droplet is destroyed | number | `60` | no |
Note: Replace the default values with your specific configurations as needed. Also, uncomment the lines for `enabled_destroy_cron` and `destroy_after_minutes` if you wish to enable the automatic deletion of the Droplet. This only works on Linux systems.
## Usage
1. Clone the repository and navigate to the project directory
2. Copy the `terraform.tfvars.example` file to `terraform.tfvars` and update the variables with your configurations.
3. Initialize Terraform: Run `terraform init` to initialize the project and download necessary providers.
4. Plan the Deployment: Execute `terraform plan` to review the resources that will be created.
5. Apply the Configuration: Run `terraform apply` to create the Droplet and associated resources.
6. Access the Droplet: Use the provided SSH command output to connect to your Droplet.
## Outputs
After applying the configuration, Terraform will provide the following outputs:
- id_rsa: The private SSH key for connecting to the Droplet.
- id_rsa.pub: The public SSH key for connecting to the Droplet.
- ssh_command: The SSH command to connect to the Droplet.
## Security Considerations
- Ensure that your do_token is kept secure and not exposed in version control systems.
- Only include trusted IP addresses in the allowed_ips variable to maintain security.
## Cleanup
To destroy the resources created by this project, run:
`terraform destroy`
This command will remove all resources defined in your Terraform configuration.
Or, if you enabled the destroy cronjob, the Droplet will be automatically deleted at the specified time. (Linux support only)
## License
This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for more information.