Docker Compose

Instale o AnsibleForms, o seu RTE e o MySQL em conjunto com docker-compose ou podman-compose

  1. Pré-requisitos
  2. Escolha um local de instalação
  3. Clone o projeto docker-compose
  4. Defina as permissões corretas
  5. Instale um motor de contentores
  6. Personalize
  7. Inicie o projeto docker-compose
  8. Teste a aplicação
  9. Estrutura de ficheiros

O projeto docker-compose executa três contentores: MySQL, a aplicação AnsibleForms e o RTE (ambiente de execução) que executa os playbooks. Contém as respetivas definições, formulários e playbooks de exemplo, por isso o único outro requisito é o Docker ou o Podman com a sua ferramenta de compose.

O instalador descarrega este projeto, preenche as suas definições e segredos e inicia-o com um único comando. Esta página configura-o à mão.


Pré-requisitos

Antes de começar, precisa de:

  • Máquina Linux : qualquer distribuição, com CPU e memória modestos
  • Acesso ao GitHub : para descarregar ou clonar o projeto docker-compose a partir do GitHub
  • Docker ou Podman : um motor de contentores, instalado mais abaixo
  • Uma ferramenta de compose : Docker Compose ou podman-compose, para iniciar os três contentores a partir de alguns ficheiros de configuração

VÍDEO: Como instalar o AnsibleForms


Escolha um local de instalação

Crie uma pasta para o projeto; os exemplos usam /srv/apps:

sudo mkdir /srv/apps
cd /srv/apps

Clone o projeto docker-compose

Instale o Git:

sudo apt-get install -y git

Depois clone o projeto docker-compose para essa pasta:

sudo git clone https://github.com/ansibleforms/docker.git ansibleforms-docker
cd ansibleforms-docker

Defina as permissões corretas

A aplicação e o RTE são executados como o utilizador node (uid 1000), por isso dê a esse utilizador a pasta data:

sudo chown -R 1000:1000 ./data

Se vem da 6, cujo contentor era executado como root, execute o mesmo chown uma vez antes de iniciar a 7. O MySQL recupera a sua própria pasta quando arranca.


Instale um motor de contentores

Instale o Docker ou o Podman, cada um com a sua ferramenta de compose:

Instale o Docker Engine com o plugin Compose a partir do repositório do Docker (consulte os manuais de instalação do Docker):

# Docker's own apt repository
sudo apt-get update
sudo apt-get install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
  https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
  | sudo tee /etc/apt/sources.list.d/docker.list

sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Depois permita a resolução de nomes dentro dos contentores e inicie o Docker como serviço:

sudo mkdir -p /etc/docker
echo "{\"dns-opts\":[\"ndots:15\"]}" | sudo tee /etc/docker/daemon.json
sudo systemctl enable --now docker

Personalize

Reveja as variáveis nos ficheiros .env e docker-compose.yml e altere todas as palavras-passe: MYSQLDB_ROOT_PASSWORD, MYSQLDB_PASSWORD, ADMIN_PASSWORD e RTE_TOKEN. Saiba mais sobre as variáveis de ambiente

A aplicação liga-se ao MySQL como ansibleforms (MYSQLDB_USER), com todos os direitos sobre o esquema AnsibleForms e nenhum noutro sítio; o root serve apenas para o próprio MySQL. O MySQL cria esse utilizador apenas no primeiro arranque: uma instalação que até agora se ligava como root cria-o uma vez, como mostra o README do projeto.

O RTE não é publicado no host. Desde a 7.3.0, a aplicação liga-se a ele em http://rte:8000 com RTE_TOKEN e mantém um WebSocket aberto (RTE_MODE=inbound, consulte Modos): o RTE não recebe definições da base de dados nem o .env, apenas o seu token e algumas definições próprias no docker-compose.yml. O config seed data/seed.yaml declara uma credencial de RTE com o token e esse endereço, e o runner predefinido rte, em modo inbound, que inicia sessão com ela. O RTE executa os playbooks a partir da mesma pasta data (RTE_FILES=local). Quando os seus playbooks precisarem de mais coleções ou bibliotecas Python, construa um RTE próprio e aponte o serviço rte para ele (consulte Construir o seu próprio RTE).


Inicie o projeto docker-compose

Inicie os três contentores em segundo plano. A aplicação espera até o MySQL estar saudável e depois liga-se ao RTE:

sudo docker compose up -d
# with the older standalone tool : sudo docker-compose up -d

Teste a aplicação

Quando os contentores estiverem a funcionar, abra o AnsibleForms num navegador:

  • Abra https://your_ip (porta 443, consulte WEBAPP_LOCAL_PORT no ficheiro .env)
  • Inicie sessão como admin com a ADMIN_PASSWORD do ficheiro .env; enquanto ainda for a predefinida AnsibleForms!123, escolha uma nova palavra-passe
  • Verifique em Ligações > Runners que o RTE aparece como rte, o runner predefinido, e que a sua página mostra a Ligação como Ligado
  • Próximos passos:
    • Crie formulários adicionando ficheiros YAML à pasta data/forms/ ou usando o designer incorporado
    • Adicione os seus playbooks à pasta data/playbooks/
    • Adicione uma ligação LDAP
    • Adicione utilizadores e grupos
    • Adicione runners para formulários de template: AWX, AAP ou Ascender, Semaphore, Rundeck ou Jenkins
    • Adicione credenciais para ligações externas, como outros servidores MySQL ou APIs REST, ou para passar a playbooks Ansible
    • Ligue repositórios Git e escolha se os seus formulários e/ou playbooks se sincronizam com um repositório

Estrutura de ficheiros

O projeto docker-compose tem a seguinte estrutura de pastas:

.
├── docker-compose.yml # the mysqldb, app and rte containers
├── .env # the settings, see the variables below
└── data # everything that must survive an upgrade, mounted in the app and the rte
    ├── ansible # mounted in the rte only
    │   ├── ansible.cfg # ansible settings
    │   ├── roles # roles you install
    │   └── collections # collections you install
    ├── forms # 1 or more yaml files with forms
    ├── functions # custom javascript functions and jq definitions
    ├── git # .gitconfig for repository connections
    ├── mysql
    │   ├── my.cnf # MySQL settings
    │   └── db # the database files (created at first start)
    ├── playbooks # your ansible playbooks, with sample maintenance playbooks
    ├── repositories # local clones of your git repositories
    ├── ssh # the client sshkey (created at first start)
    ├── config.yaml # categories, roles and constants
    ├── seed.yaml # the config seed: registers the rte as the default runner
    ├── certificates # self-signed certificates (created at first start) - replace with your own
    ├── logs # the logfiles (created at first start)
    ├── backups # database backups (created when needed)
    └── forms_backups # form backups (created when needed)