# Cómo podría ser
# Servidor en Ubuntu
# Acceder a la máquina remota
ssh root@ipaddress
# Crear un usuario para implementación
# En algún lugar aquí se copian las claves SSH
sudo adduser deploy
sudo apt install curl
# Instalar Node.js
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt install nodejs
# Instalar y configurar Nginx
sudo apt install nginx
vim /etc/nginx/default.conf
# Crear la estructura de directorios para el servicio
mkdir -p /opt/hexlet/versions/
# Copiar al servidor usando scp
scp mybashscript.sh root@ipaddress:~/
# Acceder al servidor y ejecutar el script
ssh root@ipaddress
sh ~/mybashscript.sh
➜ ~ apt install golang
The following additional packages will be installed:
golang-1.13 golang-1.13-doc golang-1.13-go golang-1.13-race-detector-runtime golang-1.13-src golang-doc golang-go
Need to get 63.5 MB of archives.
After this operation, 329 MB of additional disk space will be used.
Do you want to continue? [Y/n] # El script se detiene y espera una respuesta
apt install -y golang
mkdir /hexlet
mkdir /hexlet # ?
mkdir -p /hexlet
mkdir -p /hexlet # no habrá errores
; dirección de la máquina que estamos configurando
; para simplificar, le decimos a Ansible que use la computadora local
127.0.0.1 ansible_connection=local
# hosts: significa el grupo de máquinas en el que se ejecutará
# all: significa todas las máquinas descritas en inventory.ini
- hosts: all
tasks: # conjunto de comandos que se deben ejecutar
- ansible.builtin.file: # file: gestiona archivos y directorios
name: /tmp/ansible_was_here
state: touch # ejecuta el comando touch si el archivo no existe. Y esto es idempotencia
tree # muestra el contenido del directorio
.
├── inventory.ini
└── playbook.yaml
# ¡La ejecución de Ansible se realiza en la máquina local!
# Debe ejecutarse en el mismo directorio donde se crearon los archivos
# -i significa inventory.ini
# https://github.com/hexlet-boilerplates/ansible
ansible-playbook -i inventory.ini playbook.yaml
PLAY [Server Setup] ***********************************************************************************************************
TASK [Gathering Facts] ********************************************************************************************************
ok: [127.0.0.1]
TASK [file] *******************************************************************************************************************
changed: [127.0.0.1]
PLAY RECAP ********************************************************************************************************************
127.0.0.1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
tasks:
# Instalar PostgreSQL
- name: Ensure postgresql is at the latest version
ansible.builtin.apt: # módulo apt
name: postgresql
state: latest
# Iniciar PostgreSQL
- name: Ensure that postgresql is started
ansible.builtin.service: # módulo service
name: postgresql
state: started # iniciar si no está iniciado