Slide 1

Slide 1 text

CONFIGURING COLDFUSION DOCKER CONTAINERS THROUGH ENVIRONMENT VARIABLES GUUST NIEUWENHUIS

Slide 2

Slide 2 text

ABOUT ME Guust Nieuwenhuis Managing Partner @ We Are North Full Stack Web Wizard Masa CMS Born in The Netherlands Living in Belgium Football coach Mountainbiker

Slide 3

Slide 3 text

CONFIGURING COLDFUSION DOCKER CONTAINERS THROUGH ENVIRONMENT VARIABLES GUUST NIEUWENHUIS

Slide 4

Slide 4 text

12FACTOR.NET The twelve-factor app is a methodology for building software-as-a-service apps

Slide 5

Slide 5 text

https://12factor.net/

Slide 6

Slide 6 text

I. Codebase II. Dependencies III. Config IV. Backing services V. Build, release, run VI. Processes VII. Port binding VIII. Concurrency IX. Disposability X. Dev/prod parity XI. Logs XII. Admin processes

Slide 7

Slide 7 text

I. Codebase II. Dependencies III. Config IV. Backing services V. Build, release, run VI. Processes VII. Port binding VIII. Concurrency IX. Disposability X. Dev/prod parity XI. Logs XII. Admin processes

Slide 8

Slide 8 text

STORE CONFIG IN THE ENVIRONMENT An app’s con fi g is everything that is likely to vary between deploys (staging, production, developer environments, etc)

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

I. Codebase II. Dependencies III. Config IV. Backing services V. Build, release, run VI. Processes VII. Port binding VIII. Concurrency IX. Disposability X. Dev/prod parity XI. Logs XII. Admin processes

Slide 11

Slide 11 text

Environment variables

Slide 12

Slide 12 text

A VARIABLE WHOSE VALUE IS SET OUTSIDE THE APPLICATION AND AFFECTS THE WAY APPLICATIONS BEHAVE Since 1979

Slide 13

Slide 13 text

$ printenv __CFBundleIdentifier=com.apple.Terminal TMPDIR=/var/folders/39/dlwg4phj09508hq4d8zhrs600000gn/T/ XPC_FLAGS=0x0 LaunchInstanceID=7B6325E4-B6DB-4A0B-8CC9-1FC70EECBAD7 TERM=xterm-256color SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.055kmmIwsv/Listeners SECURITYSESSIONID=186a6 XPC_SERVICE_NAME=0 TERM_PROGRAM=Apple_Terminal TERM_PROGRAM_VERSION=447 PWD=/Users/guustnieuwenhuis SHLVL=2 SHELL=/bin/zsh HOME=/Users/guustnieuwenhuis LOGNAME=guustnieuwenhuis USER=guustnieuwenhuis PATH=/Users/guustnieuwenhuis/.gem/ruby/3.0.0/bin: OLDPWD=/Users/guustnieuwenhuis LC_CTYPE=UTF-8 _=/usr/bin/printenv

Slide 14

Slide 14 text

$ printenv HOME HOME=/Users/guustnieuwenhuis

Slide 15

Slide 15 text

$ echo $HOME HOME=/Users/guustnieuwenhuis

Slide 16

Slide 16 text

$ cat .env REACT_APP_API_KEY=your-development-api-key REACT_APP_DATABASE_URL=https://your-development-database.com REACT_APP_PROJECT_ID=your-development-project-id

Slide 17

Slide 17 text

Docker environment variables

Slide 18

Slide 18 text

Docker build Docker run Docker compose

Slide 19

Slide 19 text

$ docker build -t app --build-arg VERSION=1.0 . [+] Building 0.0s (5/5) FINISHED => [internal] load .dockerignore => => transferring context: 2B => [internal] load build definition from Dockerfile => => transferring dockerfile: 147B => [internal] load metadata for docker.io/adobecoldfusion/coldfusion:latest => CACHED [1/1] FROM docker.io/adobecoldfusion/coldfusion => exporting to image => => exporting layers => => writing image sha256:5afe3a1890d670e183df27e6a9acc5da23c1e4da9a93c8d09fb957b7351fe59d => => naming to docker.io/library/app

Slide 20

Slide 20 text

