Skip to content

Commit

Permalink
Merge pull request #15 from red5pro/feature/DEV-704
Browse files Browse the repository at this point in the history
Feature/dev 704
  • Loading branch information
iolesyk authored Nov 13, 2024
2 parents 9ffb3d6 + 46607ba commit 6337316
Show file tree
Hide file tree
Showing 53 changed files with 4,353 additions and 3,659 deletions.
650 changes: 363 additions & 287 deletions README.md

Large diffs are not rendered by default.

42 changes: 0 additions & 42 deletions database.tf

This file was deleted.

153 changes: 153 additions & 0 deletions examples/autoscale/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@

# Autoscaling Stream Managers 2.0 with autoscaling nodes (autoscale) - [Example](https://github.com/red5pro/terraform-oci-red5pro/tree/master/examples/autoscale)

In the following example, Terraform module will automates the infrastructure provisioning of the Autoscale Stream Managers 2.0 with Red5 Pro (SM2.0) Autoscaling node group (origins, edges, transcoders, relays)

## Terraform Deployed Resources (autoscale)

- VCN
- Public subnet
- Internet getaway
- Route table
- Security list
- Security group for Stream Manager 2.0
- Security group for Kafka
- Security group for Red5 Pro (SM2.0) Autoscaling nodes
- SSH key pair (use existing or create a new one)
- Standalone Kafka instance
- Stream Manager 2.0 instance image
- Instance poll for Stream Manager 2.0 instances
- Autoscaling configuration for Stream Manager 2.0 instances
- Application Load Balancer for Stream Manager 2.0 instances.
- SSL certificate for Application Load Balancer. Options:
- `none` - Load Balancer without HTTPS and SSL certificate. Only HTTP on port `80`
- `imported` - Load Balancer with HTTPS and imported SSL certificate. HTTP on port `80`, HTTPS on port `443`
- Red5 Pro (SM2.0) node instance image (origins, edges, transcoders, relays)
- Red5 Pro (SM2.0) Autoscaling node group (origins, edges, transcoders, relays)

## Example main.tf (autoscale)

