SyP-

wp_deploy.sh

Oct 1st, 2020
1,558
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/bin/bash
  2.  
  3.  
  4.  
  5. WWW=/var/www
  6. DBUSER=wordpress
  7. DBWORDPRESS=wordpress
  8. DBPASSWORD=$(dd if=/dev/urandom count=1 2> /dev/null | uuencode -m - | sed -ne 2p | cut -c-12)
  9. ROOTPASSWORD=$(dd if=/dev/urandom count=1 2> /dev/null | uuencode -m - | sed -ne 2p | cut -c-12)
  10. TMPDATA=/tmp/tmpdata
  11. DCDATA=/tmp/docker-compose.yaml
  12.  
  13. sudo echo ""
  14.  
  15. # FUNCIONES
  16.  
  17. function DCCREATE {
  18. # DECLARACIÓN DE DOCKER COMPOSE
  19.  
  20. dd of=$DCDATA << DEP
  21. version: "3"
  22. services:
  23.    ${1}_db:
  24.      image: mariadb:latest
  25.      volumes:
  26.        - /var/volumes/$1/mysql:/var/lib/mysql
  27.      restart: $2
  28.      environment:
  29.        MYSQL_ROOT_PASSWORD: $3
  30.        MYSQL_DATABASE: $4
  31.        MYSQL_USER: $5
  32.        MYSQL_PASSWORD: $6
  33.      container_name: ${1}_db
  34.    $SITE:
  35.      depends_on:
  36.        - ${1}_db
  37.      image: wordpress:latest
  38.      volumes:
  39.        - /var/volumes/$1/html:/var/www/html
  40. #     ports:
  41. #       - 8080:80
  42.      expose:
  43.        - 80
  44.      restart: $2
  45.      environment:
  46.        VIRTUAL_HOST: $1
  47.        WORDPRESS_DB_HOST: ${1}_db:3306
  48.        WORDPRESS_DB_NAME: $4
  49.        WORDPRESS_DB_USER: $5
  50.        WORDPRESS_DB_PASSWORD: $6
  51.      container_name: $1
  52. networks:
  53.   default:
  54.     external:
  55.       name: $7
  56. DEP
  57. }
  58.  
  59.  
  60.  
  61. clear
  62. echo ""
  63. echo "###################################"
  64. echo "## DOCKER WORDPRESS DEPLOYER 0.1b #"
  65. echo "###################################"
  66. echo "developed by syp"
  67. echo ""
  68.  
  69.  
  70. echo ""
  71. echo "El asistente lo guiará en el proceso de deploy de los contendores 'wordpress' y 'mariadb.'"
  72. echo ""
  73. echo "Verficando dependencias..."
  74. echo ""
  75.  
  76. if  which uuencode > /dev/null ;then
  77.     echo "sharultils: [√]"
  78. else
  79.     echo ""
  80.     echo "Hay paquetes faltantes, se instalarán los siguientes paquetes: sharutils"
  81.     echo ""
  82.     sleep 1
  83.     sudo yum install sharutils || sudo apt update   && sudo apt install sharutils
  84.     clear
  85. fi
  86.  
  87. echo ""  
  88. echo "A continuación indique el nombre del sitio a configurar, por ejemplo 'mistio.net' (los espacios en blanco seran removidos)."
  89. echo ""
  90.  
  91. read -p "Nombre del sitio: " SITE
  92. echo ""
  93.  
  94. # eliminamos espacios en blanco
  95.  
  96. SITE=$(echo "$SITE" | tr -d ' ')
  97.  
  98. echo "El nombre del sitio es '$SITE'"
  99. echo ""
  100.  
  101. while true; do
  102. read -p "Esto es correcto? (y/n): " yn
  103.     case $yn in
  104.         [y] )   clear
  105.         break;;
  106.         [n] )
  107.         echo ""
  108.         read -p "Nombre del sitio: " SITE
  109.         echo ""
  110.         SITE=$(echo "$SITE" | tr -d ' ')
  111.         echo "El nombre del sitio es '$SITE'"
  112.         echo ""
  113.         ;;
  114.         * ) echo "responder y/n"
  115.         echo "";;
  116.     esac
  117. done
  118.  
  119. # CONFIGURACION CONTENEDOR MARIADB
  120. echo ""
  121. echo "1. Configuración del contenedor de bases de datos."
  122. echo ""
  123. echo "Nombre de contenedor: ${SITE}_db"
  124. echo ""
  125.  
  126. ## 1. USUARIO BASES DE DATOS
  127. echo "1.1 El usuario con privilegios para la base de datos de wordpress es '$DBUSER'."
  128. echo ""
  129. while true; do
  130. read -p "Desea modificarlo? (y/n): " yn
  131. echo ""
  132.     case $yn in
  133.         [n] )  break;;
  134.     [y] )  read -p "Nombre de usuario (espacios en blanco se reemplazan por \"_\"): " DBUSER
  135.            DBUSER=$(echo "$DBUSER" | tr -s ' ' '_')
  136.  
  137.                echo ""
  138.            break;;
  139.         * ) echo "responder y/n"
  140.         echo "";;
  141.     esac
  142. done
  143.  
  144. ## CONTRASEÑA USUARIO BASE DE DATOS
  145. echo ""
  146. echo "1.2 Se ha generado la contraseña '$DBPASSWORD' para el usuario '$DBUSER'."
  147. echo ""
  148. while true; do
  149. read -p "Desea modificarla? (y/n): " yn
  150. echo ""
  151.     case $yn in
  152.         [n] )  break;;
  153.         [y] )  read -p "Nueva contraseña: " DBPASSWORD
  154.                 echo ""
  155.         break;;
  156.         * ) echo "responder y/n"
  157.         echo "";;
  158.     esac
  159. done
  160.  
  161. ## CONTRASEÑA DE USUARIO ROOT
  162. echo ""
  163. echo "1.3 Se ha generado la contraseña '$ROOTPASSWORD' para el usuario 'root'."
  164. echo ""
  165. while true; do
  166. read -p "Desea modificarla? (y/n): " yn
  167. echo ""
  168.     case $yn in
  169.         [n] )  break;;
  170.         [y] )  read -p "Nueva contraseña: " DBPASSWORD
  171.                 echo ""
  172.         break;;
  173.         * ) echo "responder y/n"
  174.         echo "";;
  175.     esac
  176. done
  177. clear
  178.  
  179. # CONFGIRUACION DE WORDPRESS
  180. echo ""
  181. echo "2. Configuración del contenedor Wordrpress."
  182. echo ""
  183. echo "Nombre del contenedor: $SITE"
  184. echo ""
  185. read -n 1 -s -r -p "Presione una tecla para continuar "
  186. clear
  187.  
  188. # CONFIGURACION DEL DEPLOY
  189. echo ""
  190. echo "3. Configuración del deploy."
  191. echo ""
  192.  
  193. ## Politicas de reinicio
  194. echo "3.1 Politica de reinicio."
  195. echo ""
  196. echo "[1] = no"
  197. echo "[2] = on-failure"
  198. echo "[3] = always"
  199. echo "[4] = unless-stopped"
  200. echo ""
  201.  
  202. while true; do
  203. read -p "Opción: " POLICY
  204.     case $POLICY in
  205.         [1] )   RESTARTPOLICY="\"no\""
  206.         echo ""
  207.         break;;
  208.         [2] )   RESTARTPOLICY=on-failure
  209.         echo ""
  210.         break;;
  211.     [3] )   RESTARTPOLICY=always
  212.         echo ""
  213.         break;;
  214.     [4] )   RESTARTPOLICY=unless-stopped
  215.         echo ""
  216.         break;;
  217.         * )     echo "Elejir una opcion correcta"
  218.         echo "";;
  219.     esac
  220. done
  221.  
  222. echo "3.2 Almacenamiento persistente."
  223. echo ""
  224. echo "Se creará un nuevo volumen para '$SITE'."
  225. echo ""
  226. echo "Seleccione el tamaño en GiB:"
  227. echo ""
  228. echo "[1] = 2"
  229. echo "[2] = 5"
  230. echo "[3] = 10"
  231. echo ""
  232.  
  233.  
  234.  
  235. while true; do
  236. read -p "Opción: " SIZE
  237.     case $SIZE in
  238.         [1] )   LVSIZE=2   
  239.         break;;
  240.         [2] )   LVSIZE=5
  241.         break;;
  242.         [3] )   LVSIZE=10
  243.         break;;
  244.         * )     echo "Elejir una opcion correcta";;
  245.     esac
  246. done
  247.  
  248. ## RED
  249. echo "3.3 Selecione una red para el trafico del contenedor."
  250. echo ""
  251. sudo docker network ls | tail -n +2 > $TMPDATA
  252. echo ""
  253. echo "Network:"
  254. echo ""
  255. i=1
  256. while IFS= read -r line
  257. do
  258.       OPTIONS[$i]=`echo $line | cut -d " " -f 2`
  259.       echo "[$i] ${OPTIONS[$i]}"
  260.       ((i++))
  261. done < "$TMPDATA"
  262. while true; do
  263. echo ""
  264. read -p "Opcion: " OPTSELECT
  265. echo ""
  266. case $OPTSELECT in
  267.   [1-9]*) NETWORKS="${OPTIONS[$OPTSELECT]}"
  268.       break;;
  269.   *) echo "Número invalido. ";;
  270. esac
  271. done
  272. echo ""
  273. echo "Se ha seleccionado la red '$NETWORKS'"
  274. echo ""
  275. rm $TMPDATA
  276. clear
  277.  
  278. # FINAL
  279. echo ""
  280. echo "Se creará el fichero 'docker-compose.yaml' con las siguiente declaraciones: "
  281. echo ""
  282. echo "Contenedor MariaDB:"
  283. echo ""
  284. echo "Nombre del contenedor: ${SITE}_db"
  285. echo "Base de datos: $DBWORDPRESS"
  286. echo "Usuario: $DBUSER"
  287. echo ""
  288. echo "Contenedor Wordpress:"
  289. echo ""
  290. echo "Nombre del contenedor: $SITE"
  291. echo "Depende de: ${SITE}_db"
  292. echo ""
  293. echo "Deployment:"
  294. echo ""
  295. echo "Politica de reinicio: $RESTARTPOLICY"
  296. echo "Network: $NETWORKS"
  297. echo ""
  298. echo "Volúmenes lógicos:"
  299. echo ""
  300. echo -e " LV \t\t\t VG \t SIZE"
  301. echo -e " $SITE \t docker-volumes \t ${LVSIZE}G"
  302.  
  303. echo ""
  304. echo "Puntos de montaje:"
  305. echo ""
  306. echo "/dev/docker-volumes/$SITE <-> /var/volumes/$SITE"
  307. echo ""
  308. echo "Verificación fichero '$DCDATA'"
  309. echo ""
  310.  
  311. DCCREATE $SITE $RESTARTPOLICY $ROOTPASSWORD $DBWORDPRESS $DBUSER $DBPASSWORD $NETWORKS
  312.  
  313. docker-compose -f $DCDATA config 1> /dev/null
  314. echo ""
  315. if [ "$?" -ge "1" ]; then
  316.     echo "Se encontraron errores, se sale."
  317.     echo ""
  318.     exit 1
  319. fi
  320. echo ""
  321. read -n 1 -s -r -p "Presione una tecla para lanzar el servicio o ctrl-c para cancelar..."
  322.  
  323. echo ""
  324.  
  325.  
  326. # CREACION DE VOLUMENTES Y PUNTOS DE MONTAJE
  327.  
  328. sudo mkdir -p /var/volumes/$SITE
  329. sudo lvcreate -L ${LVSIZE}G -n $SITE docker-volumes
  330. sudo mkfs.ext4 /dev/docker-volumes/$SITE
  331. sudo mount /dev/docker-volumes/$SITE /var/volumes/$SITE
  332.  
  333.  
  334. echo ""
  335. #echo "Ejecute 'sudo docker-compose up -d' para crear los contenedores."
  336. cd /tmp/ && sudo docker-compose up  -d
  337. echo ""
  338. exit 0
  339.  
RAW Paste Data