Skip to content

1.2.Instalación de herramientas útiles en AWS

Erick Palacios Moreno edited this page Aug 29, 2022 · 26 revisions

Lo siguiente utiliza una AMI Linux de AWS

Docker

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html

#!/bin/bash

sudo yum update -y

sudo amazon-linux-extras install -y docker

sudo service docker start

sudo usermod -a -G docker ec2-user

Lo siguiente utiliza una AMI Ubuntu 20.04 de AWS

Docker y git

https://docs.docker.com/engine/install/ubuntu/

#!/bin/bash
region=<aquí colocar región en la que se lanzarán las instancias>
name_instance=mi-nodo
apt-get update
apt-get install -y git curl python3-pip && pip3 install --upgrade pip&& pip3 install awscli --upgrade
##etiquetar instancia
INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
PUBLIC_IP=$(curl -s http://169.254.169.254/latest/meta-data/public-ipv4)
aws ec2 create-tags --resources $INSTANCE_ID --tag Key=Name,Value=$name_instance-$PUBLIC_IP --region=$region
##install docker for ubuntu:
apt-get install -y ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io
service docker start
groupadd docker
usermod -aG docker ubuntu && newgrp docker

Rstudio

#!/bin/bash
region=<aquí colocar región en la que se lanzarán las instancias>
name_instance=mi_instancia
apt-get update
apt-get install -y curl python3-pip && pip3 install --upgrade pip && pip3 install awscli --upgrade
##etiquetar instancia
INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
PUBLIC_IP=$(curl -s http://169.254.169.254/latest/meta-data/public-ipv4)
aws ec2 create-tags --resources $INSTANCE_ID --tag Key=Name,Value=$name_instance-$PUBLIC_IP --region=$region
##install docker for ubuntu:
apt-get install -y ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io
service docker start
groupadd docker
usermod -aG docker ubuntu && newgrp docker
#rstudio:
mkdir -p /home/ubuntu/rstudio_files

Una vez dentro de la instancia:

password_rocker=<elegir password>
nombre_contenedor=rstudio_contenedor

docker run -d -p 8787:8787 -e PASSWORD=$password_rocker \
-v /home/ubuntu/rstudio_files:/home/rstudio/ --name $nombre_contenedor rocker/rstudio:4.0.0-ubuntu18.04

Ver https://hub.docker.com/r/rocker/rstudio/tags para los tags que existen (en el caso anterior se usa 4.0.0-ubuntu18.04)

Ir a su browser a la página:

<dns ipv4 instancia>:8787

(no olvidar habilitar este puerto para la ip de su máquina en los security groups).

user: rstudio

para detener contenedor:

docker stop $nombre_contenedor

para remover contenedor:

docker rm $nombre_contenedor

Jupyterlab

En la instancia:

mkdir /home/ubuntu/jupyter

cd /home/ubuntu/jupyter

nano Dockerfile

Copiar y pegar lo siguiente:

FROM ubuntu:bionic

RUN apt-get update && export DEBIAN_FRONTEND=noninteractive && echo "America/Mexico_City" > /etc/timezone && apt-get install -y tzdata

ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8

RUN apt-get update && apt-get install -y \
            sudo \
            nano \
            git \
            python3-dev \
            python3-pip \
            python3-setuptools \
            nodejs && pip3 install --upgrade pip  && pip3 install awscli --upgrade

RUN groupadd miuser
RUN useradd miuser -g miuser -m -s /bin/bash
RUN echo 'miuser ALL=(ALL:ALL) NOPASSWD:ALL' | (EDITOR='tee -a' visudo)
RUN echo 'miuser:miuser' | chpasswd
RUN pip3 install jupyter jupyterlab --upgrade
USER miuser
RUN jupyter notebook --generate-config && sed -i 's/#c.NotebookApp.port = .*/c.NotebookApp.port = 9999/' /home/miuser/.jupyter/jupyter_notebook_config.py && \
sed -i "s/#c.NotebookApp.password = .*/c.NotebookApp.password = u'sha1:adedf57e8cdb:85aea79ca13b11865d8e2dba56dbb312d7ab50d5'/" ~/.jupyter/jupyter_notebook_config.py

En la instancia:

nombre_imagen=jupyter_image
nombre_contenedor=jupyter_contenedor

Construir la imagen:

docker build . -t $nombre_imagen

Una vez finalizada la construcción ejecutar:

docker run -w=/home/miuser/ -p 9999:9999 -v /home/ubuntu/jupyter:/home/miuser/jupyter --name $nombre_contenedor -dit $nombre_imagen jupyter lab --ip=0.0.0.0 --no-browser

Para acceder ir a su browser a la página:

<dns ipv4 instancia>:9999/

El password es qwerty, no olvidar habilitar este puerto para la ip de su máquina en los security groups.

PostgreSQL

Crear Dockerfile en directorio:

mkdir ~/docker_postgresql
cd ~/docker_postgresql
nano Dockerfile
FROM ubuntu:bionic

RUN apt-get update && export DEBIAN_FRONTEND=noninteractive && echo "America/Mexico_City" > /etc/timezone && apt-get install -y tzdata

RUN apt-get update && apt-get install -y \
            sudo \
            nano \
            openssh-server \
            openssl
RUN groupadd postgres
RUN useradd postgres -g postgres -m -s /bin/bash
RUN echo 'postgres ALL=(ALL:ALL) NOPASSWD:ALL' | (EDITOR='tee -a' visudo)
RUN echo 'postgres:postgres' | chpasswd

Crear variables de ambiente:

nombre_imagen=postgresql_image
nombre_contenedor=postgresql_contenedor

Construir imagen de docker:

docker build . -t $nombre_imagen

Crear setup.sh (lo siguiente instalará postgresql v.10)

cd
nano setup.sh
#!/bin/bash
nombre_base_de_datos=mi_db
sudo service ssh restart
sudo apt-get install -y \
            postgresql \
            postgresql-client

sudo /etc/init.d/postgresql start
sudo echo "host all  all    0.0.0.0/0  md5" >> /etc/postgresql/10/main/pg_hba.conf
sudo echo "local all all md5" >> /etc/postgresql/10/main/pg_hba.conf
sudo echo "listen_addresses='*'" >> /etc/postgresql/10/main/postgresql.conf
psql --command "ALTER USER postgres WITH PASSWORD 'qwerty';"
sudo /etc/init.d/postgresql restart
createdb $nombre_base_de_datos

Dar permisos de ejecución al setup.sh

sudo chmod gou+x setup.sh

Crear directorios que persisten los datos de la base de datos:

mkdir -p db_data/etc/postgresql
mkdir -p db_data/var/log/postgresql
mkdir -p db_data/var/lib/postgresql

Crear variable de ambiente:

home_directory=/home/ubuntu

Crear contenedor:

docker run -v $home_directory:$home_directory -v $home_directory/db_data/etc/postgresql:/etc/postgresql -v $home_directory/db_data/var/log/postgresql:/var/log/postgresql -v $home_directory/db_data/var/lib/postgresql:/var/lib/postgresql -p 2222:22 -p 5432:5432 -w=/home/postgresql/ --name $nombre_contenedor -dit $nombre_imagen

Instalar postgresql con el setup.sh y configuraciones adicionales:

docker exec -u=postgres -it $nombre_contenedor /home/ubuntu/setup.sh

Entrar a la base de datos creada:

psql -h localhost -U postgres -d mi_db

Crear tabla ejemplo:

CREATE TABLE films (
    code        char(5) CONSTRAINT firstkey PRIMARY KEY,
    title       varchar(40) NOT NULL,
    did         integer NOT NULL,
    date_prod   date,
    kind        varchar(10),
    len         interval hour to minute
);

Enlistar relaciones en la base de datos:

\dt;
         List of relations
 Schema | Name  | Type  |  Owner
--------+-------+-------+----------
 public | films | table | postgres
(1 row)