$ docker build -t app --build-arg VERSION=${BITBUCKET_TAG} . [+] Building 0.0s (5/5) FINISHED => [internal] load .dockerignore => => transferring context: 2B => [internal] load build definition from Dockerfile => => transferring dockerfile: 147B => [internal] load metadata for docker.io/adobecoldfusion/coldfusion:latest => CACHED [1/1] FROM docker.io/adobecoldfusion/coldfusion => exporting to image => => exporting layers => => writing image sha256:5afe3a1890d670e183df27e6a9acc5da23c1e4da9a93c8d09fb957b7351fe59d => => naming to docker.io/library/app

Slide 21

Slide 21 text

FROM adobecoldfusion/coldfusion ENV VERSION=${VERSION} Docker fi le

Slide 22

Slide 22 text

$ docker run -p 80:8500 -e acceptEULA=YES adobecoldfusion/coldfusion Updating webroot to /app Configuring virtual directories Skipping password updation Skipping language updation Serial Key: Not Provided Previous Serial Key: Not Provided Starting ColdFusion Starting ColdFusion 2023 server ... ====================================================================== ColdFusion 2023 server has been started. ColdFusion 2023 will write logs to /opt/coldfusion/cfusion/bin/../logs/coldfusion-out.log ======================================================================

Slide 23

Slide 23 text

$ docker run -p 80:8500 --env acceptEULA=YES adobecoldfusion/coldfusion Updating webroot to /app Configuring virtual directories Skipping password updation Skipping language updation Serial Key: Not Provided Previous Serial Key: Not Provided Starting ColdFusion Starting ColdFusion 2023 server ... ====================================================================== ColdFusion 2023 server has been started. ColdFusion 2023 will write logs to /opt/coldfusion/cfusion/bin/../logs/coldfusion-out.log ======================================================================

Slide 24

Slide 24 text

$ docker run -p 80:8500 --env-file ./.env adobecoldfusion/coldfusion Updating webroot to /app Configuring virtual directories Skipping password updation Skipping language updation Serial Key: Not Provided Previous Serial Key: Not Provided Starting ColdFusion Starting ColdFusion 2023 server ... ====================================================================== ColdFusion 2023 server has been started. ColdFusion 2023 will write logs to /opt/coldfusion/cfusion/bin/../logs/coldfusion-out.log ======================================================================

Slide 25

Slide 25 text

$ cat .env acceptEULA=YES

Slide 26

Slide 26 text

version: "3.7" services: app: image: adobecoldfusion/coldfusion environment: - acceptEULA=YES docker-compose.yml

Slide 27

Slide 27 text

version: "3.7" services: app: image: adobecoldfusion/coldfusion env_file: ./.env docker-compose.yml

Slide 28

Slide 28 text

Environment variables precedence 1. Set using docker compose run -e in the CLI 2. Substituted from your shell 3. Set using the environment attribute in the Compose file 4. Use of the --env-file argument in the CLI 5. Use of the env_file attribute in the Compose file 6. Set using an .env file placed at base of your project directory 7. Set in a container image in the ENV directive. Having any ARG or ENV setting in a Dockerfile evaluates only if there is no Docker Compose entry for environment, env_file or run --env.

Slide 29

Slide 29 text

Configuring Adobe CF

Slide 30

Slide 30 text

https://helpx.adobe.com/in/coldfusion/using/docker-images-coldfusion.html

Slide 31

Slide 31 text

Required ENV Variables: acceptEULA=YES Optional ENV variables: serial= previousSerial= password= enableSecurePro fi le= con fi gureExternalSessions= externalSessionsHost= externalSessionsPort= externalSessionsPassword= con fi gureExternalAddons= addonsHost= addonsPort= addonsUsername= addonsPassword= addonsPDFServiceName= addonsPDFSSL= setupScript= setupScriptDelete= language= installModules= importCFSettings= importCFSettingsPassphrase= importModules=

Slide 32

Slide 32 text

version: "3.7" services: app: image: adobecoldfusion/coldfusion environment: docker-compose.yml - acceptEULA=YES - serial=xxx - password=adminpassword - enableSecureProfile=true

Slide 33

Slide 33 text

Configuring Commandbox

Slide 34

Slide 34 text

https://hub.docker.com/r/ortussolutions/commandbox/

Slide 35

Slide 35 text

version: "3.7" services: app: image: ortussolutions/commandbox environment: docker-compose.yml - BOX_SERVER_APP_CFENGINE=adobe@2023 - BOX_SERVER_PROFILE=development - BOX_SERVER_CFCONFIGFILE=/config/cfconfig.json

Slide 36

