# Cloud Foundry: Sample Versatiles App This repository contains the sample code to deploy a [versatiles](https://docs.versatiles.org/) app to STACKIT Cloud Foundry as a docker container. It is based on the bundled [front-end](https://docs.versatiles.org/guides/local_server_docker.html#optionb--bundled-frontend-image-versatiles-frontend) image, please refer to versatiles documentation for further information. > NOTE: The project contains a dockerfile, which is merely a wrapper around the public versatiles image. It can be uploaded to a private project in STACKIT Container Registry > to demonstrate the usage of private images in Cloud Foundry. You can also use any other registry, public or private. ## Preparation Please install and [configure](https://docs.stackit.cloud/stackit/en/how-to-setup-an-object-storage-client-objectstorage-71009862.html) s3cmd in advance. ### Object Storage Create a bucket: `s3cmd mb s3://`. Make bucket [public](https://docs.stackit.cloud/stackit/en/bucket-policies-75139510.html#BucketPolicies-SampleBucketpolicies>) applying following policy: ```json { "Statement":[ { "Sid": "MakePublicReadable", "Effect":"Allow", "Principal":"*", "Action":"s3:GetObject", "Resource":"urn:sgws:s3:::/*" } ] } ``` `s3cmd setpolicy s3://` Download the `tiles` file: `wget -c "https://download.versatiles.org/osm.versatiles"`. > NOTE: the whole world map is about 65GB. Upload tile file to the bucket: ```sh s3cmd put s3:// ``` ## Deploy the app with Cloud Foundry Prepare a `vars.yaml` file containing the [variables](https://docs.cloudfoundry.org/devguide/deploy-apps/manifest-attributes.html) used in the manifest. Push the app: `CF_DOCKER_PASSWORD= cf push --vars-file `. ## Custom Domains Please refer to official STACKIT [documentation](https://docs.stackit.cloud/stackit/en/how-to-register-custom-domains-for-apps-on-stackit-cloud-foundry-67771947.html). ## Terraform ### Prerequisites As for now, the Cloud Foundry organization and the Stage you deploy into have to be created beforehand. You will also need to create an organization manager in order to use STACKIT or custom domains. This can be done via STACKIT [API](https://docs.api.stackit.cloud/documentation/scf/version/v1). If you want to use the org manager inside a Cloud Foundry space, you will need to assign the `SpaceDeveloper` role. This can also be done via [API](https://docs.api.stackit.cloud/documentation/scf/version/v1#tag/Space-Roles/operation/createSpaceRole). In order to create Cloud Foundry resources automatically, you will need a service account and service key. Please refer to the [docs](https://docs.stackit.cloud/stackit/en/how-to-create-cloud-foundry-service-accounts-67772133.html#HowtoCreateCloudFoundryServiceAccounts-StepBySteptotheServiceAccount). ### Deployment Change to the `terraform` directory. Create a `.tfvars` file and insert the required terraform variables, see [.tfvars.example](./terraform/.tfvars.example): Call `terraform apply --var-file=`.