I just created a cloud-init for CHT4 that applies the CHT documentation in case someone is interested
Please update the rsa key because for security reason we deactivate password connection
it worked on ubuntu 22.04 (I just made it more generic)
#cloud-config
hostname: projecttest
timezone: UTC
# ------------------------
groups: docker
system_info:
default_user:
groups: [ docker ]
users:
- name: cht
groups: sudo, docker
shell: /bin/bashy
sudo: ALL=(ALL) NOPASSWD:ALL
ssh-authorized-keys:
- ssh-rsa <<YOUR KEY HERE >>
locale: en_US.UTF-8
manage_etc_hosts: true
packages:
- git
- apt-transport-https
- ca-certificates
- curl
- gnupg
- lsb-release
- unattended-upgrades
- lsb-release
- python3
package_update: true
package_upgrade: true
ssh_pwauth: no
disable_root: true
package_reboot_if_required: true
write_files:
- path: /home/cht/cht-local-setup/upgrade/.env
permissions: "0644"
content: |
DOCKER_CONFIG_PATH=/home/cht/cht-local-setup/core-couch/
COUCHDB_DATA=/home/cht/cht-local-setup/data/couch-data
CHT_COMPOSE_PATH=/home/cht/cht-local-setup/core-couch/
COUCHDB_USER=medic
COUCHDB_PASSWORD=password
owner: cht:cht
runcmd:
- mkdir -p /etc/apt/keyrings
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
- echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
- curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
- apt-get update
- apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin nodejs npm docker-compose
- systemctl enable docker
- systemctl start docker
- mkdir -p /home/cht/cht-local-setup/couch-data/ && mkdir -p /home/cht/cht-local-setup/core-couch/ && mkdir -p /home/cht/cht-local-setup/upgrade/
- curl -s -o /home/cht/cht-local-setup/core-couch/cht-core.yml https://staging.dev.medicmobile.org/_couch/builds_4/medic:medic:4.0.1/docker-compose/cht-core.yml
- curl -s -o /home/cht/cht-local-setup/core-couch/cht-couchdb.yml https://staging.dev.medicmobile.org/_couch/builds_4/medic:medic:4.0.1/docker-compose/cht-couchdb.yml
- curl -s -o /home/cht/cht-local-setup/upgrade/docker-compose.yml https://raw.githubusercontent.com/medic/cht-upgrade-service/main/docker-compose.yml
- chown -R cht:docker /home/cht/cht-local-setup
- npm install -g cht-conf
- python3 -m pip install git+https://github.com/medic/pyxform.git@medic-conf-1.17#egg=pyxform-medic
3 Likes
Awesome!
This is getting us pretty close to a one-click deployment for the whole CHT stack! Thank you for sharing!
cc @mrjones since you will love this!
I could do only only because the doc was precise and up-to-date, thanks to the maintainers 
I still have the add the FQDN/let’s encrypt conf
2 Likes
based on the code IU think this should work, of course one must update the env file content
#cloud-config
hostname: projecttest
write_files:
- path: /home/cht/cht-local-setup/upgrade/.env
permissions: "0644"
content: |
COUCHDB_USER=medic
COUCHDB_PASSWORD=password
EMAIL= myemail@fqdn.og
COMMON_NAME=fqdn.org
CERTIFICATE_MODE=AUTO_GENERATE
DOCKER_CONFIG_PATH=/home/cht/cht-local-setup/core-couch/
COUCHDB_DATA=/home/cht/cht-local-setup/data/couch-data
CHT_COMPOSE_PATH=/home/cht/cht-local-setup/core-couch/
owner: cht:cht
timezone: UTC
# ------------------------
groups: docker
system_info:
default_user:
groups: [ docker ]
users:
- name: cht
groups: sudo, docker
shell: /bin/bash
sudo: ALL=(ALL) NOPASSWD:ALL
ssh-authorized-keys:
- ssh-rsa <<YOUR KEY HERE >>
locale: en_US.UTF-8
manage_etc_hosts: true
packages:
- git
- apt-transport-https
- ca-certificates
- curl
- gnupg
- lsb-release
- unattended-upgrades
- lsb-release
- python3
package_update: true
package_upgrade: true
ssh_pwauth: no
disable_root: true
package_reboot_if_required: true
runcmd:
- mkdir -p /etc/apt/keyrings
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
- echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
- curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
- apt-get update
- apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin nodejs npm docker-compose
- systemctl enable docker
- systemctl start docker
- mkdir -p /home/cht/cht-local-setup/couch-data/ && mkdir -p /home/cht/cht-local-setup/core-couch/ && mkdir -p /home/cht/cht-local-setup/upgrade/
- curl -s -o /home/cht/cht-local-setup/core-couch/cht-core.yml https://staging.dev.medicmobile.org/_couch/builds_4/medic:medic:4.0.1/docker-compose/cht-core.yml
- curl -s -o /home/cht/cht-local-setup/core-couch/cht-couchdb.yml https://staging.dev.medicmobile.org/_couch/builds_4/medic:medic:4.0.1/docker-compose/cht-couchdb.yml
- curl -s -o /home/cht/cht-local-setup/upgrade/docker-compose.yml https://raw.githubusercontent.com/medic/cht-upgrade-service/main/docker-compose.yml
- chown -R cht:docker /home/cht/cht-local-setup
- npm install -g cht-conf
- python3 -m pip install git+https://github.com/medic/pyxform.git@medic-conf-1.17#egg=pyxform-medic
- curl https://raw.githubusercontent.com/medic/cht-core/master/scripts/docker-helper-4.x/cht-docker-compose.sh > /home/cht/cht-local-setup/cht-docker-compose.sh
´´´
Indeed, very cool - thanks so much for sharing @delcroip !
What hosting environment are you using this in? I ask so that others will better understand your use of cloud init.
Hi,
We are using a cloud provider call Exoscale and I deployed the server with Ubuntu 22.04
br
@delcroip - great info - thanks for getting back to us with that! I dug up some docs about how Exoscale does this, but the beauty of Cloud Init is that any provider that supports Cloud Init should work with the YAML you’ve provided. Thanks again!
I will change it soon, I forgot to pull the helper script.
Also I access the server (I am new to CHT) with cht-conf from my machine and it complain about eslint missing, so I guess it will be similar on the server so I will add it too. (was really odd to setup this when not developing) I might create another post for that but I had to add package.json for the cht-conf githup to remove an error when using cht-conf remotley