```hcl
provider "oci" {
region = "us-ashburn-1"
tenancy_ocid = "ocid1.tenancy.oc1..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
user_ocid = "ocid1.user.oc1..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
fingerprint = "00:11:22:33:44:55:66:77:aa:bb:cc:dd:ee:ff:gg:hh"
private_key_path = "./example_oracle_private_key.pem"
}
module "red5pro" {
source = "../../"
type = "autoscale" # Deployment type: standalone, cluster, autoscale
name = "red5pro-auto" # Name to be used on all the resources as identifier
path_to_red5pro_build = "./red5pro-server-0.0.0.b0-release.zip" # Absolute path or relative path to Red5 Pro server ZIP file
# Oracle Cloud Account Details
oracle_compartment_id = "ocid1.compartment.oc1..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # Existing Compartment OCID of Oracle Cloud Account
oracle_tenancy_ocid = "ocid1.tenancy.oc1..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # Existing Tenancy OCID of Oracle Cloud Account
oracle_user_ocid = "ocid1.user.oc1..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # Existing User OCID of Oracle Cloud Account
oracle_fingerprint = "00:11:22:33:44:55:66:77:aa:bb:cc:dd:ee:ff:gg:hh" # Existing SSH based API key fingerprint of Oracle Cloud Account
oracle_private_key_path = "./example_oracle_private_key.pem" # Path to existing SSH private key of Oracle Cloud Account
oracle_region = "us-ashburn-1" # Current region code name of Oracle Cloud Account, https://docs.oracle.com/en-us/iaas/Content/General/Concepts/regions.htm
# SSH key configuration
ssh_key_use_existing = false # true - use existing SSH key, false - create new SSH key
ssh_key_existing_private_key_path = "/PATH/TO/SSH/PRIVATE/KEY/example_private_key.pem" # Path to existing SSH private key
ssh_key_existing_public_key_path = "/PATH/TO/SSH/PUBLIC/KEY/example_pub_key.pem" # Path to existing SSH Public key
# Red5 Pro general configuration
red5pro_license_key = "1111-2222-3333-4444" # Red5 Pro license key (https://account.red5.net/login)
red5pro_api_enable = true # true - enable Red5 Pro server API, false - disable Red5 Pro server API (https://www.red5.net/docs/development/api/overview/)
red5pro_api_key = "example_key" # Red5 Pro server API key (https://www.red5.net/docs/development/api/overview/)
# Stream Manager 2.0 instance configuration
stream_manager_instance_type = "VM.Standard.E4.Flex" # OCI Instance type for Stream Manager
stream_manager_instance_ocpu = 4 # OCI Instance OCPU Count for Stream Manager(1 OCPU = 2 vCPU)
stream_manager_instance_memory = 16 # OCI Instance Memory size in GB for Stream Manager
stream_manager_instance_volume_size = 50 # Volume size in GB for Stream Manager
stream_manager_auth_user = "example_user" # Stream Manager 2.0 authentication user name
stream_manager_auth_password = "example_password" # Stream Manager 2.0 authentication password
stream_manager_autoscaling_desired_capacity = 1 # Desired capacity for Stream Manager autoscaling group
stream_manager_autoscaling_minimum_capacity = 1 # Min capacity for Stream Manager autoscaling group
stream_manager_autoscaling_maximum_capacity = 2 # Max capacity for Stream Manager autoscaling group
# Kafka standalone instance configuration
kafka_standalone_instance_type = "VM.Standard.E4.Flex" # OCI Instance type for Kafka standalone instance
kafka_standalone_instance_ocpu = 1 # OCI Instance OCPU Count for Kafka standalone instance(1 OCPU = 2 vCPU)
kafka_standalone_instance_memory = 16 # OCI Instance Memory size in GB for Kafka standalone instance
kafka_standalone_instance_volume_size = 50 # Volume size in GB for Kafka standalone instance
load_balancer_reserved_ip_use_existing = false # true - use existing reserved IP for Load Balancer, false - create new reserved IP for Load Balancer,
load_balancer_reserved_ip_existing = "1.2.3.4" # Reserved IP for Load Balancer
# Stream Manager 2.0 Load Balancer HTTPS (SSL) certificate configuration
https_ssl_certificate = "none" # none - do not use HTTPS/SSL certificate, imported - import existing HTTPS/SSL certificate
# Example of imported HTTPS/SSL certificate configuration - please uncomment and provide your domain name, certificate and key paths
# https_ssl_certificate = "imported"
# https_ssl_certificate_domain_name = "red5pro.example.com"
# https_ssl_certificate_cert_path = "/PATH/TO/SSL/CERT/fullchain.pem"
# https_ssl_certificate_key_path = "/PATH/TO/SSL/KEY/privkey.pem"
# Red5 Pro autoscaling Node image configuration
node_image_create = true # Default: true for Autoscaling and Cluster, true - create new Red5 Pro Node image, false - do not create new Red5 Pro Node image
node_image_instance_type = "VM.Standard.E4.Flex" # Instance type for Red5 Pro Node image
node_image_instance_ocpu = 1 # OCI Instance OCPU Count for Red5 Pro Node image (1 OCPU = 2 vCPU)
node_image_instance_memory = 4 # OCI Instance Memory size in GB for Red5 Pro Node image
# Extra configuration for Red5 Pro autoscaling nodes
# Webhooks configuration - (Optional) https://www.red5.net/docs/special/webhooks/overview/
node_config_webhooks = {
enable = false,
target_nodes = ["origin", "edge", "transcoder"],
webhook_endpoint = "https://test.webhook.app/api/v1/broadcast/webhook"
}
# Round trip authentication configuration - (Optional) https://www.red5.net/docs/special/authplugin/simple-auth/
node_config_round_trip_auth = {
enable = false,
target_nodes = ["origin", "edge", "transcoder"],
auth_host = "round-trip-auth.example.com",
auth_port = 443,
auth_protocol = "https://",
auth_endpoint_validate = "/validateCredentials",
auth_endpoint_invalidate = "/invalidateCredentials"
}
# Restreamer configuration - (Optional) https://www.red5.net/docs/special/restreamer/overview/
node_config_restreamer = {
enable = false,
target_nodes = ["origin", "transcoder"],
restreamer_tsingest = true,
restreamer_ipcam = true,
restreamer_whip = true,
restreamer_srtingest = true
}
# Social Pusher configuration - (Optional) https://www.red5.net/docs/development/social-media-plugin/rest-api/
node_config_social_pusher = {
enable = false,
target_nodes = ["origin", "edge", "transcoder"],
}
# Red5 Pro autoscaling Node group - (Optional)
node_group_create = true # Linux or Mac OS only. true - create new Node group, false - not create new Node group
node_group_origins_min = 1 # Number of minimum Origins
node_group_origins_max = 20 # Number of maximum Origins
node_group_origins_instance_type = "VM.Standard.E4.Flex-1-4" # Origins OCI Instance Type(1 OCPU = 2 VCPUs) <shape>-<cpu>-<memory> eg. VM.Standard.E4.Flex-1-4
node_group_origins_volume_size = 50 # Volume size in GB for Origins
node_group_edges_min = 1 # Number of minimum Edges
node_group_edges_max = 40 # Number of maximum Edges
node_group_edges_instance_type = "VM.Standard.E4.Flex-1-4" # Edges OCI Instance Type(1 OCPU = 2 VCPUs) <shape>-<cpu>-<memory> eg. VM.Standard.E4.Flex-1-4
node_group_edges_volume_size = 50 # Volume size in GB for Edges
node_group_transcoders_min = 0 # Number of minimum Transcoders
node_group_transcoders_max = 20 # Number of maximum Transcoders
node_group_transcoders_instance_type = "VM.Standard.E4.Flex-1-4" # Transcoders OCI Instance Type(1 OCPU = 2 VCPUs) <shape>-<cpu>-<memory> eg. VM.Standard.E4.Flex-1-4
node_group_transcoders_volume_size = 50 # Volume size in GB for Transcoders
node_group_relays_min = 0 # Number of minimum Relays
node_group_relays_max = 20 # Number of maximum Relays
node_group_relays_instance_type = "VM.Standard.E4.Flex-1-4" # Relays OCI Instance Type(1 OCPU = 2 VCPUs) <shape>-<cpu>-<memory> eg. VM.Standard.E4.Flex-1-4
node_group_relays_volume_size = 50 # Volume size in GB for Relays
}
output "module_output" {
value = module.red5pro
}
```
Loading

0 comments on commit 6337316

Please sign in to comment.