Slide 36 text

{ "adminPassword" : “${ADMIN_PASSWORD}” } cfcon fi g.json

Slide 37

Slide 37 text

https://www.forgebox.io/view/commandbox-dotenv

Slide 38

Slide 38 text

Configuring Masa CMS

Slide 39

Slide 39 text

https://docs.masacms.com/getting-started/con fi guration/env-variables/

Slide 40

Slide 40 text

All settings.ini.cfm settings Format: MURA_{setting}

Slide 41

Slide 41 text

[settings] appreloadkey=appreload mode=production [production] admindir=/admin admindomain= adminemail= adminssl=false allowautoupdates=true allowedIndexFiles=index.cfm,index.json,index.html allowlocalfiles=false alwaysUseLocalRenderer=false assetdir=/s3assets assetpath= autodiscoverplugins=true autoresetpasswords=false autoupdateurl=https://github.com/MasaCMS/MasaCMS/archive/main.zip bcryptpasswords=true clientmanagement=false settings.ini.cfm

Slide 42

Slide 42 text

version: "3.7" services: app: image: adobecoldfusion/coldfusion environment: docker-compose.yml - MURA_ADMIN_USERNAME: admin - MURA_ADMIN_PASSWORD: admin - MURA_ADMINEMAIL: [email protected] - MURA_APPRELOADKEY: appreload - MURA_SITEIDINURLS: "true" - MURA_INDEXFILEINURLS: "true" - MURA_DBTYPE: mysql - MURA_DBCONNECTIONSTRING: “jdbc:mysql://masa_mysql:3306/masadb" - MURA_DBCLASS: com.mysql.jdbc.Driver - MURA_DBUSERNAME: root - MURA_DBPASSWORD: rootpassword - MURA_DBHOST: masa_mysql - MURA_DBPORT: 3306

Slide 43

Slide 43 text

Configuring own apps

Slide 44

Slide 44 text

server.system.environment

Slide 45

Slide 45 text

version: "3.7" services: docker-compose.yml mysql: image: mysql:latest environment: MYSQL_ROOT_PASSWORD: rootpassword MYSQL_DATABASE: testdb app: image: adobecoldfusion/coldfusion environment: - DBTYPE: mysql - DBCLASS: com.mysql.jdbc.Driver - DBCONNECTIONSTRING: "jdbc:mysql://mysql:3306/testdb" - DBUSERNAME: root - DBPASSWORD: rootpassword

Slide 46

Slide 46 text

component { this.datasources = { testdb = { driver = server.system.environment.DBTYPE, class = server.system.environment.DBCLASS, url = server.system.environment.DBCONNECTIONSTRING, username = server.system.environment.DBUSERNAME, password = server.system.environment.DBPASSWORD } }; } Application.cfc

Slide 47

Slide 47 text

Configuring on AWS

Slide 48

Slide 48 text

No content

Slide 49

Slide 49 text

No content

Slide 50

Slide 50 text

TaskDefinition: Type: AWS::ECS::TaskDefinition Properties: NetworkMode: 'awsvpc' Cpu: '256' Memory: '512' ExecutionRoleArn: !Ref TaskRole TaskRoleArn: !Ref TaskRole RequiresCompatibilities: - FARGATE ContainerDefinitions: - Name: "acfengine" Image: "adobecoldfusion/coldfusion" Environment: - Name: "acceptEULA" Value: "YES" - Name: "serial" Value: "ssm://my.acf.serial" AWS CloudFormation

Slide 51

Slide 51 text

const containerDefinitionProps: ecs.ContainerDefinitionProps = { image: containerImage, taskDefinition: taskDefinition, environment: { acceptEULA: 'YES', }, secrets: { serial: EcsSecret.fromSsmParameter( StringParameter.fromStringParameterAttributes( stack, "serial", { parameterName: `/ecs/ecd/serial`, } ) ), }; AWS CDK

Slide 52

Slide 52 text

Configuring on GCP

Slide 53

Slide 53 text

No content

Slide 54

Slide 54 text

No content

Slide 55

Slide 55 text

Configuring on Azure

Slide 56

Slide 56 text

No content

Slide 57

Slide 57 text

CONFIGURING COLDFUSION DOCKER CONTAINERS THROUGH ENVIRONMENT VARIABLES [email protected] https://www.linkedin.com/in/guustnieuwenhuis 
 www.wearenorth.eu

Slide 58

Slide 58 text

No content