[{"data":1,"prerenderedAt":13089},["ShallowReactive",2],{"blog-list":3},[4,454,3035,3464,4180,5193,5561,7459,9751,10470,10564,10680,10809,10970,11209,11274,11538,11663,11957,12209,12482,12794,12875,12988],{"id":5,"title":6,"body":7,"date":436,"description":437,"draft":438,"extension":439,"image":440,"lang":441,"meta":442,"navigation":443,"path":444,"seo":445,"stem":446,"tags":447,"__hash__":453},"blog\u002Fblog\u002Fplayground-live-helper-chat-docker-traefik.md","Playground de Live Helper Chat con Docker, Traefik, MySQL y Redis",{"type":8,"value":9,"toc":430},"minimark",[10,14,17,22,35,39,65,69,72,101,104,117,120,136,139,142,150,153,190,193,221,224,227,298,301,312,316,319,350,353,413,416,426],[11,12,13],"p",{},"Live Helper es un chat de soporte en vivo de código abierto para aplicaciones web progresivas con integraciones de bot, Voz & Video & ScreenShare, AI y API Rest",[11,15,16],{},"A continuación describiré unos playgrounds que le ayudarán a levantar Live Helper Chat con Docker, Traefik, MySQL y Redis, existe dos versiones una compatible con PHP y otra con NodeJS, dependiendo de cual sea el de tu preferencia.",[18,19,21],"h2",{"id":20},"requisitos","Requisitos:",[23,24,25,29,32],"ul",{},[26,27,28],"li",{},"git 2.2 or higher",[26,30,31],{},"docker 20 or higher",[26,33,34],{},"docker-compose 1.20 or higher",[18,36,38],{"id":37},"servicios-configurados","Servicios configurados:",[23,40,41,44,47,50,53,56,59,62],{},[26,42,43],{},"web - nginx service",[26,45,46],{},"php - php-fpm service",[26,48,49],{},"cobrowse - co browsing running NodeJS service",[26,51,52],{},"php-cronjob - cron jobs running service",[26,54,55],{},"php-resque - php-resque worker running service",[26,57,58],{},"nodejshelper - NodeJS Helper NodeJS running service",[26,60,61],{},"redis - Redis service",[26,63,64],{},"db - Database service",[18,66,68],{"id":67},"instrucciones-de-docker","Instrucciones de Docker:",[11,70,71],{},"Clona el repositorio:",[73,74,79],"pre",{"className":75,"code":76,"language":77,"meta":78,"style":78},"language-bash shiki shiki-themes vitesse-dark","git clone git@github.com:marcotorres\u002Flivechat.git docker-standalone\n","bash","",[80,81,82],"code",{"__ignoreMap":78},[83,84,87,91,95,98],"span",{"class":85,"line":86},"line",1,[83,88,90],{"class":89},"sCK9x","git",[83,92,94],{"class":93},"s7rlk"," clone",[83,96,97],{"class":93}," git@github.com:marcotorres\u002Flivechat.git",[83,99,100],{"class":93}," docker-standalone\n",[11,102,103],{},"Nos ubicamos en:",[73,105,107],{"className":75,"code":106,"language":77,"meta":78,"style":78},"cd docker-standalone\n",[80,108,109],{"__ignoreMap":78},[83,110,111,115],{"class":85,"line":86},[83,112,114],{"class":113},"sm68I","cd",[83,116,100],{"class":93},[11,118,119],{},"Copia:",[73,121,123],{"className":75,"code":122,"language":77,"meta":78,"style":78},"cp .env.default .env\n",[80,124,125],{"__ignoreMap":78},[83,126,127,130,133],{"class":85,"line":86},[83,128,129],{"class":89},"cp",[83,131,132],{"class":93}," .env.default",[83,134,135],{"class":93}," .env\n",[11,137,138],{},"Edita el archivo .env y cambia LHC_SECRET_HASH por un random string",[11,140,141],{},"Cambiar las variables de entorno relacionado a la BD:",[73,143,148],{"className":144,"code":146,"language":147},[145],"language-text","Host - db\nDatabase name - lhc_database\nDatabase username - lhc_usr\nDatabase password - lhc_password\n","text",[80,149,146],{"__ignoreMap":78},[11,151,152],{},"Para la versión estándar sin ejecutar el complemento NodeJS, ejecuta install.sh esto verificará Live Helper Chat y las extensiones requeridas",[73,154,156],{"className":75,"code":155,"language":77,"meta":78,"style":78},"docker-compose -f docker-compose-standard.yml pull && docker-compose -f docker-compose-standard.yml up -d\n",[80,157,158],{"__ignoreMap":78},[83,159,160,163,167,170,173,177,180,182,184,187],{"class":85,"line":86},[83,161,162],{"class":89},"docker-compose",[83,164,166],{"class":165},"sXjYR"," -f",[83,168,169],{"class":93}," docker-compose-standard.yml",[83,171,172],{"class":93}," pull",[83,174,176],{"class":175},"s_pn2"," &&",[83,178,179],{"class":89}," docker-compose",[83,181,166],{"class":165},[83,183,169],{"class":93},[83,185,186],{"class":93}," up",[83,188,189],{"class":165}," -d\n",[11,191,192],{},"Para la versión con complemento NodeJS, ejecute install-nodejs.sh, esto verificará Live Helper Chat y las extensiones requeridas",[73,194,196],{"className":75,"code":195,"language":77,"meta":78,"style":78},"docker-compose -f docker-compose-nodejs.yml pull && docker-compose -f docker-compose-nodejs.yml up -d\n",[80,197,198],{"__ignoreMap":78},[83,199,200,202,204,207,209,211,213,215,217,219],{"class":85,"line":86},[83,201,162],{"class":89},[83,203,166],{"class":165},[83,205,206],{"class":93}," docker-compose-nodejs.yml",[83,208,172],{"class":93},[83,210,176],{"class":175},[83,212,179],{"class":89},[83,214,166],{"class":165},[83,216,206],{"class":93},[83,218,186],{"class":93},[83,220,189],{"class":165},[11,222,223],{},"Navegue hasta localhost:8081 y siga las instrucciones de instalación.",[11,225,226],{},"En los primeros pasos de instalación, es posible que deba ejecutar estos comandos para cambiar los permisos de las carpetas.",[73,228,230],{"className":75,"code":229,"language":77,"meta":78,"style":78},"docker exec -it dockerstandalone_web_1 chown -R www-data:www-data \u002Fcode\u002Fcache\ndocker exec -it dockerstandalone_web_1 chown -R www-data:www-data \u002Fcode\u002Fsettings\ndocker exec -it dockerstandalone_web_1 chown -R www-data:www-data \u002Fcode\u002Fvar\n",[80,231,232,258,278],{"__ignoreMap":78},[83,233,234,237,240,243,246,249,252,255],{"class":85,"line":86},[83,235,236],{"class":89},"docker",[83,238,239],{"class":93}," exec",[83,241,242],{"class":165}," -it",[83,244,245],{"class":93}," dockerstandalone_web_1",[83,247,248],{"class":93}," chown",[83,250,251],{"class":165}," -R",[83,253,254],{"class":93}," www-data:www-data",[83,256,257],{"class":93}," \u002Fcode\u002Fcache\n",[83,259,261,263,265,267,269,271,273,275],{"class":85,"line":260},2,[83,262,236],{"class":89},[83,264,239],{"class":93},[83,266,242],{"class":165},[83,268,245],{"class":93},[83,270,248],{"class":93},[83,272,251],{"class":165},[83,274,254],{"class":93},[83,276,277],{"class":93}," \u002Fcode\u002Fsettings\n",[83,279,281,283,285,287,289,291,293,295],{"class":85,"line":280},3,[83,282,236],{"class":89},[83,284,239],{"class":93},[83,286,242],{"class":165},[83,288,245],{"class":93},[83,290,248],{"class":93},[83,292,251],{"class":165},[83,294,254],{"class":93},[83,296,297],{"class":93}," \u002Fcode\u002Fvar\n",[11,299,300],{},"o cambiar el permiso de estas carpetas:",[23,302,303,306,309],{},[26,304,305],{},"livehelperchat\u002Flhc_web\u002Fcache",[26,307,308],{},"livehelperchat\u002Flhc_web\u002Fsettings",[26,310,311],{},"livehelperchat\u002Flhc_web\u002Fvar",[18,313,315],{"id":314},"para-traefik","Para Traefik:",[11,317,318],{},"Crear una red:",[73,320,322],{"className":75,"code":321,"language":77,"meta":78,"style":78},"docker network create --gateway 192.168.90.1 --subnet 192.168.90.0\u002F24 traefik\n",[80,323,324],{"__ignoreMap":78},[83,325,326,328,331,334,337,341,344,347],{"class":85,"line":86},[83,327,236],{"class":89},[83,329,330],{"class":93}," network",[83,332,333],{"class":93}," create",[83,335,336],{"class":165}," --gateway",[83,338,340],{"class":339},"sxA9i"," 192.168.90.1",[83,342,343],{"class":165}," --subnet",[83,345,346],{"class":93}," 192.168.90.0\u002F24",[83,348,349],{"class":93}," traefik\n",[11,351,352],{},"Ejecutar:",[73,354,356],{"className":75,"code":355,"language":77,"meta":78,"style":78},"cp traefik\u002Facme.json.example traefik\u002Facme.json && \\\ncp traefik\u002Flogs\u002Ftraefik.log.example traefik\u002Flogs\u002Ftraefik.log && \\\ncp traefik\u002Fshared\u002F.htpasswd.example traefik\u002Fshared\u002F.htpasswd && \\\nchmod 0600 traefik\u002Facme.json\n",[80,357,358,373,387,401],{"__ignoreMap":78},[83,359,360,362,365,368,370],{"class":85,"line":86},[83,361,129],{"class":89},[83,363,364],{"class":93}," traefik\u002Facme.json.example",[83,366,367],{"class":93}," traefik\u002Facme.json",[83,369,176],{"class":175},[83,371,372],{"class":165}," \\\n",[83,374,375,377,380,383,385],{"class":85,"line":260},[83,376,129],{"class":89},[83,378,379],{"class":93}," traefik\u002Flogs\u002Ftraefik.log.example",[83,381,382],{"class":93}," traefik\u002Flogs\u002Ftraefik.log",[83,384,176],{"class":175},[83,386,372],{"class":165},[83,388,389,391,394,397,399],{"class":85,"line":280},[83,390,129],{"class":89},[83,392,393],{"class":93}," traefik\u002Fshared\u002F.htpasswd.example",[83,395,396],{"class":93}," traefik\u002Fshared\u002F.htpasswd",[83,398,176],{"class":175},[83,400,372],{"class":165},[83,402,404,407,410],{"class":85,"line":403},4,[83,405,406],{"class":89},"chmod",[83,408,409],{"class":339}," 0600",[83,411,412],{"class":93}," traefik\u002Facme.json\n",[11,414,415],{},"Después de instalar todo, vaya a Settings -> Live help confgiuration -> Chat configuration -> (Screen sharing) y Check NodeJs support enabled In socket.io path, optional enter \u002Fwsnodejs\u002Fsocket.io",[11,417,418,419],{},"Link del repositorio en ",[420,421,425],"a",{"href":422,"rel":423},"https:\u002F\u002Fgithub.com\u002Fmarcotorres\u002Flivechat",[424],"nofollow","github",[427,428,429],"style",{},"html pre.shiki code .sCK9x, html code.shiki .sCK9x{--shiki-default:#80A665}html pre.shiki code .s7rlk, html code.shiki .s7rlk{--shiki-default:#C98A7D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sm68I, html code.shiki .sm68I{--shiki-default:#B8A965}html pre.shiki code .sXjYR, html code.shiki .sXjYR{--shiki-default:#C99076}html pre.shiki code .s_pn2, html code.shiki .s_pn2{--shiki-default:#666666}html pre.shiki code .sxA9i, html code.shiki .sxA9i{--shiki-default:#4C9A91}",{"title":78,"searchDepth":260,"depth":260,"links":431},[432,433,434,435],{"id":20,"depth":260,"text":21},{"id":37,"depth":260,"text":38},{"id":67,"depth":260,"text":68},{"id":314,"depth":260,"text":315},"2023-06-01","Live Helper es un chat de soporte en vivo de código abierto para aplicaciones web progresivas con integraciones de bot, Voz & Video & ScreenShare, AI y API Rest.",false,"md","\u002Fimg\u002Fposts\u002Fblog\u002Fplayground-live-helper-chat-docker-traefik\u002Flive-helper-chat.jpg","es",{},true,"\u002Fblog\u002Fplayground-live-helper-chat-docker-traefik",{"title":6,"description":437},"blog\u002Fplayground-live-helper-chat-docker-traefik",[448,449,450,451,452],"Chat","Docker","MySQL","PHP","Traefik","_T-tFe2shX6NESr6WGe9V9St6oJRBB4ST59Dpm6FjRY",{"id":455,"title":456,"body":457,"date":3022,"description":3023,"draft":438,"extension":439,"image":3024,"lang":441,"meta":3025,"navigation":443,"path":3026,"seo":3027,"stem":3028,"tags":3029,"__hash__":3034},"blog\u002Fblog\u002Fdespliegue-docker-traefik-letsencrypt-pwa.md","Cómo preparar un plan de despliegue con Docker, Traefik y Let’s Encrypt para un Microservicio y una PWA",{"type":8,"value":458,"toc":3020},[459,462,465,468,471,474,481,484,487,496,513,518,524,541,546,549,577,582,585,591,596,599,2119,2124,2127,2150,2717,2722,2725,2877,2882,2885,2948,2953,2956,2978,2983,2986,2999,3002,3008,3014,3017],[11,460,461],{},"Traefik es un enrutador perimetral de código abierto que hace que la publicación de sus servicios sea una experiencia fácil y divertida. Recibe solicitudes en nombre de su sistema y descubre qué componentes son responsables de manejarlas.",[11,463,464],{},"Traefik también puede cumplir la función de proxy inverso y balanceador de carga, automatiza la generación de certificados SSL con Letsencrypt, permite configurar middlewares globales por ejemplo para redirección de http a https, prevención de ataques DDOS, y middlewares por servicio como por ejemplo para lanzar una autenticación con .htpasswd.",[11,466,467],{},"Lo que distingue a Traefik, además de sus muchas funciones, es que descubre automáticamente la configuración adecuada para sus servicios. La magia sucede cuando Traefik inspecciona su infraestructura, donde encuentra información relevante y descubre qué servicio atiende qué solicitud.",[11,469,470],{},"Traefik cumple de forma nativa con todas las principales tecnologías de clúster, como Kubernetes, Docker, Docker Swarm, AWS, Mesos, Marathon, y la lista continúa ; y puede manejar muchos al mismo tiempo. (Incluso funciona para software heredado que se ejecuta en bare metal).",[11,472,473],{},"Con Traefik, no hay necesidad de mantener y sincronizar un archivo de configuración separado: todo sucede automáticamente, en tiempo real (sin reinicios, sin interrupciones de conexión). Con Traefik, dedica tiempo a desarrollar e implementar nuevas funciones en su sistema, y ya no a configurar y mantener su estado de funcionamiento.",[11,475,476],{},[477,478],"img",{"alt":479,"src":480},"Traefik Architecture","\u002Fimg\u002Fposts\u002Fblog\u002Fdespliegue-docker-traefik-letsencrypt-pwa\u002Ftraefik-architecture.png",[11,482,483],{},"El objetivo principal de Traefik es hacerlo simple y que el usuario disfrute de ello.",[11,485,486],{},"Descripción del proyecto y como utilizarlo",[11,488,489,490,495],{},"A continuación se describe el proyecto ",[420,491,494],{"href":492,"rel":493},"https:\u002F\u002Fgithub.com\u002Fmarcotorres\u002Ftraefik-sample",[424],"traefik-sample",", disponible en github, contiene una definición de plan de despliegue con docker-compose, además de:",[23,497,498,501,504,507,510],{},[26,499,500],{},"Generación automática de certificados SSL con Letsencrypt",[26,502,503],{},"Middlewares globales (redirección http a https, rate limit para prevención de ataques DDOS",[26,505,506],{},"Integración con servicios (microservicios con Laravel, Nginx, PWA sea React o Vue, Redis, MySQL, Adminer y Portainer)",[26,508,509],{},"Middleware de servicio para lanzamiento de autenticación htpasswd",[26,511,512],{},"Configuración de logs (si deseas optimizarlo puedes usar logrotate)",[11,514,515],{},[477,516],{"alt":78,"src":517},"\u002Fimg\u002Fposts\u002Fblog\u002Fdespliegue-docker-traefik-letsencrypt-pwa\u002Ftraefik-architecture-2.png",[11,519,520],{},[521,522,523],"strong",{},"Requisitos",[23,525,526,529,532,535,538],{},[26,527,528],{},"git 2.2 o superior",[26,530,531],{},"docker 20 o superior",[26,533,534],{},"docker-compose 1.20 o superior",[26,536,537],{},"Configura tus claves públicas y privadas con Github para siempre usar SSH con git",[26,539,540],{},"Adrenalina y buena pasión por el código",[11,542,543],{},[521,544,545],{},"## Clona el repositorio",[11,547,548],{},"Clona el proyecto de traefik-sample en tu directorio de trabajo, por ejemplo:",[73,550,552],{"className":75,"code":551,"language":77,"meta":78,"style":78},"mkdir github\ncd github\ngit clone git@github.com:marcotorres\u002Ftraefik-sample.git\n",[80,553,554,562,568],{"__ignoreMap":78},[83,555,556,559],{"class":85,"line":86},[83,557,558],{"class":89},"mkdir",[83,560,561],{"class":93}," github\n",[83,563,564,566],{"class":85,"line":260},[83,565,114],{"class":113},[83,567,561],{"class":93},[83,569,570,572,574],{"class":85,"line":280},[83,571,90],{"class":89},[83,573,94],{"class":93},[83,575,576],{"class":93}," git@github.com:marcotorres\u002Ftraefik-sample.git\n",[11,578,579],{},[521,580,581],{},"## Makefile",[11,583,584],{},"Este repositorio contiene un archivo Makefile con comandos preparados para iniciar los servicios de los contenedores, ver los los, estados de los servicios y poder ingresar a cada contenedor definido en el plan de despliegue del docker-compose.yml",[73,586,589],{"className":587,"code":588,"language":147},[145],".PHONY: help\n\nCMD ?= ''\n\nhelp: ## This help.\n    @awk 'BEGIN {FS = \":.*?## \"} \u002F^[a-zA-Z_-]+:.*?## \u002F {printf \"\\033[36m%-30s\\033[0m %s\\n\", $$1, $$2}' $(MAKEFILE_LIST)\n\n.DEFAULT_GOAL := help\n\nstart:  ## Start the application\n    @echo \"Starting the application\"\n    @docker-compose up -d\n\nrestart:  ## Restart the application\n    @echo \"Restarting the application\"\n    @docker-compose restart\n\nstop:  ## Stop the application\n    @echo \"Stopping the application\"\n    @docker-compose down\n\nstatus:  ## Status the application\n    @echo \"Showing the status for the application\"\n    @docker-compose ps\n\nlogs:   ## Show the all Logs from the application\n    @echo \"Showing all logs for every container\"\n    @docker-compose logs -f --tail=\"50\"\n\ncli_api:  ## Enter to container console from API\n    @echo \"Entering to container console from API\"\n    @docker exec -ti api bash\n\ncli_web:  ## Enter to container console from WEB\n    @echo \"Entering to container console from WEB\"\n    @docker exec -ti web sh\n\ncli_db:  ## Enter to container console from MySQL\n    @echo \"Entering to container console from MySQL\"\n    @docker exec -ti mysql bash\n",[80,590,588],{"__ignoreMap":78},[11,592,593],{},[521,594,595],{},"## docker-compose.yml",[11,597,598],{},"A continuación se muestra el contenido del archivo docker-compose.yml, podemos observar las definición del plan de despliegue de cada servicio.",[73,600,604],{"className":601,"code":602,"language":603,"meta":78,"style":78},"language-yaml shiki shiki-themes vitesse-dark","version: \"3.8\"\n\nnetworks:\n  infra:\n  traefik:\n    external:\n      name: traefik\n  default:\n    driver: bridge\n\nvolumes:\n  traefik_sample_data_portainer:\n  traefik_sample_data_mysql:\n\nservices:\n\n  traefik:\n    image: traefik:v2.3\n    container_name: traefik\n    restart: unless-stopped\n    networks:\n      traefik:\n        ipv4_address: 192.168.90.254\n    security_opt:\n      - no-new-privileges:true\n    ports:\n      - \"80:80\"\n      - \"443:443\"\n      - target: 8080\n        published: 8080\n        protocol: tcp\n        mode: ingress\n    volumes:\n      - \u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock\n      - .\u002Ftraefik\u002Ftraefik.yml:\u002Ftraefik.yml\n      - .\u002Ftraefik\u002Facme.json:\u002Facme.json\n      - .\u002Ftraefik\u002Ftraefik.log:\u002Ftraefik.log\n      - .\u002Ftraefik\u002Frules:\u002Frules\n      - .\u002Ftraefik\u002Fshared:\u002Fshared\n    labels:\n      - \"traefik.enable=true\"\n      # router\n      - \"traefik.http.routers.traefik-rtr.entrypoints=websecure\"\n      - \"traefik.http.routers.traefik-rtr.rule=Host(`traefik.$HOSTNAME`)\"\n      - \"traefik.http.routers.traefik-rtr.tls=true\"\n      - \"traefik.http.routers.traefik-rtr.tls.certresolver=le\"\n      # service api\n      - \"traefik.http.routers.traefik-rtr.service=api@internal\"\n      # middlewares\n      - \"traefik.http.routers.traefik-rtr.middlewares=rate-limit@file,myauth@file\"\n\n  api:\n    image: webdevops\u002Fphp-nginx:8.1-alpine\n    container_name: api\n    working_dir: \u002Fapp\n    restart: always\n    networks:\n      - traefik\n      - infra\n    volumes:\n      - .\u002Fapps\u002Fapi:\u002Fapp:rw\n      - .\u002Fnginx\u002Fnginxapi.conf:\u002Fetc\u002Fnginx\u002Fnginx.conf\n    environment:\n      - WEB_DOCUMENT_ROOT=\u002Fapp\u002Fpublic\n      - VIRTUAL_HOST=api.$HOSTNAME\n    labels:\n      - \"traefik.enable=true\"\n      # router\n      - \"traefik.http.routers.api-rtr.entrypoints=websecure\"\n      - \"traefik.http.routers.api-rtr.rule=Host(`api.$HOSTNAME`)\"\n      - \"traefik.http.routers.api-rtr.tls=true\"\n      - \"traefik.http.routers.api-rtr.tls.certresolver=le\"\n\n  web:\n    image: webdevops\u002Fnginx:latest\n    container_name: web\n    working_dir: \u002Fapp\n    restart: always\n    networks:\n      - traefik\n      - infra\n    volumes:\n      - .\u002Fapps\u002Fweb:\u002Fapp:rw\n    environment:\n      - WEB_DOCUMENT_ROOT=\u002Fapp\u002Fbuild\n      - WEB_ALIAS_DOMAIN=web.$HOSTNAME\n      - WEB_DOCUMENT_INDEX=index.html\n    labels:\n      - \"traefik.enable=true\"\n      # router\n      - \"traefik.http.routers.intranet-rtr.entrypoints=websecure\"\n      - \"traefik.http.routers.intranet-rtr.rule=Host(`web.$HOSTNAME`)\"\n      - \"traefik.http.routers.intranet-rtr.tls=true\"\n      - \"traefik.http.routers.intranet-rtr.tls.certresolver=le\"\n\n  adminer:\n    image: adminer:latest\n    container_name: adminer\n    restart: always\n    networks:\n      - traefik\n      - infra\n    volumes:\n      - .\u002Fadminer\u002Fplugins-enabled:\u002Fvar\u002Fwww\u002Fhtml\u002Fplugins-enabled:rw\n      - .\u002Fadminer\u002Frobots.txt:\u002Fvar\u002Fwww\u002Fhtml\u002Frobots.txt\n    labels:\n      - \"traefik.enable=true\"\n      # router\n      - \"traefik.http.routers.adminer-rtr.entrypoints=websecure\"\n      - \"traefik.http.routers.adminer-rtr.rule=Host(`adminer.$HOSTNAME`)\"\n      - \"traefik.http.routers.adminer-rtr.tls=true\"\n      - \"traefik.http.routers.adminer-rtr.tls.certresolver=le\"\n      # middlewares\n      - \"traefik.http.routers.adminer-rtr.middlewares=rate-limit@file,myauth@file\"\n\n  mysql:\n    image: mysql:8.0.25\n    container_name: mysql\n    working_dir: \u002Fapp\n    restart: on-failure\n    networks:\n      - infra\n    security_opt:\n      - no-new-privileges:true\n    ports:\n      - \"3306:3306\"\n    volumes:\n      - ${PWD}\u002Fdata:\u002Fapp:rw\n      - ${PWD}\u002Fmysql\u002Fmy.cnf:\u002Fetc\u002Fmysql\u002Fconf.d\u002Fmy-over.cnf\n      - traefik_sample_data_mysql:\u002Fvar\u002Flib\u002Fmysql\n    environment:\n      MYSQL_ROOT_PASSWORD: $MYSQL_ROOT_PASSWORD\n      MYSQL_DATABASE: $MYSQL_DATABASE\n      MYSQL_USER: $MYSQL_USER\n      MYSQL_PASSWORD: $MYSQL_PASSWORD\n\n  redis:\n    image: redis:alpine\n    container_name: redis\n    restart: unless-stopped\n    ports:\n      - \"6380:6379\"\n    networks:\n      - infra\n    security_opt:\n      - no-new-privileges:true\n\n  portainer:\n    image: portainer\u002Fportainer:latest\n    container_name: portainer\n    restart: unless-stopped\n    command: -H unix:\u002F\u002F\u002Fvar\u002Frun\u002Fdocker.sock\n    networks:\n      traefik:\n        ipv4_address: 192.168.90.253\n    security_opt:\n      - no-new-privileges:true\n    volumes:\n      - itraefik_sample_data_portainer:\u002Fdata\n      - \u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock\n    environment:\n      - TZ=$TZ\n    labels:\n      - \"traefik.enable=true\"\n      # router\n      - \"traefik.http.routers.portainer-rtr.entrypoints=websecure\"\n      - \"traefik.http.routers.portainer-rtr.rule=Host(`portainer.$HOSTNAME`)\"\n      - \"traefik.http.routers.portainer-rtr.tls=true\"\n      - \"traefik.http.routers.portainer-rtr.tls.certresolver=le\"\n      # services\n      - \"traefik.http.routers.portainer-rtr.service=portainer-svc\"\n      - \"traefik.http.services.portainer-svc.loadbalancer.server.port=9000\"\n","yaml",[80,605,606,624,629,637,644,652,660,670,678,689,694,702,710,718,723,731,736,743,754,764,775,783,791,802,810,819,827,839,851,864,874,885,896,904,912,920,928,936,944,952,960,972,979,991,1003,1015,1027,1033,1045,1051,1063,1068,1076,1086,1096,1107,1117,1124,1131,1139,1146,1154,1162,1170,1178,1186,1193,1204,1209,1221,1233,1245,1257,1262,1270,1280,1290,1299,1308,1315,1322,1329,1336,1344,1351,1359,1367,1375,1382,1393,1398,1410,1422,1434,1446,1451,1459,1469,1479,1488,1495,1502,1509,1516,1524,1532,1539,1550,1555,1567,1579,1591,1603,1608,1620,1625,1633,1643,1653,1662,1672,1679,1686,1693,1700,1707,1719,1726,1734,1742,1750,1757,1768,1779,1790,1801,1806,1814,1824,1834,1843,1850,1862,1869,1876,1883,1890,1895,1903,1913,1923,1932,1943,1950,1957,1967,1974,1981,1988,1996,2003,2010,2018,2025,2036,2041,2053,2065,2077,2089,2095,2107],{"__ignoreMap":78},[83,607,608,611,614,618,621],{"class":85,"line":86},[83,609,610],{"class":113},"version",[83,612,613],{"class":175},":",[83,615,617],{"class":616},"sNJcY"," \"",[83,619,620],{"class":93},"3.8",[83,622,623],{"class":616},"\"\n",[83,625,626],{"class":85,"line":260},[83,627,628],{"emptyLinePlaceholder":443},"\n",[83,630,631,634],{"class":85,"line":280},[83,632,633],{"class":113},"networks",[83,635,636],{"class":175},":\n",[83,638,639,642],{"class":85,"line":403},[83,640,641],{"class":113},"  infra",[83,643,636],{"class":175},[83,645,647,650],{"class":85,"line":646},5,[83,648,649],{"class":113},"  traefik",[83,651,636],{"class":175},[83,653,655,658],{"class":85,"line":654},6,[83,656,657],{"class":113},"    external",[83,659,636],{"class":175},[83,661,663,666,668],{"class":85,"line":662},7,[83,664,665],{"class":113},"      name",[83,667,613],{"class":175},[83,669,349],{"class":93},[83,671,673,676],{"class":85,"line":672},8,[83,674,675],{"class":113},"  default",[83,677,636],{"class":175},[83,679,681,684,686],{"class":85,"line":680},9,[83,682,683],{"class":113},"    driver",[83,685,613],{"class":175},[83,687,688],{"class":93}," bridge\n",[83,690,692],{"class":85,"line":691},10,[83,693,628],{"emptyLinePlaceholder":443},[83,695,697,700],{"class":85,"line":696},11,[83,698,699],{"class":113},"volumes",[83,701,636],{"class":175},[83,703,705,708],{"class":85,"line":704},12,[83,706,707],{"class":113},"  traefik_sample_data_portainer",[83,709,636],{"class":175},[83,711,713,716],{"class":85,"line":712},13,[83,714,715],{"class":113},"  traefik_sample_data_mysql",[83,717,636],{"class":175},[83,719,721],{"class":85,"line":720},14,[83,722,628],{"emptyLinePlaceholder":443},[83,724,726,729],{"class":85,"line":725},15,[83,727,728],{"class":113},"services",[83,730,636],{"class":175},[83,732,734],{"class":85,"line":733},16,[83,735,628],{"emptyLinePlaceholder":443},[83,737,739,741],{"class":85,"line":738},17,[83,740,649],{"class":113},[83,742,636],{"class":175},[83,744,746,749,751],{"class":85,"line":745},18,[83,747,748],{"class":113},"    image",[83,750,613],{"class":175},[83,752,753],{"class":93}," traefik:v2.3\n",[83,755,757,760,762],{"class":85,"line":756},19,[83,758,759],{"class":113},"    container_name",[83,761,613],{"class":175},[83,763,349],{"class":93},[83,765,767,770,772],{"class":85,"line":766},20,[83,768,769],{"class":113},"    restart",[83,771,613],{"class":175},[83,773,774],{"class":93}," unless-stopped\n",[83,776,778,781],{"class":85,"line":777},21,[83,779,780],{"class":113},"    networks",[83,782,636],{"class":175},[83,784,786,789],{"class":85,"line":785},22,[83,787,788],{"class":113},"      traefik",[83,790,636],{"class":175},[83,792,794,797,799],{"class":85,"line":793},23,[83,795,796],{"class":113},"        ipv4_address",[83,798,613],{"class":175},[83,800,801],{"class":339}," 192.168.90.254\n",[83,803,805,808],{"class":85,"line":804},24,[83,806,807],{"class":113},"    security_opt",[83,809,636],{"class":175},[83,811,813,816],{"class":85,"line":812},25,[83,814,815],{"class":175},"      -",[83,817,818],{"class":93}," no-new-privileges:true\n",[83,820,822,825],{"class":85,"line":821},26,[83,823,824],{"class":113},"    ports",[83,826,636],{"class":175},[83,828,830,832,834,837],{"class":85,"line":829},27,[83,831,815],{"class":175},[83,833,617],{"class":616},[83,835,836],{"class":93},"80:80",[83,838,623],{"class":616},[83,840,842,844,846,849],{"class":85,"line":841},28,[83,843,815],{"class":175},[83,845,617],{"class":616},[83,847,848],{"class":93},"443:443",[83,850,623],{"class":616},[83,852,854,856,859,861],{"class":85,"line":853},29,[83,855,815],{"class":175},[83,857,858],{"class":113}," target",[83,860,613],{"class":175},[83,862,863],{"class":339}," 8080\n",[83,865,867,870,872],{"class":85,"line":866},30,[83,868,869],{"class":113},"        published",[83,871,613],{"class":175},[83,873,863],{"class":339},[83,875,877,880,882],{"class":85,"line":876},31,[83,878,879],{"class":113},"        protocol",[83,881,613],{"class":175},[83,883,884],{"class":93}," tcp\n",[83,886,888,891,893],{"class":85,"line":887},32,[83,889,890],{"class":113},"        mode",[83,892,613],{"class":175},[83,894,895],{"class":93}," ingress\n",[83,897,899,902],{"class":85,"line":898},33,[83,900,901],{"class":113},"    volumes",[83,903,636],{"class":175},[83,905,907,909],{"class":85,"line":906},34,[83,908,815],{"class":175},[83,910,911],{"class":93}," \u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock\n",[83,913,915,917],{"class":85,"line":914},35,[83,916,815],{"class":175},[83,918,919],{"class":93}," .\u002Ftraefik\u002Ftraefik.yml:\u002Ftraefik.yml\n",[83,921,923,925],{"class":85,"line":922},36,[83,924,815],{"class":175},[83,926,927],{"class":93}," .\u002Ftraefik\u002Facme.json:\u002Facme.json\n",[83,929,931,933],{"class":85,"line":930},37,[83,932,815],{"class":175},[83,934,935],{"class":93}," .\u002Ftraefik\u002Ftraefik.log:\u002Ftraefik.log\n",[83,937,939,941],{"class":85,"line":938},38,[83,940,815],{"class":175},[83,942,943],{"class":93}," .\u002Ftraefik\u002Frules:\u002Frules\n",[83,945,947,949],{"class":85,"line":946},39,[83,948,815],{"class":175},[83,950,951],{"class":93}," .\u002Ftraefik\u002Fshared:\u002Fshared\n",[83,953,955,958],{"class":85,"line":954},40,[83,956,957],{"class":113},"    labels",[83,959,636],{"class":175},[83,961,963,965,967,970],{"class":85,"line":962},41,[83,964,815],{"class":175},[83,966,617],{"class":616},[83,968,969],{"class":93},"traefik.enable=true",[83,971,623],{"class":616},[83,973,975],{"class":85,"line":974},42,[83,976,978],{"class":977},"sux-A","      # router\n",[83,980,982,984,986,989],{"class":85,"line":981},43,[83,983,815],{"class":175},[83,985,617],{"class":616},[83,987,988],{"class":93},"traefik.http.routers.traefik-rtr.entrypoints=websecure",[83,990,623],{"class":616},[83,992,994,996,998,1001],{"class":85,"line":993},44,[83,995,815],{"class":175},[83,997,617],{"class":616},[83,999,1000],{"class":93},"traefik.http.routers.traefik-rtr.rule=Host(`traefik.$HOSTNAME`)",[83,1002,623],{"class":616},[83,1004,1006,1008,1010,1013],{"class":85,"line":1005},45,[83,1007,815],{"class":175},[83,1009,617],{"class":616},[83,1011,1012],{"class":93},"traefik.http.routers.traefik-rtr.tls=true",[83,1014,623],{"class":616},[83,1016,1018,1020,1022,1025],{"class":85,"line":1017},46,[83,1019,815],{"class":175},[83,1021,617],{"class":616},[83,1023,1024],{"class":93},"traefik.http.routers.traefik-rtr.tls.certresolver=le",[83,1026,623],{"class":616},[83,1028,1030],{"class":85,"line":1029},47,[83,1031,1032],{"class":977},"      # service api\n",[83,1034,1036,1038,1040,1043],{"class":85,"line":1035},48,[83,1037,815],{"class":175},[83,1039,617],{"class":616},[83,1041,1042],{"class":93},"traefik.http.routers.traefik-rtr.service=api@internal",[83,1044,623],{"class":616},[83,1046,1048],{"class":85,"line":1047},49,[83,1049,1050],{"class":977},"      # middlewares\n",[83,1052,1054,1056,1058,1061],{"class":85,"line":1053},50,[83,1055,815],{"class":175},[83,1057,617],{"class":616},[83,1059,1060],{"class":93},"traefik.http.routers.traefik-rtr.middlewares=rate-limit@file,myauth@file",[83,1062,623],{"class":616},[83,1064,1066],{"class":85,"line":1065},51,[83,1067,628],{"emptyLinePlaceholder":443},[83,1069,1071,1074],{"class":85,"line":1070},52,[83,1072,1073],{"class":113},"  api",[83,1075,636],{"class":175},[83,1077,1079,1081,1083],{"class":85,"line":1078},53,[83,1080,748],{"class":113},[83,1082,613],{"class":175},[83,1084,1085],{"class":93}," webdevops\u002Fphp-nginx:8.1-alpine\n",[83,1087,1089,1091,1093],{"class":85,"line":1088},54,[83,1090,759],{"class":113},[83,1092,613],{"class":175},[83,1094,1095],{"class":93}," api\n",[83,1097,1099,1102,1104],{"class":85,"line":1098},55,[83,1100,1101],{"class":113},"    working_dir",[83,1103,613],{"class":175},[83,1105,1106],{"class":93}," \u002Fapp\n",[83,1108,1110,1112,1114],{"class":85,"line":1109},56,[83,1111,769],{"class":113},[83,1113,613],{"class":175},[83,1115,1116],{"class":93}," always\n",[83,1118,1120,1122],{"class":85,"line":1119},57,[83,1121,780],{"class":113},[83,1123,636],{"class":175},[83,1125,1127,1129],{"class":85,"line":1126},58,[83,1128,815],{"class":175},[83,1130,349],{"class":93},[83,1132,1134,1136],{"class":85,"line":1133},59,[83,1135,815],{"class":175},[83,1137,1138],{"class":93}," infra\n",[83,1140,1142,1144],{"class":85,"line":1141},60,[83,1143,901],{"class":113},[83,1145,636],{"class":175},[83,1147,1149,1151],{"class":85,"line":1148},61,[83,1150,815],{"class":175},[83,1152,1153],{"class":93}," .\u002Fapps\u002Fapi:\u002Fapp:rw\n",[83,1155,1157,1159],{"class":85,"line":1156},62,[83,1158,815],{"class":175},[83,1160,1161],{"class":93}," .\u002Fnginx\u002Fnginxapi.conf:\u002Fetc\u002Fnginx\u002Fnginx.conf\n",[83,1163,1165,1168],{"class":85,"line":1164},63,[83,1166,1167],{"class":113},"    environment",[83,1169,636],{"class":175},[83,1171,1173,1175],{"class":85,"line":1172},64,[83,1174,815],{"class":175},[83,1176,1177],{"class":93}," WEB_DOCUMENT_ROOT=\u002Fapp\u002Fpublic\n",[83,1179,1181,1183],{"class":85,"line":1180},65,[83,1182,815],{"class":175},[83,1184,1185],{"class":93}," VIRTUAL_HOST=api.$HOSTNAME\n",[83,1187,1189,1191],{"class":85,"line":1188},66,[83,1190,957],{"class":113},[83,1192,636],{"class":175},[83,1194,1196,1198,1200,1202],{"class":85,"line":1195},67,[83,1197,815],{"class":175},[83,1199,617],{"class":616},[83,1201,969],{"class":93},[83,1203,623],{"class":616},[83,1205,1207],{"class":85,"line":1206},68,[83,1208,978],{"class":977},[83,1210,1212,1214,1216,1219],{"class":85,"line":1211},69,[83,1213,815],{"class":175},[83,1215,617],{"class":616},[83,1217,1218],{"class":93},"traefik.http.routers.api-rtr.entrypoints=websecure",[83,1220,623],{"class":616},[83,1222,1224,1226,1228,1231],{"class":85,"line":1223},70,[83,1225,815],{"class":175},[83,1227,617],{"class":616},[83,1229,1230],{"class":93},"traefik.http.routers.api-rtr.rule=Host(`api.$HOSTNAME`)",[83,1232,623],{"class":616},[83,1234,1236,1238,1240,1243],{"class":85,"line":1235},71,[83,1237,815],{"class":175},[83,1239,617],{"class":616},[83,1241,1242],{"class":93},"traefik.http.routers.api-rtr.tls=true",[83,1244,623],{"class":616},[83,1246,1248,1250,1252,1255],{"class":85,"line":1247},72,[83,1249,815],{"class":175},[83,1251,617],{"class":616},[83,1253,1254],{"class":93},"traefik.http.routers.api-rtr.tls.certresolver=le",[83,1256,623],{"class":616},[83,1258,1260],{"class":85,"line":1259},73,[83,1261,628],{"emptyLinePlaceholder":443},[83,1263,1265,1268],{"class":85,"line":1264},74,[83,1266,1267],{"class":113},"  web",[83,1269,636],{"class":175},[83,1271,1273,1275,1277],{"class":85,"line":1272},75,[83,1274,748],{"class":113},[83,1276,613],{"class":175},[83,1278,1279],{"class":93}," webdevops\u002Fnginx:latest\n",[83,1281,1283,1285,1287],{"class":85,"line":1282},76,[83,1284,759],{"class":113},[83,1286,613],{"class":175},[83,1288,1289],{"class":93}," web\n",[83,1291,1293,1295,1297],{"class":85,"line":1292},77,[83,1294,1101],{"class":113},[83,1296,613],{"class":175},[83,1298,1106],{"class":93},[83,1300,1302,1304,1306],{"class":85,"line":1301},78,[83,1303,769],{"class":113},[83,1305,613],{"class":175},[83,1307,1116],{"class":93},[83,1309,1311,1313],{"class":85,"line":1310},79,[83,1312,780],{"class":113},[83,1314,636],{"class":175},[83,1316,1318,1320],{"class":85,"line":1317},80,[83,1319,815],{"class":175},[83,1321,349],{"class":93},[83,1323,1325,1327],{"class":85,"line":1324},81,[83,1326,815],{"class":175},[83,1328,1138],{"class":93},[83,1330,1332,1334],{"class":85,"line":1331},82,[83,1333,901],{"class":113},[83,1335,636],{"class":175},[83,1337,1339,1341],{"class":85,"line":1338},83,[83,1340,815],{"class":175},[83,1342,1343],{"class":93}," .\u002Fapps\u002Fweb:\u002Fapp:rw\n",[83,1345,1347,1349],{"class":85,"line":1346},84,[83,1348,1167],{"class":113},[83,1350,636],{"class":175},[83,1352,1354,1356],{"class":85,"line":1353},85,[83,1355,815],{"class":175},[83,1357,1358],{"class":93}," WEB_DOCUMENT_ROOT=\u002Fapp\u002Fbuild\n",[83,1360,1362,1364],{"class":85,"line":1361},86,[83,1363,815],{"class":175},[83,1365,1366],{"class":93}," WEB_ALIAS_DOMAIN=web.$HOSTNAME\n",[83,1368,1370,1372],{"class":85,"line":1369},87,[83,1371,815],{"class":175},[83,1373,1374],{"class":93}," WEB_DOCUMENT_INDEX=index.html\n",[83,1376,1378,1380],{"class":85,"line":1377},88,[83,1379,957],{"class":113},[83,1381,636],{"class":175},[83,1383,1385,1387,1389,1391],{"class":85,"line":1384},89,[83,1386,815],{"class":175},[83,1388,617],{"class":616},[83,1390,969],{"class":93},[83,1392,623],{"class":616},[83,1394,1396],{"class":85,"line":1395},90,[83,1397,978],{"class":977},[83,1399,1401,1403,1405,1408],{"class":85,"line":1400},91,[83,1402,815],{"class":175},[83,1404,617],{"class":616},[83,1406,1407],{"class":93},"traefik.http.routers.intranet-rtr.entrypoints=websecure",[83,1409,623],{"class":616},[83,1411,1413,1415,1417,1420],{"class":85,"line":1412},92,[83,1414,815],{"class":175},[83,1416,617],{"class":616},[83,1418,1419],{"class":93},"traefik.http.routers.intranet-rtr.rule=Host(`web.$HOSTNAME`)",[83,1421,623],{"class":616},[83,1423,1425,1427,1429,1432],{"class":85,"line":1424},93,[83,1426,815],{"class":175},[83,1428,617],{"class":616},[83,1430,1431],{"class":93},"traefik.http.routers.intranet-rtr.tls=true",[83,1433,623],{"class":616},[83,1435,1437,1439,1441,1444],{"class":85,"line":1436},94,[83,1438,815],{"class":175},[83,1440,617],{"class":616},[83,1442,1443],{"class":93},"traefik.http.routers.intranet-rtr.tls.certresolver=le",[83,1445,623],{"class":616},[83,1447,1449],{"class":85,"line":1448},95,[83,1450,628],{"emptyLinePlaceholder":443},[83,1452,1454,1457],{"class":85,"line":1453},96,[83,1455,1456],{"class":113},"  adminer",[83,1458,636],{"class":175},[83,1460,1462,1464,1466],{"class":85,"line":1461},97,[83,1463,748],{"class":113},[83,1465,613],{"class":175},[83,1467,1468],{"class":93}," adminer:latest\n",[83,1470,1472,1474,1476],{"class":85,"line":1471},98,[83,1473,759],{"class":113},[83,1475,613],{"class":175},[83,1477,1478],{"class":93}," adminer\n",[83,1480,1482,1484,1486],{"class":85,"line":1481},99,[83,1483,769],{"class":113},[83,1485,613],{"class":175},[83,1487,1116],{"class":93},[83,1489,1491,1493],{"class":85,"line":1490},100,[83,1492,780],{"class":113},[83,1494,636],{"class":175},[83,1496,1498,1500],{"class":85,"line":1497},101,[83,1499,815],{"class":175},[83,1501,349],{"class":93},[83,1503,1505,1507],{"class":85,"line":1504},102,[83,1506,815],{"class":175},[83,1508,1138],{"class":93},[83,1510,1512,1514],{"class":85,"line":1511},103,[83,1513,901],{"class":113},[83,1515,636],{"class":175},[83,1517,1519,1521],{"class":85,"line":1518},104,[83,1520,815],{"class":175},[83,1522,1523],{"class":93}," .\u002Fadminer\u002Fplugins-enabled:\u002Fvar\u002Fwww\u002Fhtml\u002Fplugins-enabled:rw\n",[83,1525,1527,1529],{"class":85,"line":1526},105,[83,1528,815],{"class":175},[83,1530,1531],{"class":93}," .\u002Fadminer\u002Frobots.txt:\u002Fvar\u002Fwww\u002Fhtml\u002Frobots.txt\n",[83,1533,1535,1537],{"class":85,"line":1534},106,[83,1536,957],{"class":113},[83,1538,636],{"class":175},[83,1540,1542,1544,1546,1548],{"class":85,"line":1541},107,[83,1543,815],{"class":175},[83,1545,617],{"class":616},[83,1547,969],{"class":93},[83,1549,623],{"class":616},[83,1551,1553],{"class":85,"line":1552},108,[83,1554,978],{"class":977},[83,1556,1558,1560,1562,1565],{"class":85,"line":1557},109,[83,1559,815],{"class":175},[83,1561,617],{"class":616},[83,1563,1564],{"class":93},"traefik.http.routers.adminer-rtr.entrypoints=websecure",[83,1566,623],{"class":616},[83,1568,1570,1572,1574,1577],{"class":85,"line":1569},110,[83,1571,815],{"class":175},[83,1573,617],{"class":616},[83,1575,1576],{"class":93},"traefik.http.routers.adminer-rtr.rule=Host(`adminer.$HOSTNAME`)",[83,1578,623],{"class":616},[83,1580,1582,1584,1586,1589],{"class":85,"line":1581},111,[83,1583,815],{"class":175},[83,1585,617],{"class":616},[83,1587,1588],{"class":93},"traefik.http.routers.adminer-rtr.tls=true",[83,1590,623],{"class":616},[83,1592,1594,1596,1598,1601],{"class":85,"line":1593},112,[83,1595,815],{"class":175},[83,1597,617],{"class":616},[83,1599,1600],{"class":93},"traefik.http.routers.adminer-rtr.tls.certresolver=le",[83,1602,623],{"class":616},[83,1604,1606],{"class":85,"line":1605},113,[83,1607,1050],{"class":977},[83,1609,1611,1613,1615,1618],{"class":85,"line":1610},114,[83,1612,815],{"class":175},[83,1614,617],{"class":616},[83,1616,1617],{"class":93},"traefik.http.routers.adminer-rtr.middlewares=rate-limit@file,myauth@file",[83,1619,623],{"class":616},[83,1621,1623],{"class":85,"line":1622},115,[83,1624,628],{"emptyLinePlaceholder":443},[83,1626,1628,1631],{"class":85,"line":1627},116,[83,1629,1630],{"class":113},"  mysql",[83,1632,636],{"class":175},[83,1634,1636,1638,1640],{"class":85,"line":1635},117,[83,1637,748],{"class":113},[83,1639,613],{"class":175},[83,1641,1642],{"class":93}," mysql:8.0.25\n",[83,1644,1646,1648,1650],{"class":85,"line":1645},118,[83,1647,759],{"class":113},[83,1649,613],{"class":175},[83,1651,1652],{"class":93}," mysql\n",[83,1654,1656,1658,1660],{"class":85,"line":1655},119,[83,1657,1101],{"class":113},[83,1659,613],{"class":175},[83,1661,1106],{"class":93},[83,1663,1665,1667,1669],{"class":85,"line":1664},120,[83,1666,769],{"class":113},[83,1668,613],{"class":175},[83,1670,1671],{"class":93}," on-failure\n",[83,1673,1675,1677],{"class":85,"line":1674},121,[83,1676,780],{"class":113},[83,1678,636],{"class":175},[83,1680,1682,1684],{"class":85,"line":1681},122,[83,1683,815],{"class":175},[83,1685,1138],{"class":93},[83,1687,1689,1691],{"class":85,"line":1688},123,[83,1690,807],{"class":113},[83,1692,636],{"class":175},[83,1694,1696,1698],{"class":85,"line":1695},124,[83,1697,815],{"class":175},[83,1699,818],{"class":93},[83,1701,1703,1705],{"class":85,"line":1702},125,[83,1704,824],{"class":113},[83,1706,636],{"class":175},[83,1708,1710,1712,1714,1717],{"class":85,"line":1709},126,[83,1711,815],{"class":175},[83,1713,617],{"class":616},[83,1715,1716],{"class":93},"3306:3306",[83,1718,623],{"class":616},[83,1720,1722,1724],{"class":85,"line":1721},127,[83,1723,901],{"class":113},[83,1725,636],{"class":175},[83,1727,1729,1731],{"class":85,"line":1728},128,[83,1730,815],{"class":175},[83,1732,1733],{"class":93}," ${PWD}\u002Fdata:\u002Fapp:rw\n",[83,1735,1737,1739],{"class":85,"line":1736},129,[83,1738,815],{"class":175},[83,1740,1741],{"class":93}," ${PWD}\u002Fmysql\u002Fmy.cnf:\u002Fetc\u002Fmysql\u002Fconf.d\u002Fmy-over.cnf\n",[83,1743,1745,1747],{"class":85,"line":1744},130,[83,1746,815],{"class":175},[83,1748,1749],{"class":93}," traefik_sample_data_mysql:\u002Fvar\u002Flib\u002Fmysql\n",[83,1751,1753,1755],{"class":85,"line":1752},131,[83,1754,1167],{"class":113},[83,1756,636],{"class":175},[83,1758,1760,1763,1765],{"class":85,"line":1759},132,[83,1761,1762],{"class":113},"      MYSQL_ROOT_PASSWORD",[83,1764,613],{"class":175},[83,1766,1767],{"class":93}," $MYSQL_ROOT_PASSWORD\n",[83,1769,1771,1774,1776],{"class":85,"line":1770},133,[83,1772,1773],{"class":113},"      MYSQL_DATABASE",[83,1775,613],{"class":175},[83,1777,1778],{"class":93}," $MYSQL_DATABASE\n",[83,1780,1782,1785,1787],{"class":85,"line":1781},134,[83,1783,1784],{"class":113},"      MYSQL_USER",[83,1786,613],{"class":175},[83,1788,1789],{"class":93}," $MYSQL_USER\n",[83,1791,1793,1796,1798],{"class":85,"line":1792},135,[83,1794,1795],{"class":113},"      MYSQL_PASSWORD",[83,1797,613],{"class":175},[83,1799,1800],{"class":93}," $MYSQL_PASSWORD\n",[83,1802,1804],{"class":85,"line":1803},136,[83,1805,628],{"emptyLinePlaceholder":443},[83,1807,1809,1812],{"class":85,"line":1808},137,[83,1810,1811],{"class":113},"  redis",[83,1813,636],{"class":175},[83,1815,1817,1819,1821],{"class":85,"line":1816},138,[83,1818,748],{"class":113},[83,1820,613],{"class":175},[83,1822,1823],{"class":93}," redis:alpine\n",[83,1825,1827,1829,1831],{"class":85,"line":1826},139,[83,1828,759],{"class":113},[83,1830,613],{"class":175},[83,1832,1833],{"class":93}," redis\n",[83,1835,1837,1839,1841],{"class":85,"line":1836},140,[83,1838,769],{"class":113},[83,1840,613],{"class":175},[83,1842,774],{"class":93},[83,1844,1846,1848],{"class":85,"line":1845},141,[83,1847,824],{"class":113},[83,1849,636],{"class":175},[83,1851,1853,1855,1857,1860],{"class":85,"line":1852},142,[83,1854,815],{"class":175},[83,1856,617],{"class":616},[83,1858,1859],{"class":93},"6380:6379",[83,1861,623],{"class":616},[83,1863,1865,1867],{"class":85,"line":1864},143,[83,1866,780],{"class":113},[83,1868,636],{"class":175},[83,1870,1872,1874],{"class":85,"line":1871},144,[83,1873,815],{"class":175},[83,1875,1138],{"class":93},[83,1877,1879,1881],{"class":85,"line":1878},145,[83,1880,807],{"class":113},[83,1882,636],{"class":175},[83,1884,1886,1888],{"class":85,"line":1885},146,[83,1887,815],{"class":175},[83,1889,818],{"class":93},[83,1891,1893],{"class":85,"line":1892},147,[83,1894,628],{"emptyLinePlaceholder":443},[83,1896,1898,1901],{"class":85,"line":1897},148,[83,1899,1900],{"class":113},"  portainer",[83,1902,636],{"class":175},[83,1904,1906,1908,1910],{"class":85,"line":1905},149,[83,1907,748],{"class":113},[83,1909,613],{"class":175},[83,1911,1912],{"class":93}," portainer\u002Fportainer:latest\n",[83,1914,1916,1918,1920],{"class":85,"line":1915},150,[83,1917,759],{"class":113},[83,1919,613],{"class":175},[83,1921,1922],{"class":93}," portainer\n",[83,1924,1926,1928,1930],{"class":85,"line":1925},151,[83,1927,769],{"class":113},[83,1929,613],{"class":175},[83,1931,774],{"class":93},[83,1933,1935,1938,1940],{"class":85,"line":1934},152,[83,1936,1937],{"class":113},"    command",[83,1939,613],{"class":175},[83,1941,1942],{"class":93}," -H unix:\u002F\u002F\u002Fvar\u002Frun\u002Fdocker.sock\n",[83,1944,1946,1948],{"class":85,"line":1945},153,[83,1947,780],{"class":113},[83,1949,636],{"class":175},[83,1951,1953,1955],{"class":85,"line":1952},154,[83,1954,788],{"class":113},[83,1956,636],{"class":175},[83,1958,1960,1962,1964],{"class":85,"line":1959},155,[83,1961,796],{"class":113},[83,1963,613],{"class":175},[83,1965,1966],{"class":339}," 192.168.90.253\n",[83,1968,1970,1972],{"class":85,"line":1969},156,[83,1971,807],{"class":113},[83,1973,636],{"class":175},[83,1975,1977,1979],{"class":85,"line":1976},157,[83,1978,815],{"class":175},[83,1980,818],{"class":93},[83,1982,1984,1986],{"class":85,"line":1983},158,[83,1985,901],{"class":113},[83,1987,636],{"class":175},[83,1989,1991,1993],{"class":85,"line":1990},159,[83,1992,815],{"class":175},[83,1994,1995],{"class":93}," itraefik_sample_data_portainer:\u002Fdata\n",[83,1997,1999,2001],{"class":85,"line":1998},160,[83,2000,815],{"class":175},[83,2002,911],{"class":93},[83,2004,2006,2008],{"class":85,"line":2005},161,[83,2007,1167],{"class":113},[83,2009,636],{"class":175},[83,2011,2013,2015],{"class":85,"line":2012},162,[83,2014,815],{"class":175},[83,2016,2017],{"class":93}," TZ=$TZ\n",[83,2019,2021,2023],{"class":85,"line":2020},163,[83,2022,957],{"class":113},[83,2024,636],{"class":175},[83,2026,2028,2030,2032,2034],{"class":85,"line":2027},164,[83,2029,815],{"class":175},[83,2031,617],{"class":616},[83,2033,969],{"class":93},[83,2035,623],{"class":616},[83,2037,2039],{"class":85,"line":2038},165,[83,2040,978],{"class":977},[83,2042,2044,2046,2048,2051],{"class":85,"line":2043},166,[83,2045,815],{"class":175},[83,2047,617],{"class":616},[83,2049,2050],{"class":93},"traefik.http.routers.portainer-rtr.entrypoints=websecure",[83,2052,623],{"class":616},[83,2054,2056,2058,2060,2063],{"class":85,"line":2055},167,[83,2057,815],{"class":175},[83,2059,617],{"class":616},[83,2061,2062],{"class":93},"traefik.http.routers.portainer-rtr.rule=Host(`portainer.$HOSTNAME`)",[83,2064,623],{"class":616},[83,2066,2068,2070,2072,2075],{"class":85,"line":2067},168,[83,2069,815],{"class":175},[83,2071,617],{"class":616},[83,2073,2074],{"class":93},"traefik.http.routers.portainer-rtr.tls=true",[83,2076,623],{"class":616},[83,2078,2080,2082,2084,2087],{"class":85,"line":2079},169,[83,2081,815],{"class":175},[83,2083,617],{"class":616},[83,2085,2086],{"class":93},"traefik.http.routers.portainer-rtr.tls.certresolver=le",[83,2088,623],{"class":616},[83,2090,2092],{"class":85,"line":2091},170,[83,2093,2094],{"class":977},"      # services\n",[83,2096,2098,2100,2102,2105],{"class":85,"line":2097},171,[83,2099,815],{"class":175},[83,2101,617],{"class":616},[83,2103,2104],{"class":93},"traefik.http.routers.portainer-rtr.service=portainer-svc",[83,2106,623],{"class":616},[83,2108,2110,2112,2114,2117],{"class":85,"line":2109},172,[83,2111,815],{"class":175},[83,2113,617],{"class":616},[83,2115,2116],{"class":93},"traefik.http.services.portainer-svc.loadbalancer.server.port=9000",[83,2118,623],{"class":616},[11,2120,2121],{},[521,2122,2123],{},"## traefik.yml",[11,2125,2126],{},"En esta parte observamos la definición del plan de despliegue de Traefik contenido en traefik.yml, en este punto recuerda que si estas haciendo pruebas con generación del certificado SSL, es mejor que lo hagas descomentando la sección del caServer, para más información sobre el rate limit de letsencrypt puedes revisar la siguiente documentación:",[23,2128,2129,2136,2143],{},[26,2130,2131,2132],{},"Rate limit Letsencrypt production: ",[420,2133,2134],{"href":2134,"rel":2135},"https:\u002F\u002Fletsencrypt.org\u002Fdocs\u002Frate-limits",[424],[26,2137,2138,2139],{},"Rate limit Letsencrypt staging: ",[420,2140,2141],{"href":2141,"rel":2142},"https:\u002F\u002Fletsencrypt.org\u002Fdocs\u002Fstaging-environment",[424],[26,2144,2145,2146],{},"Para consultar la cantidad de certificados que tienes generados: ",[420,2147,2148],{"href":2148,"rel":2149},"https:\u002F\u002Fcrt.sh",[424],[73,2151,2153],{"className":601,"code":2152,"language":603,"meta":78,"style":78},"global:\n  checkNewVersion: true\n  sendAnonymousUsage: true\n\nentryPoints:\n  web:\n    address: \":80\"\n    http:\n      redirections:\n        entryPoint:\n          to: websecure\n          scheme: https\n          permanent: true\n  websecure:\n    address: \":443\"\n  traefik:\n    address: \":8080\"\n\napi:\n  dashboard: true\n  insecure: false\n  debug: true\n\nproviders:\n  docker:\n    endpoint: \"unix:\u002F\u002F\u002Fvar\u002Frun\u002Fdocker.sock\"\n    exposedByDefault: false\n    network: traefik\n    swarmMode: false\n  file:\n    directory: \u002Frules\n    watch: true\n\nlog:\n  filePath: \"\u002Flogs\u002Ftraefik.log\"\n  level: WARN # DEBUG, INFO, WARN, ERROR, FATAL, PANIC\n  format: json\n\naccessLog:\n  filePath: \"\u002Flogs\u002Ftraefik.log\"\n  bufferingSize: 100\n  format: json\n  filters:\n    statusCodes:\n      - \"400-499\"\n    retryAttempts: true\n    minDuration: \"10ms\"\n  fields:\n    defaultMode: keep\n    names:\n      ClientUsername: drop\n    headers:\n      defaultMode: keep\n      names:\n        User-Agent: redact\n        Authorization: drop\n        Content-Type: keep\n\ncertificatesResolvers:\n  le:\n    acme:\n      email: log@traefik-sample.com\n      storage: \"\u002Facme.json\"\n      #caServer: https:\u002F\u002Facme-staging-v02.api.letsencrypt.org\u002Fdirectory # no comentar para pruebas indefinidas\n      httpChallenge:\n        entryPoint: web\n",[80,2154,2155,2162,2173,2182,2186,2193,2199,2213,2220,2227,2234,2244,2254,2263,2270,2283,2289,2302,2306,2313,2322,2332,2341,2345,2352,2359,2373,2382,2391,2400,2407,2417,2426,2430,2437,2451,2464,2474,2478,2485,2497,2507,2515,2522,2529,2540,2549,2563,2570,2580,2587,2597,2604,2613,2620,2630,2639,2648,2652,2659,2666,2673,2683,2697,2702,2709],{"__ignoreMap":78},[83,2156,2157,2160],{"class":85,"line":86},[83,2158,2159],{"class":113},"global",[83,2161,636],{"class":175},[83,2163,2164,2167,2169],{"class":85,"line":260},[83,2165,2166],{"class":113},"  checkNewVersion",[83,2168,613],{"class":175},[83,2170,2172],{"class":2171},"s3QIE"," true\n",[83,2174,2175,2178,2180],{"class":85,"line":280},[83,2176,2177],{"class":113},"  sendAnonymousUsage",[83,2179,613],{"class":175},[83,2181,2172],{"class":2171},[83,2183,2184],{"class":85,"line":403},[83,2185,628],{"emptyLinePlaceholder":443},[83,2187,2188,2191],{"class":85,"line":646},[83,2189,2190],{"class":113},"entryPoints",[83,2192,636],{"class":175},[83,2194,2195,2197],{"class":85,"line":654},[83,2196,1267],{"class":113},[83,2198,636],{"class":175},[83,2200,2201,2204,2206,2208,2211],{"class":85,"line":662},[83,2202,2203],{"class":113},"    address",[83,2205,613],{"class":175},[83,2207,617],{"class":616},[83,2209,2210],{"class":93},":80",[83,2212,623],{"class":616},[83,2214,2215,2218],{"class":85,"line":672},[83,2216,2217],{"class":113},"    http",[83,2219,636],{"class":175},[83,2221,2222,2225],{"class":85,"line":680},[83,2223,2224],{"class":113},"      redirections",[83,2226,636],{"class":175},[83,2228,2229,2232],{"class":85,"line":691},[83,2230,2231],{"class":113},"        entryPoint",[83,2233,636],{"class":175},[83,2235,2236,2239,2241],{"class":85,"line":696},[83,2237,2238],{"class":113},"          to",[83,2240,613],{"class":175},[83,2242,2243],{"class":93}," websecure\n",[83,2245,2246,2249,2251],{"class":85,"line":704},[83,2247,2248],{"class":113},"          scheme",[83,2250,613],{"class":175},[83,2252,2253],{"class":93}," https\n",[83,2255,2256,2259,2261],{"class":85,"line":712},[83,2257,2258],{"class":113},"          permanent",[83,2260,613],{"class":175},[83,2262,2172],{"class":2171},[83,2264,2265,2268],{"class":85,"line":720},[83,2266,2267],{"class":113},"  websecure",[83,2269,636],{"class":175},[83,2271,2272,2274,2276,2278,2281],{"class":85,"line":725},[83,2273,2203],{"class":113},[83,2275,613],{"class":175},[83,2277,617],{"class":616},[83,2279,2280],{"class":93},":443",[83,2282,623],{"class":616},[83,2284,2285,2287],{"class":85,"line":733},[83,2286,649],{"class":113},[83,2288,636],{"class":175},[83,2290,2291,2293,2295,2297,2300],{"class":85,"line":738},[83,2292,2203],{"class":113},[83,2294,613],{"class":175},[83,2296,617],{"class":616},[83,2298,2299],{"class":93},":8080",[83,2301,623],{"class":616},[83,2303,2304],{"class":85,"line":745},[83,2305,628],{"emptyLinePlaceholder":443},[83,2307,2308,2311],{"class":85,"line":756},[83,2309,2310],{"class":113},"api",[83,2312,636],{"class":175},[83,2314,2315,2318,2320],{"class":85,"line":766},[83,2316,2317],{"class":113},"  dashboard",[83,2319,613],{"class":175},[83,2321,2172],{"class":2171},[83,2323,2324,2327,2329],{"class":85,"line":777},[83,2325,2326],{"class":113},"  insecure",[83,2328,613],{"class":175},[83,2330,2331],{"class":2171}," false\n",[83,2333,2334,2337,2339],{"class":85,"line":785},[83,2335,2336],{"class":113},"  debug",[83,2338,613],{"class":175},[83,2340,2172],{"class":2171},[83,2342,2343],{"class":85,"line":793},[83,2344,628],{"emptyLinePlaceholder":443},[83,2346,2347,2350],{"class":85,"line":804},[83,2348,2349],{"class":113},"providers",[83,2351,636],{"class":175},[83,2353,2354,2357],{"class":85,"line":812},[83,2355,2356],{"class":113},"  docker",[83,2358,636],{"class":175},[83,2360,2361,2364,2366,2368,2371],{"class":85,"line":821},[83,2362,2363],{"class":113},"    endpoint",[83,2365,613],{"class":175},[83,2367,617],{"class":616},[83,2369,2370],{"class":93},"unix:\u002F\u002F\u002Fvar\u002Frun\u002Fdocker.sock",[83,2372,623],{"class":616},[83,2374,2375,2378,2380],{"class":85,"line":829},[83,2376,2377],{"class":113},"    exposedByDefault",[83,2379,613],{"class":175},[83,2381,2331],{"class":2171},[83,2383,2384,2387,2389],{"class":85,"line":841},[83,2385,2386],{"class":113},"    network",[83,2388,613],{"class":175},[83,2390,349],{"class":93},[83,2392,2393,2396,2398],{"class":85,"line":853},[83,2394,2395],{"class":113},"    swarmMode",[83,2397,613],{"class":175},[83,2399,2331],{"class":2171},[83,2401,2402,2405],{"class":85,"line":866},[83,2403,2404],{"class":113},"  file",[83,2406,636],{"class":175},[83,2408,2409,2412,2414],{"class":85,"line":876},[83,2410,2411],{"class":113},"    directory",[83,2413,613],{"class":175},[83,2415,2416],{"class":93}," \u002Frules\n",[83,2418,2419,2422,2424],{"class":85,"line":887},[83,2420,2421],{"class":113},"    watch",[83,2423,613],{"class":175},[83,2425,2172],{"class":2171},[83,2427,2428],{"class":85,"line":898},[83,2429,628],{"emptyLinePlaceholder":443},[83,2431,2432,2435],{"class":85,"line":906},[83,2433,2434],{"class":113},"log",[83,2436,636],{"class":175},[83,2438,2439,2442,2444,2446,2449],{"class":85,"line":914},[83,2440,2441],{"class":113},"  filePath",[83,2443,613],{"class":175},[83,2445,617],{"class":616},[83,2447,2448],{"class":93},"\u002Flogs\u002Ftraefik.log",[83,2450,623],{"class":616},[83,2452,2453,2456,2458,2461],{"class":85,"line":922},[83,2454,2455],{"class":113},"  level",[83,2457,613],{"class":175},[83,2459,2460],{"class":93}," WARN",[83,2462,2463],{"class":977}," # DEBUG, INFO, WARN, ERROR, FATAL, PANIC\n",[83,2465,2466,2469,2471],{"class":85,"line":930},[83,2467,2468],{"class":113},"  format",[83,2470,613],{"class":175},[83,2472,2473],{"class":93}," json\n",[83,2475,2476],{"class":85,"line":938},[83,2477,628],{"emptyLinePlaceholder":443},[83,2479,2480,2483],{"class":85,"line":946},[83,2481,2482],{"class":113},"accessLog",[83,2484,636],{"class":175},[83,2486,2487,2489,2491,2493,2495],{"class":85,"line":954},[83,2488,2441],{"class":113},[83,2490,613],{"class":175},[83,2492,617],{"class":616},[83,2494,2448],{"class":93},[83,2496,623],{"class":616},[83,2498,2499,2502,2504],{"class":85,"line":962},[83,2500,2501],{"class":113},"  bufferingSize",[83,2503,613],{"class":175},[83,2505,2506],{"class":339}," 100\n",[83,2508,2509,2511,2513],{"class":85,"line":974},[83,2510,2468],{"class":113},[83,2512,613],{"class":175},[83,2514,2473],{"class":93},[83,2516,2517,2520],{"class":85,"line":981},[83,2518,2519],{"class":113},"  filters",[83,2521,636],{"class":175},[83,2523,2524,2527],{"class":85,"line":993},[83,2525,2526],{"class":113},"    statusCodes",[83,2528,636],{"class":175},[83,2530,2531,2533,2535,2538],{"class":85,"line":1005},[83,2532,815],{"class":175},[83,2534,617],{"class":616},[83,2536,2537],{"class":93},"400-499",[83,2539,623],{"class":616},[83,2541,2542,2545,2547],{"class":85,"line":1017},[83,2543,2544],{"class":113},"    retryAttempts",[83,2546,613],{"class":175},[83,2548,2172],{"class":2171},[83,2550,2551,2554,2556,2558,2561],{"class":85,"line":1029},[83,2552,2553],{"class":113},"    minDuration",[83,2555,613],{"class":175},[83,2557,617],{"class":616},[83,2559,2560],{"class":93},"10ms",[83,2562,623],{"class":616},[83,2564,2565,2568],{"class":85,"line":1035},[83,2566,2567],{"class":113},"  fields",[83,2569,636],{"class":175},[83,2571,2572,2575,2577],{"class":85,"line":1047},[83,2573,2574],{"class":113},"    defaultMode",[83,2576,613],{"class":175},[83,2578,2579],{"class":93}," keep\n",[83,2581,2582,2585],{"class":85,"line":1053},[83,2583,2584],{"class":113},"    names",[83,2586,636],{"class":175},[83,2588,2589,2592,2594],{"class":85,"line":1065},[83,2590,2591],{"class":113},"      ClientUsername",[83,2593,613],{"class":175},[83,2595,2596],{"class":93}," drop\n",[83,2598,2599,2602],{"class":85,"line":1070},[83,2600,2601],{"class":113},"    headers",[83,2603,636],{"class":175},[83,2605,2606,2609,2611],{"class":85,"line":1078},[83,2607,2608],{"class":113},"      defaultMode",[83,2610,613],{"class":175},[83,2612,2579],{"class":93},[83,2614,2615,2618],{"class":85,"line":1088},[83,2616,2617],{"class":113},"      names",[83,2619,636],{"class":175},[83,2621,2622,2625,2627],{"class":85,"line":1098},[83,2623,2624],{"class":113},"        User-Agent",[83,2626,613],{"class":175},[83,2628,2629],{"class":93}," redact\n",[83,2631,2632,2635,2637],{"class":85,"line":1109},[83,2633,2634],{"class":113},"        Authorization",[83,2636,613],{"class":175},[83,2638,2596],{"class":93},[83,2640,2641,2644,2646],{"class":85,"line":1119},[83,2642,2643],{"class":113},"        Content-Type",[83,2645,613],{"class":175},[83,2647,2579],{"class":93},[83,2649,2650],{"class":85,"line":1126},[83,2651,628],{"emptyLinePlaceholder":443},[83,2653,2654,2657],{"class":85,"line":1133},[83,2655,2656],{"class":113},"certificatesResolvers",[83,2658,636],{"class":175},[83,2660,2661,2664],{"class":85,"line":1141},[83,2662,2663],{"class":113},"  le",[83,2665,636],{"class":175},[83,2667,2668,2671],{"class":85,"line":1148},[83,2669,2670],{"class":113},"    acme",[83,2672,636],{"class":175},[83,2674,2675,2678,2680],{"class":85,"line":1156},[83,2676,2677],{"class":113},"      email",[83,2679,613],{"class":175},[83,2681,2682],{"class":93}," log@traefik-sample.com\n",[83,2684,2685,2688,2690,2692,2695],{"class":85,"line":1164},[83,2686,2687],{"class":113},"      storage",[83,2689,613],{"class":175},[83,2691,617],{"class":616},[83,2693,2694],{"class":93},"\u002Facme.json",[83,2696,623],{"class":616},[83,2698,2699],{"class":85,"line":1172},[83,2700,2701],{"class":977},"      #caServer: https:\u002F\u002Facme-staging-v02.api.letsencrypt.org\u002Fdirectory # no comentar para pruebas indefinidas\n",[83,2703,2704,2707],{"class":85,"line":1180},[83,2705,2706],{"class":113},"      httpChallenge",[83,2708,636],{"class":175},[83,2710,2711,2713,2715],{"class":85,"line":1188},[83,2712,2231],{"class":113},[83,2714,613],{"class":175},[83,2716,1289],{"class":93},[11,2718,2719],{},[521,2720,2721],{},"## middlewares.toml",[11,2723,2724],{},"A continuación se muestra el contenido del archivo middlewares.toml, aquí tenemos la definición de los middlewares para una autenticación básica con htpasswd y prevención de ataques http con un rate limit por minuto de a lo mucho 100 request.",[73,2726,2730],{"className":2727,"code":2728,"language":2729,"meta":78,"style":78},"language-toml shiki shiki-themes vitesse-dark","[http.middlewares]\n    [http.middlewares.myauth]\n        [http.middlewares.myauth.basicAuth]\n            realm = \"Traefik Basic Auth\"\n            usersFile = \"\u002Fshared\u002F.htpasswd\"\n    [http.middlewares.rate-limit]\n        [http.middlewares.rate-limit.rateLimit]\n            average = 100\n            burst = 50\n","toml",[80,2731,2732,2750,2768,2790,2806,2820,2837,2858,2867],{"__ignoreMap":78},[83,2733,2734,2737,2740,2744,2747],{"class":85,"line":86},[83,2735,2736],{"class":175},"[",[83,2738,2739],{"class":89},"http",[83,2741,2743],{"class":2742},"sNpkn",".",[83,2745,2746],{"class":89},"middlewares",[83,2748,2749],{"class":175},"]\n",[83,2751,2752,2755,2757,2759,2761,2763,2766],{"class":85,"line":260},[83,2753,2754],{"class":175},"    [",[83,2756,2739],{"class":89},[83,2758,2743],{"class":2742},[83,2760,2746],{"class":89},[83,2762,2743],{"class":2742},[83,2764,2765],{"class":89},"myauth",[83,2767,2749],{"class":175},[83,2769,2770,2773,2775,2777,2779,2781,2783,2785,2788],{"class":85,"line":280},[83,2771,2772],{"class":175},"        [",[83,2774,2739],{"class":89},[83,2776,2743],{"class":2742},[83,2778,2746],{"class":89},[83,2780,2743],{"class":2742},[83,2782,2765],{"class":89},[83,2784,2743],{"class":2742},[83,2786,2787],{"class":89},"basicAuth",[83,2789,2749],{"class":175},[83,2791,2792,2796,2799,2801,2804],{"class":85,"line":403},[83,2793,2795],{"class":2794},"st-jp","            realm",[83,2797,2798],{"class":175}," =",[83,2800,617],{"class":616},[83,2802,2803],{"class":93},"Traefik Basic Auth",[83,2805,623],{"class":616},[83,2807,2808,2811,2813,2815,2818],{"class":85,"line":646},[83,2809,2810],{"class":2794},"            usersFile",[83,2812,2798],{"class":175},[83,2814,617],{"class":616},[83,2816,2817],{"class":93},"\u002Fshared\u002F.htpasswd",[83,2819,623],{"class":616},[83,2821,2822,2824,2826,2828,2830,2832,2835],{"class":85,"line":654},[83,2823,2754],{"class":175},[83,2825,2739],{"class":89},[83,2827,2743],{"class":2742},[83,2829,2746],{"class":89},[83,2831,2743],{"class":2742},[83,2833,2834],{"class":89},"rate-limit",[83,2836,2749],{"class":175},[83,2838,2839,2841,2843,2845,2847,2849,2851,2853,2856],{"class":85,"line":662},[83,2840,2772],{"class":175},[83,2842,2739],{"class":89},[83,2844,2743],{"class":2742},[83,2846,2746],{"class":89},[83,2848,2743],{"class":2742},[83,2850,2834],{"class":89},[83,2852,2743],{"class":2742},[83,2854,2855],{"class":89},"rateLimit",[83,2857,2749],{"class":175},[83,2859,2860,2863,2865],{"class":85,"line":672},[83,2861,2862],{"class":2794},"            average",[83,2864,2798],{"class":175},[83,2866,2506],{"class":339},[83,2868,2869,2872,2874],{"class":85,"line":680},[83,2870,2871],{"class":2794},"            burst",[83,2873,2798],{"class":175},[83,2875,2876],{"class":339}," 50\n",[11,2878,2879],{},[521,2880,2881],{},"## .env, logs y acme.json",[11,2883,2884],{},"Para poder iniciar el proyecto no te olvides de crear el archivo .env basado en .env.example, puedes ejecutar los siguientes comandos como una pequeña configuración inicial.",[73,2886,2888],{"className":75,"code":2887,"language":77,"meta":78,"style":78},"cp .env.example .env && \\\ncp traefik\u002Facme.json.example traefik\u002Facme.json && \\\ncp traefik\u002Flogs\u002Ftraefik.log.example traefik\u002Flogs\u002Ftraefik.log && \\\ncp traefik\u002Fshared\u002F.htpasswd.example traefik\u002Fshared\u002F.htpasswd && \\\nchmod 0600 traefik\u002Facme.json\n",[80,2889,2890,2904,2916,2928,2940],{"__ignoreMap":78},[83,2891,2892,2894,2897,2900,2902],{"class":85,"line":86},[83,2893,129],{"class":89},[83,2895,2896],{"class":93}," .env.example",[83,2898,2899],{"class":93}," .env",[83,2901,176],{"class":175},[83,2903,372],{"class":165},[83,2905,2906,2908,2910,2912,2914],{"class":85,"line":260},[83,2907,129],{"class":89},[83,2909,364],{"class":93},[83,2911,367],{"class":93},[83,2913,176],{"class":175},[83,2915,372],{"class":165},[83,2917,2918,2920,2922,2924,2926],{"class":85,"line":280},[83,2919,129],{"class":89},[83,2921,379],{"class":93},[83,2923,382],{"class":93},[83,2925,176],{"class":175},[83,2927,372],{"class":165},[83,2929,2930,2932,2934,2936,2938],{"class":85,"line":403},[83,2931,129],{"class":89},[83,2933,393],{"class":93},[83,2935,396],{"class":93},[83,2937,176],{"class":175},[83,2939,372],{"class":165},[83,2941,2942,2944,2946],{"class":85,"line":646},[83,2943,406],{"class":89},[83,2945,409],{"class":339},[83,2947,412],{"class":93},[11,2949,2950],{},[521,2951,2952],{},"## Docker network y repositorios propios",[11,2954,2955],{},"No te olvides de que en la carpera .\u002Fapps\u002Fapi y .\u002Fapps\u002Fweb deben de ir tus proyectos que están en Laravel (microservicio) y React o Vue (PWA) y que antes de levantar los servicios tengas creado un docker network externo, puedes crearlo con el siguiente comando:",[73,2957,2958],{"className":75,"code":321,"language":77,"meta":78,"style":78},[80,2959,2960],{"__ignoreMap":78},[83,2961,2962,2964,2966,2968,2970,2972,2974,2976],{"class":85,"line":86},[83,2963,236],{"class":89},[83,2965,330],{"class":93},[83,2967,333],{"class":93},[83,2969,336],{"class":165},[83,2971,340],{"class":339},[83,2973,343],{"class":165},[83,2975,346],{"class":93},[83,2977,349],{"class":93},[11,2979,2980],{},[521,2981,2982],{},"## Make CLI",[11,2984,2985],{},"Levanta el proyecto ya sea con docker-compose o con make así:",[73,2987,2989],{"className":75,"code":2988,"language":77,"meta":78,"style":78},"make start\n",[80,2990,2991],{"__ignoreMap":78},[83,2992,2993,2996],{"class":85,"line":86},[83,2994,2995],{"class":89},"make",[83,2997,2998],{"class":93}," start\n",[11,3000,3001],{},"Otras utilidades del Makefile:",[11,3003,3004],{},[477,3005],{"alt":3006,"src":3007},"makefile","\u002Fimg\u002Fposts\u002Fblog\u002Fdespliegue-docker-traefik-letsencrypt-pwa\u002Fmake.png",[11,3009,3010,3011],{},"Más documentación del proyecto en Github, ",[420,3012,494],{"href":492,"rel":3013},[424],[11,3015,3016],{},"Espero que esta guía te haya servido de ayuda, hasta una proxima oportunidad.",[427,3018,3019],{},"html pre.shiki code .sCK9x, html code.shiki .sCK9x{--shiki-default:#80A665}html pre.shiki code .s7rlk, html code.shiki .s7rlk{--shiki-default:#C98A7D}html pre.shiki code .sm68I, html code.shiki .sm68I{--shiki-default:#B8A965}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s_pn2, html code.shiki .s_pn2{--shiki-default:#666666}html pre.shiki code .sXjYR, html code.shiki .sXjYR{--shiki-default:#C99076}html pre.shiki code .sxA9i, html code.shiki .sxA9i{--shiki-default:#4C9A91}html pre.shiki code .sNJcY, html code.shiki .sNJcY{--shiki-default:#C98A7D77}html pre.shiki code .sux-A, html code.shiki .sux-A{--shiki-default:#758575DD}html pre.shiki code .s3QIE, html code.shiki .s3QIE{--shiki-default:#4D9375}html pre.shiki code .sNpkn, html code.shiki .sNpkn{--shiki-default:#DBD7CAEE}html pre.shiki code .st-jp, html code.shiki .st-jp{--shiki-default:#BD976A}",{"title":78,"searchDepth":260,"depth":260,"links":3021},[],"2022-07-24","Traefik es un enrutador perimetral de código abierto que hace que la publicación de sus servicios sea una experiencia fácil y divertida.","\u002Fimg\u002Fposts\u002Ftraefik-gin-go-mongo-docker-digital-ocean.png",{},"\u002Fblog\u002Fdespliegue-docker-traefik-letsencrypt-pwa",{"title":456,"description":3023},"blog\u002Fdespliegue-docker-traefik-letsencrypt-pwa",[449,3030,3031,450,451,3032,3033,452],"Laravel","Letsencrypt","Portainer","Redis","kn1NqZ5FxcOLZx_U7OGaB1LtuexIK95Dw6Fedzr1-mA",{"id":3036,"title":3037,"body":3038,"date":3453,"description":3454,"draft":438,"extension":439,"image":3455,"lang":441,"meta":3456,"navigation":443,"path":3457,"seo":3458,"stem":3459,"tags":3460,"__hash__":3463},"blog\u002Fblog\u002Finstalar-oh-my-zsh-con-esteroides.md","Cómo instalar Oh My Zsh con esteroides",{"type":8,"value":3039,"toc":3451},[3040,3043,3046,3049,3061,3080,3083,3099,3104,3130,3143,3175,3180,3211,3214,3277,3280,3283,3291,3339,3342,3355,3358,3363,3366,3381,3384,3426,3429,3440,3448],[11,3041,3042],{},"Oh My Zsh es un marco de código de abierto, motivo por el cual es mantenido por la comunidad, esto nos permite administrar y mejorar nuestra configuración con la shell zsh.",[11,3044,3045],{},"La shell zsh solo está disponible para sistemas operativos basados en UNIX; en el caso de Linux describiremos la instalación para las distros basados en Debian (Ubuntu) y Fedora (Centos).",[11,3047,3048],{},"Siga los siguientes pasos para poder instalar tanto la shell como Oh My Zsh:",[11,3050,3051,3054,3057],{},[521,3052,3053],{},"1. Instalar Oh My Zsh",[3055,3056],"br",{},[3058,3059,3060],"em",{},"Ubuntu",[73,3062,3064],{"className":75,"code":3063,"language":77,"meta":78,"style":78},"sudo apt-get install zsh\n",[80,3065,3066],{"__ignoreMap":78},[83,3067,3068,3071,3074,3077],{"class":85,"line":86},[83,3069,3070],{"class":89},"sudo",[83,3072,3073],{"class":93}," apt-get",[83,3075,3076],{"class":93}," install",[83,3078,3079],{"class":93}," zsh\n",[11,3081,3082],{},"En la última versión de la distro ya no es necesario instalar git, pero en caso lo necesite",[73,3084,3086],{"className":75,"code":3085,"language":77,"meta":78,"style":78},"sudo apt-get install git-core\n",[80,3087,3088],{"__ignoreMap":78},[83,3089,3090,3092,3094,3096],{"class":85,"line":86},[83,3091,3070],{"class":89},[83,3093,3073],{"class":93},[83,3095,3076],{"class":93},[83,3097,3098],{"class":93}," git-core\n",[11,3100,3101],{},[3058,3102,3103],{},"Centos",[73,3105,3107],{"className":75,"code":3106,"language":77,"meta":78,"style":78},"sudo yum install zsh\nsudo yum install git-core\n",[80,3108,3109,3120],{"__ignoreMap":78},[83,3110,3111,3113,3116,3118],{"class":85,"line":86},[83,3112,3070],{"class":89},[83,3114,3115],{"class":93}," yum",[83,3117,3076],{"class":93},[83,3119,3079],{"class":93},[83,3121,3122,3124,3126,3128],{"class":85,"line":260},[83,3123,3070],{"class":89},[83,3125,3115],{"class":93},[83,3127,3076],{"class":93},[83,3129,3098],{"class":93},[11,3131,3132,3135,3137,3138,3140],{},[521,3133,3134],{},"2. Instalar shell Zsh",[3055,3136],{},"\nRecuerda que al momento de instalar Oh My Zsh, este se instala para el usuario actual que está utilizando la distro.",[3055,3139],{},[3058,3141,3142],{},"Vía curl",[73,3144,3146],{"className":75,"code":3145,"language":77,"meta":78,"style":78},"sh -c \"$(curl -fsSL https:\u002F\u002Fraw.github.com\u002Fohmyzsh\u002Fohmyzsh\u002Fmaster\u002Ftools\u002Finstall.sh)\"\n",[80,3147,3148],{"__ignoreMap":78},[83,3149,3150,3153,3156,3158,3161,3164,3167,3170,3173],{"class":85,"line":86},[83,3151,3152],{"class":89},"sh",[83,3154,3155],{"class":165}," -c",[83,3157,617],{"class":616},[83,3159,3160],{"class":175},"$(",[83,3162,3163],{"class":89},"curl",[83,3165,3166],{"class":165}," -fsSL",[83,3168,3169],{"class":93}," https:\u002F\u002Fraw.github.com\u002Fohmyzsh\u002Fohmyzsh\u002Fmaster\u002Ftools\u002Finstall.sh",[83,3171,3172],{"class":175},")",[83,3174,623],{"class":616},[11,3176,3177],{},[3058,3178,3179],{},"Vía wget",[73,3181,3183],{"className":75,"code":3182,"language":77,"meta":78,"style":78},"sh -c \"$(wget https:\u002F\u002Fraw.github.com\u002Fohmyzsh\u002Fohmyzsh\u002Fmaster\u002Ftools\u002Finstall.sh -O -)\"\n",[80,3184,3185],{"__ignoreMap":78},[83,3186,3187,3189,3191,3193,3195,3198,3201,3204,3207,3209],{"class":85,"line":86},[83,3188,3152],{"class":89},[83,3190,3155],{"class":165},[83,3192,617],{"class":616},[83,3194,3160],{"class":175},[83,3196,3197],{"class":89},"wget",[83,3199,3200],{"class":93}," https:\u002F\u002Fraw.github.com\u002Fohmyzsh\u002Fohmyzsh\u002Fmaster\u002Ftools\u002Finstall.sh ",[83,3202,3203],{"class":165},"-O",[83,3205,3206],{"class":93}," -",[83,3208,3172],{"class":175},[83,3210,623],{"class":616},[11,3212,3213],{},"En ocasiones es necesario establecer zsh como shell por defecto, a continuación varios comandos a tomar en cuenta:",[73,3215,3217],{"className":75,"code":3216,"language":77,"meta":78,"style":78},"chsh -s `which zsh`\nchsh -s $(which zsh)\nusermod -s $(which zsh) $(whoami)\n",[80,3218,3219,3239,3255],{"__ignoreMap":78},[83,3220,3221,3224,3227,3230,3233,3236],{"class":85,"line":86},[83,3222,3223],{"class":89},"chsh",[83,3225,3226],{"class":165}," -s",[83,3228,3229],{"class":175}," `",[83,3231,3232],{"class":113},"which",[83,3234,3235],{"class":93}," zsh",[83,3237,3238],{"class":175},"`\n",[83,3240,3241,3243,3245,3248,3250,3252],{"class":85,"line":260},[83,3242,3223],{"class":89},[83,3244,3226],{"class":165},[83,3246,3247],{"class":175}," $(",[83,3249,3232],{"class":113},[83,3251,3235],{"class":93},[83,3253,3254],{"class":175},")\n",[83,3256,3257,3260,3262,3264,3266,3268,3270,3272,3275],{"class":85,"line":280},[83,3258,3259],{"class":89},"usermod",[83,3261,3226],{"class":165},[83,3263,3247],{"class":175},[83,3265,3232],{"class":113},[83,3267,3235],{"class":93},[83,3269,3172],{"class":175},[83,3271,3247],{"class":175},[83,3273,3274],{"class":89},"whoami",[83,3276,3254],{"class":175},[11,3278,3279],{},"Si te aparece el mensaje non-standard shell, tendrás que añadir la nueva shell a la lista de shells permitidas por el sistema operativo, para ello copia la ruta completa de la shell (que puedes averiguar con el comando which zsh) y pégala en el archivo \u002Fetc\u002Fshells, una vez realizado esto vuelve a ejecutar el comando antes mencionado.",[11,3281,3282],{},"También puedes editar manualmente el archivo \u002Fetc\u002Fpasswd",[11,3284,3285,3288,3290],{},[521,3286,3287],{},"3. Instalar plugins",[3055,3289],{},"\nYa ubicados con la shell zsh, clonamos los siguientes plugins adicionales:",[73,3292,3294],{"className":75,"code":3293,"language":77,"meta":78,"style":78},"git clone https:\u002F\u002Fgithub.com\u002Fzsh-users\u002Fzsh-syntax-highlighting.git $ZSH_CUSTOM\u002Fplugins\u002Fzsh-syntax-highlighting\ngit clone https:\u002F\u002Fgithub.com\u002Fzsh-users\u002Fzsh-autosuggestions $ZSH_CUSTOM\u002Fplugins\u002Fzsh-autosuggestions\ngit clone https:\u002F\u002Fgithub.com\u002Fzsh-users\u002Fantigen.git $ZSH_CUSTOM\u002Fplugins\u002Fantigen\n",[80,3295,3296,3311,3325],{"__ignoreMap":78},[83,3297,3298,3300,3302,3305,3308],{"class":85,"line":86},[83,3299,90],{"class":89},[83,3301,94],{"class":93},[83,3303,3304],{"class":93}," https:\u002F\u002Fgithub.com\u002Fzsh-users\u002Fzsh-syntax-highlighting.git",[83,3306,3307],{"class":2794}," $ZSH_CUSTOM",[83,3309,3310],{"class":93},"\u002Fplugins\u002Fzsh-syntax-highlighting\n",[83,3312,3313,3315,3317,3320,3322],{"class":85,"line":260},[83,3314,90],{"class":89},[83,3316,94],{"class":93},[83,3318,3319],{"class":93}," https:\u002F\u002Fgithub.com\u002Fzsh-users\u002Fzsh-autosuggestions",[83,3321,3307],{"class":2794},[83,3323,3324],{"class":93},"\u002Fplugins\u002Fzsh-autosuggestions\n",[83,3326,3327,3329,3331,3334,3336],{"class":85,"line":280},[83,3328,90],{"class":89},[83,3330,94],{"class":93},[83,3332,3333],{"class":93}," https:\u002F\u002Fgithub.com\u002Fzsh-users\u002Fantigen.git",[83,3335,3307],{"class":2794},[83,3337,3338],{"class":93},"\u002Fplugins\u002Fantigen\n",[11,3340,3341],{},"Editamos con vim el siguiente archivo ~\u002F.zshrc:",[73,3343,3345],{"className":75,"code":3344,"language":77,"meta":78,"style":78},"vim ~\u002F.zshrc\n",[80,3346,3347],{"__ignoreMap":78},[83,3348,3349,3352],{"class":85,"line":86},[83,3350,3351],{"class":89},"vim",[83,3353,3354],{"class":93}," ~\u002F.zshrc\n",[11,3356,3357],{},"Configuramos en los siguientes puntos:",[11,3359,3360],{},[477,3361],{"alt":78,"src":3362},"\u002Fimg\u002Fposts\u002Fblog\u002Finstalar-oh-my-zsh-con-esteroides\u002Fzshrc-config.png",[11,3364,3365],{},"Configuramos la sección de plugins:",[73,3367,3369],{"className":75,"code":3368,"language":77,"meta":78,"style":78},"git zsh-syntax-highlighting zsh-autosuggestions\n",[80,3370,3371],{"__ignoreMap":78},[83,3372,3373,3375,3378],{"class":85,"line":86},[83,3374,90],{"class":89},[83,3376,3377],{"class":93}," zsh-syntax-highlighting",[83,3379,3380],{"class":93}," zsh-autosuggestions\n",[11,3382,3383],{},"Antigen es un gestor de plugins para zsh, que actúa de intermediario entre nosotros y el fichero de configuración .zshrc (con antigen es mucho más fácil su gestión).",[73,3385,3387],{"className":75,"code":3386,"language":77,"meta":78,"style":78},"source ${ZSH_CUSTOM:-~\u002F.oh-my-zsh\u002Fcustom}\u002Fplugins\u002Fantigen\u002Fantigen.zsh\n",[80,3388,3389],{"__ignoreMap":78},[83,3390,3391,3394,3397,3400,3404,3407,3410,3412,3415,3417,3420,3423],{"class":85,"line":86},[83,3392,3393],{"class":113},"source",[83,3395,3396],{"class":175}," ${",[83,3398,3399],{"class":2794},"ZSH_CUSTOM",[83,3401,3403],{"class":3402},"s_wWq",":-",[83,3405,3406],{"class":2742},"~",[83,3408,3409],{"class":3402},"\u002F",[83,3411,2743],{"class":2742},[83,3413,3414],{"class":2794},"oh-my-zsh",[83,3416,3409],{"class":3402},[83,3418,3419],{"class":2794},"custom",[83,3421,3422],{"class":175},"}",[83,3424,3425],{"class":93},"\u002Fplugins\u002Fantigen\u002Fantigen.zsh\n",[11,3427,3428],{},"Recargamos la configuración:",[73,3430,3432],{"className":75,"code":3431,"language":77,"meta":78,"style":78},"source ~\u002F.zshrc\n",[80,3433,3434],{"__ignoreMap":78},[83,3435,3436,3438],{"class":85,"line":86},[83,3437,3393],{"class":113},[83,3439,3354],{"class":93},[11,3441,3442,3443],{},"Documentación del producto en ",[420,3444,3447],{"href":3445,"rel":3446},"https:\u002F\u002Fohmyz.sh",[424],"Oh My Zsh",[427,3449,3450],{},"html pre.shiki code .sCK9x, html code.shiki .sCK9x{--shiki-default:#80A665}html pre.shiki code .s7rlk, html code.shiki .s7rlk{--shiki-default:#C98A7D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sXjYR, html code.shiki .sXjYR{--shiki-default:#C99076}html pre.shiki code .sNJcY, html code.shiki .sNJcY{--shiki-default:#C98A7D77}html pre.shiki code .s_pn2, html code.shiki .s_pn2{--shiki-default:#666666}html pre.shiki code .sm68I, html code.shiki .sm68I{--shiki-default:#B8A965}html pre.shiki code .st-jp, html code.shiki .st-jp{--shiki-default:#BD976A}html pre.shiki code .s_wWq, html code.shiki .s_wWq{--shiki-default:#CB7676}html pre.shiki code .sNpkn, html code.shiki .sNpkn{--shiki-default:#DBD7CAEE}",{"title":78,"searchDepth":260,"depth":260,"links":3452},[],"2022-07-18","Oh My Zsh es un marco de código abierto, motivo por el cual es mantenido por la comunidad; esto nos permite administrar y mejorar nuestra configuración con la shell zsh.","\u002Fimg\u002Fposts\u002Foh-my-zsh.png",{},"\u002Fblog\u002Finstalar-oh-my-zsh-con-esteroides",{"title":3037,"description":3454},"blog\u002Finstalar-oh-my-zsh-con-esteroides",[3461,3462,3447],"Shell","Zsh","jKvsV7I_NHI1ywkE0rjBiW7sN21d6z5x-bP3L-a6eu4",{"id":3465,"title":3466,"body":3467,"date":4170,"description":3475,"draft":438,"extension":439,"image":4171,"lang":441,"meta":4172,"navigation":443,"path":4173,"seo":4174,"stem":4175,"tags":4176,"__hash__":4179},"blog\u002Fblog\u002Fserverless-faas-aws-lambda.md","Una explicación breve sobre Serverless, FaaS y AWS Lambda",{"type":8,"value":3468,"toc":4149},[3469,3473,3476,3489,3500,3510,3516,3521,3524,3532,3535,3538,3541,3546,3550,3557,3590,3593,3596,3599,3602,3607,3610,3620,3623,3640,3644,3647,3650,3658,3661,3702,3711,3715,3718,3726,3729,3737,3743,3746,3750,3753,3756,3765,3774,3778,3781,3795,3798,3801,3818,3821,3824,3828,3831,3835,3838,3842,3845,3849,3852,3856,3859,3867,3870,3930,3979,3985,3988,3991,3994,3999,4002,4011,4014,4017,4020,4025,4046,4049,4052,4057,4060,4063,4068,4071,4076,4079,4084,4088,4091,4094,4097,4100,4103,4106,4111,4122,4130,4134,4137,4140,4143,4146],[18,3470,3472],{"id":3471},"qué-es-serverless"," ¿Qué es Serverless?",[11,3474,3475],{},"Serverless no es una tecnología específica; es un concepto. Por eso es difícil de entender. Al igual que The Cloud era un concepto abstracto y confuso en el 2008.",[11,3477,3478,3479,3482,3483,3486,3487,613],{},"Definir ",[3058,3480,3481],{},"Serverless"," es difícil. Lo que sigue está lejos de ser la mejor definición, pero hagámoslo simple: ",[521,3484,3485],{},"Serverless se trata de administrar menos infraestructura."," Por ejemplo, aquí hay algunas diferencias entre administrar nuestra propia infraestructura y ",[3058,3488,3481],{},[23,3490,3491,3494,3497],{},[26,3492,3493],{},"En lugar de iniciar y configurar servidores, utilizamos servicios de alto nivel que ocultan esos detalles.",[26,3495,3496],{},"En lugar de escalar los servidores, permitimos que los proveedores de alojamiento lo hagan automáticamente.",[26,3498,3499],{},"En lugar de reservar servidores y pagar un precio fijo, pagamos por nuestro uso.",[11,3501,3502,3503,3506,3507,3509],{},"Sí, existen ",[3058,3504,3505],{},"Intraestructuras"," ",[3058,3508,3481],{},". Nuestro código tiene que ejecutarse en alguna parte. Pero lo importante es que ni siquiera tenemos que pensar en ellos.",[3511,3512,3513],"blockquote",{},[11,3514,3515],{},"Sin servidor significa administrar menos infraestructura: dejas de pensar en servidores y empiezas a pensar en funciones.",[3517,3518,3520],"h3",{"id":3519},"un-ejemplo","Un ejemplo",[11,3522,3523],{},"Ilustremos eso con el almacenamiento de archivos:",[23,3525,3526,3529],{},[26,3527,3528],{},"Enfoque Serverless: comprar \u002F alquilar espacio en disco.",[26,3530,3531],{},"Enfoque Serverless: utilice AWS S3 o un servicio similar.",[11,3533,3534],{},"Con el enfoque tradicional, tenemos que decidir de antemano el tamaño del disco. Tenemos que monitorearlo, crear copias de seguridad, escalarlo si se llena y pagar el mismo precio incluso si solo usamos el 10%.",[11,3536,3537],{},"Con el enfoque Serverless, simplemente enviamos archivos a S3 y pagamos por lo que usamos.",[11,3539,3540],{},"Para ser claros: sí, AWS S3 es un PaaS. ¡Resulta que la mayoría de nosotros ya estábamos haciendo Serverless por un tiempo!",[11,3542,3543],{},[477,3544],{"alt":78,"src":3545},"\u002Fimg\u002Fposts\u002Fblog\u002Fserverless-faas-aws-lambda\u002F1_x_v5NRC3TTMt1MaYl1gMUg.jpeg",[18,3547,3549],{"id":3548},"serverless-frente-a-faas","Serverless frente a FaaS",[11,3551,3552,3553,3556],{},"FaaS, o ",[3058,3554,3555],{},"Function as a Service",", es un servicio específico ofrecido por algunos proveedores. Por ejemplo:",[23,3558,3559,3569,3578,3587],{},[26,3560,3561,3568],{},[420,3562,3565],{"href":3563,"rel":3564},"https:\u002F\u002Faws.amazon.com\u002Flambda\u002F",[424],[3058,3566,3567],{},"AWS Lambda",",",[26,3570,3571,3568],{},[3058,3572,3573],{},[420,3574,3577],{"href":3575,"rel":3576},"https:\u002F\u002Fazure.microsoft.com\u002Fservices\u002Ffunctions\u002F",[424],"Funciones de Microsoft Azure",[26,3579,3580,3568],{},[3058,3581,3582],{},[420,3583,3586],{"href":3584,"rel":3585},"https:\u002F\u002Fcloud.google.com\u002Ffunctions",[424],"Funciones de Google Cloud",[26,3588,3589],{},"y muchos más.",[11,3591,3592],{},"FaaS nos permite ejecutar código Serverless: no tenemos que configurar o escalar servidores. Simplemente cargamos nuestro código, el proveedor lo ejecuta por nosotros y pagamos solo por su tiempo de ejecución.",[11,3594,3595],{},"Al igual que AWS S3 y muchos otros servicios, FaaS es un servicio Serverless. Pero es importante no confundir los dos.",[11,3597,3598],{},"FaaS es Serverless, pero Serverless es más que solo FaaS.",[11,3600,3601],{},"Dicho esto, FaaS es, por supuesto, muy interesante para nosotros como desarrolladores, ¡porque tenemos código para ejecutar!",[11,3603,3604],{},[477,3605],{"alt":78,"src":3606},"\u002Fimg\u002Fposts\u002Fblog\u002Fserverless-faas-aws-lambda\u002FFaaS-Or-Serverless-Computing-Architecture-removebg-preview.png",[11,3608,3609],{},"AWS",[11,3611,3612,3619],{},[420,3613,3616],{"href":3614,"rel":3615},"https:\u002F\u002Faws.amazon.com\u002Fwhat-is-aws\u002F",[424],[3058,3617,3618],{},"La nube de AWS"," es uno de los proveedores de nube líderes en este momento.",[11,3621,3622],{},"Ofrece muchos servicios diferentes para crear y ejecutar aplicaciones en línea. Algunos servicios no tienen servidor, otros no. Por ejemplo, es posible alquilar servidores a través de su famoso servicio AWS EC2 o ejecutar bases de datos a través de AWS RDS (Relational Database Service).",[11,3624,3625,3626,3633,3634,3639],{},"Es posible crear aplicaciones sin servidor utilizando servicios de otros proveedores de nube, como ",[3058,3627,3628],{},[420,3629,3632],{"href":3630,"rel":3631},"https:\u002F\u002Fazure.microsoft.com\u002F",[424],"Microsoft Azure",", ",[420,3635,3638],{"href":3636,"rel":3637},"https:\u002F\u002Fcloud.google.com\u002F",[424],"Google Cloud",", etc. Sin embargo, por ahora AWS es la solución más popular y el líder de la industria. Al enfocarnos en un proveedor, podemos mantener este curso simple pero concreto.",[18,3641,3643],{"id":3642},"crear-una-cuenta-de-aws","Crear una cuenta de AWS",[11,3645,3646],{},"En esta sección, veremos cómo crear una nueva cuenta de AWS. ",[11,3648,3649],{},"Sé consciente de:",[23,3651,3652,3655],{},[26,3653,3654],{},"Se requiere una tarjeta de crédito (aunque las cuentas de AWS son gratuitas).",[26,3656,3657],{},"Las cuentas de AWS tardan hasta 24 horas en activarse.",[11,3659,3660],{},"Para crear una cuenta de AWS:",[3662,3663,3664,3679,3682,3685,3693,3696,3699],"ol",{},[26,3665,3666,3667,3672,3673,3678],{},"Visite la ",[420,3668,3671],{"href":3669,"rel":3670},"https:\u002F\u002Faws.amazon.com\u002F",[424],"página de inicio de AWS"," y haga clic en \"Crear una cuenta\" ( ",[420,3674,3677],{"href":3675,"rel":3676},"https:\u002F\u002Fportal.aws.amazon.com\u002Fbilling\u002Fsignup",[424],"aquí hay un enlace directo"," ). Si inició sesión en AWS anteriormente, es posible que primero deba hacer clic en \"Iniciar sesión en una cuenta diferente\" y luego en \"Crear una nueva cuenta de AWS\".",[26,3680,3681],{},"Complete el formulario y haga clic en \"Continuar\".",[26,3683,3684],{},"Elija crear una cuenta \"Personal\" o una \"Profesional\": ambas tienen las mismas funciones.",[26,3686,3687,3688,2743],{},"Ingrese la información adicional y haga clic en \"Crear cuenta y continuar\". Se creó su cuenta, ",[3058,3689,3690],{},[521,3691,3692],{},"pero aún no está activa",[26,3694,3695],{},"Agregue un método de pago en la página \"Información de pago\".",[26,3697,3698],{},"Verifica tu numero de teléfono.",[26,3700,3701],{},"Si se le solicita, puede elegir un plan de AWS Support. Un plan gratuito está disponible.",[11,3703,3704,3705,3710],{},"Ahora puede esperar a que su cuenta esté completamente activada. Esto puede tardar hasta 24 horas. En caso de que la activación no funcione, consulte la ",[420,3706,3709],{"href":3707,"rel":3708},"https:\u002F\u002Faws.amazon.com\u002Fpremiumsupport\u002Fknowledge-center\u002Fcreate-and-activate-aws-account\u002F",[424],"documentación oficial de AWS"," para obtener ayuda.",[18,3712,3714],{"id":3713},"estampación","Estampación",[11,3716,3717],{},"Hay dos enfoques para implementar nuestras aplicaciones Serverless:",[23,3719,3720,3723],{},[26,3721,3722],{},"implementar proyectos manualmente a través de la interfaz de usuario,",[26,3724,3725],{},"o automatizar mediante herramientas.",[11,3727,3728],{},"La implementación manual no es una buena opción porque hay mucho margen para errores. Además de eso, la interfaz de usuario de AWS es, seamos honestos, bastante compleja. Usar una herramienta en realidad será más sencillo.",[11,3730,3731,3732,2743],{},"La herramienta que les mostraré es ",[420,3733,3736],{"href":3734,"rel":3735},"https:\u002F\u002Fwww.serverless.com\u002Fopen-source\u002F",[424],"Serverless Framework",[11,3738,3739,3740,3742],{},"Hay varias razones para esa elección: ",[3058,3741,3736],{}," es la herramienta más popular en este momento, lo que significa que hay muchos ejemplos en línea. También tiene la comunidad más grande y el formato de configuración es uno de los más simples.",[11,3744,3745],{},"Por supuesto, todo lo que les mostraré es compatible con otras herramientas de implementación, como AWS SAM, AWS CDK, CloudFormation o Terraform.",[3517,3747,3749],{"id":3748},"configuración","Configuración",[11,3751,3752],{},"Para implementar aplicaciones sin servidor (incluidos los ejemplos), necesitaremos:",[11,3754,3755],{},"una cuenta de AWS",[11,3757,3758,3759,3764],{},"instalar la ",[420,3760,3763],{"href":3761,"rel":3762},"https:\u002F\u002Fdocs.aws.amazon.com\u002Fcli\u002Flatest\u002Fuserguide\u002Fcli-chap-install.html",[424],"AWS CLI"," (cualquier versión)",[11,3766,3767,3768,3773],{},"instalar ",[420,3769,3772],{"href":3770,"rel":3771},"https:\u002F\u002Fwww.serverless.com\u002Fframework\u002Fdocs\u002Fgetting-started\u002F",[424],"Serverless Framework de código abierto"," (no es necesario crear una cuenta para su servicio \"Pro\")",[18,3775,3777],{"id":3776},"qué-es-aws-lambda","¿Qué es AWS Lambda?",[11,3779,3780],{},"Lambda es un servicio proporcionado por AWS que nos permite ejecutar código sin tener que lidiar con detalles de infraestructura, como administrar servidores, escalarlos, etc.",[11,3782,3783,3784,3789,3790,2743],{},"Lo que es importante comprender con Lambda es que el código se ",[3058,3785,3786],{},[521,3787,3788],{},"activa mediante eventos",". No podemos ejecutar servidores web, demonios, tareas de larga duración, como tareas programadas, etc. Por eso solemos llamar a esto una ",[3058,3791,3792],{},[521,3793,3794],{},"arquitectura impulsada por eventos",[11,3796,3797],{},"AWS Lambda se basa en eventos.",[11,3799,3800],{},"Si bien las \"aplicaciones basadas en eventos\" pueden dar miedo, ¡no temas! No hay nada exótico aquí. Nuestro código se activa por eventos, y los eventos pueden ser:",[23,3802,3803,3806,3809,3812,3815],{},[26,3804,3805],{},"una solicitud HTTP (por ejemplo, para servir un sitio web o una API),",[26,3807,3808],{},"un programa cron (por ejemplo, \"todos los días a la medianoche, ejecute este código\"),",[26,3810,3811],{},"un mensaje en una cola de mensajes (por ejemplo, para ejecutar trabajos asincrónicos),",[26,3813,3814],{},"un mensaje de otra aplicación (por ejemplo, para conectar microservicios),",[26,3816,3817],{},"un mensaje de otros servicios de AWS (por ejemplo, para procesar archivos cuando se cargan en S3).",[11,3819,3820],{},"Esos son solo ejemplos, pero es de esperar que uno o dos nos parezcan familiares :) Cuando lo pensamos, la mayor parte de lo que hacemos es provocado por eventos. Al adoptar esto, AWS Lambda nos permite eliminar una gran cantidad de código e infraestructura \"pegajosos\" y centrarnos en la lógica empresarial.",[11,3822,3823],{},"La mayoría de las aplicaciones ya están controladas por eventos.",[18,3825,3827],{"id":3826},"las-ventajas-de-estar-impulsado-por-eventos","Las ventajas de estar impulsado por eventos",[11,3829,3830],{},"Más allá del hecho de que Lambda se encarga de la administración del servidor por nosotros, su enfoque basado en eventos tiene varios beneficios:",[3517,3832,3834],{"id":3833},"_1-escribe-menos-código","1. Escribe menos código.",[11,3836,3837],{},"Debido a que nuestro código reacciona a los eventos, no escribimos, configuramos ni mantenemos servidores web, demonios, orquestadores (como supervisord), ni sondeamos otros sistemas.",[3517,3839,3841],{"id":3840},"_2-paga-solo-por-lo-que-usas","2. Paga solo por lo que usas.",[11,3843,3844],{},"Con Lambda, ya no pagamos por servidores inactivos. En cambio, solo pagamos cuando se ejecuta nuestro código: cuando ocurre un evento. ¡Las aplicaciones con poco uso pueden costar cerca de $ 0!",[3517,3846,3848],{"id":3847},"_3-escalado-extremo","3. Escalado extremo.",[11,3850,3851],{},"Dado que nuestro código se ejecuta en respuesta a un solo evento, el escalado se vuelve fácil. No hay simultaneidad, fragmentación ni recurso compartido en Lambda. Es una escala horizontal en el nivel más pequeño: el evento.",[18,3853,3855],{"id":3854},"cómo-se-ejecuta-lambda-y-cómo-se-escala","¿Cómo se ejecuta Lambda y cómo se escala?",[11,3857,3858],{},"Al crear una nueva función Lambda, lo principal que debemos hacer es:",[23,3860,3861,3864],{},[26,3862,3863],{},"seleccione el idioma (NodeJS es el predeterminado),",[26,3865,3866],{},"cargamos nuestro código.",[11,3868,3869],{},"Así es como se ve el controlador Lambda más simple:",[73,3871,3875],{"className":3872,"code":3873,"language":3874,"meta":78,"style":78},"language-javascript shiki shiki-themes vitesse-dark","exports.handler = async function(event, context) {\n    return 'Hello world!'\n}\n","javascript",[80,3876,3877,3911,3925],{"__ignoreMap":78},[83,3878,3879,3882,3884,3887,3889,3892,3895,3898,3901,3903,3906,3908],{"class":85,"line":86},[83,3880,3881],{"class":113},"exports",[83,3883,2743],{"class":175},[83,3885,3886],{"class":89},"handler",[83,3888,2798],{"class":175},[83,3890,3891],{"class":3402}," async",[83,3893,3894],{"class":3402}," function",[83,3896,3897],{"class":175},"(",[83,3899,3900],{"class":2794},"event",[83,3902,3568],{"class":175},[83,3904,3905],{"class":2794}," context",[83,3907,3172],{"class":175},[83,3909,3910],{"class":175}," {\n",[83,3912,3913,3916,3919,3922],{"class":85,"line":260},[83,3914,3915],{"class":2171},"    return",[83,3917,3918],{"class":616}," '",[83,3920,3921],{"class":93},"Hello world!",[83,3923,3924],{"class":616},"'\n",[83,3926,3927],{"class":85,"line":280},[83,3928,3929],{"class":175},"}\n",[73,3931,3935],{"className":3932,"code":3933,"language":3934,"meta":78,"style":78},"language-php shiki shiki-themes vitesse-dark","return function ($event, $context) {\n    return 'Hello world!';\n}\n","php",[80,3936,3937,3961,3975],{"__ignoreMap":78},[83,3938,3939,3942,3944,3947,3949,3951,3954,3957,3959],{"class":85,"line":86},[83,3940,3941],{"class":2171},"return",[83,3943,3894],{"class":3402},[83,3945,3946],{"class":175}," ($",[83,3948,3900],{"class":2794},[83,3950,3568],{"class":175},[83,3952,3953],{"class":175}," $",[83,3955,3956],{"class":2794},"context",[83,3958,3172],{"class":175},[83,3960,3910],{"class":175},[83,3962,3963,3965,3967,3969,3972],{"class":85,"line":260},[83,3964,3915],{"class":2171},[83,3966,3918],{"class":616},[83,3968,3921],{"class":93},[83,3970,3971],{"class":616},"'",[83,3973,3974],{"class":175},";\n",[83,3976,3977],{"class":85,"line":280},[83,3978,3929],{"class":175},[11,3980,3981,3984],{},[521,3982,3983],{},"Nota:"," Nos centraremos en el modelo de ejecución ahora mismo.",[11,3986,3987],{},"Una vez creada la función, no se está ejecutando nada.",[11,3989,3990],{},"Lambda ejecuta nuestro código bajo demanda, es decir, solo cuando hay un evento que manejar.",[11,3992,3993],{},"Repasemos lo que sucede cuando comienzan a llegar eventos, por ejemplo, solicitudes HTTP.",[11,3995,3996],{},[477,3997],{"alt":78,"src":3998},"\u002Fimg\u002Fposts\u002Fblog\u002Fserverless-faas-aws-lambda\u002Fsls1-removebg-preview.png",[11,4000,4001],{},"En la representación de arriba, la flecha verde representa el evento. Tan pronto como llega, Lambda inicia una nueva instancia (la barra gris). Nuestro código (la barra azul) se ejecuta dentro de la instancia.",[11,4003,4004,4005,4010],{},"Las instancias de Lambda son entornos Linux simples (que ejecutan Amazon Linux). Estas instancias son como contenedores Docker, excepto que usan ",[420,4006,4009],{"href":4007,"rel":4008},"https:\u002F\u002Ffirecracker-microvm.github.io\u002F",[424],"una tecnología diferente",". Cada función de Lambda tiene sus propias instancias: no compartimos el entorno Linux con otros clientes ni con nuestras otras funciones.",[11,4012,4013],{},"Recuerde: si bien es interesante conocer esos detalles técnicos, no tenemos ningún control sobre el medio ambiente. El trabajo de AWS es ejecutar, mantener y escalar estas instancias, así como el entorno Linux.",[11,4015,4016],{},"Volviendo a nuestro escenario: es posible que haya notado que mientras nuestro código (en azul) finalizó, la instancia de Lambda (en gris) permaneció viva durante más tiempo.",[11,4018,4019],{},"Esto es para que la instancia de Lambda pueda manejar los siguientes eventos más rápido:",[11,4021,4022],{},[477,4023],{"alt":78,"src":4024},"\u002Fimg\u002Fposts\u002Fblog\u002Fserverless-faas-aws-lambda\u002Fsls2-removebg-preview.png",[11,4026,4027,4028,4033,4034,4039,4040,4045],{},"Como podemos ver arriba, el primer evento requirió una instancia para comenzar. Esto se denomina ",[3058,4029,4030],{},[521,4031,4032],{},"arranque en frío",", que puede tardar unos 200 ms. El segundo evento fue manejado por una instancia ",[3058,4035,4036],{},[521,4037,4038],{},"cálida",". Los arranques en frío (y cómo optimizarlos o evitarlos) son todo un tema. Puede leer más sobre ellos ",[420,4041,4044],{"href":4042,"rel":4043},"https:\u002F\u002Fmikhail.io\u002Fserverless\u002Fcoldstarts\u002Faws\u002F",[424],"en este gran artículo"," que se mantiene actualizado a lo largo del tiempo.",[11,4047,4048],{},"AWS mantiene activas las instancias de Lambda siempre que haya eventos que manejar. Las instancias se eliminan después de 10 minutos de inactividad, es decir, 10 minutos sin un evento.",[11,4050,4051],{},"¿Qué sucede si hay otro evento o solicitud mientras la instancia en ejecución está ocupada? Otra instancia se iniciará sobre la marcha.",[11,4053,4054],{},[477,4055],{"alt":78,"src":4056},"\u002Fimg\u002Fposts\u002Fblog\u002Fserverless-faas-aws-lambda\u002Fsls3-removebg-preview.png",[11,4058,4059],{},"Una instancia de Lambda siempre manejará un evento a la vez.",[11,4061,4062],{},"El hecho de que cada evento se ejecute en completo aislamiento de las otras ejecuciones hace que sea realmente fácil de escalar: AWS iniciará nuevas instancias.",[11,4064,4065],{},[477,4066],{"alt":78,"src":4067},"\u002Fimg\u002Fposts\u002Fblog\u002Fserverless-faas-aws-lambda\u002Fsls4-removebg-preview.png",[11,4069,4070],{},"Por supuesto, si las instancias están disponibles (sin manejar eventos), se reutilizarán en su lugar, extendiendo el plazo para su eliminación:",[11,4072,4073],{},[477,4074],{"alt":78,"src":4075},"\u002Fimg\u002Fposts\u002Fblog\u002Fserverless-faas-aws-lambda\u002Fsls5-removebg-preview.png",[11,4077,4078],{},"Con el tiempo, nuestra aplicación puede reducirse a cero instancias si no hay eventos que manejar. Cualquier evento nuevo iniciará una nueva instancia nuevamente:",[11,4080,4081],{},[477,4082],{"alt":78,"src":4083},"\u002Fimg\u002Fposts\u002Fblog\u002Fserverless-faas-aws-lambda\u002Fsls6-removebg-preview.png",[18,4085,4087],{"id":4086},"costos","Costos",[11,4089,4090],{},"A diferencia del alojamiento tradicional, con Lambda pagamos en función de nuestro uso. Más precisamente, pagamos por la cantidad de invocaciones y el tiempo de ejecución de nuestro código.",[11,4092,4093],{},"Nosotros no pagaremos por el tiempo de inactividad entre eventos (la parte gris). Solo pagaremos cuando nuestro código se está ejecutando (parte azul).",[11,4095,4096],{},"Aquí tienes un cálculo muy sencillo para hacerte una idea:",[11,4098,4099],{},"Número de invocaciones (o solicitudes) por mes: 100000",[11,4101,4102],{},"Tiempo medio de ejecución por evento (ms): 200",[11,4104,4105],{},"Costo mensual esperado: $ 0.353",[3517,4107,4109],{"id":4108},"nota",[521,4110,3983],{},[23,4112,4113,4116,4119],{},[26,4114,4115],{},"El nivel gratuito se ignora por simplicidad.",[26,4117,4118],{},"Este es el costo de una Lambda bastante potente (configuración de 1024M). Las lambdas más lentas son hasta 8 veces más baratas.",[26,4120,4121],{},"No se incluyen los costes relacionados con otros servicios (por ejemplo, bases de datos, puntos finales HTTP públicos ...).",[11,4123,4124,4125,2743],{},"Se pueden encontrar más detalles en la ",[420,4126,4129],{"href":4127,"rel":4128},"https:\u002F\u002Faws.amazon.com\u002Flambda\u002Fpricing\u002F",[424],"página de precios de AWS Lambda",[18,4131,4133],{"id":4132},"qué-pasa-entre-eventos","¿Qué pasa entre eventos?",[11,4135,4136],{},"Nada.",[11,4138,4139],{},"AWS Lambda congela nuestro código tan pronto como terminamos de procesar un evento. No hay forma de ejecutar nada entre invocaciones. Es por eso que nuestro código debe estar enfocado en eventos. No podemos ejecutar un demonio ni ninguna tarea de larga duración.",[11,4141,4142],{},"Sin embargo, no se preocupe. Podemos aprovechar los servicios de AWS para abordar diferentes casos de uso, como trabajos asincrónicos, procesamiento de flujo de datos, observación de cargas de archivos, etc. Lambda no existe en el vacío y la creación de aplicaciones sin servidor se trata exactamente de eso: componer servicios.",[11,4144,4145],{},"AWS Lambda es solo una pieza del rompecabezas en las aplicaciones Serverless.",[427,4147,4148],{},"html pre.shiki code .sm68I, html code.shiki .sm68I{--shiki-default:#B8A965}html pre.shiki code .s_pn2, html code.shiki .s_pn2{--shiki-default:#666666}html pre.shiki code .sCK9x, html code.shiki .sCK9x{--shiki-default:#80A665}html pre.shiki code .s_wWq, html code.shiki .s_wWq{--shiki-default:#CB7676}html pre.shiki code .st-jp, html code.shiki .st-jp{--shiki-default:#BD976A}html pre.shiki code .s3QIE, html code.shiki .s3QIE{--shiki-default:#4D9375}html pre.shiki code .sNJcY, html code.shiki .sNJcY{--shiki-default:#C98A7D77}html pre.shiki code .s7rlk, html code.shiki .s7rlk{--shiki-default:#C98A7D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":78,"searchDepth":260,"depth":260,"links":4150},[4151,4154,4155,4156,4159,4160,4165,4166,4169],{"id":3471,"depth":260,"text":3472,"children":4152},[4153],{"id":3519,"depth":280,"text":3520},{"id":3548,"depth":260,"text":3549},{"id":3642,"depth":260,"text":3643},{"id":3713,"depth":260,"text":3714,"children":4157},[4158],{"id":3748,"depth":280,"text":3749},{"id":3776,"depth":260,"text":3777},{"id":3826,"depth":260,"text":3827,"children":4161},[4162,4163,4164],{"id":3833,"depth":280,"text":3834},{"id":3840,"depth":280,"text":3841},{"id":3847,"depth":280,"text":3848},{"id":3854,"depth":260,"text":3855},{"id":4086,"depth":260,"text":4087,"children":4167},[4168],{"id":4108,"depth":280,"text":3983},{"id":4132,"depth":260,"text":4133},"2021-07-11","\u002Fimg\u002Fposts\u002Fserverless-vs-components.jpg",{},"\u002Fblog\u002Fserverless-faas-aws-lambda",{"title":3466,"description":3475},"blog\u002Fserverless-faas-aws-lambda",[3481,4177,3609,4178],"FaaS","Lambda","lQLhXSRMYR-dvUbN63h1_nfNi8ZG5fmb1tA4f3Zf3FU",{"id":4181,"title":4182,"body":4183,"date":5182,"description":5183,"draft":438,"extension":439,"image":5184,"lang":441,"meta":5185,"navigation":443,"path":5186,"seo":5187,"stem":5188,"tags":5189,"__hash__":5192},"blog\u002Fblog\u002Finstalar-docker-centos-fedora-ubuntu-debian.md","Como instalar Docker en CentOS, Fedora, Ubuntu y Debian",{"type":8,"value":4184,"toc":5133},[4185,4188,4191,4204,4208,4214,4217,4221,4246,4250,4268,4272,4291,4295,4313,4317,4333,4337,4365,4369,4378,4382,4397,4400,4403,4406,4426,4429,4445,4448,4464,4467,4481,4484,4506,4509,4517,4520,4532,4535,4539,4553,4557,4584,4588,4617,4621,4653,4657,4669,4672,4688,4691,4705,4708,4730,4734,4752,4755,4763,4766,4778,4782,4857,4860,4863,4866,4878,4881,4907,4910,4934,4937,4965,4968,4980,4983,4997,5000,5014,5017,5039,5042,5050,5053,5065,5068,5130],[11,4186,4187],{},"Docker es un proyecto open source que automatiza el despliegue de aplicaciones dentro de contenedores de software, proporcionando una capa adicional de abstracción y automatización de virtualización de aplicaciones en múltiples sistemas operativos.",[11,4189,4190],{},"En este artículo vamos a describir los pasos básicos para poder instalar docker en las siguientes distribuciones de Linux:",[23,4192,4193,4196,4199,4201],{},[26,4194,4195],{},"CentOS",[26,4197,4198],{},"Fedora",[26,4200,3060],{},[26,4202,4203],{},"Debian",[18,4205,4207],{"id":4206},"config-file-de-docker","Config file de docker",[73,4209,4212],{"className":4210,"code":4211,"language":147},[145],"Config file \u002Flib\u002Fsystemd\u002Fsystem\u002Fdocker.service\n",[80,4213,4211],{"__ignoreMap":78},[18,4215,4195],{"id":4216},"centos",[3517,4218,4220],{"id":4219},"utilidades","Utilidades",[73,4222,4224],{"className":75,"code":4223,"language":77,"meta":78,"style":78},"sudo yum install -y yum-utils device-mapper-persistent-data lvm2\n",[80,4225,4226],{"__ignoreMap":78},[83,4227,4228,4230,4232,4234,4237,4240,4243],{"class":85,"line":86},[83,4229,3070],{"class":89},[83,4231,3115],{"class":93},[83,4233,3076],{"class":93},[83,4235,4236],{"class":165}," -y",[83,4238,4239],{"class":93}," yum-utils",[83,4241,4242],{"class":93}," device-mapper-persistent-data",[83,4244,4245],{"class":93}," lvm2\n",[3517,4247,4249],{"id":4248},"agregar-el-repo-de-docker","Agregar el repo de docker",[73,4251,4253],{"className":75,"code":4252,"language":77,"meta":78,"style":78},"sudo yum-config-manager --add-repo https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fcentos\u002Fdocker-ce.repo\n",[80,4254,4255],{"__ignoreMap":78},[83,4256,4257,4259,4262,4265],{"class":85,"line":86},[83,4258,3070],{"class":89},[83,4260,4261],{"class":93}," yum-config-manager",[83,4263,4264],{"class":165}," --add-repo",[83,4266,4267],{"class":93}," https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fcentos\u002Fdocker-ce.repo\n",[3517,4269,4271],{"id":4270},"instalar-docker","Instalar docker",[73,4273,4275],{"className":75,"code":4274,"language":77,"meta":78,"style":78},"sudo yum install docker-ce -y\n",[80,4276,4277],{"__ignoreMap":78},[83,4278,4279,4281,4283,4285,4288],{"class":85,"line":86},[83,4280,3070],{"class":89},[83,4282,3115],{"class":93},[83,4284,3076],{"class":93},[83,4286,4287],{"class":93}," docker-ce",[83,4289,4290],{"class":165}," -y\n",[3517,4292,4294],{"id":4293},"iniciar-el-servicio","Iniciar el servicio",[73,4296,4298],{"className":75,"code":4297,"language":77,"meta":78,"style":78},"sudo systemctl start docker\n",[80,4299,4300],{"__ignoreMap":78},[83,4301,4302,4304,4307,4310],{"class":85,"line":86},[83,4303,3070],{"class":89},[83,4305,4306],{"class":93}," systemctl",[83,4308,4309],{"class":93}," start",[83,4311,4312],{"class":93}," docker\n",[3517,4314,4316],{"id":4315},"iniciarlo-con-el-sistema","Iniciarlo con el sistema",[73,4318,4320],{"className":75,"code":4319,"language":77,"meta":78,"style":78},"sudo systemctl enable docker\n",[80,4321,4322],{"__ignoreMap":78},[83,4323,4324,4326,4328,4331],{"class":85,"line":86},[83,4325,3070],{"class":89},[83,4327,4306],{"class":93},[83,4329,4330],{"class":93}," enable",[83,4332,4312],{"class":93},[3517,4334,4336],{"id":4335},"agregar-usuario-al-grupo-docker","Agregar usuario al grupo docker",[73,4338,4340],{"className":75,"code":4339,"language":77,"meta":78,"style":78},"whoami # Saber el nombre de tu usuario\nsudo usermod -aG docker nombre_de_salida_en_whoami\n",[80,4341,4342,4349],{"__ignoreMap":78},[83,4343,4344,4346],{"class":85,"line":86},[83,4345,3274],{"class":89},[83,4347,4348],{"class":977}," # Saber el nombre de tu usuario\n",[83,4350,4351,4353,4356,4359,4362],{"class":85,"line":260},[83,4352,3070],{"class":89},[83,4354,4355],{"class":93}," usermod",[83,4357,4358],{"class":165}," -aG",[83,4360,4361],{"class":93}," docker",[83,4363,4364],{"class":93}," nombre_de_salida_en_whoami\n",[3517,4366,4368],{"id":4367},"salir-de-la-sesión","Salir de la sesión",[73,4370,4372],{"className":75,"code":4371,"language":77,"meta":78,"style":78},"exit\n",[80,4373,4374],{"__ignoreMap":78},[83,4375,4376],{"class":85,"line":86},[83,4377,4371],{"class":113},[3517,4379,4381],{"id":4380},"iniciar-de-nuevo-con-el-usuario-y-probar","Iniciar de nuevo con el usuario y probar",[73,4383,4385],{"className":75,"code":4384,"language":77,"meta":78,"style":78},"docker run hello-world\n",[80,4386,4387],{"__ignoreMap":78},[83,4388,4389,4391,4394],{"class":85,"line":86},[83,4390,236],{"class":89},[83,4392,4393],{"class":93}," run",[83,4395,4396],{"class":93}," hello-world\n",[18,4398,4198],{"id":4399},"fedora",[11,4401,4402],{},"La instalación es similar a CentOS, solo se debe de modificar la url del repositorio, debido a que los pasos son idénticos.",[3517,4404,4220],{"id":4405},"utilidades-1",[73,4407,4408],{"className":75,"code":4223,"language":77,"meta":78,"style":78},[80,4409,4410],{"__ignoreMap":78},[83,4411,4412,4414,4416,4418,4420,4422,4424],{"class":85,"line":86},[83,4413,3070],{"class":89},[83,4415,3115],{"class":93},[83,4417,3076],{"class":93},[83,4419,4236],{"class":165},[83,4421,4239],{"class":93},[83,4423,4242],{"class":93},[83,4425,4245],{"class":93},[3517,4427,4249],{"id":4428},"agregar-el-repo-de-docker-1",[73,4430,4432],{"className":75,"code":4431,"language":77,"meta":78,"style":78},"sudo yum-config-manager --add-repo https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[80,4433,4434],{"__ignoreMap":78},[83,4435,4436,4438,4440,4442],{"class":85,"line":86},[83,4437,3070],{"class":89},[83,4439,4261],{"class":93},[83,4441,4264],{"class":165},[83,4443,4444],{"class":93}," https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[3517,4446,4271],{"id":4447},"instalar-docker-1",[73,4449,4450],{"className":75,"code":4274,"language":77,"meta":78,"style":78},[80,4451,4452],{"__ignoreMap":78},[83,4453,4454,4456,4458,4460,4462],{"class":85,"line":86},[83,4455,3070],{"class":89},[83,4457,3115],{"class":93},[83,4459,3076],{"class":93},[83,4461,4287],{"class":93},[83,4463,4290],{"class":165},[3517,4465,4316],{"id":4466},"iniciarlo-con-el-sistema-1",[73,4468,4469],{"className":75,"code":4319,"language":77,"meta":78,"style":78},[80,4470,4471],{"__ignoreMap":78},[83,4472,4473,4475,4477,4479],{"class":85,"line":86},[83,4474,3070],{"class":89},[83,4476,4306],{"class":93},[83,4478,4330],{"class":93},[83,4480,4312],{"class":93},[3517,4482,4336],{"id":4483},"agregar-usuario-al-grupo-docker-1",[73,4485,4486],{"className":75,"code":4339,"language":77,"meta":78,"style":78},[80,4487,4488,4494],{"__ignoreMap":78},[83,4489,4490,4492],{"class":85,"line":86},[83,4491,3274],{"class":89},[83,4493,4348],{"class":977},[83,4495,4496,4498,4500,4502,4504],{"class":85,"line":260},[83,4497,3070],{"class":89},[83,4499,4355],{"class":93},[83,4501,4358],{"class":165},[83,4503,4361],{"class":93},[83,4505,4364],{"class":93},[3517,4507,4368],{"id":4508},"salir-de-la-sesión-1",[73,4510,4511],{"className":75,"code":4371,"language":77,"meta":78,"style":78},[80,4512,4513],{"__ignoreMap":78},[83,4514,4515],{"class":85,"line":86},[83,4516,4371],{"class":113},[3517,4518,4381],{"id":4519},"iniciar-de-nuevo-con-el-usuario-y-probar-1",[73,4521,4522],{"className":75,"code":4384,"language":77,"meta":78,"style":78},[80,4523,4524],{"__ignoreMap":78},[83,4525,4526,4528,4530],{"class":85,"line":86},[83,4527,236],{"class":89},[83,4529,4393],{"class":93},[83,4531,4396],{"class":93},[18,4533,3060],{"id":4534},"ubuntu",[3517,4536,4538],{"id":4537},"actualiza-los-repos","Actualiza los repos",[73,4540,4542],{"className":75,"code":4541,"language":77,"meta":78,"style":78},"sudo apt-get update\n",[80,4543,4544],{"__ignoreMap":78},[83,4545,4546,4548,4550],{"class":85,"line":86},[83,4547,3070],{"class":89},[83,4549,3073],{"class":93},[83,4551,4552],{"class":93}," update\n",[3517,4554,4556],{"id":4555},"instala-utilidades","Instala utilidades",[73,4558,4560],{"className":75,"code":4559,"language":77,"meta":78,"style":78},"sudo apt-get install apt-transport-https ca-certificates curl software-properties-common -y\n",[80,4561,4562],{"__ignoreMap":78},[83,4563,4564,4566,4568,4570,4573,4576,4579,4582],{"class":85,"line":86},[83,4565,3070],{"class":89},[83,4567,3073],{"class":93},[83,4569,3076],{"class":93},[83,4571,4572],{"class":93}," apt-transport-https",[83,4574,4575],{"class":93}," ca-certificates",[83,4577,4578],{"class":93}," curl",[83,4580,4581],{"class":93}," software-properties-common",[83,4583,4290],{"class":165},[3517,4585,4587],{"id":4586},"agregar-el-gpg","Agregar el gpg",[73,4589,4591],{"className":75,"code":4590,"language":77,"meta":78,"style":78},"curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo apt-key add -\n",[80,4592,4593],{"__ignoreMap":78},[83,4594,4595,4597,4599,4602,4605,4608,4611,4614],{"class":85,"line":86},[83,4596,3163],{"class":89},[83,4598,3166],{"class":165},[83,4600,4601],{"class":93}," https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg",[83,4603,4604],{"class":3402}," |",[83,4606,4607],{"class":89}," sudo",[83,4609,4610],{"class":93}," apt-key",[83,4612,4613],{"class":93}," add",[83,4615,4616],{"class":93}," -\n",[3517,4618,4620],{"id":4619},"agregar-el-repo","Agregar el repo",[73,4622,4624],{"className":75,"code":4623,"language":77,"meta":78,"style":78},"sudo add-apt-repository \"deb [arch=amd64] https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu $(lsb_release -cs) stable\"\n",[80,4625,4626],{"__ignoreMap":78},[83,4627,4628,4630,4633,4635,4638,4640,4643,4646,4648,4651],{"class":85,"line":86},[83,4629,3070],{"class":89},[83,4631,4632],{"class":93}," add-apt-repository",[83,4634,617],{"class":616},[83,4636,4637],{"class":93},"deb [arch=amd64] https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu ",[83,4639,3160],{"class":175},[83,4641,4642],{"class":89},"lsb_release",[83,4644,4645],{"class":165}," -cs",[83,4647,3172],{"class":175},[83,4649,4650],{"class":93}," stable",[83,4652,623],{"class":616},[3517,4654,4656],{"id":4655},"actualizar-de-nuevo","Actualizar de nuevo",[73,4658,4659],{"className":75,"code":4541,"language":77,"meta":78,"style":78},[80,4660,4661],{"__ignoreMap":78},[83,4662,4663,4665,4667],{"class":85,"line":86},[83,4664,3070],{"class":89},[83,4666,3073],{"class":93},[83,4668,4552],{"class":93},[3517,4670,4271],{"id":4671},"instalar-docker-2",[73,4673,4675],{"className":75,"code":4674,"language":77,"meta":78,"style":78},"sudo apt-get install docker-ce\n",[80,4676,4677],{"__ignoreMap":78},[83,4678,4679,4681,4683,4685],{"class":85,"line":86},[83,4680,3070],{"class":89},[83,4682,3073],{"class":93},[83,4684,3076],{"class":93},[83,4686,4687],{"class":93}," docker-ce\n",[3517,4689,4316],{"id":4690},"iniciarlo-con-el-sistema-2",[73,4692,4693],{"className":75,"code":4319,"language":77,"meta":78,"style":78},[80,4694,4695],{"__ignoreMap":78},[83,4696,4697,4699,4701,4703],{"class":85,"line":86},[83,4698,3070],{"class":89},[83,4700,4306],{"class":93},[83,4702,4330],{"class":93},[83,4704,4312],{"class":93},[3517,4706,4336],{"id":4707},"agregar-usuario-al-grupo-docker-2",[73,4709,4710],{"className":75,"code":4339,"language":77,"meta":78,"style":78},[80,4711,4712,4718],{"__ignoreMap":78},[83,4713,4714,4716],{"class":85,"line":86},[83,4715,3274],{"class":89},[83,4717,4348],{"class":977},[83,4719,4720,4722,4724,4726,4728],{"class":85,"line":260},[83,4721,3070],{"class":89},[83,4723,4355],{"class":93},[83,4725,4358],{"class":165},[83,4727,4361],{"class":93},[83,4729,4364],{"class":93},[3517,4731,4733],{"id":4732},"permisos","Permisos",[73,4735,4737],{"className":75,"code":4736,"language":77,"meta":78,"style":78},"sudo chmod 666 \u002Fvar\u002Frun\u002Fdocker.sock\n",[80,4738,4739],{"__ignoreMap":78},[83,4740,4741,4743,4746,4749],{"class":85,"line":86},[83,4742,3070],{"class":89},[83,4744,4745],{"class":93}," chmod",[83,4747,4748],{"class":339}," 666",[83,4750,4751],{"class":93}," \u002Fvar\u002Frun\u002Fdocker.sock\n",[3517,4753,4368],{"id":4754},"salir-de-la-sesión-2",[73,4756,4757],{"className":75,"code":4371,"language":77,"meta":78,"style":78},[80,4758,4759],{"__ignoreMap":78},[83,4760,4761],{"class":85,"line":86},[83,4762,4371],{"class":113},[3517,4764,4381],{"id":4765},"iniciar-de-nuevo-con-el-usuario-y-probar-2",[73,4767,4768],{"className":75,"code":4384,"language":77,"meta":78,"style":78},[80,4769,4770],{"__ignoreMap":78},[83,4771,4772,4774,4776],{"class":85,"line":86},[83,4773,236],{"class":89},[83,4775,4393],{"class":93},[83,4777,4396],{"class":93},[3517,4779,4781],{"id":4780},"instalar-docker-compose","Instalar docker compose",[73,4783,4785],{"className":75,"code":4784,"language":77,"meta":78,"style":78},"sudo curl -L \"https:\u002F\u002Fgithub.com\u002Fdocker\u002Fcompose\u002Freleases\u002Fdownload\u002F1.27.4\u002Fdocker-compose-$(uname -s)-$(uname -m)\" -o \u002Fusr\u002Flocal\u002Fbin\u002Fdocker-compose\nsudo chmod +x \u002Fusr\u002Flocal\u002Fbin\u002Fdocker-compose\nsudo ln -s \u002Fusr\u002Flocal\u002Fbin\u002Fdocker-compose \u002Fusr\u002Fbin\u002Fdocker-compose\n",[80,4786,4787,4831,4842],{"__ignoreMap":78},[83,4788,4789,4791,4793,4796,4798,4801,4803,4806,4808,4810,4813,4815,4817,4820,4822,4825,4828],{"class":85,"line":86},[83,4790,3070],{"class":89},[83,4792,4578],{"class":93},[83,4794,4795],{"class":165}," -L",[83,4797,617],{"class":616},[83,4799,4800],{"class":93},"https:\u002F\u002Fgithub.com\u002Fdocker\u002Fcompose\u002Freleases\u002Fdownload\u002F1.27.4\u002Fdocker-compose-",[83,4802,3160],{"class":175},[83,4804,4805],{"class":89},"uname",[83,4807,3226],{"class":165},[83,4809,3172],{"class":175},[83,4811,4812],{"class":93},"-",[83,4814,3160],{"class":175},[83,4816,4805],{"class":89},[83,4818,4819],{"class":165}," -m",[83,4821,3172],{"class":175},[83,4823,4824],{"class":616},"\"",[83,4826,4827],{"class":165}," -o",[83,4829,4830],{"class":93}," \u002Fusr\u002Flocal\u002Fbin\u002Fdocker-compose\n",[83,4832,4833,4835,4837,4840],{"class":85,"line":260},[83,4834,3070],{"class":89},[83,4836,4745],{"class":93},[83,4838,4839],{"class":93}," +x",[83,4841,4830],{"class":93},[83,4843,4844,4846,4849,4851,4854],{"class":85,"line":280},[83,4845,3070],{"class":89},[83,4847,4848],{"class":93}," ln",[83,4850,3226],{"class":165},[83,4852,4853],{"class":93}," \u002Fusr\u002Flocal\u002Fbin\u002Fdocker-compose",[83,4855,4856],{"class":93}," \u002Fusr\u002Fbin\u002Fdocker-compose\n",[18,4858,4203],{"id":4859},"debian",[11,4861,4862],{},"La instalación es similar a Ubuntu, solo se debe modificar la url del repositorio, debido a que los pasos son idénticos.",[3517,4864,4538],{"id":4865},"actualiza-los-repos-1",[73,4867,4868],{"className":75,"code":4541,"language":77,"meta":78,"style":78},[80,4869,4870],{"__ignoreMap":78},[83,4871,4872,4874,4876],{"class":85,"line":86},[83,4873,3070],{"class":89},[83,4875,3073],{"class":93},[83,4877,4552],{"class":93},[3517,4879,4556],{"id":4880},"instala-utilidades-1",[73,4882,4884],{"className":75,"code":4883,"language":77,"meta":78,"style":78},"sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common -y\n",[80,4885,4886],{"__ignoreMap":78},[83,4887,4888,4890,4892,4894,4896,4898,4900,4903,4905],{"class":85,"line":86},[83,4889,3070],{"class":89},[83,4891,3073],{"class":93},[83,4893,3076],{"class":93},[83,4895,4572],{"class":93},[83,4897,4575],{"class":93},[83,4899,4578],{"class":93},[83,4901,4902],{"class":93}," gnupg2",[83,4904,4581],{"class":93},[83,4906,4290],{"class":165},[3517,4908,4587],{"id":4909},"agregar-el-gpg-1",[73,4911,4913],{"className":75,"code":4912,"language":77,"meta":78,"style":78},"curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fdebian\u002Fgpg | sudo apt-key add -\n",[80,4914,4915],{"__ignoreMap":78},[83,4916,4917,4919,4921,4924,4926,4928,4930,4932],{"class":85,"line":86},[83,4918,3163],{"class":89},[83,4920,3166],{"class":165},[83,4922,4923],{"class":93}," https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fdebian\u002Fgpg",[83,4925,4604],{"class":3402},[83,4927,4607],{"class":89},[83,4929,4610],{"class":93},[83,4931,4613],{"class":93},[83,4933,4616],{"class":93},[3517,4935,4620],{"id":4936},"agregar-el-repo-1",[73,4938,4940],{"className":75,"code":4939,"language":77,"meta":78,"style":78},"sudo add-apt-repository \"deb [arch=amd64] https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fdebian $(lsb_release -cs) stable\"\n",[80,4941,4942],{"__ignoreMap":78},[83,4943,4944,4946,4948,4950,4953,4955,4957,4959,4961,4963],{"class":85,"line":86},[83,4945,3070],{"class":89},[83,4947,4632],{"class":93},[83,4949,617],{"class":616},[83,4951,4952],{"class":93},"deb [arch=amd64] https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fdebian ",[83,4954,3160],{"class":175},[83,4956,4642],{"class":89},[83,4958,4645],{"class":165},[83,4960,3172],{"class":175},[83,4962,4650],{"class":93},[83,4964,623],{"class":616},[3517,4966,4656],{"id":4967},"actualizar-de-nuevo-1",[73,4969,4970],{"className":75,"code":4541,"language":77,"meta":78,"style":78},[80,4971,4972],{"__ignoreMap":78},[83,4973,4974,4976,4978],{"class":85,"line":86},[83,4975,3070],{"class":89},[83,4977,3073],{"class":93},[83,4979,4552],{"class":93},[3517,4981,4271],{"id":4982},"instalar-docker-3",[73,4984,4985],{"className":75,"code":4674,"language":77,"meta":78,"style":78},[80,4986,4987],{"__ignoreMap":78},[83,4988,4989,4991,4993,4995],{"class":85,"line":86},[83,4990,3070],{"class":89},[83,4992,3073],{"class":93},[83,4994,3076],{"class":93},[83,4996,4687],{"class":93},[3517,4998,4316],{"id":4999},"iniciarlo-con-el-sistema-3",[73,5001,5002],{"className":75,"code":4319,"language":77,"meta":78,"style":78},[80,5003,5004],{"__ignoreMap":78},[83,5005,5006,5008,5010,5012],{"class":85,"line":86},[83,5007,3070],{"class":89},[83,5009,4306],{"class":93},[83,5011,4330],{"class":93},[83,5013,4312],{"class":93},[3517,5015,4336],{"id":5016},"agregar-usuario-al-grupo-docker-3",[73,5018,5019],{"className":75,"code":4339,"language":77,"meta":78,"style":78},[80,5020,5021,5027],{"__ignoreMap":78},[83,5022,5023,5025],{"class":85,"line":86},[83,5024,3274],{"class":89},[83,5026,4348],{"class":977},[83,5028,5029,5031,5033,5035,5037],{"class":85,"line":260},[83,5030,3070],{"class":89},[83,5032,4355],{"class":93},[83,5034,4358],{"class":165},[83,5036,4361],{"class":93},[83,5038,4364],{"class":93},[3517,5040,4368],{"id":5041},"salir-de-la-sesión-3",[73,5043,5044],{"className":75,"code":4371,"language":77,"meta":78,"style":78},[80,5045,5046],{"__ignoreMap":78},[83,5047,5048],{"class":85,"line":86},[83,5049,4371],{"class":113},[3517,5051,4381],{"id":5052},"iniciar-de-nuevo-con-el-usuario-y-probar-3",[73,5054,5055],{"className":75,"code":4384,"language":77,"meta":78,"style":78},[80,5056,5057],{"__ignoreMap":78},[83,5058,5059,5061,5063],{"class":85,"line":86},[83,5060,236],{"class":89},[83,5062,4393],{"class":93},[83,5064,4396],{"class":93},[3517,5066,4781],{"id":5067},"instalar-docker-compose-1",[73,5069,5070],{"className":75,"code":4784,"language":77,"meta":78,"style":78},[80,5071,5072,5108,5118],{"__ignoreMap":78},[83,5073,5074,5076,5078,5080,5082,5084,5086,5088,5090,5092,5094,5096,5098,5100,5102,5104,5106],{"class":85,"line":86},[83,5075,3070],{"class":89},[83,5077,4578],{"class":93},[83,5079,4795],{"class":165},[83,5081,617],{"class":616},[83,5083,4800],{"class":93},[83,5085,3160],{"class":175},[83,5087,4805],{"class":89},[83,5089,3226],{"class":165},[83,5091,3172],{"class":175},[83,5093,4812],{"class":93},[83,5095,3160],{"class":175},[83,5097,4805],{"class":89},[83,5099,4819],{"class":165},[83,5101,3172],{"class":175},[83,5103,4824],{"class":616},[83,5105,4827],{"class":165},[83,5107,4830],{"class":93},[83,5109,5110,5112,5114,5116],{"class":85,"line":260},[83,5111,3070],{"class":89},[83,5113,4745],{"class":93},[83,5115,4839],{"class":93},[83,5117,4830],{"class":93},[83,5119,5120,5122,5124,5126,5128],{"class":85,"line":280},[83,5121,3070],{"class":89},[83,5123,4848],{"class":93},[83,5125,3226],{"class":165},[83,5127,4853],{"class":93},[83,5129,4856],{"class":93},[427,5131,5132],{},"html pre.shiki code .sCK9x, html code.shiki .sCK9x{--shiki-default:#80A665}html pre.shiki code .s7rlk, html code.shiki .s7rlk{--shiki-default:#C98A7D}html pre.shiki code .sXjYR, html code.shiki .sXjYR{--shiki-default:#C99076}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sux-A, html code.shiki .sux-A{--shiki-default:#758575DD}html pre.shiki code .sm68I, html code.shiki .sm68I{--shiki-default:#B8A965}html pre.shiki code .s_wWq, html code.shiki .s_wWq{--shiki-default:#CB7676}html pre.shiki code .sNJcY, html code.shiki .sNJcY{--shiki-default:#C98A7D77}html pre.shiki code .s_pn2, html code.shiki .s_pn2{--shiki-default:#666666}html pre.shiki code .sxA9i, html code.shiki .sxA9i{--shiki-default:#4C9A91}",{"title":78,"searchDepth":260,"depth":260,"links":5134},[5135,5136,5146,5155,5169],{"id":4206,"depth":260,"text":4207},{"id":4216,"depth":260,"text":4195,"children":5137},[5138,5139,5140,5141,5142,5143,5144,5145],{"id":4219,"depth":280,"text":4220},{"id":4248,"depth":280,"text":4249},{"id":4270,"depth":280,"text":4271},{"id":4293,"depth":280,"text":4294},{"id":4315,"depth":280,"text":4316},{"id":4335,"depth":280,"text":4336},{"id":4367,"depth":280,"text":4368},{"id":4380,"depth":280,"text":4381},{"id":4399,"depth":260,"text":4198,"children":5147},[5148,5149,5150,5151,5152,5153,5154],{"id":4405,"depth":280,"text":4220},{"id":4428,"depth":280,"text":4249},{"id":4447,"depth":280,"text":4271},{"id":4466,"depth":280,"text":4316},{"id":4483,"depth":280,"text":4336},{"id":4508,"depth":280,"text":4368},{"id":4519,"depth":280,"text":4381},{"id":4534,"depth":260,"text":3060,"children":5156},[5157,5158,5159,5160,5161,5162,5163,5164,5165,5166,5167,5168],{"id":4537,"depth":280,"text":4538},{"id":4555,"depth":280,"text":4556},{"id":4586,"depth":280,"text":4587},{"id":4619,"depth":280,"text":4620},{"id":4655,"depth":280,"text":4656},{"id":4671,"depth":280,"text":4271},{"id":4690,"depth":280,"text":4316},{"id":4707,"depth":280,"text":4336},{"id":4732,"depth":280,"text":4733},{"id":4754,"depth":280,"text":4368},{"id":4765,"depth":280,"text":4381},{"id":4780,"depth":280,"text":4781},{"id":4859,"depth":260,"text":4203,"children":5170},[5171,5172,5173,5174,5175,5176,5177,5178,5179,5180,5181],{"id":4865,"depth":280,"text":4538},{"id":4880,"depth":280,"text":4556},{"id":4909,"depth":280,"text":4587},{"id":4936,"depth":280,"text":4620},{"id":4967,"depth":280,"text":4656},{"id":4982,"depth":280,"text":4271},{"id":4999,"depth":280,"text":4316},{"id":5016,"depth":280,"text":4336},{"id":5041,"depth":280,"text":4368},{"id":5052,"depth":280,"text":4381},{"id":5067,"depth":280,"text":4781},"2021-06-15","Docker es un proyecto open source que automatiza el despliegue de aplicaciones dentro de contenedores de software.","\u002Fimg\u002Fposts\u002Fblog\u002Finstalar-docker-centos-fedora-ubuntu-debian\u002Fdocker-linux.png",{},"\u002Fblog\u002Finstalar-docker-centos-fedora-ubuntu-debian",{"title":4182,"description":5183},"blog\u002Finstalar-docker-centos-fedora-ubuntu-debian",[4195,4203,449,5190,4198,5191,3060],"Docker-Compose","Linux","3Oa7f2mZx1aHbPzyt1rtwrqP9ometg6936PLTZUBJgE",{"id":5194,"title":5195,"body":5196,"date":5551,"description":5200,"draft":438,"extension":439,"image":5552,"lang":441,"meta":5553,"navigation":443,"path":5554,"seo":5555,"stem":5556,"tags":5557,"__hash__":5560},"blog\u002Fblog\u002Fdescargar-pagina-web-completa-wget-nohup.md","Descargar una página web completa usando wget y nohup",{"type":8,"value":5197,"toc":5545},[5198,5201,5209,5218,5224,5228,5246,5250,5255,5300,5304,5307,5348,5351,5366,5370,5480,5484,5539,5542],[11,5199,5200],{},"En este tutorial, explicaré 2 maneras de bajar una página web completa usando la interfaz de linea de comando wget.",[23,5202,5203,5206],{},[26,5204,5205],{},"La primera es usando solo un comando que no se ejecuta en segundo plano.",[26,5207,5208],{},"La segunda se ejecuta en segundo plano y en un \"shell\" diferente para que pueda salir de su sesión ssh y continuará de cualquier manera.",[11,5210,5211,5212,5217],{},"Primero prepare una carpeta para descargar los sitios web y comience su descarga, tenga en cuenta que si descarga ",[420,5213,5216],{"href":5214,"rel":5215},"http:\u002F\u002Fwww.midominio.com",[424],"www.midominio.com"," tendrá una carpeta como:",[73,5219,5222],{"className":5220,"code":5221,"language":147},[145],"\u002Fmisplantillas\u002Fwww.midominio.com\u002F\n",[80,5223,5221],{"__ignoreMap":78},[3517,5225,5227],{"id":5226},"paso-1","Paso 1:",[73,5229,5231],{"className":75,"code":5230,"language":77,"meta":78,"style":78},"mkdir \u002Fmisplantillas\u002F\ncd \u002Fmisplantillas\u002F\n",[80,5232,5233,5240],{"__ignoreMap":78},[83,5234,5235,5237],{"class":85,"line":86},[83,5236,558],{"class":89},[83,5238,5239],{"class":93}," \u002Fmisplantillas\u002F\n",[83,5241,5242,5244],{"class":85,"line":260},[83,5243,114],{"class":113},[83,5245,5239],{"class":93},[3517,5247,5249],{"id":5248},"paso-2","Paso 2:",[5251,5252,5254],"h4",{"id":5253},"_1er-camino","1er Camino",[73,5256,5258],{"className":75,"code":5257,"language":77,"meta":78,"style":78},"wget --limit-rate=200k --no-clobber --convert-links --random-wait -r -p -E -e robots=off -U mozilla http:\u002F\u002Fwww.midominio.com\n",[80,5259,5260],{"__ignoreMap":78},[83,5261,5262,5264,5267,5270,5273,5276,5279,5282,5285,5288,5291,5294,5297],{"class":85,"line":86},[83,5263,3197],{"class":89},[83,5265,5266],{"class":165}," --limit-rate=200k",[83,5268,5269],{"class":165}," --no-clobber",[83,5271,5272],{"class":165}," --convert-links",[83,5274,5275],{"class":165}," --random-wait",[83,5277,5278],{"class":165}," -r",[83,5280,5281],{"class":165}," -p",[83,5283,5284],{"class":165}," -E",[83,5286,5287],{"class":165}," -e",[83,5289,5290],{"class":93}," robots=off",[83,5292,5293],{"class":165}," -U",[83,5295,5296],{"class":93}," mozilla",[83,5298,5299],{"class":93}," http:\u002F\u002Fwww.midominio.com\n",[5251,5301,5303],{"id":5302},"_2do-camino","2do Camino",[11,5305,5306],{},"En el fondo haga un nohup en frente y en la parte posterior",[73,5308,5310],{"className":75,"code":5309,"language":77,"meta":78,"style":78},"nohup wget --limit-rate=200k --no-clobber --convert-links --random-wait -r -p -E -e robots=off -U mozilla http:\u002F\u002Fwww.midominio.com &\n",[80,5311,5312],{"__ignoreMap":78},[83,5313,5314,5317,5320,5322,5324,5326,5328,5330,5332,5334,5336,5338,5340,5342,5345],{"class":85,"line":86},[83,5315,5316],{"class":89},"nohup",[83,5318,5319],{"class":93}," wget",[83,5321,5266],{"class":165},[83,5323,5269],{"class":165},[83,5325,5272],{"class":165},[83,5327,5275],{"class":165},[83,5329,5278],{"class":165},[83,5331,5281],{"class":165},[83,5333,5284],{"class":165},[83,5335,5287],{"class":165},[83,5337,5290],{"class":93},[83,5339,5293],{"class":165},[83,5341,5296],{"class":93},[83,5343,5344],{"class":93}," http:\u002F\u002Fwww.midominio.com",[83,5346,5347],{"class":175}," &\n",[11,5349,5350],{},"Luego liste el directorio donde ejecutó wget (se ha creado un archivo nohup.out) hagamos un tail -f",[73,5352,5354],{"className":75,"code":5353,"language":77,"meta":78,"style":78},"tail -f nohup.out\n",[80,5355,5356],{"__ignoreMap":78},[83,5357,5358,5361,5363],{"class":85,"line":86},[83,5359,5360],{"class":89},"tail",[83,5362,166],{"class":165},[83,5364,5365],{"class":93}," nohup.out\n",[3517,5367,5369],{"id":5368},"significado-de-todos-los-interruptores","Significado de todos los interruptores:",[5371,5372,5373,5386],"table",{},[5374,5375,5376],"thead",{},[5377,5378,5379,5383],"tr",{},[5380,5381,5382],"th",{},"Interruptor",[5380,5384,5385],{},"Descripción",[5387,5388,5389,5400,5410,5420,5430,5440,5450,5460,5470],"tbody",{},[5377,5390,5391,5397],{},[5392,5393,5394],"td",{},[80,5395,5396],{},"--limit-rate=200k",[5392,5398,5399],{},"Limite de descarga a 200 Kb\u002Fseg.",[5377,5401,5402,5407],{},[5392,5403,5404],{},[80,5405,5406],{},"--no-clobber",[5392,5408,5409],{},"No sobrescriba ningún archivo existente (usado en caso de que la descarga se interrumpa y se reanude).",[5377,5411,5412,5417],{},[5392,5413,5414],{},[80,5415,5416],{},"--convert-links",[5392,5418,5419],{},"Convertir enlaces para que funcionen localmente, fuera de línea, en lugar de apuntar a un sitio web en línea.",[5377,5421,5422,5427],{},[5392,5423,5424],{},[80,5425,5426],{},"--random-wait",[5392,5428,5429],{},"Esperas aleatorias entre descargas (a los sitios web no les gusta la descarga de sus archivos estáticos).",[5377,5431,5432,5437],{},[5392,5433,5434],{},[80,5435,5436],{},"-r",[5392,5438,5439],{},"Recursivo, descarga el sitio web completo.",[5377,5441,5442,5447],{},[5392,5443,5444],{},[80,5445,5446],{},"-p",[5392,5448,5449],{},"Descarga todo, incluso imágenes, hojas de estilo, java scripts, etc.",[5377,5451,5452,5457],{},[5392,5453,5454],{},[80,5455,5456],{},"-E",[5392,5458,5459],{},"Obtiene la extensión correcta del archivo, sin la mayoría de html y otros archivos que no tienen extensión.",[5377,5461,5462,5467],{},[5392,5463,5464],{},[80,5465,5466],{},"-e robots=off",[5392,5468,5469],{},"Actuar como si no fuéramos un robot, no como un rastreador, a los sitios web no les gustan los robots rastreadores a menos que sean de Google u otro motor de búsqueda famoso.",[5377,5471,5472,5477],{},[5392,5473,5474],{},[80,5475,5476],{},"-U mozilla",[5392,5478,5479],{},"Pretender ser como un navegador Mozilla que está mirando la página en lugar de un rastreador wget.",[3517,5481,5483],{"id":5482},"las-razones-del-por-qué-no-se-incluyó-lo-siguiente","Las razones del por qué no se incluyó lo siguiente:",[5371,5485,5486,5494],{},[5374,5487,5488],{},[5377,5489,5490,5492],{},[5380,5491,5382],{},[5380,5493,5385],{},[5387,5495,5496,5506,5519,5529],{},[5377,5497,5498,5503],{},[5392,5499,5500],{},[80,5501,5502],{},"-o=\u002Fwebsitedl\u002Fwget1.txt",[5392,5504,5505],{},"Registrar todo para wget log.txt, no hice esto porque no me dio salida en la pantalla y no me gusta esa identificación, prefiero usar nohup y & y tail -f con la salida de nohup.out",[5377,5507,5508,5513],{},[5392,5509,5510],{},[80,5511,5512],{},"-b",[5392,5514,5515,5516],{},"Ejecución en segundo plano, no puedo ver el progreso, me gusta más ",[80,5517,5518],{},"nohup \u003Ccommands> &",[5377,5520,5521,5526],{},[5392,5522,5523],{},[80,5524,5525],{},"--domain=midominio.com",[5392,5527,5528],{},"Alojamiendo de Google, es posible que se deba ingresar a los dominios de Google",[5377,5530,5531,5536],{},[5392,5532,5533],{},[80,5534,5535],{},"--restrict-file-names=windows",[5392,5537,5538],{},"Modifica los nombres de archivo para que también funcionen en Windows, parece funcionar bien sin él",[11,5540,5541],{},"Si te gustó compártelo o ponlo en práctica...",[427,5543,5544],{},"html pre.shiki code .sCK9x, html code.shiki .sCK9x{--shiki-default:#80A665}html pre.shiki code .s7rlk, html code.shiki .s7rlk{--shiki-default:#C98A7D}html pre.shiki code .sm68I, html code.shiki .sm68I{--shiki-default:#B8A965}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sXjYR, html code.shiki .sXjYR{--shiki-default:#C99076}html pre.shiki code .s_pn2, html code.shiki .s_pn2{--shiki-default:#666666}",{"title":78,"searchDepth":260,"depth":260,"links":5546},[5547,5548,5549,5550],{"id":5226,"depth":280,"text":5227},{"id":5248,"depth":280,"text":5249},{"id":5368,"depth":280,"text":5369},{"id":5482,"depth":280,"text":5483},"2020-05-06","\u002Fimg\u002Fposts\u002Fblog\u002Fdescargar-pagina-web-completa-wget-nohup\u002Fwget_linux.png",{},"\u002Fblog\u002Fdescargar-pagina-web-completa-wget-nohup",{"title":5195,"description":5200},"blog\u002Fdescargar-pagina-web-completa-wget-nohup",[5191,5558,5559],"Nohup","Wget","12mfUWyAGUZAqI2-GsY2Au3EA4Jub7jhDqthNXU-2jM",{"id":5562,"title":5563,"body":5564,"date":7448,"description":7449,"draft":438,"extension":439,"image":7450,"lang":441,"meta":7451,"navigation":443,"path":7452,"seo":7453,"stem":7454,"tags":7455,"__hash__":7458},"blog\u002Fblog\u002Faprovisionar-linux-nginx-mysql-php7-vagrant.md","Aprovisionar Linux con Nginx, MySQL y PHP7 mediante Vagrant",{"type":8,"value":5565,"toc":7442},[5566,5569,5602,5606,5610,5635,5667,5671,5700,5704,5709,5720,5725,5737,5740,5745,5758,5768,5771,5775,5778,5781,7129,7133,7137,7241,7245,7252,7429,7439],[11,5567,5568],{},"Buen día, el día de hoy les mostraré una box en Vagrant que realicé hace un tiempo atrás para aprovisionar Ubuntu 19.10 con:",[23,5570,5571,5574,5577,5580,5583,5585,5588,5591,5594,5597,5600],{},[26,5572,5573],{},"Git",[26,5575,5576],{},"Nginx",[26,5578,5579],{},"PHP V7.3",[26,5581,5582],{},"MySQL V5.7",[26,5584,3033],{},[26,5586,5587],{},"Composer",[26,5589,5590],{},"NodeJS",[26,5592,5593],{},"Npm",[26,5595,5596],{},"Memcached",[26,5598,5599],{},"PHPUnit",[26,5601,3462],{},[3517,5603,5605],{"id":5604},"instalación-rápida","Instalación Rápida",[5251,5607,5609],{"id":5608},"instala-el-software-base","Instala el Software Base",[3662,5611,5612,5620,5627],{},[26,5613,5614,5615],{},"Instalar ",[420,5616,5619],{"href":5617,"rel":5618},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownloads",[424],"VirtualBox",[26,5621,5614,5622],{},[420,5623,5626],{"href":5624,"rel":5625},"https:\u002F\u002Fwww.vagrantup.com\u002Fdownloads.html",[424],"Vagrant",[26,5628,5629,5630],{},"Clonar el siguiente ",[420,5631,5634],{"href":5632,"rel":5633},"https:\u002F\u002Fgithub.com\u002Fmarcotorres\u002Fubuntu-lemp-php7",[424],"repositorio",[73,5636,5638],{"className":75,"code":5637,"language":77,"meta":78,"style":78},"git clone git@github.com:\u003Cuser>\u002Fubuntu-lemp-php7.git lemp7\n",[80,5639,5640],{"__ignoreMap":78},[83,5641,5642,5644,5646,5649,5652,5655,5658,5661,5664],{"class":85,"line":86},[83,5643,90],{"class":89},[83,5645,94],{"class":93},[83,5647,5648],{"class":93}," git@github.com:",[83,5650,5651],{"class":3402},"\u003C",[83,5653,5654],{"class":93},"use",[83,5656,5657],{"class":2742},"r",[83,5659,5660],{"class":3402},">",[83,5662,5663],{"class":93},"\u002Fubuntu-lemp-php7.git",[83,5665,5666],{"class":93}," lemp7\n",[5251,5668,5670],{"id":5669},"instala-plugins-base-de-vagrant","Instala Plugins Base de Vagrant",[73,5672,5674],{"className":75,"code":5673,"language":77,"meta":78,"style":78},"vagrant plugin install vagrant-vbguest\nvagrant plugin install vagrant-hostmanager\n",[80,5675,5676,5689],{"__ignoreMap":78},[83,5677,5678,5681,5684,5686],{"class":85,"line":86},[83,5679,5680],{"class":89},"vagrant",[83,5682,5683],{"class":93}," plugin",[83,5685,3076],{"class":93},[83,5687,5688],{"class":93}," vagrant-vbguest\n",[83,5690,5691,5693,5695,5697],{"class":85,"line":260},[83,5692,5680],{"class":89},[83,5694,5683],{"class":93},[83,5696,3076],{"class":93},[83,5698,5699],{"class":93}," vagrant-hostmanager\n",[3517,5701,5703],{"id":5702},"pasos","Pasos",[3662,5705,5706],{},[26,5707,5708],{},"Ve al directorio donde está ubicado el archivo README.md",[73,5710,5712],{"className":75,"code":5711,"language":77,"meta":78,"style":78},"cd lemp7\n",[80,5713,5714],{"__ignoreMap":78},[83,5715,5716,5718],{"class":85,"line":86},[83,5717,114],{"class":113},[83,5719,5666],{"class":93},[3662,5721,5722],{"start":260},[26,5723,5724],{},"Levanta la box",[73,5726,5728],{"className":75,"code":5727,"language":77,"meta":78,"style":78},"vagrant up\n",[80,5729,5730],{"__ignoreMap":78},[83,5731,5732,5734],{"class":85,"line":86},[83,5733,5680],{"class":89},[83,5735,5736],{"class":93}," up\n",[11,5738,5739],{},"Al momento de ingresar por SSH, el usuario y la contraseña es \"vagrant\"",[3662,5741,5742],{"start":280},[26,5743,5744],{},"Verifica que tu archivo hosts tenga la siguiente linea de instrucción",[73,5746,5748],{"className":75,"code":5747,"language":77,"meta":78,"style":78},"192.168.2.3 lemp7.vh\n",[80,5749,5750],{"__ignoreMap":78},[83,5751,5752,5755],{"class":85,"line":86},[83,5753,5754],{"class":89},"192.168.2.3",[83,5756,5757],{"class":93}," lemp7.vh\n",[3662,5759,5760],{"start":403},[26,5761,5762,5763],{},"Visita en tu navegador el siguiente enlace ",[420,5764,5767],{"href":5765,"rel":5766},"http:\u002F\u002Flemp7.vh",[424],"lemp7",[11,5769,5770],{},"La próxima vez que levante tu box, te aparecerá algo parecido a esto",[3517,5772,5774],{"id":5773},"script-bashero-de-aprovisionamiento","Script Bashero de Aprovisionamiento",[11,5776,5777],{},"Lo importante al momento de aprovisionar nuestra distribución sea usando Vagrant, Docker, en un servidor VPS On Premise, Cloud, dedicado, o físico es que consideremos los paquetes necesarios, las interfaces de líneas de comando y las configuraciones correspondientes para que trabajen en armonía.",[11,5779,5780],{},"A continuación muestro el contenido del Script Bashero que es invocado mediante Vagrant:",[73,5782,5784],{"className":75,"code":5783,"language":77,"meta":78,"style":78},"#!\u002Fusr\u002Fbin\u002Fenv bash\n\nmain() {\n  startGo\n  setupGo\n  toolsGo\n  nginxGo\n  mysqlGo\n  phpGo\n  composerGo\n  nodeGo\n  zshGo\n  endGo\n}\n\nstartGo() {\n  echo \"========    Lemp7 BOX - START   ========\" && \\\n  echo -e \"========================================\" && \\\n  sudo bash -c \"echo '127.0.1.1   ubuntu-disco-dingo' >> \u002Fetc\u002Fhosts\"\n}\n\nsetupGo() {\n  echo \"---------------   SETUP   --------------\" && \\\n  echo -e \"----------------------------------------\" && \\\n  export LC_ALL=en_US.UTF-8 && \\\n  export LANG=en_US.UTF-8 && \\\n  sudo add-apt-repository -y ppa:ondrej\u002Fnginx && \\\n  sudo add-apt-repository -y ppa:ondrej\u002Fphp && \\\n  sudo apt-get update\n}\n\ntoolsGo() {\n  echo \"---------------   TOOLS   --------------\" && \\\n  echo -e \"----------------------------------------\" && \\\n  sudo apt-get install -y re2c libpcre3-dev gcc mc grc cowsay figlet zsh lsb-core\n}\n\nnginxGo() {\n  echo \"---------------   NGINX   --------------\" && \\\n  echo -e \"----------------------------------------\" && \\\n  sudo apt-get install -y nginx && \\\n  sudo cp \u002Fvagrant\u002Fdata\u002Fnginx\u002Flemp7.vh.conf \u002Fetc\u002Fnginx\u002Fsites-available\u002Flemp7.vh.conf && \\\n  sudo ln -s \u002Fetc\u002Fnginx\u002Fsites-available\u002Flemp7.vh.conf \u002Fetc\u002Fnginx\u002Fsites-enabled\u002Flemp7.vh && \\\n  sudo systemctl restart nginx.service\n}\n\nmysqlGo() {\n  echo \"---------------   MYSQL   --------------\" && \\\n  echo -e \"----------------------------------------\" && \\\n  sudo apt-get install -y mysql-server && \\\n  sudo cp \u002Fvagrant\u002Fdata\u002Fmysql\u002F.my.cnf \u002Froot\u002F.my.cnf && \\\n  sudo chmod 600 \u002Froot\u002F.my.cnf && \\\n  sudo service mysql start && \\\nmysql --user=root \u003C\u003CEOF\n  ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';   \n  FLUSH PRIVILEGES;\nEOF\n}\n\nphpGo() {\n  echo \"----------------   PHP   ---------------\" && \\\n  echo -e \"----------------------------------------\" && \\\n  sudo apt-get install -y php7.3-fpm php7.3-mysql php7.3-phpdbg php7.3-mbstring php7.3-gd php-imagick && \\\n  sudo apt-get install -y php7.3-pgsql php7.3-pspell php7.3-recode php7.3-tidy php7.3-intl php7.3-curl && \\\n  sudo apt-get install -y php7.3-zip php7.3-xml php7.3-dev php-memcached mcrypt memcached phpunit && \\\n  sudo cp \u002Fvagrant\u002Fdata\u002Fphp\u002Flemp.ini \u002Fetc\u002Fphp\u002F7.3\u002Fmods-available\u002Flemp.ini && \\\n  sudo chmod 644 \u002Fetc\u002Fphp\u002F7.3\u002Fmods-available\u002Flemp.ini && \\\n  sudo ln -s \u002Fetc\u002Fphp\u002F7.3\u002Fmods-available\u002Flemp.ini \u002Fetc\u002Fphp\u002F7.3\u002Fcli\u002Fconf.d\u002F100-lemp.ini && \\\n  sudo ln -s \u002Fetc\u002Fphp\u002F7.3\u002Fmods-available\u002Flemp.ini \u002Fetc\u002Fphp\u002F7.3\u002Ffpm\u002Fconf.d\u002F100-lemp.ini && \\\n  sudo pecl install xdebug && \\\n  sudo cp \u002Fvagrant\u002Fdata\u002Fphp\u002Fxdebug.ini \u002Fetc\u002Fphp\u002F7.3\u002Fmods-available\u002Fxdebug.ini && \\\n  sudo chmod 644 \u002Fetc\u002Fphp\u002F7.3\u002Fmods-available\u002Fxdebug.ini && \\\n  sudo ln -s \u002Fetc\u002Fphp\u002F7.3\u002Fmods-available\u002Fxdebug.ini \u002Fetc\u002Fphp\u002F7.3\u002Fcli\u002Fconf.d\u002F105-xdebug.ini && \\\n  sudo ln -s \u002Fetc\u002Fphp\u002F7.3\u002Fmods-available\u002Fxdebug.ini \u002Fetc\u002Fphp\u002F7.3\u002Ffpm\u002Fconf.d\u002F105-xdebug.ini && \\\n  sudo systemctl restart php7.3-fpm\n}\n\ncomposerGo() {\n  echo \"--------------   COMPOSER   ------------\" && \\\n  echo -e \"----------------------------------------\" && \\\n  curl -sS https:\u002F\u002Fgetcomposer.org\u002Finstaller | php && \\\n  sudo mv composer.phar \u002Fusr\u002Flocal\u002Fbin\u002Fcomposer\n}\n\nnodeGo() {\n  echo \"----------------   NODE   --------------\" && \\\n  echo -e \"----------------------------------------\" && \\\n  sudo apt install -y nodejs npm\n}\n\nzshGo() {\n  echo \"----------------   ZSH   ---------------\" && \\\n  echo -e \"----------------------------------------\" && \\\n  cd \u002Ftmp && wget https:\u002F\u002Fraw.github.com\u002Frobbyrussell\u002Foh-my-zsh\u002Fmaster\u002Ftools\u002Finstall.sh && \\\n  sudo sh .\u002Finstall.sh && rm .\u002Finstall.sh && usermod --shell \u002Fbin\u002Fzsh root && \\\n  git clone https:\u002F\u002Fgithub.com\u002Fzsh-users\u002Fzsh-syntax-highlighting.git ~\u002F.oh-my-zsh\u002Fplugins\u002Fzsh-syntax-highlighting && \\\n  git clone https:\u002F\u002Fgithub.com\u002Fzsh-users\u002Fzsh-autosuggestions.git ~\u002F.oh-my-zsh\u002Fplugins\u002Fzsh-autosuggestions && \\\n  sed -i -e 's\u002Fgit\u002Fgit zsh-syntax-highlighting zsh-autosuggestions\u002F' ~\u002F.zshrc && \\\n  sed -i -e 's\u002Frobbyrussell\u002Fristo\u002F' ~\u002F.zshrc\n}\n\nendGo() {\n  sudo usermod -a -G www-data vagrant && \\\n  echo \"=========    Lemp7 BOX - END   =========\" && \\\n  echo -e \"========================================\" && \\\n  figlet Lemp7 && \\\n  cowsay -f milk \"Nunca confies en un ordenador que no puedas lanzar por una ventana. --->Steve Wozniak\"\n}\n\nmain\nexit 0\n",[80,5785,5786,5791,5795,5805,5810,5815,5820,5825,5830,5835,5840,5845,5850,5855,5859,5863,5872,5888,5905,5922,5926,5930,5939,5954,5971,5994,6013,6028,6043,6051,6055,6059,6068,6083,6099,6135,6139,6143,6152,6167,6183,6200,6217,6234,6246,6250,6254,6263,6278,6294,6311,6327,6342,6358,6372,6377,6382,6386,6390,6394,6403,6418,6434,6466,6498,6533,6549,6564,6581,6598,6614,6630,6644,6661,6678,6689,6693,6697,6706,6721,6737,6757,6770,6774,6778,6787,6802,6818,6835,6839,6843,6852,6867,6883,6902,6936,6952,6968,6992,7009,7013,7017,7026,7048,7063,7079,7091,7108,7112,7116,7121],{"__ignoreMap":78},[83,5787,5788],{"class":85,"line":86},[83,5789,5790],{"class":977},"#!\u002Fusr\u002Fbin\u002Fenv bash\n",[83,5792,5793],{"class":85,"line":260},[83,5794,628],{"emptyLinePlaceholder":443},[83,5796,5797,5800,5803],{"class":85,"line":280},[83,5798,5799],{"class":89},"main",[83,5801,5802],{"class":175},"()",[83,5804,3910],{"class":175},[83,5806,5807],{"class":85,"line":403},[83,5808,5809],{"class":89},"  startGo\n",[83,5811,5812],{"class":85,"line":646},[83,5813,5814],{"class":89},"  setupGo\n",[83,5816,5817],{"class":85,"line":654},[83,5818,5819],{"class":89},"  toolsGo\n",[83,5821,5822],{"class":85,"line":662},[83,5823,5824],{"class":89},"  nginxGo\n",[83,5826,5827],{"class":85,"line":672},[83,5828,5829],{"class":89},"  mysqlGo\n",[83,5831,5832],{"class":85,"line":680},[83,5833,5834],{"class":89},"  phpGo\n",[83,5836,5837],{"class":85,"line":691},[83,5838,5839],{"class":89},"  composerGo\n",[83,5841,5842],{"class":85,"line":696},[83,5843,5844],{"class":89},"  nodeGo\n",[83,5846,5847],{"class":85,"line":704},[83,5848,5849],{"class":89},"  zshGo\n",[83,5851,5852],{"class":85,"line":712},[83,5853,5854],{"class":89},"  endGo\n",[83,5856,5857],{"class":85,"line":720},[83,5858,3929],{"class":175},[83,5860,5861],{"class":85,"line":725},[83,5862,628],{"emptyLinePlaceholder":443},[83,5864,5865,5868,5870],{"class":85,"line":733},[83,5866,5867],{"class":89},"startGo",[83,5869,5802],{"class":175},[83,5871,3910],{"class":175},[83,5873,5874,5877,5879,5882,5884,5886],{"class":85,"line":738},[83,5875,5876],{"class":113},"  echo",[83,5878,617],{"class":616},[83,5880,5881],{"class":93},"========    Lemp7 BOX - START   ========",[83,5883,4824],{"class":616},[83,5885,176],{"class":175},[83,5887,372],{"class":165},[83,5889,5890,5892,5894,5896,5899,5901,5903],{"class":85,"line":745},[83,5891,5876],{"class":113},[83,5893,5287],{"class":165},[83,5895,617],{"class":616},[83,5897,5898],{"class":93},"========================================",[83,5900,4824],{"class":616},[83,5902,176],{"class":175},[83,5904,372],{"class":165},[83,5906,5907,5910,5913,5915,5917,5920],{"class":85,"line":756},[83,5908,5909],{"class":89},"  sudo",[83,5911,5912],{"class":93}," bash",[83,5914,3155],{"class":165},[83,5916,617],{"class":616},[83,5918,5919],{"class":93},"echo '127.0.1.1   ubuntu-disco-dingo' >> \u002Fetc\u002Fhosts",[83,5921,623],{"class":616},[83,5923,5924],{"class":85,"line":766},[83,5925,3929],{"class":175},[83,5927,5928],{"class":85,"line":777},[83,5929,628],{"emptyLinePlaceholder":443},[83,5931,5932,5935,5937],{"class":85,"line":785},[83,5933,5934],{"class":89},"setupGo",[83,5936,5802],{"class":175},[83,5938,3910],{"class":175},[83,5940,5941,5943,5945,5948,5950,5952],{"class":85,"line":793},[83,5942,5876],{"class":113},[83,5944,617],{"class":616},[83,5946,5947],{"class":93},"---------------   SETUP   --------------",[83,5949,4824],{"class":616},[83,5951,176],{"class":175},[83,5953,372],{"class":165},[83,5955,5956,5958,5960,5962,5965,5967,5969],{"class":85,"line":804},[83,5957,5876],{"class":113},[83,5959,5287],{"class":165},[83,5961,617],{"class":616},[83,5963,5964],{"class":93},"----------------------------------------",[83,5966,4824],{"class":616},[83,5968,176],{"class":175},[83,5970,372],{"class":165},[83,5972,5973,5976,5979,5982,5985,5987,5990,5992],{"class":85,"line":812},[83,5974,5975],{"class":3402},"  export",[83,5977,5978],{"class":2794}," LC_ALL",[83,5980,5981],{"class":175},"=",[83,5983,5984],{"class":2794},"en_US",[83,5986,2743],{"class":2742},[83,5988,5989],{"class":2794},"UTF-8",[83,5991,176],{"class":175},[83,5993,372],{"class":165},[83,5995,5996,5998,6001,6003,6005,6007,6009,6011],{"class":85,"line":821},[83,5997,5975],{"class":3402},[83,5999,6000],{"class":2794}," LANG",[83,6002,5981],{"class":175},[83,6004,5984],{"class":2794},[83,6006,2743],{"class":2742},[83,6008,5989],{"class":2794},[83,6010,176],{"class":175},[83,6012,372],{"class":165},[83,6014,6015,6017,6019,6021,6024,6026],{"class":85,"line":829},[83,6016,5909],{"class":89},[83,6018,4632],{"class":93},[83,6020,4236],{"class":165},[83,6022,6023],{"class":93}," ppa:ondrej\u002Fnginx",[83,6025,176],{"class":175},[83,6027,372],{"class":165},[83,6029,6030,6032,6034,6036,6039,6041],{"class":85,"line":841},[83,6031,5909],{"class":89},[83,6033,4632],{"class":93},[83,6035,4236],{"class":165},[83,6037,6038],{"class":93}," ppa:ondrej\u002Fphp",[83,6040,176],{"class":175},[83,6042,372],{"class":165},[83,6044,6045,6047,6049],{"class":85,"line":853},[83,6046,5909],{"class":89},[83,6048,3073],{"class":93},[83,6050,4552],{"class":93},[83,6052,6053],{"class":85,"line":866},[83,6054,3929],{"class":175},[83,6056,6057],{"class":85,"line":876},[83,6058,628],{"emptyLinePlaceholder":443},[83,6060,6061,6064,6066],{"class":85,"line":887},[83,6062,6063],{"class":89},"toolsGo",[83,6065,5802],{"class":175},[83,6067,3910],{"class":175},[83,6069,6070,6072,6074,6077,6079,6081],{"class":85,"line":898},[83,6071,5876],{"class":113},[83,6073,617],{"class":616},[83,6075,6076],{"class":93},"---------------   TOOLS   --------------",[83,6078,4824],{"class":616},[83,6080,176],{"class":175},[83,6082,372],{"class":165},[83,6084,6085,6087,6089,6091,6093,6095,6097],{"class":85,"line":906},[83,6086,5876],{"class":113},[83,6088,5287],{"class":165},[83,6090,617],{"class":616},[83,6092,5964],{"class":93},[83,6094,4824],{"class":616},[83,6096,176],{"class":175},[83,6098,372],{"class":165},[83,6100,6101,6103,6105,6107,6109,6112,6115,6118,6121,6124,6127,6130,6132],{"class":85,"line":914},[83,6102,5909],{"class":89},[83,6104,3073],{"class":93},[83,6106,3076],{"class":93},[83,6108,4236],{"class":165},[83,6110,6111],{"class":93}," re2c",[83,6113,6114],{"class":93}," libpcre3-dev",[83,6116,6117],{"class":93}," gcc",[83,6119,6120],{"class":93}," mc",[83,6122,6123],{"class":93}," grc",[83,6125,6126],{"class":93}," cowsay",[83,6128,6129],{"class":93}," figlet",[83,6131,3235],{"class":93},[83,6133,6134],{"class":93}," lsb-core\n",[83,6136,6137],{"class":85,"line":922},[83,6138,3929],{"class":175},[83,6140,6141],{"class":85,"line":930},[83,6142,628],{"emptyLinePlaceholder":443},[83,6144,6145,6148,6150],{"class":85,"line":938},[83,6146,6147],{"class":89},"nginxGo",[83,6149,5802],{"class":175},[83,6151,3910],{"class":175},[83,6153,6154,6156,6158,6161,6163,6165],{"class":85,"line":946},[83,6155,5876],{"class":113},[83,6157,617],{"class":616},[83,6159,6160],{"class":93},"---------------   NGINX   --------------",[83,6162,4824],{"class":616},[83,6164,176],{"class":175},[83,6166,372],{"class":165},[83,6168,6169,6171,6173,6175,6177,6179,6181],{"class":85,"line":954},[83,6170,5876],{"class":113},[83,6172,5287],{"class":165},[83,6174,617],{"class":616},[83,6176,5964],{"class":93},[83,6178,4824],{"class":616},[83,6180,176],{"class":175},[83,6182,372],{"class":165},[83,6184,6185,6187,6189,6191,6193,6196,6198],{"class":85,"line":962},[83,6186,5909],{"class":89},[83,6188,3073],{"class":93},[83,6190,3076],{"class":93},[83,6192,4236],{"class":165},[83,6194,6195],{"class":93}," nginx",[83,6197,176],{"class":175},[83,6199,372],{"class":165},[83,6201,6202,6204,6207,6210,6213,6215],{"class":85,"line":974},[83,6203,5909],{"class":89},[83,6205,6206],{"class":93}," cp",[83,6208,6209],{"class":93}," \u002Fvagrant\u002Fdata\u002Fnginx\u002Flemp7.vh.conf",[83,6211,6212],{"class":93}," \u002Fetc\u002Fnginx\u002Fsites-available\u002Flemp7.vh.conf",[83,6214,176],{"class":175},[83,6216,372],{"class":165},[83,6218,6219,6221,6223,6225,6227,6230,6232],{"class":85,"line":981},[83,6220,5909],{"class":89},[83,6222,4848],{"class":93},[83,6224,3226],{"class":165},[83,6226,6212],{"class":93},[83,6228,6229],{"class":93}," \u002Fetc\u002Fnginx\u002Fsites-enabled\u002Flemp7.vh",[83,6231,176],{"class":175},[83,6233,372],{"class":165},[83,6235,6236,6238,6240,6243],{"class":85,"line":993},[83,6237,5909],{"class":89},[83,6239,4306],{"class":93},[83,6241,6242],{"class":93}," restart",[83,6244,6245],{"class":93}," nginx.service\n",[83,6247,6248],{"class":85,"line":1005},[83,6249,3929],{"class":175},[83,6251,6252],{"class":85,"line":1017},[83,6253,628],{"emptyLinePlaceholder":443},[83,6255,6256,6259,6261],{"class":85,"line":1029},[83,6257,6258],{"class":89},"mysqlGo",[83,6260,5802],{"class":175},[83,6262,3910],{"class":175},[83,6264,6265,6267,6269,6272,6274,6276],{"class":85,"line":1035},[83,6266,5876],{"class":113},[83,6268,617],{"class":616},[83,6270,6271],{"class":93},"---------------   MYSQL   --------------",[83,6273,4824],{"class":616},[83,6275,176],{"class":175},[83,6277,372],{"class":165},[83,6279,6280,6282,6284,6286,6288,6290,6292],{"class":85,"line":1047},[83,6281,5876],{"class":113},[83,6283,5287],{"class":165},[83,6285,617],{"class":616},[83,6287,5964],{"class":93},[83,6289,4824],{"class":616},[83,6291,176],{"class":175},[83,6293,372],{"class":165},[83,6295,6296,6298,6300,6302,6304,6307,6309],{"class":85,"line":1053},[83,6297,5909],{"class":89},[83,6299,3073],{"class":93},[83,6301,3076],{"class":93},[83,6303,4236],{"class":165},[83,6305,6306],{"class":93}," mysql-server",[83,6308,176],{"class":175},[83,6310,372],{"class":165},[83,6312,6313,6315,6317,6320,6323,6325],{"class":85,"line":1065},[83,6314,5909],{"class":89},[83,6316,6206],{"class":93},[83,6318,6319],{"class":93}," \u002Fvagrant\u002Fdata\u002Fmysql\u002F.my.cnf",[83,6321,6322],{"class":93}," \u002Froot\u002F.my.cnf",[83,6324,176],{"class":175},[83,6326,372],{"class":165},[83,6328,6329,6331,6333,6336,6338,6340],{"class":85,"line":1070},[83,6330,5909],{"class":89},[83,6332,4745],{"class":93},[83,6334,6335],{"class":339}," 600",[83,6337,6322],{"class":93},[83,6339,176],{"class":175},[83,6341,372],{"class":165},[83,6343,6344,6346,6349,6352,6354,6356],{"class":85,"line":1078},[83,6345,5909],{"class":89},[83,6347,6348],{"class":93}," service",[83,6350,6351],{"class":93}," mysql",[83,6353,4309],{"class":93},[83,6355,176],{"class":175},[83,6357,372],{"class":165},[83,6359,6360,6363,6366,6369],{"class":85,"line":1088},[83,6361,6362],{"class":89},"mysql",[83,6364,6365],{"class":165}," --user=root",[83,6367,6368],{"class":3402}," \u003C\u003C",[83,6370,6371],{"class":616},"EOF\n",[83,6373,6374],{"class":85,"line":1098},[83,6375,6376],{"class":93},"  ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';   \n",[83,6378,6379],{"class":85,"line":1109},[83,6380,6381],{"class":93},"  FLUSH PRIVILEGES;\n",[83,6383,6384],{"class":85,"line":1119},[83,6385,6371],{"class":616},[83,6387,6388],{"class":85,"line":1126},[83,6389,3929],{"class":175},[83,6391,6392],{"class":85,"line":1133},[83,6393,628],{"emptyLinePlaceholder":443},[83,6395,6396,6399,6401],{"class":85,"line":1141},[83,6397,6398],{"class":89},"phpGo",[83,6400,5802],{"class":175},[83,6402,3910],{"class":175},[83,6404,6405,6407,6409,6412,6414,6416],{"class":85,"line":1148},[83,6406,5876],{"class":113},[83,6408,617],{"class":616},[83,6410,6411],{"class":93},"----------------   PHP   ---------------",[83,6413,4824],{"class":616},[83,6415,176],{"class":175},[83,6417,372],{"class":165},[83,6419,6420,6422,6424,6426,6428,6430,6432],{"class":85,"line":1156},[83,6421,5876],{"class":113},[83,6423,5287],{"class":165},[83,6425,617],{"class":616},[83,6427,5964],{"class":93},[83,6429,4824],{"class":616},[83,6431,176],{"class":175},[83,6433,372],{"class":165},[83,6435,6436,6438,6440,6442,6444,6447,6450,6453,6456,6459,6462,6464],{"class":85,"line":1164},[83,6437,5909],{"class":89},[83,6439,3073],{"class":93},[83,6441,3076],{"class":93},[83,6443,4236],{"class":165},[83,6445,6446],{"class":93}," php7.3-fpm",[83,6448,6449],{"class":93}," php7.3-mysql",[83,6451,6452],{"class":93}," php7.3-phpdbg",[83,6454,6455],{"class":93}," php7.3-mbstring",[83,6457,6458],{"class":93}," php7.3-gd",[83,6460,6461],{"class":93}," php-imagick",[83,6463,176],{"class":175},[83,6465,372],{"class":165},[83,6467,6468,6470,6472,6474,6476,6479,6482,6485,6488,6491,6494,6496],{"class":85,"line":1172},[83,6469,5909],{"class":89},[83,6471,3073],{"class":93},[83,6473,3076],{"class":93},[83,6475,4236],{"class":165},[83,6477,6478],{"class":93}," php7.3-pgsql",[83,6480,6481],{"class":93}," php7.3-pspell",[83,6483,6484],{"class":93}," php7.3-recode",[83,6486,6487],{"class":93}," php7.3-tidy",[83,6489,6490],{"class":93}," php7.3-intl",[83,6492,6493],{"class":93}," php7.3-curl",[83,6495,176],{"class":175},[83,6497,372],{"class":165},[83,6499,6500,6502,6504,6506,6508,6511,6514,6517,6520,6523,6526,6529,6531],{"class":85,"line":1180},[83,6501,5909],{"class":89},[83,6503,3073],{"class":93},[83,6505,3076],{"class":93},[83,6507,4236],{"class":165},[83,6509,6510],{"class":93}," php7.3-zip",[83,6512,6513],{"class":93}," php7.3-xml",[83,6515,6516],{"class":93}," php7.3-dev",[83,6518,6519],{"class":93}," php-memcached",[83,6521,6522],{"class":93}," mcrypt",[83,6524,6525],{"class":93}," memcached",[83,6527,6528],{"class":93}," phpunit",[83,6530,176],{"class":175},[83,6532,372],{"class":165},[83,6534,6535,6537,6539,6542,6545,6547],{"class":85,"line":1188},[83,6536,5909],{"class":89},[83,6538,6206],{"class":93},[83,6540,6541],{"class":93}," \u002Fvagrant\u002Fdata\u002Fphp\u002Flemp.ini",[83,6543,6544],{"class":93}," \u002Fetc\u002Fphp\u002F7.3\u002Fmods-available\u002Flemp.ini",[83,6546,176],{"class":175},[83,6548,372],{"class":165},[83,6550,6551,6553,6555,6558,6560,6562],{"class":85,"line":1195},[83,6552,5909],{"class":89},[83,6554,4745],{"class":93},[83,6556,6557],{"class":339}," 644",[83,6559,6544],{"class":93},[83,6561,176],{"class":175},[83,6563,372],{"class":165},[83,6565,6566,6568,6570,6572,6574,6577,6579],{"class":85,"line":1206},[83,6567,5909],{"class":89},[83,6569,4848],{"class":93},[83,6571,3226],{"class":165},[83,6573,6544],{"class":93},[83,6575,6576],{"class":93}," \u002Fetc\u002Fphp\u002F7.3\u002Fcli\u002Fconf.d\u002F100-lemp.ini",[83,6578,176],{"class":175},[83,6580,372],{"class":165},[83,6582,6583,6585,6587,6589,6591,6594,6596],{"class":85,"line":1211},[83,6584,5909],{"class":89},[83,6586,4848],{"class":93},[83,6588,3226],{"class":165},[83,6590,6544],{"class":93},[83,6592,6593],{"class":93}," \u002Fetc\u002Fphp\u002F7.3\u002Ffpm\u002Fconf.d\u002F100-lemp.ini",[83,6595,176],{"class":175},[83,6597,372],{"class":165},[83,6599,6600,6602,6605,6607,6610,6612],{"class":85,"line":1223},[83,6601,5909],{"class":89},[83,6603,6604],{"class":93}," pecl",[83,6606,3076],{"class":93},[83,6608,6609],{"class":93}," xdebug",[83,6611,176],{"class":175},[83,6613,372],{"class":165},[83,6615,6616,6618,6620,6623,6626,6628],{"class":85,"line":1235},[83,6617,5909],{"class":89},[83,6619,6206],{"class":93},[83,6621,6622],{"class":93}," \u002Fvagrant\u002Fdata\u002Fphp\u002Fxdebug.ini",[83,6624,6625],{"class":93}," \u002Fetc\u002Fphp\u002F7.3\u002Fmods-available\u002Fxdebug.ini",[83,6627,176],{"class":175},[83,6629,372],{"class":165},[83,6631,6632,6634,6636,6638,6640,6642],{"class":85,"line":1247},[83,6633,5909],{"class":89},[83,6635,4745],{"class":93},[83,6637,6557],{"class":339},[83,6639,6625],{"class":93},[83,6641,176],{"class":175},[83,6643,372],{"class":165},[83,6645,6646,6648,6650,6652,6654,6657,6659],{"class":85,"line":1259},[83,6647,5909],{"class":89},[83,6649,4848],{"class":93},[83,6651,3226],{"class":165},[83,6653,6625],{"class":93},[83,6655,6656],{"class":93}," \u002Fetc\u002Fphp\u002F7.3\u002Fcli\u002Fconf.d\u002F105-xdebug.ini",[83,6658,176],{"class":175},[83,6660,372],{"class":165},[83,6662,6663,6665,6667,6669,6671,6674,6676],{"class":85,"line":1264},[83,6664,5909],{"class":89},[83,6666,4848],{"class":93},[83,6668,3226],{"class":165},[83,6670,6625],{"class":93},[83,6672,6673],{"class":93}," \u002Fetc\u002Fphp\u002F7.3\u002Ffpm\u002Fconf.d\u002F105-xdebug.ini",[83,6675,176],{"class":175},[83,6677,372],{"class":165},[83,6679,6680,6682,6684,6686],{"class":85,"line":1272},[83,6681,5909],{"class":89},[83,6683,4306],{"class":93},[83,6685,6242],{"class":93},[83,6687,6688],{"class":93}," php7.3-fpm\n",[83,6690,6691],{"class":85,"line":1282},[83,6692,3929],{"class":175},[83,6694,6695],{"class":85,"line":1292},[83,6696,628],{"emptyLinePlaceholder":443},[83,6698,6699,6702,6704],{"class":85,"line":1301},[83,6700,6701],{"class":89},"composerGo",[83,6703,5802],{"class":175},[83,6705,3910],{"class":175},[83,6707,6708,6710,6712,6715,6717,6719],{"class":85,"line":1310},[83,6709,5876],{"class":113},[83,6711,617],{"class":616},[83,6713,6714],{"class":93},"--------------   COMPOSER   ------------",[83,6716,4824],{"class":616},[83,6718,176],{"class":175},[83,6720,372],{"class":165},[83,6722,6723,6725,6727,6729,6731,6733,6735],{"class":85,"line":1317},[83,6724,5876],{"class":113},[83,6726,5287],{"class":165},[83,6728,617],{"class":616},[83,6730,5964],{"class":93},[83,6732,4824],{"class":616},[83,6734,176],{"class":175},[83,6736,372],{"class":165},[83,6738,6739,6742,6745,6748,6750,6753,6755],{"class":85,"line":1324},[83,6740,6741],{"class":89},"  curl",[83,6743,6744],{"class":165}," -sS",[83,6746,6747],{"class":93}," https:\u002F\u002Fgetcomposer.org\u002Finstaller",[83,6749,4604],{"class":3402},[83,6751,6752],{"class":89}," php",[83,6754,176],{"class":175},[83,6756,372],{"class":165},[83,6758,6759,6761,6764,6767],{"class":85,"line":1331},[83,6760,5909],{"class":89},[83,6762,6763],{"class":93}," mv",[83,6765,6766],{"class":93}," composer.phar",[83,6768,6769],{"class":93}," \u002Fusr\u002Flocal\u002Fbin\u002Fcomposer\n",[83,6771,6772],{"class":85,"line":1338},[83,6773,3929],{"class":175},[83,6775,6776],{"class":85,"line":1346},[83,6777,628],{"emptyLinePlaceholder":443},[83,6779,6780,6783,6785],{"class":85,"line":1353},[83,6781,6782],{"class":89},"nodeGo",[83,6784,5802],{"class":175},[83,6786,3910],{"class":175},[83,6788,6789,6791,6793,6796,6798,6800],{"class":85,"line":1361},[83,6790,5876],{"class":113},[83,6792,617],{"class":616},[83,6794,6795],{"class":93},"----------------   NODE   --------------",[83,6797,4824],{"class":616},[83,6799,176],{"class":175},[83,6801,372],{"class":165},[83,6803,6804,6806,6808,6810,6812,6814,6816],{"class":85,"line":1369},[83,6805,5876],{"class":113},[83,6807,5287],{"class":165},[83,6809,617],{"class":616},[83,6811,5964],{"class":93},[83,6813,4824],{"class":616},[83,6815,176],{"class":175},[83,6817,372],{"class":165},[83,6819,6820,6822,6825,6827,6829,6832],{"class":85,"line":1377},[83,6821,5909],{"class":89},[83,6823,6824],{"class":93}," apt",[83,6826,3076],{"class":93},[83,6828,4236],{"class":165},[83,6830,6831],{"class":93}," nodejs",[83,6833,6834],{"class":93}," npm\n",[83,6836,6837],{"class":85,"line":1384},[83,6838,3929],{"class":175},[83,6840,6841],{"class":85,"line":1395},[83,6842,628],{"emptyLinePlaceholder":443},[83,6844,6845,6848,6850],{"class":85,"line":1400},[83,6846,6847],{"class":89},"zshGo",[83,6849,5802],{"class":175},[83,6851,3910],{"class":175},[83,6853,6854,6856,6858,6861,6863,6865],{"class":85,"line":1412},[83,6855,5876],{"class":113},[83,6857,617],{"class":616},[83,6859,6860],{"class":93},"----------------   ZSH   ---------------",[83,6862,4824],{"class":616},[83,6864,176],{"class":175},[83,6866,372],{"class":165},[83,6868,6869,6871,6873,6875,6877,6879,6881],{"class":85,"line":1424},[83,6870,5876],{"class":113},[83,6872,5287],{"class":165},[83,6874,617],{"class":616},[83,6876,5964],{"class":93},[83,6878,4824],{"class":616},[83,6880,176],{"class":175},[83,6882,372],{"class":165},[83,6884,6885,6888,6891,6893,6895,6898,6900],{"class":85,"line":1436},[83,6886,6887],{"class":113},"  cd",[83,6889,6890],{"class":93}," \u002Ftmp",[83,6892,176],{"class":175},[83,6894,5319],{"class":89},[83,6896,6897],{"class":93}," https:\u002F\u002Fraw.github.com\u002Frobbyrussell\u002Foh-my-zsh\u002Fmaster\u002Ftools\u002Finstall.sh",[83,6899,176],{"class":175},[83,6901,372],{"class":165},[83,6903,6904,6906,6909,6912,6914,6917,6919,6921,6923,6926,6929,6932,6934],{"class":85,"line":1448},[83,6905,5909],{"class":89},[83,6907,6908],{"class":93}," sh",[83,6910,6911],{"class":93}," .\u002Finstall.sh",[83,6913,176],{"class":175},[83,6915,6916],{"class":89}," rm",[83,6918,6911],{"class":93},[83,6920,176],{"class":175},[83,6922,4355],{"class":89},[83,6924,6925],{"class":165}," --shell",[83,6927,6928],{"class":93}," \u002Fbin\u002Fzsh",[83,6930,6931],{"class":93}," root",[83,6933,176],{"class":175},[83,6935,372],{"class":165},[83,6937,6938,6941,6943,6945,6948,6950],{"class":85,"line":1453},[83,6939,6940],{"class":89},"  git",[83,6942,94],{"class":93},[83,6944,3304],{"class":93},[83,6946,6947],{"class":93}," ~\u002F.oh-my-zsh\u002Fplugins\u002Fzsh-syntax-highlighting",[83,6949,176],{"class":175},[83,6951,372],{"class":165},[83,6953,6954,6956,6958,6961,6964,6966],{"class":85,"line":1461},[83,6955,6940],{"class":89},[83,6957,94],{"class":93},[83,6959,6960],{"class":93}," https:\u002F\u002Fgithub.com\u002Fzsh-users\u002Fzsh-autosuggestions.git",[83,6962,6963],{"class":93}," ~\u002F.oh-my-zsh\u002Fplugins\u002Fzsh-autosuggestions",[83,6965,176],{"class":175},[83,6967,372],{"class":165},[83,6969,6970,6973,6976,6978,6980,6983,6985,6988,6990],{"class":85,"line":1471},[83,6971,6972],{"class":89},"  sed",[83,6974,6975],{"class":165}," -i",[83,6977,5287],{"class":165},[83,6979,3918],{"class":616},[83,6981,6982],{"class":93},"s\u002Fgit\u002Fgit zsh-syntax-highlighting zsh-autosuggestions\u002F",[83,6984,3971],{"class":616},[83,6986,6987],{"class":93}," ~\u002F.zshrc",[83,6989,176],{"class":175},[83,6991,372],{"class":165},[83,6993,6994,6996,6998,7000,7002,7005,7007],{"class":85,"line":1481},[83,6995,6972],{"class":89},[83,6997,6975],{"class":165},[83,6999,5287],{"class":165},[83,7001,3918],{"class":616},[83,7003,7004],{"class":93},"s\u002Frobbyrussell\u002Fristo\u002F",[83,7006,3971],{"class":616},[83,7008,3354],{"class":93},[83,7010,7011],{"class":85,"line":1490},[83,7012,3929],{"class":175},[83,7014,7015],{"class":85,"line":1497},[83,7016,628],{"emptyLinePlaceholder":443},[83,7018,7019,7022,7024],{"class":85,"line":1504},[83,7020,7021],{"class":89},"endGo",[83,7023,5802],{"class":175},[83,7025,3910],{"class":175},[83,7027,7028,7030,7032,7035,7038,7041,7044,7046],{"class":85,"line":1511},[83,7029,5909],{"class":89},[83,7031,4355],{"class":93},[83,7033,7034],{"class":165}," -a",[83,7036,7037],{"class":165}," -G",[83,7039,7040],{"class":93}," www-data",[83,7042,7043],{"class":93}," vagrant",[83,7045,176],{"class":175},[83,7047,372],{"class":165},[83,7049,7050,7052,7054,7057,7059,7061],{"class":85,"line":1518},[83,7051,5876],{"class":113},[83,7053,617],{"class":616},[83,7055,7056],{"class":93},"=========    Lemp7 BOX - END   =========",[83,7058,4824],{"class":616},[83,7060,176],{"class":175},[83,7062,372],{"class":165},[83,7064,7065,7067,7069,7071,7073,7075,7077],{"class":85,"line":1526},[83,7066,5876],{"class":113},[83,7068,5287],{"class":165},[83,7070,617],{"class":616},[83,7072,5898],{"class":93},[83,7074,4824],{"class":616},[83,7076,176],{"class":175},[83,7078,372],{"class":165},[83,7080,7081,7084,7087,7089],{"class":85,"line":1534},[83,7082,7083],{"class":89},"  figlet",[83,7085,7086],{"class":93}," Lemp7",[83,7088,176],{"class":175},[83,7090,372],{"class":165},[83,7092,7093,7096,7098,7101,7103,7106],{"class":85,"line":1541},[83,7094,7095],{"class":89},"  cowsay",[83,7097,166],{"class":165},[83,7099,7100],{"class":93}," milk",[83,7102,617],{"class":616},[83,7104,7105],{"class":93},"Nunca confies en un ordenador que no puedas lanzar por una ventana. --->Steve Wozniak",[83,7107,623],{"class":616},[83,7109,7110],{"class":85,"line":1552},[83,7111,3929],{"class":175},[83,7113,7114],{"class":85,"line":1557},[83,7115,628],{"emptyLinePlaceholder":443},[83,7117,7118],{"class":85,"line":1569},[83,7119,7120],{"class":89},"main\n",[83,7122,7123,7126],{"class":85,"line":1581},[83,7124,7125],{"class":113},"exit",[83,7127,7128],{"class":339}," 0\n",[3517,7130,7132],{"id":7131},"adicionales","Adicionales",[5251,7134,7136],{"id":7135},"manual-de-instalación-de-oh-my-zsh-para-usuario-vagrant","Manual de Instalación de oh-my-zsh para usuario vagrant",[73,7138,7140],{"className":75,"code":7139,"language":77,"meta":78,"style":78},"wget https:\u002F\u002Fraw.github.com\u002Frobbyrussell\u002Foh-my-zsh\u002Fmaster\u002Ftools\u002Finstall.sh -O - | zsh\nsudo chsh -s `which zsh`\ngit clone https:\u002F\u002Fgithub.com\u002Fzsh-users\u002Fzsh-syntax-highlighting.git ~\u002F.oh-my-zsh\u002Fplugins\u002Fzsh-syntax-highlighting && \\\ngit clone https:\u002F\u002Fgithub.com\u002Fzsh-users\u002Fzsh-autosuggestions.git ~\u002F.oh-my-zsh\u002Fplugins\u002Fzsh-autosuggestions && \\\nsed -i -e 's\u002Fgit\u002Fgit zsh-syntax-highlighting zsh-autosuggestions\u002F' ~\u002F.zshrc\nsed -i -e 's\u002Frobbyrussell\u002Fristo\u002F' ~\u002F.zshrc\nsource ~\u002F.zshrc\n",[80,7141,7142,7157,7174,7188,7202,7219,7235],{"__ignoreMap":78},[83,7143,7144,7146,7148,7151,7153,7155],{"class":85,"line":86},[83,7145,3197],{"class":89},[83,7147,6897],{"class":93},[83,7149,7150],{"class":165}," -O",[83,7152,3206],{"class":93},[83,7154,4604],{"class":3402},[83,7156,3079],{"class":89},[83,7158,7159,7161,7164,7166,7168,7170,7172],{"class":85,"line":260},[83,7160,3070],{"class":89},[83,7162,7163],{"class":93}," chsh",[83,7165,3226],{"class":165},[83,7167,3229],{"class":175},[83,7169,3232],{"class":113},[83,7171,3235],{"class":93},[83,7173,3238],{"class":175},[83,7175,7176,7178,7180,7182,7184,7186],{"class":85,"line":280},[83,7177,90],{"class":89},[83,7179,94],{"class":93},[83,7181,3304],{"class":93},[83,7183,6947],{"class":93},[83,7185,176],{"class":175},[83,7187,372],{"class":165},[83,7189,7190,7192,7194,7196,7198,7200],{"class":85,"line":403},[83,7191,90],{"class":89},[83,7193,94],{"class":93},[83,7195,6960],{"class":93},[83,7197,6963],{"class":93},[83,7199,176],{"class":175},[83,7201,372],{"class":165},[83,7203,7204,7207,7209,7211,7213,7215,7217],{"class":85,"line":646},[83,7205,7206],{"class":89},"sed",[83,7208,6975],{"class":165},[83,7210,5287],{"class":165},[83,7212,3918],{"class":616},[83,7214,6982],{"class":93},[83,7216,3971],{"class":616},[83,7218,3354],{"class":93},[83,7220,7221,7223,7225,7227,7229,7231,7233],{"class":85,"line":654},[83,7222,7206],{"class":89},[83,7224,6975],{"class":165},[83,7226,5287],{"class":165},[83,7228,3918],{"class":616},[83,7230,7004],{"class":93},[83,7232,3971],{"class":616},[83,7234,3354],{"class":93},[83,7236,7237,7239],{"class":85,"line":662},[83,7238,3393],{"class":113},[83,7240,3354],{"class":93},[5251,7242,7244],{"id":7243},"manual-de-instalación-segura-de-redis","Manual de Instalación segura de Redis",[11,7246,7247],{},[420,7248,7251],{"href":7249,"rel":7250},"https:\u002F\u002Fwww.digitalocean.com\u002Fcommunity\u002Ftutorials\u002Fhow-to-install-and-secure-redis-on-ubuntu-18-04",[424],"Documentación técnica",[73,7253,7255],{"className":75,"code":7254,"language":77,"meta":78,"style":78},"sudo apt install redis-server\nsudo vim \u002Fetc\u002Fredis\u002Fredis.conf > supervised systemd\nsudo systemctl restart redis.service\nsudo systemctl status redis\nsudo redis-cli\n> ping\nsudo vim \u002Fetc\u002Fredis\u002Fredis.conf > bind 127.0.0.1 ::1\nsudo systemctl restart redis\nsudo netstat -lnp | grep redis\nsudo vim \u002Fetc\u002Fredis\u002Fredis.conf\nsudo openssl rand 60 | openssl base64 -A\nsudo requirepass foobared > change pass\nsudo systemctl restart redis.service\n",[80,7256,7257,7268,7287,7298,7309,7316,7323,7342,7352,7369,7378,7401,7419],{"__ignoreMap":78},[83,7258,7259,7261,7263,7265],{"class":85,"line":86},[83,7260,3070],{"class":89},[83,7262,6824],{"class":93},[83,7264,3076],{"class":93},[83,7266,7267],{"class":93}," redis-server\n",[83,7269,7270,7272,7275,7278,7281,7284],{"class":85,"line":260},[83,7271,3070],{"class":89},[83,7273,7274],{"class":93}," vim",[83,7276,7277],{"class":93}," \u002Fetc\u002Fredis\u002Fredis.conf",[83,7279,7280],{"class":3402}," >",[83,7282,7283],{"class":93}," supervised",[83,7285,7286],{"class":93}," systemd\n",[83,7288,7289,7291,7293,7295],{"class":85,"line":280},[83,7290,3070],{"class":89},[83,7292,4306],{"class":93},[83,7294,6242],{"class":93},[83,7296,7297],{"class":93}," redis.service\n",[83,7299,7300,7302,7304,7307],{"class":85,"line":403},[83,7301,3070],{"class":89},[83,7303,4306],{"class":93},[83,7305,7306],{"class":93}," status",[83,7308,1833],{"class":93},[83,7310,7311,7313],{"class":85,"line":646},[83,7312,3070],{"class":89},[83,7314,7315],{"class":93}," redis-cli\n",[83,7317,7318,7320],{"class":85,"line":654},[83,7319,5660],{"class":3402},[83,7321,7322],{"class":2742}," ping\n",[83,7324,7325,7327,7329,7331,7333,7336,7339],{"class":85,"line":662},[83,7326,3070],{"class":89},[83,7328,7274],{"class":93},[83,7330,7277],{"class":93},[83,7332,7280],{"class":3402},[83,7334,7335],{"class":93}," bind",[83,7337,7338],{"class":339}," 127.0.0.1",[83,7340,7341],{"class":93}," ::1\n",[83,7343,7344,7346,7348,7350],{"class":85,"line":672},[83,7345,3070],{"class":89},[83,7347,4306],{"class":93},[83,7349,6242],{"class":93},[83,7351,1833],{"class":93},[83,7353,7354,7356,7359,7362,7364,7367],{"class":85,"line":680},[83,7355,3070],{"class":89},[83,7357,7358],{"class":93}," netstat",[83,7360,7361],{"class":165}," -lnp",[83,7363,4604],{"class":3402},[83,7365,7366],{"class":89}," grep",[83,7368,1833],{"class":93},[83,7370,7371,7373,7375],{"class":85,"line":691},[83,7372,3070],{"class":89},[83,7374,7274],{"class":93},[83,7376,7377],{"class":93}," \u002Fetc\u002Fredis\u002Fredis.conf\n",[83,7379,7380,7382,7385,7388,7391,7393,7395,7398],{"class":85,"line":696},[83,7381,3070],{"class":89},[83,7383,7384],{"class":93}," openssl",[83,7386,7387],{"class":93}," rand",[83,7389,7390],{"class":339}," 60",[83,7392,4604],{"class":3402},[83,7394,7384],{"class":89},[83,7396,7397],{"class":93}," base64",[83,7399,7400],{"class":165}," -A\n",[83,7402,7403,7405,7408,7411,7413,7416],{"class":85,"line":704},[83,7404,3070],{"class":89},[83,7406,7407],{"class":93}," requirepass",[83,7409,7410],{"class":93}," foobared",[83,7412,7280],{"class":3402},[83,7414,7415],{"class":93}," change",[83,7417,7418],{"class":93}," pass\n",[83,7420,7421,7423,7425,7427],{"class":85,"line":712},[83,7422,3070],{"class":89},[83,7424,4306],{"class":93},[83,7426,6242],{"class":93},[83,7428,7297],{"class":93},[11,7430,7431,7434,7435],{},[521,7432,7433],{},"Referencia:"," ",[420,7436,7438],{"href":5632,"rel":7437},[424],"Repositorio alojado en Github",[427,7440,7441],{},"html pre.shiki code .sCK9x, html code.shiki .sCK9x{--shiki-default:#80A665}html pre.shiki code .s7rlk, html code.shiki .s7rlk{--shiki-default:#C98A7D}html pre.shiki code .s_wWq, html code.shiki .s_wWq{--shiki-default:#CB7676}html pre.shiki code .sNpkn, html code.shiki .sNpkn{--shiki-default:#DBD7CAEE}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sm68I, html code.shiki .sm68I{--shiki-default:#B8A965}html pre.shiki code .sux-A, html code.shiki .sux-A{--shiki-default:#758575DD}html pre.shiki code .s_pn2, html code.shiki .s_pn2{--shiki-default:#666666}html pre.shiki code .sNJcY, html code.shiki .sNJcY{--shiki-default:#C98A7D77}html pre.shiki code .sXjYR, html code.shiki .sXjYR{--shiki-default:#C99076}html pre.shiki code .st-jp, html code.shiki .st-jp{--shiki-default:#BD976A}html pre.shiki code .sxA9i, html code.shiki .sxA9i{--shiki-default:#4C9A91}",{"title":78,"searchDepth":260,"depth":260,"links":7443},[7444,7445,7446,7447],{"id":5604,"depth":280,"text":5605},{"id":5702,"depth":280,"text":5703},{"id":5773,"depth":280,"text":5774},{"id":7131,"depth":280,"text":7132},"2020-04-21","Una guía para aprovisionar Ubuntu 19.10 con un stack LEMP completo incluyendo herramientas como Redis, Composer, NodeJS y más mediante Vagrant.","\u002Fimg\u002Fposts\u002Fblog\u002Faprovisionar-linux-nginx-mysql-php7-vagrant\u002Fimage.png",{},"\u002Fblog\u002Faprovisionar-linux-nginx-mysql-php7-vagrant",{"title":5563,"description":7449},"blog\u002Faprovisionar-linux-nginx-mysql-php7-vagrant",[7456,5573,7457,5191,450,5576,451,3033,3060,5626,3462],"Bash","Github","ZAivKyciF6Q9qMGwTQSB4x-9eIcgmlCS05EcEJ0T6ao",{"id":7460,"title":7461,"body":7462,"date":9733,"description":9734,"draft":438,"extension":439,"image":9735,"lang":441,"meta":9736,"navigation":443,"path":9737,"seo":9738,"stem":9739,"tags":9740,"__hash__":9750},"blog\u002Fblog\u002Faprovisionar-ubuntu-server-jira-bitbucket-confluence.md","Aprovisionar Ubuntu Server con Jira, Bitbucket y Confluence",{"type":8,"value":7463,"toc":9722},[7464,7468,7471,7475,7506,7510,7514,7554,7558,7562,7585,7589,7660,7664,7732,7736,7777,7781,7795,7800,7847,7861,7865,7905,7918,7922,7962,7966,8019,8023,8039,8043,8087,8091,8094,8108,8112,8127,8130,8147,8151,8154,8158,8287,8291,8316,8320,8594,8598,8622,8626,8630,8677,8681,8771,8775,8779,8783,8786,8798,8802,8816,8819,8974,8978,8990,8992,9075,9079,9093,9097,9120,9128,9132,9136,9138,9150,9154,9168,9170,9304,9308,9320,9322,9392,9396,9410,9414,9436,9443,9447,9451,9454,9466,9470,9473,9477,9485,9508,9512,9526,9528,9575,9579,9591,9593,9663,9667,9681,9685,9707,9713,9716,9719],[18,7465,7467],{"id":7466},"arquitectura-de-solución","Arquitectura de Solución",[11,7469,7470],{},"Esta guía detalla el aprovisionamiento de la Suite Atlassian sobre Ubuntu Server 18.04. La configuración de la infraestructura en AWS y las configuraciones de WAF\u002FDNS se cubrirán en publicaciones separadas.",[18,7472,7474],{"id":7473},"requerimientos","Requerimientos",[23,7476,7477,7480,7483,7486,7500,7503],{},[26,7478,7479],{},"La instalación de 4 aplicaciones (Jira, Jira ServiceDesk, Bitbucket, Confluence) requiere ~2GB de RAM cada una; use una instancia AWS EC2 t2.xlarge (16GB RAM, 4 vCPUs) o una instancia AWS Lightsail equivalente",[26,7481,7482],{},"Distribución Ubuntu Server 18.04 limpia (AWS Linux AMI también compatible)",[26,7484,7485],{},"Dirección IP elástica estática requerida",[26,7487,7488,7489],{},"Acceso al gestor de dominios para configurar subdominios:\n",[23,7490,7491,7494,7497],{},[26,7492,7493],{},"jira.midominio.com",[26,7495,7496],{},"bitbucket.midominio.com",[26,7498,7499],{},"confluence.midominio.com",[26,7501,7502],{},"Certificados SSL (opcional; Letsencrypt gratuito soportado)",[26,7504,7505],{},"Jira y Jira ServiceDesk usan el dominio jira.midominio.com",[18,7507,7509],{"id":7508},"guía-detallada","Guía Detallada",[3517,7511,7513],{"id":7512},"_1-update-y-upgrade-del-sistema-operativo","1. Update y upgrade del sistema operativo",[73,7515,7517],{"className":75,"code":7516,"language":77,"meta":78,"style":78},"sudo apt update && \\\nsudo apt upgrade -y && \\\nsudo reboot\n",[80,7518,7519,7532,7547],{"__ignoreMap":78},[83,7520,7521,7523,7525,7528,7530],{"class":85,"line":86},[83,7522,3070],{"class":89},[83,7524,6824],{"class":93},[83,7526,7527],{"class":93}," update",[83,7529,176],{"class":175},[83,7531,372],{"class":165},[83,7533,7534,7536,7538,7541,7543,7545],{"class":85,"line":260},[83,7535,3070],{"class":89},[83,7537,6824],{"class":93},[83,7539,7540],{"class":93}," upgrade",[83,7542,4236],{"class":165},[83,7544,176],{"class":175},[83,7546,372],{"class":165},[83,7548,7549,7551],{"class":85,"line":280},[83,7550,3070],{"class":89},[83,7552,7553],{"class":93}," reboot\n",[3517,7555,7557],{"id":7556},"_2-instalamos-nginx-y-configuramos-los-subdominios-con-virtual-host","2. Instalamos nginx y configuramos los subdominios con virtual host",[5251,7559,7561],{"id":7560},"_21-instalación-de-nginx","2.1. Instalación de nginx",[73,7563,7565],{"className":75,"code":7564,"language":77,"meta":78,"style":78},"sudo apt-get install -y nginx  > \u002Fdev\u002Fnull\n",[80,7566,7567],{"__ignoreMap":78},[83,7568,7569,7571,7573,7575,7577,7579,7582],{"class":85,"line":86},[83,7570,3070],{"class":89},[83,7572,3073],{"class":93},[83,7574,3076],{"class":93},[83,7576,4236],{"class":165},[83,7578,6195],{"class":93},[83,7580,7581],{"class":3402},"  >",[83,7583,7584],{"class":93}," \u002Fdev\u002Fnull\n",[5251,7586,7588],{"id":7587},"_22-instalamos-cerbot-para-gestionar-el-certificado-ssl","2.2. Instalamos cerbot para gestionar el certificado SSL",[73,7590,7592],{"className":75,"code":7591,"language":77,"meta":78,"style":78},"sudo apt-get install software-properties-common && \\\nsudo add-apt-repository universe && \\\nsudo add-apt-repository ppa:certbot\u002Fcertbot && \\\nsudo apt-get update && \\\nsudo apt-get install certbot python-certbot-nginx\n",[80,7593,7594,7608,7621,7634,7646],{"__ignoreMap":78},[83,7595,7596,7598,7600,7602,7604,7606],{"class":85,"line":86},[83,7597,3070],{"class":89},[83,7599,3073],{"class":93},[83,7601,3076],{"class":93},[83,7603,4581],{"class":93},[83,7605,176],{"class":175},[83,7607,372],{"class":165},[83,7609,7610,7612,7614,7617,7619],{"class":85,"line":260},[83,7611,3070],{"class":89},[83,7613,4632],{"class":93},[83,7615,7616],{"class":93}," universe",[83,7618,176],{"class":175},[83,7620,372],{"class":165},[83,7622,7623,7625,7627,7630,7632],{"class":85,"line":280},[83,7624,3070],{"class":89},[83,7626,4632],{"class":93},[83,7628,7629],{"class":93}," ppa:certbot\u002Fcertbot",[83,7631,176],{"class":175},[83,7633,372],{"class":165},[83,7635,7636,7638,7640,7642,7644],{"class":85,"line":403},[83,7637,3070],{"class":89},[83,7639,3073],{"class":93},[83,7641,7527],{"class":93},[83,7643,176],{"class":175},[83,7645,372],{"class":165},[83,7647,7648,7650,7652,7654,7657],{"class":85,"line":646},[83,7649,3070],{"class":89},[83,7651,3073],{"class":93},[83,7653,3076],{"class":93},[83,7655,7656],{"class":93}," certbot",[83,7658,7659],{"class":93}," python-certbot-nginx\n",[5251,7661,7663],{"id":7662},"_23-creamos-directorios-de-prueba-para-la-configuración-de-los-virtual-host","2.3. Creamos directorios de prueba para la configuración de los virtual host",[73,7665,7667],{"className":75,"code":7666,"language":77,"meta":78,"style":78},"mkdir \u002Fvar\u002Fwww\u002Fjira.midominio.com && \\\nmkdir \u002Fvar\u002Fwww\u002Fbitbucket.midominio.com && \\\nmkdir \u002Fvar\u002Fwww\u002Fconfluence.midominio.com && \\\ntouch \u002Fvar\u002Fwww\u002Fjira.midominio.com\u002Findex.html && \\\ntouch \u002Fvar\u002Fwww\u002Fbibucket.midominio.com\u002Findex.html && \\\ntouch \u002Fvar\u002Fwww\u002Fconfluence.midominio.com\u002Findex.html\n",[80,7668,7669,7680,7691,7702,7714,7725],{"__ignoreMap":78},[83,7670,7671,7673,7676,7678],{"class":85,"line":86},[83,7672,558],{"class":89},[83,7674,7675],{"class":93}," \u002Fvar\u002Fwww\u002Fjira.midominio.com",[83,7677,176],{"class":175},[83,7679,372],{"class":165},[83,7681,7682,7684,7687,7689],{"class":85,"line":260},[83,7683,558],{"class":89},[83,7685,7686],{"class":93}," \u002Fvar\u002Fwww\u002Fbitbucket.midominio.com",[83,7688,176],{"class":175},[83,7690,372],{"class":165},[83,7692,7693,7695,7698,7700],{"class":85,"line":280},[83,7694,558],{"class":89},[83,7696,7697],{"class":93}," \u002Fvar\u002Fwww\u002Fconfluence.midominio.com",[83,7699,176],{"class":175},[83,7701,372],{"class":165},[83,7703,7704,7707,7710,7712],{"class":85,"line":403},[83,7705,7706],{"class":89},"touch",[83,7708,7709],{"class":93}," \u002Fvar\u002Fwww\u002Fjira.midominio.com\u002Findex.html",[83,7711,176],{"class":175},[83,7713,372],{"class":165},[83,7715,7716,7718,7721,7723],{"class":85,"line":646},[83,7717,7706],{"class":89},[83,7719,7720],{"class":93}," \u002Fvar\u002Fwww\u002Fbibucket.midominio.com\u002Findex.html",[83,7722,176],{"class":175},[83,7724,372],{"class":165},[83,7726,7727,7729],{"class":85,"line":654},[83,7728,7706],{"class":89},[83,7730,7731],{"class":93}," \u002Fvar\u002Fwww\u002Fconfluence.midominio.com\u002Findex.html\n",[5251,7733,7735],{"id":7734},"_24-creamos-los-archivos-de-configuración-para-los-virtual-host","2.4. Creamos los archivos de configuración para los virtual host",[73,7737,7739],{"className":75,"code":7738,"language":77,"meta":78,"style":78},"sudo touch \u002Fetc\u002Fnginx\u002Fsites-available\u002Fjira.midominio.com.conf && \\\nsudo touch \u002Fetc\u002Fnginx\u002Fsites-available\u002Fbitbucket.midominio.com.conf && \\\nsudo touch \u002Fetc\u002Fnginx\u002Fsites-available\u002Fconfluence.midominio.com.conf\n",[80,7740,7741,7755,7768],{"__ignoreMap":78},[83,7742,7743,7745,7748,7751,7753],{"class":85,"line":86},[83,7744,3070],{"class":89},[83,7746,7747],{"class":93}," touch",[83,7749,7750],{"class":93}," \u002Fetc\u002Fnginx\u002Fsites-available\u002Fjira.midominio.com.conf",[83,7752,176],{"class":175},[83,7754,372],{"class":165},[83,7756,7757,7759,7761,7764,7766],{"class":85,"line":260},[83,7758,3070],{"class":89},[83,7760,7747],{"class":93},[83,7762,7763],{"class":93}," \u002Fetc\u002Fnginx\u002Fsites-available\u002Fbitbucket.midominio.com.conf",[83,7765,176],{"class":175},[83,7767,372],{"class":165},[83,7769,7770,7772,7774],{"class":85,"line":280},[83,7771,3070],{"class":89},[83,7773,7747],{"class":93},[83,7775,7776],{"class":93}," \u002Fetc\u002Fnginx\u002Fsites-available\u002Fconfluence.midominio.com.conf\n",[5251,7778,7780],{"id":7779},"_25-agregamos-la-siguiente-configuración-a-cada-archivo","2.5. Agregamos la siguiente configuración a cada archivo",[73,7782,7784],{"className":75,"code":7783,"language":77,"meta":78,"style":78},"sudo vim \u002Fetc\u002Fnginx\u002Fsites-available\u002Fjira.midominio.com.conf\n",[80,7785,7786],{"__ignoreMap":78},[83,7787,7788,7790,7792],{"class":85,"line":86},[83,7789,3070],{"class":89},[83,7791,7274],{"class":93},[83,7793,7794],{"class":93}," \u002Fetc\u002Fnginx\u002Fsites-available\u002Fjira.midominio.com.conf\n",[7796,7797,7799],"h5",{"id":7798},"_251-contenido-para-virtual-host-de-jiramidominiocom","2.5.1. Contenido para virtual host de jira.midominio.com",[73,7801,7805],{"className":7802,"code":7803,"language":7804,"meta":78,"style":78},"language-nginx shiki shiki-themes vitesse-dark","server {\n     root \u002Fvar\u002Fwww\u002Fjira.midominio.com\u002F;\n     index index.html;\n     server_name jira.midominio.com;\n}\n","nginx",[80,7806,7807,7814,7824,7834,7843],{"__ignoreMap":78},[83,7808,7809,7812],{"class":85,"line":86},[83,7810,7811],{"class":3402},"server",[83,7813,3910],{"class":2742},[83,7815,7816,7819,7822],{"class":85,"line":260},[83,7817,7818],{"class":2171},"     root ",[83,7820,7821],{"class":2742},"\u002Fvar\u002Fwww\u002Fjira.midominio.com\u002F",[83,7823,3974],{"class":175},[83,7825,7826,7829,7832],{"class":85,"line":280},[83,7827,7828],{"class":2171},"     index ",[83,7830,7831],{"class":2742},"index.html",[83,7833,3974],{"class":175},[83,7835,7836,7839,7841],{"class":85,"line":403},[83,7837,7838],{"class":2171},"     server_name ",[83,7840,7493],{"class":2742},[83,7842,3974],{"class":175},[83,7844,7845],{"class":85,"line":646},[83,7846,3929],{"class":2742},[73,7848,7850],{"className":75,"code":7849,"language":77,"meta":78,"style":78},"sudo vim \u002Fetc\u002Fnginx\u002Fsites-available\u002Fbitbucket.midominio.com.conf\n",[80,7851,7852],{"__ignoreMap":78},[83,7853,7854,7856,7858],{"class":85,"line":86},[83,7855,3070],{"class":89},[83,7857,7274],{"class":93},[83,7859,7860],{"class":93}," \u002Fetc\u002Fnginx\u002Fsites-available\u002Fbitbucket.midominio.com.conf\n",[7796,7862,7864],{"id":7863},"_252-contenido-para-virtual-host-de-bitbucketmidominiocom","2.5.2. Contenido para virtual host de bitbucket.midominio.com",[73,7866,7868],{"className":7802,"code":7867,"language":7804,"meta":78,"style":78},"server {\n     root \u002Fvar\u002Fwww\u002Fbitbucket.midominio.com\u002F;\n     index index.html;\n     server_name bitbucket.midominio.com;\n}\n",[80,7869,7870,7876,7885,7893,7901],{"__ignoreMap":78},[83,7871,7872,7874],{"class":85,"line":86},[83,7873,7811],{"class":3402},[83,7875,3910],{"class":2742},[83,7877,7878,7880,7883],{"class":85,"line":260},[83,7879,7818],{"class":2171},[83,7881,7882],{"class":2742},"\u002Fvar\u002Fwww\u002Fbitbucket.midominio.com\u002F",[83,7884,3974],{"class":175},[83,7886,7887,7889,7891],{"class":85,"line":280},[83,7888,7828],{"class":2171},[83,7890,7831],{"class":2742},[83,7892,3974],{"class":175},[83,7894,7895,7897,7899],{"class":85,"line":403},[83,7896,7838],{"class":2171},[83,7898,7496],{"class":2742},[83,7900,3974],{"class":175},[83,7902,7903],{"class":85,"line":646},[83,7904,3929],{"class":2742},[73,7906,7908],{"className":75,"code":7907,"language":77,"meta":78,"style":78},"sudo vim \u002Fetc\u002Fnginx\u002Fsites-available\u002Fconfluence.midominio.com.conf\n",[80,7909,7910],{"__ignoreMap":78},[83,7911,7912,7914,7916],{"class":85,"line":86},[83,7913,3070],{"class":89},[83,7915,7274],{"class":93},[83,7917,7776],{"class":93},[7796,7919,7921],{"id":7920},"_253-contenido-para-virtual-host-de-confluencemidominiocom","2.5.3. Contenido para virtual host de confluence.midominio.com",[73,7923,7925],{"className":7802,"code":7924,"language":7804,"meta":78,"style":78},"server {\n     root \u002Fvar\u002Fwww\u002Fconfluence.midominio.com\u002F;\n     index index.html;\n     server_name confluence.midominio.com;\n}\n",[80,7926,7927,7933,7942,7950,7958],{"__ignoreMap":78},[83,7928,7929,7931],{"class":85,"line":86},[83,7930,7811],{"class":3402},[83,7932,3910],{"class":2742},[83,7934,7935,7937,7940],{"class":85,"line":260},[83,7936,7818],{"class":2171},[83,7938,7939],{"class":2742},"\u002Fvar\u002Fwww\u002Fconfluence.midominio.com\u002F",[83,7941,3974],{"class":175},[83,7943,7944,7946,7948],{"class":85,"line":280},[83,7945,7828],{"class":2171},[83,7947,7831],{"class":2742},[83,7949,3974],{"class":175},[83,7951,7952,7954,7956],{"class":85,"line":403},[83,7953,7838],{"class":2171},[83,7955,7499],{"class":2742},[83,7957,3974],{"class":175},[83,7959,7960],{"class":85,"line":646},[83,7961,3929],{"class":2742},[5251,7963,7965],{"id":7964},"_26-creamos-enlaces-simbólicos","2.6 Creamos enlaces simbólicos",[73,7967,7969],{"className":75,"code":7968,"language":77,"meta":78,"style":78},"sudo ln -s \u002Fetc\u002Fnginx\u002Fsites-available\u002Fjira.midominio.com.conf \u002Fetc\u002Fnginx\u002Fsites-enabled\u002Fjira.midominio.com && \\\nsudo ln -s \u002Fetc\u002Fnginx\u002Fsites-available\u002Fbitbucket.midominio.com.conf \u002Fetc\u002Fnginx\u002Fsites-enabled\u002Fbitbucket.midominio.com && \\\nsudo ln -s \u002Fetc\u002Fnginx\u002Fsites-available\u002Fconfluence.midominio.com.conf \u002Fetc\u002Fnginx\u002Fsites-enabled\u002Fconfluence.midominio.com\n",[80,7970,7971,7988,8005],{"__ignoreMap":78},[83,7972,7973,7975,7977,7979,7981,7984,7986],{"class":85,"line":86},[83,7974,3070],{"class":89},[83,7976,4848],{"class":93},[83,7978,3226],{"class":165},[83,7980,7750],{"class":93},[83,7982,7983],{"class":93}," \u002Fetc\u002Fnginx\u002Fsites-enabled\u002Fjira.midominio.com",[83,7985,176],{"class":175},[83,7987,372],{"class":165},[83,7989,7990,7992,7994,7996,7998,8001,8003],{"class":85,"line":260},[83,7991,3070],{"class":89},[83,7993,4848],{"class":93},[83,7995,3226],{"class":165},[83,7997,7763],{"class":93},[83,7999,8000],{"class":93}," \u002Fetc\u002Fnginx\u002Fsites-enabled\u002Fbitbucket.midominio.com",[83,8002,176],{"class":175},[83,8004,372],{"class":165},[83,8006,8007,8009,8011,8013,8016],{"class":85,"line":280},[83,8008,3070],{"class":89},[83,8010,4848],{"class":93},[83,8012,3226],{"class":165},[83,8014,8015],{"class":93}," \u002Fetc\u002Fnginx\u002Fsites-available\u002Fconfluence.midominio.com.conf",[83,8017,8018],{"class":93}," \u002Fetc\u002Fnginx\u002Fsites-enabled\u002Fconfluence.midominio.com\n",[5251,8020,8022],{"id":8021},"_27-reiniciamos-nginx","2.7 Reiniciamos nginx",[73,8024,8026],{"className":75,"code":8025,"language":77,"meta":78,"style":78},"sudo service nginx restart\n",[80,8027,8028],{"__ignoreMap":78},[83,8029,8030,8032,8034,8036],{"class":85,"line":86},[83,8031,3070],{"class":89},[83,8033,6348],{"class":93},[83,8035,6195],{"class":93},[83,8037,8038],{"class":93}," restart\n",[5251,8040,8042],{"id":8041},"_28-configuramos-dns-en-nuestro-gestor-de-dominios","2.8 Configuramos DNS en nuestro gestor de dominios",[5371,8044,8045,8058],{},[5374,8046,8047],{},[5377,8048,8049,8052,8055],{},[5380,8050,8051],{},"DOMAIN\u002FIP",[5380,8053,8054],{},"DOMAIN",[5380,8056,8057],{},"DNS TYPE",[5387,8059,8060,8070,8079],{},[5377,8061,8062,8065,8067],{},[5392,8063,8064],{},"xxx.xxx.xxx.xxx",[5392,8066,7493],{},[5392,8068,8069],{},"A",[5377,8071,8072,8074,8076],{},[5392,8073,7493],{},[5392,8075,7496],{},[5392,8077,8078],{},"CNAME",[5377,8080,8081,8083,8085],{},[5392,8082,7493],{},[5392,8084,7499],{},[5392,8086,8078],{},[5251,8088,8090],{"id":8089},"_29-creamos-el-certificado-ssl","2.9 Creamos el certificado SSL",[11,8092,8093],{},"Asegúrese de que el puerto 443 esté habilitado a nivel de firewall. Durante la ejecución de Certbot, seleccione la opción para redirigir HTTP a HTTPS.",[73,8095,8097],{"className":75,"code":8096,"language":77,"meta":78,"style":78},"sudo certbot --nginx\n",[80,8098,8099],{"__ignoreMap":78},[83,8100,8101,8103,8105],{"class":85,"line":86},[83,8102,3070],{"class":89},[83,8104,7656],{"class":93},[83,8106,8107],{"class":165}," --nginx\n",[5251,8109,8111],{"id":8110},"_210-creamos-una-tarea-programada-de-renovación-de-certificado-ssl","2.10 Creamos una tarea programada de renovación de certificado SSL",[73,8113,8115],{"className":75,"code":8114,"language":77,"meta":78,"style":78},"sudo crontab -e\n",[80,8116,8117],{"__ignoreMap":78},[83,8118,8119,8121,8124],{"class":85,"line":86},[83,8120,3070],{"class":89},[83,8122,8123],{"class":93}," crontab",[83,8125,8126],{"class":165}," -e\n",[11,8128,8129],{},"Agregue el siguiente contenido:",[73,8131,8135],{"className":8132,"code":8133,"language":8134,"meta":78,"style":78},"language-cron shiki shiki-themes vitesse-dark","# m h dom mon dow command\n0 2 * * * certbot renew --dry-run\n","cron",[80,8136,8137,8142],{"__ignoreMap":78},[83,8138,8139],{"class":85,"line":86},[83,8140,8141],{},"# m h dom mon dow command\n",[83,8143,8144],{"class":85,"line":260},[83,8145,8146],{},"0 2 * * * certbot renew --dry-run\n",[3517,8148,8150],{"id":8149},"_3-instalación-y-configuración-de-postgresql","3. Instalación y configuración de PostgreSQL",[11,8152,8153],{},"Valide la compatibilidad de versión con las versiones de software. Usando PostgreSQL 9.6 (compatible con Jira Software 8.8, Bitbucket Server 7.1.x, Confluence 7.3).",[5251,8155,8157],{"id":8156},"_31-instalación","3.1. Instalación",[73,8159,8161],{"className":75,"code":8160,"language":77,"meta":78,"style":78},"sudo sh -c 'echo \"deb http:\u002F\u002Fapt.postgresql.org\u002Fpub\u002Frepos\u002Fapt\u002F `lsb_release -cs`-pgdg main\" >> \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fpgdg.list' && \\\nwget -q https:\u002F\u002Fwww.postgresql.org\u002Fmedia\u002Fkeys\u002FACCC4CF8.asc -O - | sudo apt-key add - && \\\nsudo apt-get update && \\\nsudo apt-get upgrade && \\\nsudo dpkg --get-selections | grep postgres && \\\nsudo apt-get install postgresql postgresql-contrib libpq-dev && \\\nsudo apt-get install postgresql-9.6\n",[80,8162,8163,8182,8210,8222,8234,8255,8276],{"__ignoreMap":78},[83,8164,8165,8167,8169,8171,8173,8176,8178,8180],{"class":85,"line":86},[83,8166,3070],{"class":89},[83,8168,6908],{"class":93},[83,8170,3155],{"class":165},[83,8172,3918],{"class":616},[83,8174,8175],{"class":93},"echo \"deb http:\u002F\u002Fapt.postgresql.org\u002Fpub\u002Frepos\u002Fapt\u002F `lsb_release -cs`-pgdg main\" >> \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fpgdg.list",[83,8177,3971],{"class":616},[83,8179,176],{"class":175},[83,8181,372],{"class":165},[83,8183,8184,8186,8189,8192,8194,8196,8198,8200,8202,8204,8206,8208],{"class":85,"line":260},[83,8185,3197],{"class":89},[83,8187,8188],{"class":165}," -q",[83,8190,8191],{"class":93}," https:\u002F\u002Fwww.postgresql.org\u002Fmedia\u002Fkeys\u002FACCC4CF8.asc",[83,8193,7150],{"class":165},[83,8195,3206],{"class":93},[83,8197,4604],{"class":3402},[83,8199,4607],{"class":89},[83,8201,4610],{"class":93},[83,8203,4613],{"class":93},[83,8205,3206],{"class":93},[83,8207,176],{"class":175},[83,8209,372],{"class":165},[83,8211,8212,8214,8216,8218,8220],{"class":85,"line":280},[83,8213,3070],{"class":89},[83,8215,3073],{"class":93},[83,8217,7527],{"class":93},[83,8219,176],{"class":175},[83,8221,372],{"class":165},[83,8223,8224,8226,8228,8230,8232],{"class":85,"line":403},[83,8225,3070],{"class":89},[83,8227,3073],{"class":93},[83,8229,7540],{"class":93},[83,8231,176],{"class":175},[83,8233,372],{"class":165},[83,8235,8236,8238,8241,8244,8246,8248,8251,8253],{"class":85,"line":646},[83,8237,3070],{"class":89},[83,8239,8240],{"class":93}," dpkg",[83,8242,8243],{"class":165}," --get-selections",[83,8245,4604],{"class":3402},[83,8247,7366],{"class":89},[83,8249,8250],{"class":93}," postgres",[83,8252,176],{"class":175},[83,8254,372],{"class":165},[83,8256,8257,8259,8261,8263,8266,8269,8272,8274],{"class":85,"line":654},[83,8258,3070],{"class":89},[83,8260,3073],{"class":93},[83,8262,3076],{"class":93},[83,8264,8265],{"class":93}," postgresql",[83,8267,8268],{"class":93}," postgresql-contrib",[83,8270,8271],{"class":93}," libpq-dev",[83,8273,176],{"class":175},[83,8275,372],{"class":165},[83,8277,8278,8280,8282,8284],{"class":85,"line":662},[83,8279,3070],{"class":89},[83,8281,3073],{"class":93},[83,8283,3076],{"class":93},[83,8285,8286],{"class":93}," postgresql-9.6\n",[5251,8288,8290],{"id":8289},"_32-cambiamos-de-usuario-e-ingresamos-a-psql","3.2. Cambiamos de usuario e ingresamos a PSQL",[73,8292,8294],{"className":75,"code":8293,"language":77,"meta":78,"style":78},"sudo -i -u postgres && \\\npsql\n",[80,8295,8296,8311],{"__ignoreMap":78},[83,8297,8298,8300,8302,8305,8307,8309],{"class":85,"line":86},[83,8299,3070],{"class":89},[83,8301,6975],{"class":165},[83,8303,8304],{"class":165}," -u",[83,8306,8250],{"class":93},[83,8308,176],{"class":175},[83,8310,372],{"class":165},[83,8312,8313],{"class":85,"line":260},[83,8314,8315],{"class":89},"psql\n",[5251,8317,8319],{"id":8318},"_33-creamos-roles-bases-de-datos-y-asignamos-privilegios","3.3. Creamos roles, bases de datos y asignamos privilegios",[73,8321,8325],{"className":8322,"code":8323,"language":8324,"meta":78,"style":78},"language-sql shiki shiki-themes vitesse-dark","CREATE ROLE jirarole WITH LOGIN ENCRYPTED PASSWORD 'password';\nCREATE DATABASE jira WITH ENCODING 'UNICODE' LC_COLLATE 'C' LC_CTYPE 'C' TEMPLATE template0;\nGRANT ALL PRIVILEGES ON DATABASE jira TO jirarole;\nCREATE ROLE bitbucketrole WITH LOGIN ENCRYPTED PASSWORD 'password';\nCREATE DATABASE bitbucket WITH ENCODING='UTF8' OWNER=bitbucketrole CONNECTION LIMIT=-1;\nGRANT ALL PRIVILEGES ON DATABASE bitbucket TO bitbucketrole;\nCREATE ROLE confluencerole WITH LOGIN ENCRYPTED PASSWORD 'password';\nCREATE DATABASE confluence WITH ENCODING='UTF8' OWNER=confluencerole CONNECTION LIMIT=-1;\nGRANT ALL PRIVILEGES ON DATABASE confluence TO confluencerole;\n","sql",[80,8326,8327,8359,8404,8426,8451,8495,8513,8538,8576],{"__ignoreMap":78},[83,8328,8329,8332,8335,8338,8341,8344,8347,8350,8352,8355,8357],{"class":85,"line":86},[83,8330,8331],{"class":2171},"CREATE",[83,8333,8334],{"class":2171}," ROLE",[83,8336,8337],{"class":2742}," jirarole ",[83,8339,8340],{"class":2171},"WITH",[83,8342,8343],{"class":2171}," LOGIN",[83,8345,8346],{"class":2171}," ENCRYPTED",[83,8348,8349],{"class":2171}," PASSWORD",[83,8351,3918],{"class":616},[83,8353,8354],{"class":93},"password",[83,8356,3971],{"class":616},[83,8358,3974],{"class":2742},[83,8360,8361,8363,8366,8369,8372,8375,8377,8380,8382,8385,8387,8390,8392,8395,8397,8399,8401],{"class":85,"line":260},[83,8362,8331],{"class":2171},[83,8364,8365],{"class":2171}," DATABASE",[83,8367,8368],{"class":89}," jira",[83,8370,8371],{"class":2171}," WITH",[83,8373,8374],{"class":2171}," ENCODING",[83,8376,3918],{"class":616},[83,8378,8379],{"class":93},"UNICODE",[83,8381,3971],{"class":616},[83,8383,8384],{"class":2742}," LC_COLLATE ",[83,8386,3971],{"class":616},[83,8388,8389],{"class":93},"C",[83,8391,3971],{"class":616},[83,8393,8394],{"class":2742}," LC_CTYPE ",[83,8396,3971],{"class":616},[83,8398,8389],{"class":93},[83,8400,3971],{"class":616},[83,8402,8403],{"class":2742}," TEMPLATE template0;\n",[83,8405,8406,8409,8412,8415,8417,8420,8423],{"class":85,"line":280},[83,8407,8408],{"class":2171},"GRANT",[83,8410,8411],{"class":2742}," ALL PRIVILEGES ",[83,8413,8414],{"class":2171},"ON",[83,8416,8365],{"class":2171},[83,8418,8419],{"class":2742}," jira ",[83,8421,8422],{"class":2171},"TO",[83,8424,8425],{"class":2742}," jirarole;\n",[83,8427,8428,8430,8432,8435,8437,8439,8441,8443,8445,8447,8449],{"class":85,"line":403},[83,8429,8331],{"class":2171},[83,8431,8334],{"class":2171},[83,8433,8434],{"class":2742}," bitbucketrole ",[83,8436,8340],{"class":2171},[83,8438,8343],{"class":2171},[83,8440,8346],{"class":2171},[83,8442,8349],{"class":2171},[83,8444,3918],{"class":616},[83,8446,8354],{"class":93},[83,8448,3971],{"class":616},[83,8450,3974],{"class":2742},[83,8452,8453,8455,8457,8460,8462,8464,8466,8468,8471,8473,8476,8478,8481,8484,8487,8490,8493],{"class":85,"line":646},[83,8454,8331],{"class":2171},[83,8456,8365],{"class":2171},[83,8458,8459],{"class":89}," bitbucket",[83,8461,8371],{"class":2171},[83,8463,8374],{"class":2171},[83,8465,5981],{"class":3402},[83,8467,3971],{"class":616},[83,8469,8470],{"class":93},"UTF8",[83,8472,3971],{"class":616},[83,8474,8475],{"class":2171}," OWNER",[83,8477,5981],{"class":3402},[83,8479,8480],{"class":2742},"bitbucketrole ",[83,8482,8483],{"class":2171},"CONNECTION",[83,8485,8486],{"class":2171}," LIMIT",[83,8488,8489],{"class":3402},"=-",[83,8491,8492],{"class":339},"1",[83,8494,3974],{"class":2742},[83,8496,8497,8499,8501,8503,8505,8508,8510],{"class":85,"line":654},[83,8498,8408],{"class":2171},[83,8500,8411],{"class":2742},[83,8502,8414],{"class":2171},[83,8504,8365],{"class":2171},[83,8506,8507],{"class":2742}," bitbucket ",[83,8509,8422],{"class":2171},[83,8511,8512],{"class":2742}," bitbucketrole;\n",[83,8514,8515,8517,8519,8522,8524,8526,8528,8530,8532,8534,8536],{"class":85,"line":662},[83,8516,8331],{"class":2171},[83,8518,8334],{"class":2171},[83,8520,8521],{"class":2742}," confluencerole ",[83,8523,8340],{"class":2171},[83,8525,8343],{"class":2171},[83,8527,8346],{"class":2171},[83,8529,8349],{"class":2171},[83,8531,3918],{"class":616},[83,8533,8354],{"class":93},[83,8535,3971],{"class":616},[83,8537,3974],{"class":2742},[83,8539,8540,8542,8544,8547,8549,8551,8553,8555,8557,8559,8561,8563,8566,8568,8570,8572,8574],{"class":85,"line":672},[83,8541,8331],{"class":2171},[83,8543,8365],{"class":2171},[83,8545,8546],{"class":89}," confluence",[83,8548,8371],{"class":2171},[83,8550,8374],{"class":2171},[83,8552,5981],{"class":3402},[83,8554,3971],{"class":616},[83,8556,8470],{"class":93},[83,8558,3971],{"class":616},[83,8560,8475],{"class":2171},[83,8562,5981],{"class":3402},[83,8564,8565],{"class":2742},"confluencerole ",[83,8567,8483],{"class":2171},[83,8569,8486],{"class":2171},[83,8571,8489],{"class":3402},[83,8573,8492],{"class":339},[83,8575,3974],{"class":2742},[83,8577,8578,8580,8582,8584,8586,8589,8591],{"class":85,"line":680},[83,8579,8408],{"class":2171},[83,8581,8411],{"class":2742},[83,8583,8414],{"class":2171},[83,8585,8365],{"class":2171},[83,8587,8588],{"class":2742}," confluence ",[83,8590,8422],{"class":2171},[83,8592,8593],{"class":2742}," confluencerole;\n",[5251,8595,8597],{"id":8596},"_34-verificamos-y-salimos-de-psql","3.4. Verificamos y salimos de psql",[73,8599,8601],{"className":8322,"code":8600,"language":8324,"meta":78,"style":78},"\\l\n\\du\n\\q\nexit\n",[80,8602,8603,8608,8613,8618],{"__ignoreMap":78},[83,8604,8605],{"class":85,"line":86},[83,8606,8607],{"class":2742},"\\l\n",[83,8609,8610],{"class":85,"line":260},[83,8611,8612],{"class":2742},"\\du\n",[83,8614,8615],{"class":85,"line":280},[83,8616,8617],{"class":2742},"\\q\n",[83,8619,8620],{"class":85,"line":403},[83,8621,4371],{"class":2742},[3517,8623,8625],{"id":8624},"_4-preparación-de-la-instalación-de-jira-software-bitbucket-server-y-confluence","4. Preparación de la instalación de Jira Software, Bitbucket Server y Confluence",[5251,8627,8629],{"id":8628},"_41-subir-archivos-bin-al-servidor-mediante-scp","4.1. Subir archivos .bin al servidor mediante SCP",[73,8631,8633],{"className":75,"code":8632,"language":77,"meta":78,"style":78},"scp -i \u002Fpath_to_pem\u002Fcredential.pem \u002Fpath_to_bin\u002Fatlassian-bitbucket-version-x64.bin ubuntu@xxx.xxx.xxx.xxx:~\u002F.\nscp -i \u002Fpath_to_pem\u002Fcredential.pem \u002Fpath_to_bin\u002Fatlassian-jira-software-version-x64.bin ubuntu@xxx.xxx.xxx.xxx:~\u002F.\nscp -i \u002Fpath_to_pem\u002Fcredential.pem \u002Fpath_to_bin\u002Fatlassian-confluence-version-x64.bin ubuntu@xxx.xxx.xxx.xxx:~\u002F.\n",[80,8634,8635,8651,8664],{"__ignoreMap":78},[83,8636,8637,8640,8642,8645,8648],{"class":85,"line":86},[83,8638,8639],{"class":89},"scp",[83,8641,6975],{"class":165},[83,8643,8644],{"class":93}," \u002Fpath_to_pem\u002Fcredential.pem",[83,8646,8647],{"class":93}," \u002Fpath_to_bin\u002Fatlassian-bitbucket-version-x64.bin",[83,8649,8650],{"class":93}," ubuntu@xxx.xxx.xxx.xxx:~\u002F.\n",[83,8652,8653,8655,8657,8659,8662],{"class":85,"line":260},[83,8654,8639],{"class":89},[83,8656,6975],{"class":165},[83,8658,8644],{"class":93},[83,8660,8661],{"class":93}," \u002Fpath_to_bin\u002Fatlassian-jira-software-version-x64.bin",[83,8663,8650],{"class":93},[83,8665,8666,8668,8670,8672,8675],{"class":85,"line":280},[83,8667,8639],{"class":89},[83,8669,6975],{"class":165},[83,8671,8644],{"class":93},[83,8673,8674],{"class":93}," \u002Fpath_to_bin\u002Fatlassian-confluence-version-x64.bin",[83,8676,8650],{"class":93},[5251,8678,8680],{"id":8679},"_42-creamos-un-folder-de-instalación-movemos-los-archivos-y-damos-permisos-de-ejecución","4.2 Creamos un folder de instalación, movemos los archivos y damos permisos de ejecución",[73,8682,8684],{"className":75,"code":8683,"language":77,"meta":78,"style":78},"cd \u002F && \\\nsudo mkdir software && \\\nsudo mv \u002Fhome\u002Fubuntu\u002Fatlassian-* \u002Fsoftware && \\\nsudo chown -R root:root \u002Fsoftware && \\\nsudo chmod -R a+x \u002Fsoftware && \\\ncd \u002Fsoftware\n",[80,8685,8686,8697,8711,8730,8747,8764],{"__ignoreMap":78},[83,8687,8688,8690,8693,8695],{"class":85,"line":86},[83,8689,114],{"class":113},[83,8691,8692],{"class":93}," \u002F",[83,8694,176],{"class":175},[83,8696,372],{"class":165},[83,8698,8699,8701,8704,8707,8709],{"class":85,"line":260},[83,8700,3070],{"class":89},[83,8702,8703],{"class":93}," mkdir",[83,8705,8706],{"class":93}," software",[83,8708,176],{"class":175},[83,8710,372],{"class":165},[83,8712,8713,8715,8717,8720,8723,8726,8728],{"class":85,"line":280},[83,8714,3070],{"class":89},[83,8716,6763],{"class":93},[83,8718,8719],{"class":93}," \u002Fhome\u002Fubuntu\u002Fatlassian-",[83,8721,8722],{"class":165},"*",[83,8724,8725],{"class":93}," \u002Fsoftware",[83,8727,176],{"class":175},[83,8729,372],{"class":165},[83,8731,8732,8734,8736,8738,8741,8743,8745],{"class":85,"line":403},[83,8733,3070],{"class":89},[83,8735,248],{"class":93},[83,8737,251],{"class":165},[83,8739,8740],{"class":93}," root:root",[83,8742,8725],{"class":93},[83,8744,176],{"class":175},[83,8746,372],{"class":165},[83,8748,8749,8751,8753,8755,8758,8760,8762],{"class":85,"line":646},[83,8750,3070],{"class":89},[83,8752,4745],{"class":93},[83,8754,251],{"class":165},[83,8756,8757],{"class":93}," a+x",[83,8759,8725],{"class":93},[83,8761,176],{"class":175},[83,8763,372],{"class":165},[83,8765,8766,8768],{"class":85,"line":654},[83,8767,114],{"class":113},[83,8769,8770],{"class":93}," \u002Fsoftware\n",[3517,8772,8774],{"id":8773},"_5-instalación-de-jira-software-bitbucket-server-y-confluence","5. Instalación de Jira Software, Bitbucket Server y Confluence",[5251,8776,8778],{"id":8777},"_51-instalación-de-jira-software","5.1. Instalación de Jira Software",[7796,8780,8782],{"id":8781},"_511-ejecutar-instalador","5.1.1. Ejecutar instalador",[11,8784,8785],{},"Seleccione la instalación estándar y niegue la ejecución al completar.",[73,8787,8789],{"className":75,"code":8788,"language":77,"meta":78,"style":78},"sudo .\u002Fatlassian-jira-software-version-x64.bin\n",[80,8790,8791],{"__ignoreMap":78},[83,8792,8793,8795],{"class":85,"line":86},[83,8794,3070],{"class":89},[83,8796,8797],{"class":93}," .\u002Fatlassian-jira-software-version-x64.bin\n",[7796,8799,8801],{"id":8800},"_512-modificar-archivo-serverxml","5.1.2. Modificar archivo server.xml",[73,8803,8805],{"className":75,"code":8804,"language":77,"meta":78,"style":78},"sudo vim \u002Fopt\u002Fatlassian\u002Fjira\u002Fconf\u002Fserver.xml\n",[80,8806,8807],{"__ignoreMap":78},[83,8808,8809,8811,8813],{"class":85,"line":86},[83,8810,3070],{"class":89},[83,8812,7274],{"class":93},[83,8814,8815],{"class":93}," \u002Fopt\u002Fatlassian\u002Fjira\u002Fconf\u002Fserver.xml\n",[11,8817,8818],{},"Modifique el tag connector:",[73,8820,8824],{"className":8821,"code":8822,"language":8823,"meta":78,"style":78},"language-xml shiki shiki-themes vitesse-dark","\u003Cconnector acceptcount=\"10\" connectiontimeout=\"20000\" enablelookups=\"false\"\nmaxthreads=\"200\" minsparethreads=\"10\" port=\"8080\" proxyname=\"jira.midominio.com\"\nproxyport=\"443\" scheme=\"https\" secure=\"true\" uriencoding=\"UTF-8\">\u003C\u002Fconnector>\n","xml",[80,8825,8826,8869,8917],{"__ignoreMap":78},[83,8827,8828,8830,8833,8836,8838,8840,8843,8845,8848,8850,8852,8855,8857,8860,8862,8864,8867],{"class":85,"line":86},[83,8829,5651],{"class":175},[83,8831,8832],{"class":2171},"connector",[83,8834,8835],{"class":2794}," acceptcount",[83,8837,5981],{"class":2742},[83,8839,4824],{"class":616},[83,8841,8842],{"class":93},"10",[83,8844,4824],{"class":616},[83,8846,8847],{"class":2794}," connectiontimeout",[83,8849,5981],{"class":2742},[83,8851,4824],{"class":616},[83,8853,8854],{"class":93},"20000",[83,8856,4824],{"class":616},[83,8858,8859],{"class":2794}," enablelookups",[83,8861,5981],{"class":2742},[83,8863,4824],{"class":616},[83,8865,8866],{"class":93},"false",[83,8868,623],{"class":616},[83,8870,8871,8874,8876,8878,8881,8883,8886,8888,8890,8892,8894,8897,8899,8901,8904,8906,8909,8911,8913,8915],{"class":85,"line":260},[83,8872,8873],{"class":2794},"maxthreads",[83,8875,5981],{"class":2742},[83,8877,4824],{"class":616},[83,8879,8880],{"class":93},"200",[83,8882,4824],{"class":616},[83,8884,8885],{"class":2794}," minsparethreads",[83,8887,5981],{"class":2742},[83,8889,4824],{"class":616},[83,8891,8842],{"class":93},[83,8893,4824],{"class":616},[83,8895,8896],{"class":2794}," port",[83,8898,5981],{"class":2742},[83,8900,4824],{"class":616},[83,8902,8903],{"class":93},"8080",[83,8905,4824],{"class":616},[83,8907,8908],{"class":2794}," proxyname",[83,8910,5981],{"class":2742},[83,8912,4824],{"class":616},[83,8914,7493],{"class":93},[83,8916,623],{"class":616},[83,8918,8919,8922,8924,8926,8929,8931,8934,8936,8938,8941,8943,8946,8948,8950,8953,8955,8958,8960,8962,8964,8966,8969,8971],{"class":85,"line":280},[83,8920,8921],{"class":2794},"proxyport",[83,8923,5981],{"class":2742},[83,8925,4824],{"class":616},[83,8927,8928],{"class":93},"443",[83,8930,4824],{"class":616},[83,8932,8933],{"class":2794}," scheme",[83,8935,5981],{"class":2742},[83,8937,4824],{"class":616},[83,8939,8940],{"class":93},"https",[83,8942,4824],{"class":616},[83,8944,8945],{"class":2794}," secure",[83,8947,5981],{"class":2742},[83,8949,4824],{"class":616},[83,8951,8952],{"class":93},"true",[83,8954,4824],{"class":616},[83,8956,8957],{"class":2794}," uriencoding",[83,8959,5981],{"class":2742},[83,8961,4824],{"class":616},[83,8963,5989],{"class":93},[83,8965,4824],{"class":616},[83,8967,8968],{"class":175},">\u003C\u002F",[83,8970,8832],{"class":2171},[83,8972,8973],{"class":175},">\n",[7796,8975,8977],{"id":8976},"_513-configuramos-el-proxy-inverso-en-nginx","5.1.3. Configuramos el proxy inverso en nginx",[73,8979,8980],{"className":75,"code":7783,"language":77,"meta":78,"style":78},[80,8981,8982],{"__ignoreMap":78},[83,8983,8984,8986,8988],{"class":85,"line":86},[83,8985,3070],{"class":89},[83,8987,7274],{"class":93},[83,8989,7794],{"class":93},[11,8991,8129],{},[73,8993,8995],{"className":7802,"code":8994,"language":7804,"meta":78,"style":78},"location \u002F {\n     proxy_set_header X-Forwarded-Host $host;\n     proxy_set_header X-Forwarded-Server $host;\n     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n     proxy_pass http:\u002F\u002F127.0.0.1:8080;\n     client_max_body_size 100M;\n}\n",[80,8996,8997,9008,9024,9037,9051,9061,9071],{"__ignoreMap":78},[83,8998,8999,9002,9005],{"class":85,"line":86},[83,9000,9001],{"class":3402},"location",[83,9003,9004],{"class":89}," \u002F ",[83,9006,9007],{"class":2742},"{\n",[83,9009,9010,9013,9016,9019,9022],{"class":85,"line":260},[83,9011,9012],{"class":2171},"     proxy_set_header ",[83,9014,9015],{"class":2742},"X-Forwarded-Host ",[83,9017,9018],{"class":175},"$",[83,9020,9021],{"class":2794},"host",[83,9023,3974],{"class":175},[83,9025,9026,9028,9031,9033,9035],{"class":85,"line":280},[83,9027,9012],{"class":2171},[83,9029,9030],{"class":2742},"X-Forwarded-Server ",[83,9032,9018],{"class":175},[83,9034,9021],{"class":2794},[83,9036,3974],{"class":175},[83,9038,9039,9041,9044,9046,9049],{"class":85,"line":403},[83,9040,9012],{"class":2171},[83,9042,9043],{"class":2742},"X-Forwarded-For ",[83,9045,9018],{"class":175},[83,9047,9048],{"class":2794},"proxy_add_x_forwarded_for",[83,9050,3974],{"class":175},[83,9052,9053,9056,9059],{"class":85,"line":646},[83,9054,9055],{"class":2171},"     proxy_pass ",[83,9057,9058],{"class":2742},"http:\u002F\u002F127.0.0.1:8080",[83,9060,3974],{"class":175},[83,9062,9063,9066,9069],{"class":85,"line":654},[83,9064,9065],{"class":2171},"     client_max_body_size ",[83,9067,9068],{"class":339},"100M",[83,9070,3974],{"class":175},[83,9072,9073],{"class":85,"line":662},[83,9074,3929],{"class":2742},[7796,9076,9078],{"id":9077},"_514-reiniciamos-nginx","5.1.4. Reiniciamos nginx",[73,9080,9081],{"className":75,"code":8025,"language":77,"meta":78,"style":78},[80,9082,9083],{"__ignoreMap":78},[83,9084,9085,9087,9089,9091],{"class":85,"line":86},[83,9086,3070],{"class":89},[83,9088,6348],{"class":93},[83,9090,6195],{"class":93},[83,9092,8038],{"class":93},[7796,9094,9096],{"id":9095},"_515-iniciamos-el-programa","5.1.5. Iniciamos el programa",[73,9098,9100],{"className":75,"code":9099,"language":77,"meta":78,"style":78},"cd \u002Fopt\u002Fatlassian\u002Fjira\u002Fbin && \\\nsudo .\u002Fstartup.sh\n",[80,9101,9102,9113],{"__ignoreMap":78},[83,9103,9104,9106,9109,9111],{"class":85,"line":86},[83,9105,114],{"class":113},[83,9107,9108],{"class":93}," \u002Fopt\u002Fatlassian\u002Fjira\u002Fbin",[83,9110,176],{"class":175},[83,9112,372],{"class":165},[83,9114,9115,9117],{"class":85,"line":260},[83,9116,3070],{"class":89},[83,9118,9119],{"class":93}," .\u002Fstartup.sh\n",[11,9121,9122,9123,9127],{},"Visite ",[420,9124,9125],{"href":9125,"rel":9126},"https:\u002F\u002Fjira.midominio.com",[424],", complete la instalación en modo producción, conecte la base de datos PostgreSQL jira, y configure las credenciales SMTP si están disponibles.",[5251,9129,9131],{"id":9130},"_52-instalación-de-confluence","5.2. Instalación de Confluence",[7796,9133,9135],{"id":9134},"_521-ejecutar-instalador","5.2.1. Ejecutar instalador",[11,9137,8785],{},[73,9139,9141],{"className":75,"code":9140,"language":77,"meta":78,"style":78},"sudo .\u002Fatlassian-confluence-version-x64.bin\n",[80,9142,9143],{"__ignoreMap":78},[83,9144,9145,9147],{"class":85,"line":86},[83,9146,3070],{"class":89},[83,9148,9149],{"class":93}," .\u002Fatlassian-confluence-version-x64.bin\n",[7796,9151,9153],{"id":9152},"_522-modificar-archivo-serverxml","5.2.2. Modificar archivo server.xml",[73,9155,9157],{"className":75,"code":9156,"language":77,"meta":78,"style":78},"sudo vim \u002Fopt\u002Fatlassian\u002Fconfluence\u002Fconf\u002Fserver.xml\n",[80,9158,9159],{"__ignoreMap":78},[83,9160,9161,9163,9165],{"class":85,"line":86},[83,9162,3070],{"class":89},[83,9164,7274],{"class":93},[83,9166,9167],{"class":93}," \u002Fopt\u002Fatlassian\u002Fconfluence\u002Fconf\u002Fserver.xml\n",[11,9169,8818],{},[73,9171,9173],{"className":8821,"code":9172,"language":8823,"meta":78,"style":78},"\u003Cconnector acceptcount=\"10\" connectiontimeout=\"20000\" enablelookups=\"false\"\nmaxthreads=\"200\" minsparethreads=\"10\" port=\"8080\" proxyname=\"confluence.midominio.com\" \nproxyport=\"443\" scheme=\"https\" secure=\"true\" uriencoding=\"UTF-8\">\u003C\u002Fconnector>\n",[80,9174,9175,9211,9256],{"__ignoreMap":78},[83,9176,9177,9179,9181,9183,9185,9187,9189,9191,9193,9195,9197,9199,9201,9203,9205,9207,9209],{"class":85,"line":86},[83,9178,5651],{"class":175},[83,9180,8832],{"class":2171},[83,9182,8835],{"class":2794},[83,9184,5981],{"class":2742},[83,9186,4824],{"class":616},[83,9188,8842],{"class":93},[83,9190,4824],{"class":616},[83,9192,8847],{"class":2794},[83,9194,5981],{"class":2742},[83,9196,4824],{"class":616},[83,9198,8854],{"class":93},[83,9200,4824],{"class":616},[83,9202,8859],{"class":2794},[83,9204,5981],{"class":2742},[83,9206,4824],{"class":616},[83,9208,8866],{"class":93},[83,9210,623],{"class":616},[83,9212,9213,9215,9217,9219,9221,9223,9225,9227,9229,9231,9233,9235,9237,9239,9241,9243,9245,9247,9249,9251,9253],{"class":85,"line":260},[83,9214,8873],{"class":2794},[83,9216,5981],{"class":2742},[83,9218,4824],{"class":616},[83,9220,8880],{"class":93},[83,9222,4824],{"class":616},[83,9224,8885],{"class":2794},[83,9226,5981],{"class":2742},[83,9228,4824],{"class":616},[83,9230,8842],{"class":93},[83,9232,4824],{"class":616},[83,9234,8896],{"class":2794},[83,9236,5981],{"class":2742},[83,9238,4824],{"class":616},[83,9240,8903],{"class":93},[83,9242,4824],{"class":616},[83,9244,8908],{"class":2794},[83,9246,5981],{"class":2742},[83,9248,4824],{"class":616},[83,9250,7499],{"class":93},[83,9252,4824],{"class":616},[83,9254,9255],{"class":2742}," \n",[83,9257,9258,9260,9262,9264,9266,9268,9270,9272,9274,9276,9278,9280,9282,9284,9286,9288,9290,9292,9294,9296,9298,9300,9302],{"class":85,"line":280},[83,9259,8921],{"class":2794},[83,9261,5981],{"class":2742},[83,9263,4824],{"class":616},[83,9265,8928],{"class":93},[83,9267,4824],{"class":616},[83,9269,8933],{"class":2794},[83,9271,5981],{"class":2742},[83,9273,4824],{"class":616},[83,9275,8940],{"class":93},[83,9277,4824],{"class":616},[83,9279,8945],{"class":2794},[83,9281,5981],{"class":2742},[83,9283,4824],{"class":616},[83,9285,8952],{"class":93},[83,9287,4824],{"class":616},[83,9289,8957],{"class":2794},[83,9291,5981],{"class":2742},[83,9293,4824],{"class":616},[83,9295,5989],{"class":93},[83,9297,4824],{"class":616},[83,9299,8968],{"class":175},[83,9301,8832],{"class":2171},[83,9303,8973],{"class":175},[7796,9305,9307],{"id":9306},"_523-configuramos-el-proxy-inverso-en-nginx","5.2.3. Configuramos el proxy inverso en nginx",[73,9309,9310],{"className":75,"code":7907,"language":77,"meta":78,"style":78},[80,9311,9312],{"__ignoreMap":78},[83,9313,9314,9316,9318],{"class":85,"line":86},[83,9315,3070],{"class":89},[83,9317,7274],{"class":93},[83,9319,7776],{"class":93},[11,9321,8129],{},[73,9323,9325],{"className":7802,"code":9324,"language":7804,"meta":78,"style":78},"location \u002F {\n     proxy_set_header X-Forwarded-Host $host;\n     proxy_set_header X-Forwarded-Server $host;\n     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n     proxy_pass http:\u002F\u002F127.0.0.1:8090;\n     client_max_body_size 100M;\n}\n",[80,9326,9327,9335,9347,9359,9371,9380,9388],{"__ignoreMap":78},[83,9328,9329,9331,9333],{"class":85,"line":86},[83,9330,9001],{"class":3402},[83,9332,9004],{"class":89},[83,9334,9007],{"class":2742},[83,9336,9337,9339,9341,9343,9345],{"class":85,"line":260},[83,9338,9012],{"class":2171},[83,9340,9015],{"class":2742},[83,9342,9018],{"class":175},[83,9344,9021],{"class":2794},[83,9346,3974],{"class":175},[83,9348,9349,9351,9353,9355,9357],{"class":85,"line":280},[83,9350,9012],{"class":2171},[83,9352,9030],{"class":2742},[83,9354,9018],{"class":175},[83,9356,9021],{"class":2794},[83,9358,3974],{"class":175},[83,9360,9361,9363,9365,9367,9369],{"class":85,"line":403},[83,9362,9012],{"class":2171},[83,9364,9043],{"class":2742},[83,9366,9018],{"class":175},[83,9368,9048],{"class":2794},[83,9370,3974],{"class":175},[83,9372,9373,9375,9378],{"class":85,"line":646},[83,9374,9055],{"class":2171},[83,9376,9377],{"class":2742},"http:\u002F\u002F127.0.0.1:8090",[83,9379,3974],{"class":175},[83,9381,9382,9384,9386],{"class":85,"line":654},[83,9383,9065],{"class":2171},[83,9385,9068],{"class":339},[83,9387,3974],{"class":175},[83,9389,9390],{"class":85,"line":662},[83,9391,3929],{"class":2742},[7796,9393,9395],{"id":9394},"_524-reiniciamos-nginx","5.2.4. Reiniciamos nginx",[73,9397,9398],{"className":75,"code":8025,"language":77,"meta":78,"style":78},[80,9399,9400],{"__ignoreMap":78},[83,9401,9402,9404,9406,9408],{"class":85,"line":86},[83,9403,3070],{"class":89},[83,9405,6348],{"class":93},[83,9407,6195],{"class":93},[83,9409,8038],{"class":93},[7796,9411,9413],{"id":9412},"_525-iniciamos-el-programa","5.2.5. Iniciamos el programa",[73,9415,9417],{"className":75,"code":9416,"language":77,"meta":78,"style":78},"cd \u002Fopt\u002Fatlassian\u002Fconfluence\u002Fbin && \\\nsudo .\u002Fstartup.sh\n",[80,9418,9419,9430],{"__ignoreMap":78},[83,9420,9421,9423,9426,9428],{"class":85,"line":86},[83,9422,114],{"class":113},[83,9424,9425],{"class":93}," \u002Fopt\u002Fatlassian\u002Fconfluence\u002Fbin",[83,9427,176],{"class":175},[83,9429,372],{"class":165},[83,9431,9432,9434],{"class":85,"line":260},[83,9433,3070],{"class":89},[83,9435,9119],{"class":93},[11,9437,9122,9438,9442],{},[420,9439,9440],{"href":9440,"rel":9441},"https:\u002F\u002Fconfluence.midominio.com",[424],", complete la instalación en modo producción, conecte la base de datos PostgreSQL confluence, y configure las credenciales SMTP si están disponibles.",[5251,9444,9446],{"id":9445},"_53-instalación-de-bitbucket-server","5.3. Instalación de Bitbucket Server",[7796,9448,9450],{"id":9449},"_531-ejecutar-instalador","5.3.1. Ejecutar instalador",[11,9452,9453],{},"Seleccione la instalación estándar y acepte la ejecución al completar.",[73,9455,9457],{"className":75,"code":9456,"language":77,"meta":78,"style":78},"sudo .\u002Fatlassian-bitbucket-version-x64.bin\n",[80,9458,9459],{"__ignoreMap":78},[83,9460,9461,9463],{"class":85,"line":86},[83,9462,3070],{"class":89},[83,9464,9465],{"class":93}," .\u002Fatlassian-bitbucket-version-x64.bin\n",[7796,9467,9469],{"id":9468},"_532-configurar-security-group","5.3.2. Configurar security group",[11,9471,9472],{},"Configure el security group de la instancia, especialmente las reglas de entrada como se muestra en la documentación.",[7796,9474,9476],{"id":9475},"_533-configurar-bbdd","5.3.3. Configurar BBDD",[11,9478,9479,9480,9484],{},"Acceda vía ",[420,9481,9482],{"href":9482,"rel":9483},"http:\u002F\u002Fxxx.xxx.xxx.xxx:7990",[424],", configure la base de datos, luego detenga el programa.",[73,9486,9488],{"className":75,"code":9487,"language":77,"meta":78,"style":78},"cd \u002Fopt\u002Fatlassian\u002Fbitbucket\u002F6.4.1\u002Fbin && \\\nsudo .\u002Fstop-bitbucket.sh\n",[80,9489,9490,9501],{"__ignoreMap":78},[83,9491,9492,9494,9497,9499],{"class":85,"line":86},[83,9493,114],{"class":113},[83,9495,9496],{"class":93}," \u002Fopt\u002Fatlassian\u002Fbitbucket\u002F6.4.1\u002Fbin",[83,9498,176],{"class":175},[83,9500,372],{"class":165},[83,9502,9503,9505],{"class":85,"line":260},[83,9504,3070],{"class":89},[83,9506,9507],{"class":93}," .\u002Fstop-bitbucket.sh\n",[7796,9509,9511],{"id":9510},"_534-configurar-archivo-properties","5.3.4. Configurar archivo properties",[73,9513,9515],{"className":75,"code":9514,"language":77,"meta":78,"style":78},"sudo vim \u002Fvar\u002Fatlassian\u002Fapplication-data\u002Fbitbucket\u002Fshared\u002Fbitbucket.properties\n",[80,9516,9517],{"__ignoreMap":78},[83,9518,9519,9521,9523],{"class":85,"line":86},[83,9520,3070],{"class":89},[83,9522,7274],{"class":93},[83,9524,9525],{"class":93}," \u002Fvar\u002Fatlassian\u002Fapplication-data\u002Fbitbucket\u002Fshared\u002Fbitbucket.properties\n",[11,9527,8129],{},[73,9529,9533],{"className":9530,"code":9531,"language":9532,"meta":78,"style":78},"language-properties shiki shiki-themes vitesse-dark","server.secure=true\nserver.scheme=https\nserver.proxy-port=443\nserver.proxy-name=bitbucket.midominio.com\n","properties",[80,9534,9535,9545,9555,9565],{"__ignoreMap":78},[83,9536,9537,9540,9542],{"class":85,"line":86},[83,9538,9539],{"class":2171},"server.secure",[83,9541,5981],{"class":175},[83,9543,9544],{"class":2742},"true\n",[83,9546,9547,9550,9552],{"class":85,"line":260},[83,9548,9549],{"class":2171},"server.scheme",[83,9551,5981],{"class":175},[83,9553,9554],{"class":2742},"https\n",[83,9556,9557,9560,9562],{"class":85,"line":280},[83,9558,9559],{"class":2171},"server.proxy-port",[83,9561,5981],{"class":175},[83,9563,9564],{"class":2742},"443\n",[83,9566,9567,9570,9572],{"class":85,"line":403},[83,9568,9569],{"class":2171},"server.proxy-name",[83,9571,5981],{"class":175},[83,9573,9574],{"class":2742},"bitbucket.midominio.com\n",[7796,9576,9578],{"id":9577},"_535-configuramos-el-proxy-inverso-en-nginx","5.3.5. Configuramos el proxy inverso en nginx",[73,9580,9581],{"className":75,"code":7849,"language":77,"meta":78,"style":78},[80,9582,9583],{"__ignoreMap":78},[83,9584,9585,9587,9589],{"class":85,"line":86},[83,9586,3070],{"class":89},[83,9588,7274],{"class":93},[83,9590,7860],{"class":93},[11,9592,8129],{},[73,9594,9596],{"className":7802,"code":9595,"language":7804,"meta":78,"style":78},"location \u002F {\n     proxy_set_header X-Forwarded-Host $host;\n     proxy_set_header X-Forwarded-Server $host;\n     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n     proxy_pass http:\u002F\u002F127.0.0.1:7990;\n     client_max_body_size 100M;\n}\n",[80,9597,9598,9606,9618,9630,9642,9651,9659],{"__ignoreMap":78},[83,9599,9600,9602,9604],{"class":85,"line":86},[83,9601,9001],{"class":3402},[83,9603,9004],{"class":89},[83,9605,9007],{"class":2742},[83,9607,9608,9610,9612,9614,9616],{"class":85,"line":260},[83,9609,9012],{"class":2171},[83,9611,9015],{"class":2742},[83,9613,9018],{"class":175},[83,9615,9021],{"class":2794},[83,9617,3974],{"class":175},[83,9619,9620,9622,9624,9626,9628],{"class":85,"line":280},[83,9621,9012],{"class":2171},[83,9623,9030],{"class":2742},[83,9625,9018],{"class":175},[83,9627,9021],{"class":2794},[83,9629,3974],{"class":175},[83,9631,9632,9634,9636,9638,9640],{"class":85,"line":403},[83,9633,9012],{"class":2171},[83,9635,9043],{"class":2742},[83,9637,9018],{"class":175},[83,9639,9048],{"class":2794},[83,9641,3974],{"class":175},[83,9643,9644,9646,9649],{"class":85,"line":646},[83,9645,9055],{"class":2171},[83,9647,9648],{"class":2742},"http:\u002F\u002F127.0.0.1:7990",[83,9650,3974],{"class":175},[83,9652,9653,9655,9657],{"class":85,"line":654},[83,9654,9065],{"class":2171},[83,9656,9068],{"class":339},[83,9658,3974],{"class":175},[83,9660,9661],{"class":85,"line":662},[83,9662,3929],{"class":2742},[7796,9664,9666],{"id":9665},"_536-reiniciamos-nginx","5.3.6. Reiniciamos nginx",[73,9668,9669],{"className":75,"code":8025,"language":77,"meta":78,"style":78},[80,9670,9671],{"__ignoreMap":78},[83,9672,9673,9675,9677,9679],{"class":85,"line":86},[83,9674,3070],{"class":89},[83,9676,6348],{"class":93},[83,9678,6195],{"class":93},[83,9680,8038],{"class":93},[7796,9682,9684],{"id":9683},"_537-iniciamos-el-programa","5.3.7. Iniciamos el programa",[73,9686,9688],{"className":75,"code":9687,"language":77,"meta":78,"style":78},"cd \u002Fopt\u002Fatlassian\u002Fbitbucket\u002F6.4.1\u002Fbin && \\\nsudo .\u002Fstart-bitbucket.sh\n",[80,9689,9690,9700],{"__ignoreMap":78},[83,9691,9692,9694,9696,9698],{"class":85,"line":86},[83,9693,114],{"class":113},[83,9695,9496],{"class":93},[83,9697,176],{"class":175},[83,9699,372],{"class":165},[83,9701,9702,9704],{"class":85,"line":260},[83,9703,3070],{"class":89},[83,9705,9706],{"class":93}," .\u002Fstart-bitbucket.sh\n",[11,9708,9122,9709],{},[420,9710,9711],{"href":9711,"rel":9712},"https:\u002F\u002Fbitbucket.midominio.com",[424],[9714,9715],"hr",{},[11,9717,9718],{},"Espero puedan implementarlo en la práctica...",[427,9720,9721],{},"html pre.shiki code .sCK9x, html code.shiki .sCK9x{--shiki-default:#80A665}html pre.shiki code .s7rlk, html code.shiki .s7rlk{--shiki-default:#C98A7D}html pre.shiki code .s_pn2, html code.shiki .s_pn2{--shiki-default:#666666}html pre.shiki code .sXjYR, html code.shiki .sXjYR{--shiki-default:#C99076}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s_wWq, html code.shiki .s_wWq{--shiki-default:#CB7676}html pre.shiki code .sNJcY, html code.shiki .sNJcY{--shiki-default:#C98A7D77}html pre.shiki code .sm68I, html code.shiki .sm68I{--shiki-default:#B8A965}html pre.shiki code .sNpkn, html code.shiki .sNpkn{--shiki-default:#DBD7CAEE}html pre.shiki code .s3QIE, html code.shiki .s3QIE{--shiki-default:#4D9375}html pre.shiki code .sxA9i, html code.shiki .sxA9i{--shiki-default:#4C9A91}html pre.shiki code .st-jp, html code.shiki .st-jp{--shiki-default:#BD976A}",{"title":78,"searchDepth":260,"depth":260,"links":9723},[9724,9725,9726],{"id":7466,"depth":260,"text":7467},{"id":7473,"depth":260,"text":7474},{"id":7508,"depth":260,"text":7509,"children":9727},[9728,9729,9730,9731,9732],{"id":7512,"depth":280,"text":7513},{"id":7556,"depth":280,"text":7557},{"id":8149,"depth":280,"text":8150},{"id":8624,"depth":280,"text":8625},{"id":8773,"depth":280,"text":8774},"2020-04-10","Guía completa para aprovisionar Ubuntu Server 18.04 con los productos Atlassian Jira, Bitbucket y Confluence usando PostgreSQL, proxy reverso Nginx y certificados SSL.","\u002Fimg\u002Fposts\u002Fblog\u002Faprovisionar-ubuntu-server-jira-bitbucket-confluence\u002Fatlassian.png",{},"\u002Fblog\u002Faprovisionar-ubuntu-server-jira-bitbucket-confluence",{"title":7461,"description":9734},"blog\u002Faprovisionar-ubuntu-server-jira-bitbucket-confluence",[9741,9742,9743,9744,9745,9746,9747,3031,5576,9748,9749,3060],"Atlassian","Aws","Bitbucket Server","Certbot","Confluence","Ec2","Jira Software","Proxy Reverso","Ssl","WONb-CxGuqk05akJ77kN922a8vNcdY9wz3UXvb5ZbSg",{"id":9752,"title":9753,"body":9754,"date":10461,"description":10462,"draft":438,"extension":439,"image":10463,"lang":441,"meta":10464,"navigation":443,"path":10465,"seo":10466,"stem":10467,"tags":10468,"__hash__":10469},"blog\u002Fblog\u002Fejecucion-de-php-en-segundo-plano.md","Ejecución de PHP en Segundo Plano",{"type":8,"value":9755,"toc":10456},[9756,9759,9762,9766,9806,9810,9826,9830,10016,10019,10190,10193,10364,10367,10425,10428,10439,10442,10447,10450,10453],[11,9757,9758],{},"El día de hoy me tope con un problema poco común, necesitaba ejecutar varios cronjobs en forma paralela, pero luego recordé un comentario de un ex compañero de trabajo y me acordé que PHP no trabaja multihilos así como lo trabaja JAVA, pero investigando un poco, y haciendo unas pequeñas pruebas veo que si puede, se que no es procesamiento en paralelo pero funciona parecido.",[11,9760,9761],{},"Para poder ejecutar PHP en segundo plano solo es necesario redireccionar la respuesta a un archivo, así de esta manera no tenemos que esperar a la respuesta, veamos.",[18,9763,9765],{"id":9764},"_1-creamos-4-archivos","1. Creamos 4 archivos",[73,9767,9769],{"className":75,"code":9768,"language":77,"meta":78,"style":78},"touch \u002Froot\u002Ftest\u002Fcronjob.php\ntouch \u002Froot\u002Ftest\u002Fcall1.php\ntouch \u002Froot\u002Ftest\u002Fcall2.php\ntouch \u002Froot\u002Ftest\u002Fcall3.php\ntouch \u002Froot\u002Ftest\u002Ftext.txt\n",[80,9770,9771,9778,9785,9792,9799],{"__ignoreMap":78},[83,9772,9773,9775],{"class":85,"line":86},[83,9774,7706],{"class":89},[83,9776,9777],{"class":93}," \u002Froot\u002Ftest\u002Fcronjob.php\n",[83,9779,9780,9782],{"class":85,"line":260},[83,9781,7706],{"class":89},[83,9783,9784],{"class":93}," \u002Froot\u002Ftest\u002Fcall1.php\n",[83,9786,9787,9789],{"class":85,"line":280},[83,9788,7706],{"class":89},[83,9790,9791],{"class":93}," \u002Froot\u002Ftest\u002Fcall2.php\n",[83,9793,9794,9796],{"class":85,"line":403},[83,9795,7706],{"class":89},[83,9797,9798],{"class":93}," \u002Froot\u002Ftest\u002Fcall3.php\n",[83,9800,9801,9803],{"class":85,"line":646},[83,9802,7706],{"class":89},[83,9804,9805],{"class":93}," \u002Froot\u002Ftest\u002Ftext.txt\n",[18,9807,9809],{"id":9808},"_2-solo-para-asegurarnos-que-podemos-ejecutar-los-archivos-php-le-damos-permisos-de-ejecución","2. Solo para asegurarnos que podemos ejecutar los archivos php le damos permisos de ejecución",[73,9811,9813],{"className":75,"code":9812,"language":77,"meta":78,"style":78},"chmod -R +x \u002Froot\u002Ftest\n",[80,9814,9815],{"__ignoreMap":78},[83,9816,9817,9819,9821,9823],{"class":85,"line":86},[83,9818,406],{"class":89},[83,9820,251],{"class":165},[83,9822,4839],{"class":93},[83,9824,9825],{"class":93}," \u002Froot\u002Ftest\n",[18,9827,9829],{"id":9828},"_3-posteriormente-en-call1php-podemos-en-siguiente-script-php","3. Posteriormente en call1.php podemos en siguiente script PHP:",[73,9831,9833],{"className":3932,"code":9832,"language":3934,"meta":78,"style":78},"$inicio = microtime(true);\nsleep(10);\n\n$fin = microtime(true);\n$tiempo = $fin - $inicio;\n\n$texto = 'cron 1, tiempo de ejecucion ' . $tiempo . PHP_EOL;\n$fp = fopen(\"text.txt\",\"a\");\nfwrite($fp, $texto);\nfclose($fp);\n\necho $texto;\n",[80,9834,9835,9854,9865,9869,9886,9907,9911,9941,9972,9990,10001,10005],{"__ignoreMap":78},[83,9836,9837,9839,9842,9844,9847,9849,9851],{"class":85,"line":86},[83,9838,9018],{"class":175},[83,9840,9841],{"class":2794},"inicio",[83,9843,2798],{"class":175},[83,9845,9846],{"class":113}," microtime",[83,9848,3897],{"class":175},[83,9850,8952],{"class":2171},[83,9852,9853],{"class":175},");\n",[83,9855,9856,9859,9861,9863],{"class":85,"line":260},[83,9857,9858],{"class":113},"sleep",[83,9860,3897],{"class":175},[83,9862,8842],{"class":339},[83,9864,9853],{"class":175},[83,9866,9867],{"class":85,"line":280},[83,9868,628],{"emptyLinePlaceholder":443},[83,9870,9871,9873,9876,9878,9880,9882,9884],{"class":85,"line":403},[83,9872,9018],{"class":175},[83,9874,9875],{"class":2794},"fin",[83,9877,2798],{"class":175},[83,9879,9846],{"class":113},[83,9881,3897],{"class":175},[83,9883,8952],{"class":2171},[83,9885,9853],{"class":175},[83,9887,9888,9890,9893,9895,9897,9899,9901,9903,9905],{"class":85,"line":646},[83,9889,9018],{"class":175},[83,9891,9892],{"class":2794},"tiempo",[83,9894,2798],{"class":175},[83,9896,3953],{"class":175},[83,9898,9875],{"class":2794},[83,9900,3206],{"class":3402},[83,9902,3953],{"class":175},[83,9904,9841],{"class":2794},[83,9906,3974],{"class":175},[83,9908,9909],{"class":85,"line":654},[83,9910,628],{"emptyLinePlaceholder":443},[83,9912,9913,9915,9918,9920,9922,9925,9927,9930,9932,9934,9936,9939],{"class":85,"line":662},[83,9914,9018],{"class":175},[83,9916,9917],{"class":2794},"texto",[83,9919,2798],{"class":175},[83,9921,3918],{"class":616},[83,9923,9924],{"class":93},"cron 1, tiempo de ejecucion ",[83,9926,3971],{"class":616},[83,9928,9929],{"class":3402}," .",[83,9931,3953],{"class":175},[83,9933,9892],{"class":2794},[83,9935,9929],{"class":3402},[83,9937,9938],{"class":165}," PHP_EOL",[83,9940,3974],{"class":175},[83,9942,9943,9945,9948,9950,9953,9955,9957,9960,9962,9964,9966,9968,9970],{"class":85,"line":672},[83,9944,9018],{"class":175},[83,9946,9947],{"class":2794},"fp",[83,9949,2798],{"class":175},[83,9951,9952],{"class":113}," fopen",[83,9954,3897],{"class":175},[83,9956,4824],{"class":616},[83,9958,9959],{"class":93},"text.txt",[83,9961,4824],{"class":616},[83,9963,3568],{"class":175},[83,9965,4824],{"class":616},[83,9967,420],{"class":93},[83,9969,4824],{"class":616},[83,9971,9853],{"class":175},[83,9973,9974,9977,9980,9982,9984,9986,9988],{"class":85,"line":680},[83,9975,9976],{"class":113},"fwrite",[83,9978,9979],{"class":175},"($",[83,9981,9947],{"class":2794},[83,9983,3568],{"class":175},[83,9985,3953],{"class":175},[83,9987,9917],{"class":2794},[83,9989,9853],{"class":175},[83,9991,9992,9995,9997,9999],{"class":85,"line":691},[83,9993,9994],{"class":113},"fclose",[83,9996,9979],{"class":175},[83,9998,9947],{"class":2794},[83,10000,9853],{"class":175},[83,10002,10003],{"class":85,"line":696},[83,10004,628],{"emptyLinePlaceholder":443},[83,10006,10007,10010,10012,10014],{"class":85,"line":704},[83,10008,10009],{"class":113},"echo",[83,10011,3953],{"class":175},[83,10013,9917],{"class":2794},[83,10015,3974],{"class":175},[11,10017,10018],{},"en call2.php:",[73,10020,10022],{"className":3932,"code":10021,"language":3934,"meta":78,"style":78},"$inicio = microtime(true);\nsleep(2);\n\n$fin = microtime(true);\n$tiempo = $fin - $inicio;\n\n$texto = 'cron 2, tiempo de ejecucion ' . $tiempo . PHP_EOL;\n$fp = fopen(\"text.txt\",\"a\");\nfwrite($fp, $texto);\nfclose($fp);\n\necho $texto;\n",[80,10023,10024,10040,10051,10055,10071,10091,10095,10122,10150,10166,10176,10180],{"__ignoreMap":78},[83,10025,10026,10028,10030,10032,10034,10036,10038],{"class":85,"line":86},[83,10027,9018],{"class":175},[83,10029,9841],{"class":2794},[83,10031,2798],{"class":175},[83,10033,9846],{"class":113},[83,10035,3897],{"class":175},[83,10037,8952],{"class":2171},[83,10039,9853],{"class":175},[83,10041,10042,10044,10046,10049],{"class":85,"line":260},[83,10043,9858],{"class":113},[83,10045,3897],{"class":175},[83,10047,10048],{"class":339},"2",[83,10050,9853],{"class":175},[83,10052,10053],{"class":85,"line":280},[83,10054,628],{"emptyLinePlaceholder":443},[83,10056,10057,10059,10061,10063,10065,10067,10069],{"class":85,"line":403},[83,10058,9018],{"class":175},[83,10060,9875],{"class":2794},[83,10062,2798],{"class":175},[83,10064,9846],{"class":113},[83,10066,3897],{"class":175},[83,10068,8952],{"class":2171},[83,10070,9853],{"class":175},[83,10072,10073,10075,10077,10079,10081,10083,10085,10087,10089],{"class":85,"line":646},[83,10074,9018],{"class":175},[83,10076,9892],{"class":2794},[83,10078,2798],{"class":175},[83,10080,3953],{"class":175},[83,10082,9875],{"class":2794},[83,10084,3206],{"class":3402},[83,10086,3953],{"class":175},[83,10088,9841],{"class":2794},[83,10090,3974],{"class":175},[83,10092,10093],{"class":85,"line":654},[83,10094,628],{"emptyLinePlaceholder":443},[83,10096,10097,10099,10101,10103,10105,10108,10110,10112,10114,10116,10118,10120],{"class":85,"line":662},[83,10098,9018],{"class":175},[83,10100,9917],{"class":2794},[83,10102,2798],{"class":175},[83,10104,3918],{"class":616},[83,10106,10107],{"class":93},"cron 2, tiempo de ejecucion ",[83,10109,3971],{"class":616},[83,10111,9929],{"class":3402},[83,10113,3953],{"class":175},[83,10115,9892],{"class":2794},[83,10117,9929],{"class":3402},[83,10119,9938],{"class":165},[83,10121,3974],{"class":175},[83,10123,10124,10126,10128,10130,10132,10134,10136,10138,10140,10142,10144,10146,10148],{"class":85,"line":672},[83,10125,9018],{"class":175},[83,10127,9947],{"class":2794},[83,10129,2798],{"class":175},[83,10131,9952],{"class":113},[83,10133,3897],{"class":175},[83,10135,4824],{"class":616},[83,10137,9959],{"class":93},[83,10139,4824],{"class":616},[83,10141,3568],{"class":175},[83,10143,4824],{"class":616},[83,10145,420],{"class":93},[83,10147,4824],{"class":616},[83,10149,9853],{"class":175},[83,10151,10152,10154,10156,10158,10160,10162,10164],{"class":85,"line":680},[83,10153,9976],{"class":113},[83,10155,9979],{"class":175},[83,10157,9947],{"class":2794},[83,10159,3568],{"class":175},[83,10161,3953],{"class":175},[83,10163,9917],{"class":2794},[83,10165,9853],{"class":175},[83,10167,10168,10170,10172,10174],{"class":85,"line":691},[83,10169,9994],{"class":113},[83,10171,9979],{"class":175},[83,10173,9947],{"class":2794},[83,10175,9853],{"class":175},[83,10177,10178],{"class":85,"line":696},[83,10179,628],{"emptyLinePlaceholder":443},[83,10181,10182,10184,10186,10188],{"class":85,"line":704},[83,10183,10009],{"class":113},[83,10185,3953],{"class":175},[83,10187,9917],{"class":2794},[83,10189,3974],{"class":175},[11,10191,10192],{},"en call3.php:",[73,10194,10196],{"className":3932,"code":10195,"language":3934,"meta":78,"style":78},"$inicio = microtime(true);\nsleep(5);\n\n$fin = microtime(true);\n$tiempo = $fin - $inicio;\n\n$texto = 'cron 3, tiempo de ejecucion ' . $tiempo . PHP_EOL;\n$fp = fopen(\"text.txt\",\"a\");\nfwrite($fp, $texto);\nfclose($fp);\n\necho $texto;\n",[80,10197,10198,10214,10225,10229,10245,10265,10269,10296,10324,10340,10350,10354],{"__ignoreMap":78},[83,10199,10200,10202,10204,10206,10208,10210,10212],{"class":85,"line":86},[83,10201,9018],{"class":175},[83,10203,9841],{"class":2794},[83,10205,2798],{"class":175},[83,10207,9846],{"class":113},[83,10209,3897],{"class":175},[83,10211,8952],{"class":2171},[83,10213,9853],{"class":175},[83,10215,10216,10218,10220,10223],{"class":85,"line":260},[83,10217,9858],{"class":113},[83,10219,3897],{"class":175},[83,10221,10222],{"class":339},"5",[83,10224,9853],{"class":175},[83,10226,10227],{"class":85,"line":280},[83,10228,628],{"emptyLinePlaceholder":443},[83,10230,10231,10233,10235,10237,10239,10241,10243],{"class":85,"line":403},[83,10232,9018],{"class":175},[83,10234,9875],{"class":2794},[83,10236,2798],{"class":175},[83,10238,9846],{"class":113},[83,10240,3897],{"class":175},[83,10242,8952],{"class":2171},[83,10244,9853],{"class":175},[83,10246,10247,10249,10251,10253,10255,10257,10259,10261,10263],{"class":85,"line":646},[83,10248,9018],{"class":175},[83,10250,9892],{"class":2794},[83,10252,2798],{"class":175},[83,10254,3953],{"class":175},[83,10256,9875],{"class":2794},[83,10258,3206],{"class":3402},[83,10260,3953],{"class":175},[83,10262,9841],{"class":2794},[83,10264,3974],{"class":175},[83,10266,10267],{"class":85,"line":654},[83,10268,628],{"emptyLinePlaceholder":443},[83,10270,10271,10273,10275,10277,10279,10282,10284,10286,10288,10290,10292,10294],{"class":85,"line":662},[83,10272,9018],{"class":175},[83,10274,9917],{"class":2794},[83,10276,2798],{"class":175},[83,10278,3918],{"class":616},[83,10280,10281],{"class":93},"cron 3, tiempo de ejecucion ",[83,10283,3971],{"class":616},[83,10285,9929],{"class":3402},[83,10287,3953],{"class":175},[83,10289,9892],{"class":2794},[83,10291,9929],{"class":3402},[83,10293,9938],{"class":165},[83,10295,3974],{"class":175},[83,10297,10298,10300,10302,10304,10306,10308,10310,10312,10314,10316,10318,10320,10322],{"class":85,"line":672},[83,10299,9018],{"class":175},[83,10301,9947],{"class":2794},[83,10303,2798],{"class":175},[83,10305,9952],{"class":113},[83,10307,3897],{"class":175},[83,10309,4824],{"class":616},[83,10311,9959],{"class":93},[83,10313,4824],{"class":616},[83,10315,3568],{"class":175},[83,10317,4824],{"class":616},[83,10319,420],{"class":93},[83,10321,4824],{"class":616},[83,10323,9853],{"class":175},[83,10325,10326,10328,10330,10332,10334,10336,10338],{"class":85,"line":680},[83,10327,9976],{"class":113},[83,10329,9979],{"class":175},[83,10331,9947],{"class":2794},[83,10333,3568],{"class":175},[83,10335,3953],{"class":175},[83,10337,9917],{"class":2794},[83,10339,9853],{"class":175},[83,10341,10342,10344,10346,10348],{"class":85,"line":691},[83,10343,9994],{"class":113},[83,10345,9979],{"class":175},[83,10347,9947],{"class":2794},[83,10349,9853],{"class":175},[83,10351,10352],{"class":85,"line":696},[83,10353,628],{"emptyLinePlaceholder":443},[83,10355,10356,10358,10360,10362],{"class":85,"line":704},[83,10357,10009],{"class":113},[83,10359,3953],{"class":175},[83,10361,9917],{"class":2794},[83,10363,3974],{"class":175},[11,10365,10366],{},"y en cronjob.php",[73,10368,10370],{"className":3932,"code":10369,"language":3934,"meta":78,"style":78},"`php \u002Froot\u002Ftest\u002Fcall1.php > \u002Fdev\u002Fnull &`;\n`php \u002Froot\u002Ftest\u002Fcall2.php > \u002Fdev\u002Fnull &`;\n`php \u002Froot\u002Ftest\u002Fcall3.php > \u002Fdev\u002Fnull &`;\n\n\u002F\u002Fecho exec('php \u002Froot\u002Ftest\u002Fcall1.php > \u002Fdev\u002Fnull &');\n\u002F\u002Fecho exec('php \u002Froot\u002Ftest\u002Fcall2.php > \u002Fdev\u002Fnull &');\n\u002F\u002Fecho exec('php \u002Froot\u002Ftest\u002Fcall3.php > \u002Fdev\u002Fnull &');\n",[80,10371,10372,10384,10395,10406,10410,10415,10420],{"__ignoreMap":78},[83,10373,10374,10377,10380,10382],{"class":85,"line":86},[83,10375,10376],{"class":616},"`",[83,10378,10379],{"class":93},"php \u002Froot\u002Ftest\u002Fcall1.php > \u002Fdev\u002Fnull &",[83,10381,10376],{"class":616},[83,10383,3974],{"class":175},[83,10385,10386,10388,10391,10393],{"class":85,"line":260},[83,10387,10376],{"class":616},[83,10389,10390],{"class":93},"php \u002Froot\u002Ftest\u002Fcall2.php > \u002Fdev\u002Fnull &",[83,10392,10376],{"class":616},[83,10394,3974],{"class":175},[83,10396,10397,10399,10402,10404],{"class":85,"line":280},[83,10398,10376],{"class":616},[83,10400,10401],{"class":93},"php \u002Froot\u002Ftest\u002Fcall3.php > \u002Fdev\u002Fnull &",[83,10403,10376],{"class":616},[83,10405,3974],{"class":175},[83,10407,10408],{"class":85,"line":403},[83,10409,628],{"emptyLinePlaceholder":443},[83,10411,10412],{"class":85,"line":646},[83,10413,10414],{"class":977},"\u002F\u002Fecho exec('php \u002Froot\u002Ftest\u002Fcall1.php > \u002Fdev\u002Fnull &');\n",[83,10416,10417],{"class":85,"line":654},[83,10418,10419],{"class":977},"\u002F\u002Fecho exec('php \u002Froot\u002Ftest\u002Fcall2.php > \u002Fdev\u002Fnull &');\n",[83,10421,10422],{"class":85,"line":662},[83,10423,10424],{"class":977},"\u002F\u002Fecho exec('php \u002Froot\u002Ftest\u002Fcall3.php > \u002Fdev\u002Fnull &');\n",[11,10426,10427],{},"El archivo tex.txt inicialmente estará vacío, bien explicamos lo que queremos hacer, al ejecutar el script cronjob.php:",[73,10429,10431],{"className":75,"code":10430,"language":77,"meta":78,"style":78},"php \u002Froot\u002Ftest\u002Fcronjob.php\n",[80,10432,10433],{"__ignoreMap":78},[83,10434,10435,10437],{"class":85,"line":86},[83,10436,3934],{"class":89},[83,10438,9777],{"class":93},[11,10440,10441],{},"Estamos haciendo 3 llamadas (call1.php, call2.php y call3.php en ese orden); en call1.php hemos puesto un retardo de 10 segundos, en call2.php 2 segundos y en call3.php un retardo de 5 segundos; al final de cada llamada, agregamos al final del archivo text.txt el tiempo de duración y que llamada ha sido y obtenemos el siguiente resultado:",[11,10443,10444],{},[477,10445],{"alt":78,"src":10446},"\u002Fimg\u002Fposts\u002Fblog\u002Fejecucion-de-php-en-segundo-plano\u002Fcron.PNG",[11,10448,10449],{},"Bien no sabía si llamarlo procesamiento en paralelo, multihilos, así que solo me atiné a nombrarlo en base a la documentación de PHP, ejecución de PHP en segundo plano.",[11,10451,10452],{},"Dale like para que siga compartiendo más artículos de este tipo por si te interesa.",[427,10454,10455],{},"html pre.shiki code .sCK9x, html code.shiki .sCK9x{--shiki-default:#80A665}html pre.shiki code .s7rlk, html code.shiki .s7rlk{--shiki-default:#C98A7D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sXjYR, html code.shiki .sXjYR{--shiki-default:#C99076}html pre.shiki code .s_pn2, html code.shiki .s_pn2{--shiki-default:#666666}html pre.shiki code .st-jp, html code.shiki .st-jp{--shiki-default:#BD976A}html pre.shiki code .sm68I, html code.shiki .sm68I{--shiki-default:#B8A965}html pre.shiki code .s3QIE, html code.shiki .s3QIE{--shiki-default:#4D9375}html pre.shiki code .sxA9i, html code.shiki .sxA9i{--shiki-default:#4C9A91}html pre.shiki code .s_wWq, html code.shiki .s_wWq{--shiki-default:#CB7676}html pre.shiki code .sNJcY, html code.shiki .sNJcY{--shiki-default:#C98A7D77}html pre.shiki code .sux-A, html code.shiki .sux-A{--shiki-default:#758575DD}",{"title":78,"searchDepth":260,"depth":260,"links":10457},[10458,10459,10460],{"id":9764,"depth":260,"text":9765},{"id":9808,"depth":260,"text":9809},{"id":9828,"depth":260,"text":9829},"2019-02-13","El día de hoy me tope con un problema poco común, necesitaba ejecutar varios cronjobs en forma paralela.","\u002Fimg\u002Fposts\u002Fblog\u002Fejecucion-de-php-en-segundo-plano\u002Fimage.jpg",{},"\u002Fblog\u002Fejecucion-de-php-en-segundo-plano",{"title":9753,"description":10462},"blog\u002Fejecucion-de-php-en-segundo-plano",[451],"goK9ikWpAmmNo4Hw7XewOwkQiHYi6zDSUk8vcduXT3o",{"id":10471,"title":10472,"body":10473,"date":10555,"description":10477,"draft":438,"extension":439,"image":10556,"lang":441,"meta":10557,"navigation":443,"path":10558,"seo":10559,"stem":10560,"tags":10561,"__hash__":10563},"blog\u002Fblog\u002Finstalar-extension-curl-de-php-en-ubuntu.md","Como instalar la extensión curl de PHP en Ubuntu",{"type":8,"value":10474,"toc":10553},[10475,10478,10481,10484,10508,10511,10525,10528,10540,10550],[11,10476,10477],{},"Muchas veces nos encontramos con aplicaciones web que están escritas en PHP y requieren una extensión curl.",[11,10479,10480],{},"Las funciones de curl de PHP se pueden usar mediante el uso de libcurl, el cual fué creado por Daniel Sternberg.",[11,10482,10483],{},"Para instalar la biblioteca curl en su computadora Ubuntu, necesita tener listo LAMP (Linux, Apache, MySQL y PHP). Una vez que tenga lista la configuración de su servidor web, simplemente escriba el siguiente comando en la terminal para instalar la biblioteca Curl:",[73,10485,10487],{"className":75,"code":10486,"language":77,"meta":78,"style":78},"sudo apt-get install curl libcurl3 libcurl3-dev php5-curl\n",[80,10488,10489],{"__ignoreMap":78},[83,10490,10491,10493,10495,10497,10499,10502,10505],{"class":85,"line":86},[83,10492,3070],{"class":89},[83,10494,3073],{"class":93},[83,10496,3076],{"class":93},[83,10498,4578],{"class":93},[83,10500,10501],{"class":93}," libcurl3",[83,10503,10504],{"class":93}," libcurl3-dev",[83,10506,10507],{"class":93}," php5-curl\n",[11,10509,10510],{},"Después de la instalación reinicie su servidor web apache.",[73,10512,10514],{"className":75,"code":10513,"language":77,"meta":78,"style":78},"sudo \u002Fetc\u002Finit.d\u002Fapache2 restart\n",[80,10515,10516],{"__ignoreMap":78},[83,10517,10518,10520,10523],{"class":85,"line":86},[83,10519,3070],{"class":89},[83,10521,10522],{"class":93}," \u002Fetc\u002Finit.d\u002Fapache2",[83,10524,8038],{"class":93},[11,10526,10527],{},"para poder ver los módulos instalados verifique con:",[73,10529,10531],{"className":75,"code":10530,"language":77,"meta":78,"style":78},"php -m\n",[80,10532,10533],{"__ignoreMap":78},[83,10534,10535,10537],{"class":85,"line":86},[83,10536,3934],{"class":89},[83,10538,10539],{"class":165}," -m\n",[11,10541,10542,7434,10545],{},[521,10543,10544],{},"Fuente:",[420,10546,10549],{"href":10547,"rel":10548},"http:\u002F\u002Fphp.net\u002Fmanual\u002Fes\u002Fbook.curl.php",[424],"php curl",[427,10551,10552],{},"html pre.shiki code .sCK9x, html code.shiki .sCK9x{--shiki-default:#80A665}html pre.shiki code .s7rlk, html code.shiki .s7rlk{--shiki-default:#C98A7D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sXjYR, html code.shiki .sXjYR{--shiki-default:#C99076}",{"title":78,"searchDepth":260,"depth":260,"links":10554},[],"2018-08-18","\u002Fimg\u002Fposts\u002Fblog\u002Finstalar-extension-curl-de-php-en-ubuntu\u002Fimage.png",{},"\u002Fblog\u002Finstalar-extension-curl-de-php-en-ubuntu",{"title":10472,"description":10477},"blog\u002Finstalar-extension-curl-de-php-en-ubuntu",[10562,451],"Curl","gky3JMfkBjix-LZVCaZmj4VR3c7UmajmgjNlWSLIlV0",{"id":10565,"title":10566,"body":10567,"date":10555,"description":10672,"draft":438,"extension":439,"image":10673,"lang":441,"meta":10674,"navigation":443,"path":10675,"seo":10676,"stem":10677,"tags":10678,"__hash__":10679},"blog\u002Fblog\u002Finstalar-sublime-text-en-ubuntu.md","Como instalar Sublime Text en Ubuntu 18.04 Bionic Beaver Linux",{"type":8,"value":10568,"toc":10669},[10569,10572,10575,10578,10582,10585,10626,10629,10645,10648,10657,10666],[11,10570,10571],{},"Sublime Text es descrito como \"un editor de código fuente ligero escrito en C++ y Python\". Originalmente desarrollado como una extensión de Vim, ha evolucionado hasta convertirse en su propio editor, manteniendo un modo de edición estilo vi llamado modo Vintage.",[11,10573,10574],{},"El software se puede descargar y evaluar sin costo alguno, aunque \"no es software libre ni de código abierto y se debe obtener una licencia para su uso continuado\". La versión de evaluación se mantiene completamente funcional sin caducidad.",[11,10576,10577],{},"Actualmente en su versión 3, estos son los pasos de instalación para Ubuntu 18.04:",[18,10579,10581],{"id":10580},"instrucciones","Instrucciones",[11,10583,10584],{},"Primero, agrega la clave de firma y el repositorio de Sublime Text:",[73,10586,10588],{"className":75,"code":10587,"language":77,"meta":78,"style":78},"wget -qO - https:\u002F\u002Fdownload.sublimetext.com\u002Fsublimehq-pub.gpg\nsudo apt-key add -\nsudo apt-add-repository \"deb https:\u002F\u002Fdownload.sublimetext.com\u002F apt\u002Fstable\u002F\"\n",[80,10589,10590,10602,10612],{"__ignoreMap":78},[83,10591,10592,10594,10597,10599],{"class":85,"line":86},[83,10593,3197],{"class":89},[83,10595,10596],{"class":165}," -qO",[83,10598,3206],{"class":93},[83,10600,10601],{"class":93}," https:\u002F\u002Fdownload.sublimetext.com\u002Fsublimehq-pub.gpg\n",[83,10603,10604,10606,10608,10610],{"class":85,"line":260},[83,10605,3070],{"class":89},[83,10607,4610],{"class":93},[83,10609,4613],{"class":93},[83,10611,4616],{"class":93},[83,10613,10614,10616,10619,10621,10624],{"class":85,"line":280},[83,10615,3070],{"class":89},[83,10617,10618],{"class":93}," apt-add-repository",[83,10620,617],{"class":616},[83,10622,10623],{"class":93},"deb https:\u002F\u002Fdownload.sublimetext.com\u002F apt\u002Fstable\u002F",[83,10625,623],{"class":616},[11,10627,10628],{},"Una vez configurado el repositorio, instala Sublime Text:",[73,10630,10632],{"className":75,"code":10631,"language":77,"meta":78,"style":78},"sudo apt install sublime-text\n",[80,10633,10634],{"__ignoreMap":78},[83,10635,10636,10638,10640,10642],{"class":85,"line":86},[83,10637,3070],{"class":89},[83,10639,6824],{"class":93},[83,10641,3076],{"class":93},[83,10643,10644],{"class":93}," sublime-text\n",[11,10646,10647],{},"Para lanzar el editor desde la terminal:",[73,10649,10651],{"className":75,"code":10650,"language":77,"meta":78,"style":78},"subl\n",[80,10652,10653],{"__ignoreMap":78},[83,10654,10655],{"class":85,"line":86},[83,10656,10650],{"class":89},[11,10658,10659,7434,10661],{},[521,10660,10544],{},[420,10662,10665],{"href":10663,"rel":10664},"https:\u002F\u002Fwww.sublimetext.com\u002Fdocs\u002F3\u002Flinux_repositories.html",[424],"sublime text",[427,10667,10668],{},"html pre.shiki code .sCK9x, html code.shiki .sCK9x{--shiki-default:#80A665}html pre.shiki code .sXjYR, html code.shiki .sXjYR{--shiki-default:#C99076}html pre.shiki code .s7rlk, html code.shiki .s7rlk{--shiki-default:#C98A7D}html pre.shiki code .sNJcY, html code.shiki .sNJcY{--shiki-default:#C98A7D77}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":78,"searchDepth":260,"depth":260,"links":10670},[10671],{"id":10580,"depth":260,"text":10581},"Sublime Text es un editor de código fuente ligero escrito en C++ y Python que se puede evaluar gratuitamente pero requiere una licencia para su uso continuado.","\u002Fimg\u002Fposts\u002Fblog\u002Finstalar-sublime-text-en-ubuntu\u002F512px-Antu_sublime-text.svg.png",{},"\u002Fblog\u002Finstalar-sublime-text-en-ubuntu",{"title":10566,"description":10672},"blog\u002Finstalar-sublime-text-en-ubuntu",[3060,5191],"cgatE3RUO9kMvmjDbWkMx5RvpdWp3CAgl00SBDlyUcQ",{"id":10681,"title":10682,"body":10683,"date":10799,"description":10800,"draft":438,"extension":439,"image":10801,"lang":441,"meta":10802,"navigation":443,"path":10803,"seo":10804,"stem":10805,"tags":10806,"__hash__":10808},"blog\u002Fblog\u002Fapache-could-not-reliably-determine-servername.md","Apache: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName",{"type":8,"value":10684,"toc":10797},[10685,10688,10691,10694,10722,10725,10739,10742,10757,10760,10766,10769,10785,10788,10794],[11,10686,10687],{},"Para poder corregir este error típico en apache, tenemos que editar el archivo httpd.conf.",[11,10689,10690],{},"Bien empecemos:",[11,10692,10693],{},"Buscas el archivo de configuración en todo el servidor",[73,10695,10697],{"className":75,"code":10696,"language":77,"meta":78,"style":78},"cd \u002F\nsudo find .\u002F -name httpd.conf\n",[80,10698,10699,10706],{"__ignoreMap":78},[83,10700,10701,10703],{"class":85,"line":86},[83,10702,114],{"class":113},[83,10704,10705],{"class":93}," \u002F\n",[83,10707,10708,10710,10713,10716,10719],{"class":85,"line":260},[83,10709,3070],{"class":89},[83,10711,10712],{"class":93}," find",[83,10714,10715],{"class":93}," .\u002F",[83,10717,10718],{"class":165}," -name",[83,10720,10721],{"class":93}," httpd.conf\n",[11,10723,10724],{},"Una ves encontrado lo editas",[73,10726,10728],{"className":75,"code":10727,"language":77,"meta":78,"style":78},"sudo vim \u002Fetc\u002Fapache2\u002Fhttpd.conf\n",[80,10729,10730],{"__ignoreMap":78},[83,10731,10732,10734,10736],{"class":85,"line":86},[83,10733,3070],{"class":89},[83,10735,7274],{"class":93},[83,10737,10738],{"class":93}," \u002Fetc\u002Fapache2\u002Fhttpd.conf\n",[11,10740,10741],{},"Agregas lo siguiente",[73,10743,10747],{"className":10744,"code":10745,"language":10746,"meta":78,"style":78},"language-apache shiki shiki-themes vitesse-dark","ServerName localhost\n","apache",[80,10748,10749],{"__ignoreMap":78},[83,10750,10751,10754],{"class":85,"line":86},[83,10752,10753],{"class":2171},"ServerName",[83,10755,10756],{"class":2742}," localhost\n",[11,10758,10759],{},"sales guardando los cambios",[73,10761,10764],{"className":10762,"code":10763,"language":147},[145],"esc + :wq o también esc + :x, claro si estas usando el editor VIM\n",[80,10765,10763],{"__ignoreMap":78},[11,10767,10768],{},"reinicias apache",[73,10770,10772],{"className":75,"code":10771,"language":77,"meta":78,"style":78},"sudo service apache2 restart\n",[80,10773,10774],{"__ignoreMap":78},[83,10775,10776,10778,10780,10783],{"class":85,"line":86},[83,10777,3070],{"class":89},[83,10779,6348],{"class":93},[83,10781,10782],{"class":93}," apache2",[83,10784,8038],{"class":93},[11,10786,10787],{},"y wala!, espero que está guía haya resuelto tú problema.",[11,10789,10790],{},[477,10791],{"alt":10792,"src":10793},"Apache working image","\u002Fimg\u002Fposts\u002Fblog\u002Fapache-could-not-reliably-determine-servername\u002Fimage.png",[427,10795,10796],{},"html pre.shiki code .sm68I, html code.shiki .sm68I{--shiki-default:#B8A965}html pre.shiki code .s7rlk, html code.shiki .s7rlk{--shiki-default:#C98A7D}html pre.shiki code .sCK9x, html code.shiki .sCK9x{--shiki-default:#80A665}html pre.shiki code .sXjYR, html code.shiki .sXjYR{--shiki-default:#C99076}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s3QIE, html code.shiki .s3QIE{--shiki-default:#4D9375}html pre.shiki code .sNpkn, html code.shiki .sNpkn{--shiki-default:#DBD7CAEE}",{"title":78,"searchDepth":260,"depth":260,"links":10798},[],"2018-08-17","Tutorial para corregir el error de Apache sobre el nombre de dominio completo del servidor editando el archivo de configuración httpd.conf.","\u002Fimg\u002Fposts\u002Fblog\u002Fapache-could-not-reliably-determine-servername\u002Fimage-1.png",{},"\u002Fblog\u002Fapache-could-not-reliably-determine-servername",{"title":10682,"description":10800},"blog\u002Fapache-could-not-reliably-determine-servername",[10807,451],"Apache","jDSxgVrWdRCSWzCpRqJv3mOyQ3C1UJp-qY6j5yl0rrE",{"id":10810,"title":10811,"body":10812,"date":10958,"description":10959,"draft":438,"extension":439,"image":10960,"lang":441,"meta":10961,"navigation":443,"path":10962,"seo":10963,"stem":10964,"tags":10965,"__hash__":10969},"blog\u002Fblog\u002Finiciar-procesos-demonios-con-crontab.md","Iniciar procesos (demonios) con Crontab",{"type":8,"value":10813,"toc":10955},[10814,10817,10820,10824,10829,10841,10846,10858,10867,10900,10905,10940,10943,10952],[11,10815,10816],{},"En ocasiones al iniciar una distribución necesitamos que corran programas predeterminados como cron jobs, o ciertos demonios (procesos) como Apache, Nginx, MySQL u otros servicios.",[11,10818,10819],{},"En este ejemplo se explica cómo editar un crontab, para ello nos plantearemos el siguiente problema: ¿cómo iniciar demonios de Zend Server cada vez que inicio mi distro?",[18,10821,10823],{"id":10822},"solución","Solución",[3662,10825,10826],{},[26,10827,10828],{},"Cambiamos al usuario root",[73,10830,10832],{"className":75,"code":10831,"language":77,"meta":78,"style":78},"sudo -i\n",[80,10833,10834],{"__ignoreMap":78},[83,10835,10836,10838],{"class":85,"line":86},[83,10837,3070],{"class":89},[83,10839,10840],{"class":165}," -i\n",[3662,10842,10843],{"start":260},[26,10844,10845],{},"Editamos el crontab",[73,10847,10849],{"className":75,"code":10848,"language":77,"meta":78,"style":78},"crontab -e\n",[80,10850,10851],{"__ignoreMap":78},[83,10852,10853,10856],{"class":85,"line":86},[83,10854,10855],{"class":89},"crontab",[83,10857,8126],{"class":165},[3662,10859,10860],{"start":280},[26,10861,10862,10863,10866],{},"Ya que estamos en un editor VIM, presionamos la tecla ",[80,10864,10865],{},"i"," para editar y ponemos el siguiente script",[73,10868,10870],{"className":75,"code":10869,"language":77,"meta":78,"style":78},"@reboot  \u002Fusr\u002Flocal\u002Fzend\u002Fbin\u002Fzendctl.sh start; \u002Fusr\u002Flocal\u002Fzend\u002Fbin\u002Fzendctl.sh start-apache; \u002Fusr\u002Flocal\u002Fzend\u002Fbin\u002Fzendctl.sh start-mysql;\n",[80,10871,10872],{"__ignoreMap":78},[83,10873,10874,10877,10880,10882,10885,10888,10891,10893,10895,10898],{"class":85,"line":86},[83,10875,10876],{"class":89},"@reboot",[83,10878,10879],{"class":93},"  \u002Fusr\u002Flocal\u002Fzend\u002Fbin\u002Fzendctl.sh",[83,10881,4309],{"class":93},[83,10883,10884],{"class":175},";",[83,10886,10887],{"class":89}," \u002Fusr\u002Flocal\u002Fzend\u002Fbin\u002Fzendctl.sh",[83,10889,10890],{"class":93}," start-apache",[83,10892,10884],{"class":175},[83,10894,10887],{"class":89},[83,10896,10897],{"class":93}," start-mysql",[83,10899,3974],{"class":175},[3662,10901,10902],{"start":403},[26,10903,10904],{},"Guardamos y cerramos",[73,10906,10908],{"className":75,"code":10907,"language":77,"meta":78,"style":78},"tecla esc + :wq o también tecla esc + :x\n",[80,10909,10910],{"__ignoreMap":78},[83,10911,10912,10915,10918,10921,10924,10927,10930,10933,10935,10937],{"class":85,"line":86},[83,10913,10914],{"class":89},"tecla",[83,10916,10917],{"class":93}," esc",[83,10919,10920],{"class":93}," +",[83,10922,10923],{"class":93}," :wq",[83,10925,10926],{"class":93}," o",[83,10928,10929],{"class":93}," también",[83,10931,10932],{"class":93}," tecla",[83,10934,10917],{"class":93},[83,10936,10920],{"class":93},[83,10938,10939],{"class":93}," :x\n",[11,10941,10942],{},"Para comprobar que funciona correctamente reiniciamos la distro.",[73,10944,10946],{"className":75,"code":10945,"language":77,"meta":78,"style":78},"reboot\n",[80,10947,10948],{"__ignoreMap":78},[83,10949,10950],{"class":85,"line":86},[83,10951,10945],{"class":89},[427,10953,10954],{},"html pre.shiki code .sCK9x, html code.shiki .sCK9x{--shiki-default:#80A665}html pre.shiki code .sXjYR, html code.shiki .sXjYR{--shiki-default:#C99076}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s7rlk, html code.shiki .s7rlk{--shiki-default:#C98A7D}html pre.shiki code .s_pn2, html code.shiki .s_pn2{--shiki-default:#666666}",{"title":78,"searchDepth":260,"depth":260,"links":10956},[10957],{"id":10822,"depth":260,"text":10823},"2014-10-28","En ocasiones al iniciar una distribución necesitamos que corran programas predeterminados como cron jobs, o ciertos demonios (procesos).","\u002Fimg\u002Fposts\u002Fblog\u002Finiciar-procesos-demonios-con-crontab\u002Fimage.png",{},"\u002Fblog\u002Finiciar-procesos-demonios-con-crontab",{"title":10811,"description":10959},"blog\u002Finiciar-procesos-demonios-con-crontab",[10966,10967,10968],"Crontab","Php","Zend Framework","_E54L0Uxe2U4czJfzRtgIdlX1BcpQXpvgGTXDrhXdhA",{"id":10971,"title":10972,"body":10973,"date":10958,"description":11199,"draft":438,"extension":439,"image":11200,"lang":441,"meta":11201,"navigation":443,"path":11202,"seo":11203,"stem":11204,"tags":11205,"__hash__":11208},"blog\u002Fblog\u002Fzend-server-stop-start-restart-services.md","Zend Server stop | start | restart services",{"type":8,"value":10974,"toc":11192},[10975,10981,10986,10990,10993,11020,11023,11049,11052,11078,11083,11095,11099,11102,11122,11135,11139,11155,11159,11171,11175,11182,11189],[11,10976,10977,10978,2743],{},"Para administrar los distintos procesos de Zend Server, usa la secuencia de comandos de ",[80,10979,10980],{},"zendctl.sh",[11,10982,10983,10984,2743],{},"Nota: estas pruebas se realizaron sobre Yosemite OS X, y requieren privilegios de administrador o acceso ",[80,10985,3070],{},[18,10987,10989],{"id":10988},"comandos-básicos-de-zend-server","Comandos básicos de Zend Server",[11,10991,10992],{},"Para iniciar, detener o reiniciar todos los procesos de Zend Server:",[73,10994,10996],{"className":75,"code":10995,"language":77,"meta":78,"style":78},"sudo \u002Fusr\u002Flocal\u002Fzend\u002Fbin\u002Fzendctl.sh (stop|start|restart)\n",[80,10997,10998],{"__ignoreMap":78},[83,10999,11000,11002,11004,11007,11010,11013,11015,11018],{"class":85,"line":86},[83,11001,3070],{"class":89},[83,11003,10887],{"class":93},[83,11005,11006],{"class":2742}," (stop",[83,11008,11009],{"class":3402},"|",[83,11011,11012],{"class":89},"start",[83,11014,11009],{"class":3402},[83,11016,11017],{"class":89},"restart",[83,11019,3254],{"class":2742},[11,11021,11022],{},"Para iniciar, detener o reiniciar el servidor web Apache:",[73,11024,11026],{"className":75,"code":11025,"language":77,"meta":78,"style":78},"sudo \u002Fusr\u002Flocal\u002Fzend\u002Fbin\u002Fzendctl.sh (start-apache|stop-apache|restart-apache)\n",[80,11027,11028],{"__ignoreMap":78},[83,11029,11030,11032,11034,11037,11039,11042,11044,11047],{"class":85,"line":86},[83,11031,3070],{"class":89},[83,11033,10887],{"class":93},[83,11035,11036],{"class":2742}," (start-apache",[83,11038,11009],{"class":3402},[83,11040,11041],{"class":89},"stop-apache",[83,11043,11009],{"class":3402},[83,11045,11046],{"class":89},"restart-apache",[83,11048,3254],{"class":2742},[11,11050,11051],{},"Para iniciar, detener o reiniciar el motor MySQL:",[73,11053,11055],{"className":75,"code":11054,"language":77,"meta":78,"style":78},"sudo \u002Fusr\u002Flocal\u002Fzend\u002Fbin\u002Fzendctl.sh (start-mysql|stop-mysql|restart-mysql)\n",[80,11056,11057],{"__ignoreMap":78},[83,11058,11059,11061,11063,11066,11068,11071,11073,11076],{"class":85,"line":86},[83,11060,3070],{"class":89},[83,11062,10887],{"class":93},[83,11064,11065],{"class":2742}," (start-mysql",[83,11067,11009],{"class":3402},[83,11069,11070],{"class":89},"stop-mysql",[83,11072,11009],{"class":3402},[83,11074,11075],{"class":89},"restart-mysql",[83,11077,3254],{"class":2742},[11,11079,11080,11081,613],{},"Para ver todas las opciones disponibles al ejecutar ",[80,11082,10980],{},[73,11084,11086],{"className":75,"code":11085,"language":77,"meta":78,"style":78},"sudo \u002Fusr\u002Flocal\u002Fzend\u002Fbin\u002Fzendctl.sh\n",[80,11087,11088],{"__ignoreMap":78},[83,11089,11090,11092],{"class":85,"line":86},[83,11091,3070],{"class":89},[83,11093,11094],{"class":93}," \u002Fusr\u002Flocal\u002Fzend\u002Fbin\u002Fzendctl.sh\n",[18,11096,11098],{"id":11097},"interfaz-de-administración","Interfaz de administración",[11,11100,11101],{},"La interfaz de administración es accesible a través de:",[23,11103,11104,11110,11116],{},[26,11105,11106],{},[420,11107,11108],{"href":11108,"rel":11109},"https:\u002F\u002Flocalhost:10082",[424],[26,11111,11112],{},[420,11113,11114],{"href":11114,"rel":11115},"http:\u002F\u002Flocalhost:10081",[424],[26,11117,11118],{},[420,11119,11120],{"href":11120,"rel":11121},"http:\u002F\u002Flocalhost:10088",[424],[73,11123,11125],{"className":75,"code":11124,"language":77,"meta":78,"style":78},"less \u002Fusr\u002Flocal\u002Fzend\u002Fetc\u002Fphp.ini\n",[80,11126,11127],{"__ignoreMap":78},[83,11128,11129,11132],{"class":85,"line":86},[83,11130,11131],{"class":89},"less",[83,11133,11134],{"class":93}," \u002Fusr\u002Flocal\u002Fzend\u002Fetc\u002Fphp.ini\n",[18,11136,11138],{"id":11137},"ruta-de-instalación-de-zend-server","Ruta de instalación de Zend Server",[73,11140,11142],{"className":75,"code":11141,"language":77,"meta":78,"style":78},"ls -la \u002Fusr\u002Flocal\u002Fzend\n",[80,11143,11144],{"__ignoreMap":78},[83,11145,11146,11149,11152],{"class":85,"line":86},[83,11147,11148],{"class":89},"ls",[83,11150,11151],{"class":165}," -la",[83,11153,11154],{"class":93}," \u002Fusr\u002Flocal\u002Fzend\n",[18,11156,11158],{"id":11157},"ver-el-log-de-errores-de-php","Ver el log de errores de PHP",[73,11160,11162],{"className":75,"code":11161,"language":77,"meta":78,"style":78},"less \u002Fusr\u002Flocal\u002Fzend\u002Fvar\u002Flog\u002Fphp.log\n",[80,11163,11164],{"__ignoreMap":78},[83,11165,11166,11168],{"class":85,"line":86},[83,11167,11131],{"class":89},[83,11169,11170],{"class":93}," \u002Fusr\u002Flocal\u002Fzend\u002Fvar\u002Flog\u002Fphp.log\n",[18,11172,11174],{"id":11173},"enlaces-de-referencia-de-zend-framework-2","Enlaces de referencia de Zend Framework 2",[11,11176,11177],{},[420,11178,11181],{"href":11179,"rel":11180},"http:\u002F\u002Fframework.zend.com\u002Fmanual\u002F2.1\u002Fen\u002Fmodules\u002Fzendtool.introduction.html",[424],"Zend Framework Tool (ZFTool)",[11,11183,11184],{},[420,11185,11188],{"href":11186,"rel":11187},"http:\u002F\u002Fframework.zend.com\u002Fmanual\u002F2.0\u002Fen\u002Fuser-guide\u002Foverview.html",[424],"Introducción a Zend Framework 2",[427,11190,11191],{},"html pre.shiki code .sCK9x, html code.shiki .sCK9x{--shiki-default:#80A665}html pre.shiki code .s7rlk, html code.shiki .s7rlk{--shiki-default:#C98A7D}html pre.shiki code .sNpkn, html code.shiki .sNpkn{--shiki-default:#DBD7CAEE}html pre.shiki code .s_wWq, html code.shiki .s_wWq{--shiki-default:#CB7676}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sXjYR, html code.shiki .sXjYR{--shiki-default:#C99076}",{"title":78,"searchDepth":260,"depth":260,"links":11193},[11194,11195,11196,11197,11198],{"id":10988,"depth":260,"text":10989},{"id":11097,"depth":260,"text":11098},{"id":11137,"depth":260,"text":11138},{"id":11157,"depth":260,"text":11158},{"id":11173,"depth":260,"text":11174},"Guía para controlar los procesos de Zend Server usando los comandos de zendctl.sh para iniciar, detener y reiniciar servicios.","\u002Fimg\u002Fposts\u002Fblog\u002Fzend-server-stop-start-restart-services\u002Fzend.jpg",{},"\u002Fblog\u002Fzend-server-stop-start-restart-services",{"title":10972,"description":11199},"blog\u002Fzend-server-stop-start-restart-services",[10807,11206,10967,11207],"Mysql","Zend","3zKgwACWugblahH1ljHhPXWnJphb0H-p3U8XIz00IFs",{"id":11210,"title":11211,"body":11212,"date":11264,"description":11265,"draft":438,"extension":439,"image":11266,"lang":441,"meta":11267,"navigation":443,"path":11268,"seo":11269,"stem":11270,"tags":11271,"__hash__":11273},"blog\u002Fblog\u002Ferror-apache-htaccess-invalid-command-rewriteengine.md","Error en Apache .htaccess: Invalid command 'RewriteEngine'",{"type":8,"value":11213,"toc":11262},[11214,11217,11223,11226,11241,11244,11256,11259],[11,11215,11216],{},"Al explorar más a fondo la configuración de los servidores virtuales, es posible que te encuentres con este error en el log:",[73,11218,11221],{"className":11219,"code":11220,"language":147},[145],"Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not \nincluded in the server configuration\n",[80,11222,11220],{"__ignoreMap":78},[11,11224,11225],{},"Este error se resuelve habilitando el módulo rewrite de Apache. Para distribuciones Ubuntu, ingresa este comando en tu terminal:",[73,11227,11229],{"className":75,"code":11228,"language":77,"meta":78,"style":78},"sudo a2enmod rewrite\n",[80,11230,11231],{"__ignoreMap":78},[83,11232,11233,11235,11238],{"class":85,"line":86},[83,11234,3070],{"class":89},[83,11236,11237],{"class":93}," a2enmod",[83,11239,11240],{"class":93}," rewrite\n",[11,11242,11243],{},"Luego, reinicia el servidor web Apache:",[73,11245,11246],{"className":75,"code":10513,"language":77,"meta":78,"style":78},[80,11247,11248],{"__ignoreMap":78},[83,11249,11250,11252,11254],{"class":85,"line":86},[83,11251,3070],{"class":89},[83,11253,10522],{"class":93},[83,11255,8038],{"class":93},[11,11257,11258],{},"Si te resultó útil, por favor comparte este post.",[427,11260,11261],{},"html pre.shiki code .sCK9x, html code.shiki .sCK9x{--shiki-default:#80A665}html pre.shiki code .s7rlk, html code.shiki .s7rlk{--shiki-default:#C98A7D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":78,"searchDepth":260,"depth":260,"links":11263},[],"2013-07-31","El error de Apache 'Invalid command RewriteEngine, perhaps misspelled or defined by a module not included in the server configuration' se resuelve habilitando el módulo rewrite.","\u002Fimg\u002Fposts\u002Fblog\u002Ferror-apache-htaccess-invalid-command-rewriteengine\u002Fapache-error.png",{},"\u002Fblog\u002Ferror-apache-htaccess-invalid-command-rewriteengine",{"title":11211,"description":11265},"blog\u002Ferror-apache-htaccess-invalid-command-rewriteengine",[10807,11272,3060],"Error Logs","J27KviNyC5eSXqvJJtqY293umXwSO8M9bVZpzyk29TY",{"id":11275,"title":11276,"body":11277,"date":11526,"description":11527,"draft":438,"extension":439,"image":11528,"lang":441,"meta":11529,"navigation":443,"path":11530,"seo":11531,"stem":11532,"tags":11533,"__hash__":11537},"blog\u002Fblog\u002Finstalar-oracle-java-jdk-7-en-ubuntu.md","Instalar Oracle Java JDK 7 en Ubuntu 13.04 Raring Ringtail",{"type":8,"value":11278,"toc":11523},[11279,11282,11285,11288,11292,11303,11319,11324,11340,11345,11364,11369,11473,11478,11490,11495,11512,11520],[11,11280,11281],{},"Para correr algunas aplicaciones hoy en día se necesita Java, hasta en los móviles como Android, algunas aplicaciones web y de escritorio.",[11,11283,11284],{},"Te voy a mostrar cómo instalar Oracle Java (JDK) 7 en Ubuntu.",[11,11286,11287],{},"Existen algunos blogs que te mostrarán cómo instalarlo mediante PPA, que es mucho más fácil, pero la mayoría de las fuentes de PPA no son confiables. Un día existen y el próximo se han ido; este método es la manera más segura de instalar Java JDK en Ubuntu.",[18,11289,11291],{"id":11290},"pasos-de-la-instalación","Pasos de la instalación",[3662,11293,11294],{},[26,11295,11296,11297,11302],{},"Descarga Java JDK desde la fuente de Oracle ",[420,11298,11301],{"href":11299,"rel":11300},"https:\u002F\u002Fwww.oracle.com\u002Ftechnetwork\u002Fjava\u002Fjavase\u002Fdownloads\u002Fjdk7-downloads-1880260.html",[424],"aquí"," y descomprimes lo descargado con:",[73,11304,11306],{"className":75,"code":11305,"language":77,"meta":78,"style":78},"tar -xvf ~\u002FDownloads\u002Fjdk-7u3-linux-i586.tar.gz\n",[80,11307,11308],{"__ignoreMap":78},[83,11309,11310,11313,11316],{"class":85,"line":86},[83,11311,11312],{"class":89},"tar",[83,11314,11315],{"class":165}," -xvf",[83,11317,11318],{"class":93}," ~\u002FDownloads\u002Fjdk-7u3-linux-i586.tar.gz\n",[3662,11320,11321],{"start":260},[26,11322,11323],{},"Crea una carpeta para los archivos y carpetas de Java JDK ejecutando los siguientes comandos.",[73,11325,11327],{"className":75,"code":11326,"language":77,"meta":78,"style":78},"sudo mkdir -p \u002Fusr\u002Flib\u002Fjvm\u002Fjdk1.7.0\n",[80,11328,11329],{"__ignoreMap":78},[83,11330,11331,11333,11335,11337],{"class":85,"line":86},[83,11332,3070],{"class":89},[83,11334,8703],{"class":93},[83,11336,5281],{"class":165},[83,11338,11339],{"class":93}," \u002Fusr\u002Flib\u002Fjvm\u002Fjdk1.7.0\n",[3662,11341,11342],{"start":280},[26,11343,11344],{},"Mueve los archivos del JDK a la carpeta creada:",[73,11346,11348],{"className":75,"code":11347,"language":77,"meta":78,"style":78},"sudo mv jdk1.7.0_03\u002F* \u002Fusr\u002Flib\u002Fjvm\u002Fjdk1.7.0\u002F\n",[80,11349,11350],{"__ignoreMap":78},[83,11351,11352,11354,11356,11359,11361],{"class":85,"line":86},[83,11353,3070],{"class":89},[83,11355,6763],{"class":93},[83,11357,11358],{"class":93}," jdk1.7.0_03\u002F",[83,11360,8722],{"class":165},[83,11362,11363],{"class":93}," \u002Fusr\u002Flib\u002Fjvm\u002Fjdk1.7.0\u002F\n",[3662,11365,11366],{"start":403},[26,11367,11368],{},"Copia y pega cada comando, como se muestra a continuación:",[73,11370,11372],{"className":75,"code":11371,"language":77,"meta":78,"style":78},"sudo update-alternatives --install \"\u002Fusr\u002Fbin\u002Fjava\" \"java\" \"\u002Fusr\u002Flib\u002Fjvm\u002Fjdk1.7.0\u002Fbin\u002Fjava\" 1\nsudo update-alternatives --install \"\u002Fusr\u002Fbin\u002Fjavac\" \"javac\" \"\u002Fusr\u002Flib\u002Fjvm\u002Fjdk1.7.0\u002Fbin\u002Fjavac\" 1 \nsudo update-alternatives --install \"\u002Fusr\u002Fbin\u002Fjavaws\" \"javaws\" \"\u002Fusr\u002Flib\u002Fjvm\u002Fjdk1.7.0\u002Fbin\u002Fjavaws\" 1\n",[80,11373,11374,11408,11442],{"__ignoreMap":78},[83,11375,11376,11378,11381,11384,11386,11389,11391,11393,11396,11398,11400,11403,11405],{"class":85,"line":86},[83,11377,3070],{"class":89},[83,11379,11380],{"class":93}," update-alternatives",[83,11382,11383],{"class":165}," --install",[83,11385,617],{"class":616},[83,11387,11388],{"class":93},"\u002Fusr\u002Fbin\u002Fjava",[83,11390,4824],{"class":616},[83,11392,617],{"class":616},[83,11394,11395],{"class":93},"java",[83,11397,4824],{"class":616},[83,11399,617],{"class":616},[83,11401,11402],{"class":93},"\u002Fusr\u002Flib\u002Fjvm\u002Fjdk1.7.0\u002Fbin\u002Fjava",[83,11404,4824],{"class":616},[83,11406,11407],{"class":339}," 1\n",[83,11409,11410,11412,11414,11416,11418,11421,11423,11425,11428,11430,11432,11435,11437,11440],{"class":85,"line":260},[83,11411,3070],{"class":89},[83,11413,11380],{"class":93},[83,11415,11383],{"class":165},[83,11417,617],{"class":616},[83,11419,11420],{"class":93},"\u002Fusr\u002Fbin\u002Fjavac",[83,11422,4824],{"class":616},[83,11424,617],{"class":616},[83,11426,11427],{"class":93},"javac",[83,11429,4824],{"class":616},[83,11431,617],{"class":616},[83,11433,11434],{"class":93},"\u002Fusr\u002Flib\u002Fjvm\u002Fjdk1.7.0\u002Fbin\u002Fjavac",[83,11436,4824],{"class":616},[83,11438,11439],{"class":339}," 1",[83,11441,9255],{"class":2742},[83,11443,11444,11446,11448,11450,11452,11455,11457,11459,11462,11464,11466,11469,11471],{"class":85,"line":280},[83,11445,3070],{"class":89},[83,11447,11380],{"class":93},[83,11449,11383],{"class":165},[83,11451,617],{"class":616},[83,11453,11454],{"class":93},"\u002Fusr\u002Fbin\u002Fjavaws",[83,11456,4824],{"class":616},[83,11458,617],{"class":616},[83,11460,11461],{"class":93},"javaws",[83,11463,4824],{"class":616},[83,11465,617],{"class":616},[83,11467,11468],{"class":93},"\u002Fusr\u002Flib\u002Fjvm\u002Fjdk1.7.0\u002Fbin\u002Fjavaws",[83,11470,4824],{"class":616},[83,11472,11407],{"class":339},[3662,11474,11475],{"start":646},[26,11476,11477],{},"Crea una carpeta de plugins de Mozilla en tu directorio personal.",[73,11479,11481],{"className":75,"code":11480,"language":77,"meta":78,"style":78},"mkdir ~\u002F.mozilla\u002Fplugins\u002F\n",[80,11482,11483],{"__ignoreMap":78},[83,11484,11485,11487],{"class":85,"line":86},[83,11486,558],{"class":89},[83,11488,11489],{"class":93}," ~\u002F.mozilla\u002Fplugins\u002F\n",[3662,11491,11492],{"start":654},[26,11493,11494],{},"Por último, crea un enlace simbólico a la carpeta de plugins de Mozilla. Para los sistemas de 64 bits, se sustituye 'i386' por 'amd64'.",[73,11496,11498],{"className":75,"code":11497,"language":77,"meta":78,"style":78},"ln -s \u002Fusr\u002Flib\u002Fjvm\u002Fjdk1.7.0\u002Fjre\u002Flib\u002Fi386\u002Flibnpjp2.so ~\u002F.mozilla\u002Fplugins\u002F\n",[80,11499,11500],{"__ignoreMap":78},[83,11501,11502,11505,11507,11510],{"class":85,"line":86},[83,11503,11504],{"class":89},"ln",[83,11506,3226],{"class":165},[83,11508,11509],{"class":93}," \u002Fusr\u002Flib\u002Fjvm\u002Fjdk1.7.0\u002Fjre\u002Flib\u002Fi386\u002Flibnpjp2.so",[83,11511,11489],{"class":93},[11,11513,11514,7434,11516],{},[521,11515,10544],{},[420,11517,11519],{"href":11299,"rel":11518},[424],"Oracle Java JDK",[427,11521,11522],{},"html pre.shiki code .sCK9x, html code.shiki .sCK9x{--shiki-default:#80A665}html pre.shiki code .sXjYR, html code.shiki .sXjYR{--shiki-default:#C99076}html pre.shiki code .s7rlk, html code.shiki .s7rlk{--shiki-default:#C98A7D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sNJcY, html code.shiki .sNJcY{--shiki-default:#C98A7D77}html pre.shiki code .sxA9i, html code.shiki .sxA9i{--shiki-default:#4C9A91}html pre.shiki code .sNpkn, html code.shiki .sNpkn{--shiki-default:#DBD7CAEE}",{"title":78,"searchDepth":260,"depth":260,"links":11524},[11525],{"id":11290,"depth":260,"text":11291},"2013-07-27","Guía que muestra el método seguro para instalar Oracle Java Development Kit 7 en Ubuntu descargando directamente desde Oracle en lugar de usar fuentes PPA poco confiables.","\u002Fimg\u002Fposts\u002Fblog\u002Finstalar-oracle-java-jdk-7-en-ubuntu\u002Fjava-ubuntu-logo.jpg",{},"\u002Fblog\u002Finstalar-oracle-java-jdk-7-en-ubuntu",{"title":11276,"description":11527},"blog\u002Finstalar-oracle-java-jdk-7-en-ubuntu",[11534,11535,11536,3060],"Java","Jdk","Oracle","l4mBn57gdKCG8qvI-zAYoAxvpnAzBEnpbXEi7N8_zQs",{"id":11539,"title":11540,"body":11541,"date":11651,"description":11652,"draft":438,"extension":439,"image":11653,"lang":441,"meta":11654,"navigation":443,"path":11655,"seo":11656,"stem":11657,"tags":11658,"__hash__":11662},"blog\u002Fblog\u002Finstalar-adobe-flash-player-en-ubuntu.md","Instalar Adobe Flash Player en Ubuntu 12.10\u002F 13.04 Raring Ringtail",{"type":8,"value":11542,"toc":11648},[11543,11552,11555,11559,11589,11592,11616,11619,11622,11638,11645],[11,11544,11545,11546,11551],{},"Si has actualizado o instalado Ubuntu a la version 13.04 recientemente, pues aquí tienes un paquete importante a instalar - ",[420,11547,11550],{"href":11548,"rel":11549},"http:\u002F\u002Fget.adobe.com\u002Fes\u002Fflashplayer\u002F?no_redirect",[424],"Adobe Flash Player",". Casi todos los sitios web en línea hoy en día requieren de alguna versión de reproductor flash para rendir correctamente en su navegador.",[11,11553,11554],{},"Flash se utiliza para añadir archivos de streaming de vídeo y audio, pantallas de anuncios y permitir sitios web interactivos de contenido multimedia. La mayoría de aplicaciones ricas de Internet (RIAs) utilizan Flash también. Así que sin el reproductor de flash, usted no será capaz de interactuar correctamente con algunos de estos sitios web, como Youtube.",[18,11556,11558],{"id":11557},"para-instalar-flash-agregamos-lo-siguiente-al-repositorio","Para instalar Flash agregamos lo siguiente al repositorio:",[73,11560,11562],{"className":75,"code":11561,"language":77,"meta":78,"style":78},"sudo add-apt-repository \"deb http:\u002F\u002Farchive.canonical.com\u002F $(lsb_release -sc) partner\"\n",[80,11563,11564],{"__ignoreMap":78},[83,11565,11566,11568,11570,11572,11575,11577,11579,11582,11584,11587],{"class":85,"line":86},[83,11567,3070],{"class":89},[83,11569,4632],{"class":93},[83,11571,617],{"class":616},[83,11573,11574],{"class":93},"deb http:\u002F\u002Farchive.canonical.com\u002F ",[83,11576,3160],{"class":175},[83,11578,4642],{"class":89},[83,11580,11581],{"class":165}," -sc",[83,11583,3172],{"class":175},[83,11585,11586],{"class":93}," partner",[83,11588,623],{"class":616},[11,11590,11591],{},"Actualizamos y aplicamos la instalación con:",[73,11593,11595],{"className":75,"code":11594,"language":77,"meta":78,"style":78},"sudo apt-get update && sudo apt-get install flashplugin-installer\n",[80,11596,11597],{"__ignoreMap":78},[83,11598,11599,11601,11603,11605,11607,11609,11611,11613],{"class":85,"line":86},[83,11600,3070],{"class":89},[83,11602,3073],{"class":93},[83,11604,7527],{"class":93},[83,11606,176],{"class":175},[83,11608,4607],{"class":89},[83,11610,3073],{"class":93},[83,11612,3076],{"class":93},[83,11614,11615],{"class":93}," flashplugin-installer\n",[11,11617,11618],{},"Como alternativa, puede instalar Ubuntu Restricted Extras que son paquetes que se dejan de forma predeterminada por Canonical por razones legales y de otro tipo. La instalación de estos paquetes extra le permitirá reproducir archivos MP3 y DVD, las fuentes que Microsoft Core, el plugin de Flash Player, y muchos más.",[11,11620,11621],{},"Para instalarlo tecleamos:",[73,11623,11625],{"className":75,"code":11624,"language":77,"meta":78,"style":78},"sudo apt-get install ubuntu-restricted-extras\n",[80,11626,11627],{"__ignoreMap":78},[83,11628,11629,11631,11633,11635],{"class":85,"line":86},[83,11630,3070],{"class":89},[83,11632,3073],{"class":93},[83,11634,3076],{"class":93},[83,11636,11637],{"class":93}," ubuntu-restricted-extras\n",[11,11639,11640,7434,11642],{},[521,11641,10544],{},[420,11643,11550],{"href":11548,"rel":11644},[424],[427,11646,11647],{},"html pre.shiki code .sCK9x, html code.shiki .sCK9x{--shiki-default:#80A665}html pre.shiki code .s7rlk, html code.shiki .s7rlk{--shiki-default:#C98A7D}html pre.shiki code .sNJcY, html code.shiki .sNJcY{--shiki-default:#C98A7D77}html pre.shiki code .s_pn2, html code.shiki .s_pn2{--shiki-default:#666666}html pre.shiki code .sXjYR, html code.shiki .sXjYR{--shiki-default:#C99076}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":78,"searchDepth":260,"depth":260,"links":11649},[11650],{"id":11557,"depth":260,"text":11558},"2013-07-26","Si has actualizado o instalado Ubuntu a la version 13.04 recientemente, pues aquí tienes un paquete importante a instalar.","\u002Fimg\u002Fposts\u002Fblog\u002Finstalar-adobe-flash-player-en-ubuntu\u002Fflash102.jpg",{},"\u002Fblog\u002Finstalar-adobe-flash-player-en-ubuntu",{"title":11540,"description":11652},"blog\u002Finstalar-adobe-flash-player-en-ubuntu",[11659,11660,11661,3060],"Dvd","Flash Player","Mp3","6Vdm2bFvmx5HCd_lrdh69geMiWFW7MuUyz84dB3bNnI",{"id":11664,"title":11665,"body":11666,"date":11651,"description":11940,"draft":438,"extension":439,"image":11941,"lang":441,"meta":11942,"navigation":443,"path":11943,"seo":11944,"stem":11945,"tags":11946,"__hash__":11956},"blog\u002Fblog\u002Finstalar-lamp-en-ubuntu-con-tasksel.md","Instalar LAMP en Ubuntu 13.04 \u002F 12.10 \u002F 12.04",{"type":8,"value":11667,"toc":11936},[11668,11671,11739,11743,11746,11750,11758,11761,11764,11780,11783,11794,11797,11800,11803,11806,11823,11826,11838,11841,11857,11860,11898,11903,11906,11909,11925,11934],[11,11669,11670],{},"Los que desarrollamos en PHP conocemos un sistema de infraestructura de internet conocido como LAMP, el cual es un acrónimo de:",[5371,11672,11673,11682],{},[5374,11674,11675],{},[5377,11676,11677,11680],{},[5380,11678,11679],{},"Stack",[5380,11681,5385],{},[5387,11683,11684,11700,11711,11728],{},[5377,11685,11686,11692],{},[5392,11687,11688],{},[420,11689,5191],{"href":11690,"rel":11691},"http:\u002F\u002Fwww.linux.org\u002F",[424],[5392,11693,11694,11695,2743],{},"Es un núcleo de sistema operativo libre tipo ",[420,11696,11699],{"href":11697,"rel":11698},"http:\u002F\u002Fwww.unix.org\u002F",[424],"Unix",[5377,11701,11702,11708],{},[5392,11703,11704],{},[420,11705,10807],{"href":11706,"rel":11707},"http:\u002F\u002Fhttpd.apache.org\u002F",[424],[5392,11709,11710],{},"El servidor HTTP Apache es un servidor web libre y de código abierto, el más popular en cuanto a uso, sirviendo de facto como plataforma de referencia para el diseño y evaluación de otros servidores web.",[5377,11712,11713,11719],{},[5392,11714,11715],{},[420,11716,450],{"href":11717,"rel":11718},"http:\u002F\u002Fwww.mysql.com\u002F",[424],[5392,11720,11721,11722,11727],{},"Es un Sistema de Gestión de Bases de Datos (",[420,11723,11726],{"href":11724,"rel":11725},"https:\u002F\u002Fes.wikipedia.org\u002Fwiki\u002FSistema_de_gesti%C3%B3n_de_bases_de_datos",[424],"SGBD",") relacional, que por lo tanto utiliza SQL, multihilo y multiusuario del que se estiman más de un millón de instalaciones.",[5377,11729,11730,11736],{},[5392,11731,11732],{},[420,11733,451],{"href":11734,"rel":11735},"http:\u002F\u002Fphp.net\u002F",[424],[5392,11737,11738],{},"(acrónimo recursivo de \"PHP: Hypertext Preprocessor\"): es un lenguaje de programación diseñado para producir sitios web dinámicos.",[3517,11740,11742],{"id":11741},"variantes","Variantes",[11,11744,11745],{},"En el acrónimo LAMP, podemos Variar la L por M (por Mac OS X), D (por Darwin BSD), B (por BSD) o 'W' (por Microsoft Windows). A la ves la P por Perl o Python y el acrónimo se mantiene, o por una R quedando LAMR para referirse a Ruby on Rails.",[3517,11747,11749],{"id":11748},"bien-ahora-vamos-a-instalar-lamp-en-ubuntu-con-tasksel","Bien ahora vamos a instalar LAMP en Ubuntu con Tasksel",[11,11751,11752,11757],{},[420,11753,11756],{"href":11754,"rel":11755},"http:\u002F\u002Fwiki.debian.org\u002Ftasksel",[424],"Tasksel"," es una herramienta de Debian \u002F Ubuntu que instala varios paquetes relacionados como una \"tarea\" coordinada en el sistema.",[11,11759,11760],{},"Esta función es similar a la de los meta-paquetes, y, de hecho, la mayor parte de las tareas disponibles en tasksel también están disponibles como meta-paquetes desde los gestores de paquetes de Ubuntu (tales como Gestor de paquetes Synaptic o KPackageKit).",[11,11762,11763],{},"Para instalar Tasksel abrimos terminal (Ctrl+ALT+T) y tecleamos:",[73,11765,11767],{"className":75,"code":11766,"language":77,"meta":78,"style":78},"sudo apt-get install tasksel\n",[80,11768,11769],{"__ignoreMap":78},[83,11770,11771,11773,11775,11777],{"class":85,"line":86},[83,11772,3070],{"class":89},[83,11774,3073],{"class":93},[83,11776,3076],{"class":93},[83,11778,11779],{"class":93}," tasksel\n",[11,11781,11782],{},"Ejecutamos tasksel con:",[73,11784,11786],{"className":75,"code":11785,"language":77,"meta":78,"style":78},"sudo tasksel\n",[80,11787,11788],{"__ignoreMap":78},[83,11789,11790,11792],{"class":85,"line":86},[83,11791,3070],{"class":89},[83,11793,11779],{"class":93},[11,11795,11796],{},"Nos aparecerá una interfaz gráfica donde nos desplazamos con las direccionales del teclado y elegimos LAMP server con la tecla de espaciado, con el TAB derecho nos desplazamos a aceptar y le damos ENTER para iniciar la instalación.",[11,11798,11799],{},"Posteriormente te pedirá una password para super usuario (root) de MySQL. Repetimos la clave para confirmar.",[11,11801,11802],{},"Y para comprobar que esta instalado correctamente ingresamos en nuestro browser localhost.",[11,11804,11805],{},"También podemos especificar tasksel que instale algo directamente desde terminal con:",[73,11807,11809],{"className":75,"code":11808,"language":77,"meta":78,"style":78},"sudo tasksel install lamp-server\n",[80,11810,11811],{"__ignoreMap":78},[83,11812,11813,11815,11818,11820],{"class":85,"line":86},[83,11814,3070],{"class":89},[83,11816,11817],{"class":93}," tasksel",[83,11819,3076],{"class":93},[83,11821,11822],{"class":93}," lamp-server\n",[11,11824,11825],{},"Para ver todas las opciones con tasksel:",[73,11827,11829],{"className":75,"code":11828,"language":77,"meta":78,"style":78},"man tasksel\n",[80,11830,11831],{"__ignoreMap":78},[83,11832,11833,11836],{"class":85,"line":86},[83,11834,11835],{"class":89},"man",[83,11837,11779],{"class":93},[11,11839,11840],{},"Las tareas también lo podemos instalar con la siguiente sintaxis de apt-get así:",[73,11842,11844],{"className":75,"code":11843,"language":77,"meta":78,"style":78},"sudo apt-get install nombre_de_la_tarea_que_desea^\n",[80,11845,11846],{"__ignoreMap":78},[83,11847,11848,11850,11852,11854],{"class":85,"line":86},[83,11849,3070],{"class":89},[83,11851,3073],{"class":93},[83,11853,3076],{"class":93},[83,11855,11856],{"class":93}," nombre_de_la_tarea_que_desea^\n",[11,11858,11859],{},"Algunos ejemplos:",[73,11861,11863],{"className":75,"code":11862,"language":77,"meta":78,"style":78},"sudo apt-get install ubuntu-desktop^\nsudo apt-get install kubuntu-desktop^\nsudo apt-get install lamp-server^\n",[80,11864,11865,11876,11887],{"__ignoreMap":78},[83,11866,11867,11869,11871,11873],{"class":85,"line":86},[83,11868,3070],{"class":89},[83,11870,3073],{"class":93},[83,11872,3076],{"class":93},[83,11874,11875],{"class":93}," ubuntu-desktop^\n",[83,11877,11878,11880,11882,11884],{"class":85,"line":260},[83,11879,3070],{"class":89},[83,11881,3073],{"class":93},[83,11883,3076],{"class":93},[83,11885,11886],{"class":93}," kubuntu-desktop^\n",[83,11888,11889,11891,11893,11895],{"class":85,"line":280},[83,11890,3070],{"class":89},[83,11892,3073],{"class":93},[83,11894,3076],{"class":93},[83,11896,11897],{"class":93}," lamp-server^\n",[11,11899,11900,11902],{},[521,11901,3983],{}," El signo de intercalación (^) se requiere por lo general al final de la instrucción en las versiones anteriores de tasksel.",[11,11904,11905],{},"Las tareas se definen en los archivo de extension .desc que se encuentran en \u002Fusr\u002Fshare\u002Ftasksel, en el cual los derivados de Debian pueden agregar fácilmente tareas.",[11,11907,11908],{},"La lista predeterminada disponible en Ubuntu se puede ver con esta línea de comandos:",[73,11910,11912],{"className":75,"code":11911,"language":77,"meta":78,"style":78},"grep Task \u002Fusr\u002Fshare\u002Ftasksel\u002Fubuntu-tasks.desc\n",[80,11913,11914],{"__ignoreMap":78},[83,11915,11916,11919,11922],{"class":85,"line":86},[83,11917,11918],{"class":89},"grep",[83,11920,11921],{"class":93}," Task",[83,11923,11924],{"class":93}," \u002Fusr\u002Fshare\u002Ftasksel\u002Fubuntu-tasks.desc\n",[11,11926,11927,7434,11929],{},[521,11928,10544],{},[420,11930,11933],{"href":11931,"rel":11932},"https:\u002F\u002Fhelp.ubuntu.com\u002Fcommunity\u002FTasksel",[424],"Ubuntu Tasksel",[427,11935,11261],{},{"title":78,"searchDepth":260,"depth":260,"links":11937},[11938,11939],{"id":11741,"depth":280,"text":11742},{"id":11748,"depth":280,"text":11749},"Los que desarrollamos en PHP conocemos un sistema de infraestructura de internet conocido como LAMP.","\u002Fimg\u002Fposts\u002Fblog\u002Finstalar-lamp-en-ubuntu-con-tasksel\u002Flamp.jpg",{},"\u002Fblog\u002Finstalar-lamp-en-ubuntu-con-tasksel",{"title":11665,"description":11940},"blog\u002Finstalar-lamp-en-ubuntu-con-tasksel",[10807,11947,11948,11949,11950,5191,11951,11206,11952,10967,11953,11954,11756,11955,3060,11699],"Arquitectura De Software","Desarrollo Web","Distro","Lamp","Localhost","Perl","Python","Ruby","Terminal","eHk8_YilDxkdmx736CqNfssokgeVQHs49LAQyUrWsjw",{"id":11958,"title":11959,"body":11960,"date":12199,"description":12200,"draft":438,"extension":439,"image":12201,"lang":441,"meta":12202,"navigation":443,"path":12203,"seo":12204,"stem":12205,"tags":12206,"__hash__":12208},"blog\u002Fblog\u002Finstalar-conky-tema-infinitysvg-en-linux.md","Instalar Conky con el tema InfinitySVG en Linux",{"type":8,"value":11961,"toc":12196},[11962,11970,11973,11976,12017,12020,12023,12027,12043,12046,12061,12068,12076,12093,12100,12127,12135,12141,12144,12147,12171,12174,12179,12186,12193],[11,11963,11964,11969],{},[420,11965,11968],{"href":11966,"rel":11967},"https:\u002F\u002Fconky.sourceforge.net\u002F",[424],"Conky"," es un software libre que monitorea el estado de tu sistema operativo para el sistema X Window.",[11,11971,11972],{},"Está disponible para Linux, FreeBSD y OpenBSD.",[11,11974,11975],{},"Conky es altamente configurable y es capaz de controlar muchas variables del sistema, tales como:",[23,11977,11978,11981,11984,11987,11990,11993,11996,11999,12002,12005,12008,12011,12014],{},[26,11979,11980],{},"Estado de la CPU",[26,11982,11983],{},"Consumo de memoria",[26,11985,11986],{},"Espacio de intercambio",[26,11988,11989],{},"Almacenamiento en disco",[26,11991,11992],{},"Temperaturas",[26,11994,11995],{},"Procesos",[26,11997,11998],{},"Interfaces de red",[26,12000,12001],{},"Energía de la batería",[26,12003,12004],{},"Mensajes del sistema",[26,12006,12007],{},"Las bandejas de entrada de correo electrónico",[26,12009,12010],{},"Arch Linux actualizaciones",[26,12012,12013],{},"Muchos reproductores populares de música (MPD, XMMS2, BMPx, Audacious)",[26,12015,12016],{},"y mucho más... (como correos de gmail, feeds con rss, wheater de yahoo)",[11,12018,12019],{},"A diferencia de los monitores del sistema que utilizan alta nivel de widget toolkits para hacer que su información, Conky se dibuja directamente en una ventana de X. Esto permite que se consuma relativamente menos recursos del sistema cuando se configura de manera similar.",[11,12021,12022],{},"Bien, ahora vamos a instalar Conky en nuestra distro y posteriormente configuraremos nuestro tema InfinityAVG para conky.",[3517,12024,12026],{"id":12025},"instalamos-conky-en-ubuntu","Instalamos Conky en Ubuntu:",[73,12028,12030],{"className":75,"code":12029,"language":77,"meta":78,"style":78},"sudo apt-get install conky-all\n",[80,12031,12032],{"__ignoreMap":78},[83,12033,12034,12036,12038,12040],{"class":85,"line":86},[83,12035,3070],{"class":89},[83,12037,3073],{"class":93},[83,12039,3076],{"class":93},[83,12041,12042],{"class":93}," conky-all\n",[11,12044,12045],{},"Si usamos Fedora:",[73,12047,12049],{"className":75,"code":12048,"language":77,"meta":78,"style":78},"yum install conky\n",[80,12050,12051],{"__ignoreMap":78},[83,12052,12053,12056,12058],{"class":85,"line":86},[83,12054,12055],{"class":89},"yum",[83,12057,3076],{"class":93},[83,12059,12060],{"class":93}," conky\n",[11,12062,12063,12064,2743],{},"Para cualquier otra distro podemos guiarnos de la documentación de ",[420,12065,11968],{"href":12066,"rel":12067},"https:\u002F\u002Fconky.sourceforge.net\u002Fdocumentation.html",[424],[11,12069,12070,12071,12075],{},"Después de ello descargamos el tema desde una fuente de ",[420,12072,425],{"href":12073,"rel":12074},"https:\u002F\u002Fgithub.com\u002Fcircumjacence\u002FConkyInfinitySVG",[424],", podemos descargarlo todo zipeado o usando git:",[73,12077,12079],{"className":75,"code":12078,"language":77,"meta":78,"style":78},"git clone https:\u002F\u002Fgithub.com\u002Fcircumjacence\u002FConkyInfinitySVG.git infinitysvg\n",[80,12080,12081],{"__ignoreMap":78},[83,12082,12083,12085,12087,12090],{"class":85,"line":86},[83,12084,90],{"class":89},[83,12086,94],{"class":93},[83,12088,12089],{"class":93}," https:\u002F\u002Fgithub.com\u002Fcircumjacence\u002FConkyInfinitySVG.git",[83,12091,12092],{"class":93}," infinitysvg\n",[11,12094,12095,12096],{},"Copias .conkyrc, y .conky\u002F en tu directorio de usuario (home\u002F",[12097,12098,12099],"usuario",{},"):",[73,12101,12103],{"className":75,"code":12102,"language":77,"meta":78,"style":78},"cp .conkyrc ~\u002F && cp -r .conky ~\u002F\n",[80,12104,12105],{"__ignoreMap":78},[83,12106,12107,12109,12112,12115,12117,12119,12121,12124],{"class":85,"line":86},[83,12108,129],{"class":89},[83,12110,12111],{"class":93}," .conkyrc",[83,12113,12114],{"class":93}," ~\u002F",[83,12116,176],{"class":175},[83,12118,6206],{"class":89},[83,12120,5278],{"class":165},[83,12122,12123],{"class":93}," .conky",[83,12125,12126],{"class":93}," ~\u002F\n",[11,12128,12129,12130,12134],{},"Abres ~\u002F.conkyrc con ",[420,12131,12133],{"href":12132},"\u002Fblog\u002Finstalacion-del-editor-de-texto-geany","geany"," u otro editor y ajustas la resolución de tu monitor:",[73,12136,12139],{"className":12137,"code":12138,"language":147,"meta":78},[145],"minimum_size 1920 1080\n",[80,12140,12138],{"__ignoreMap":78},[11,12142,12143],{},"Buscas el siguiente parametro \"own_window_transparent\" y lo pones en yes:",[11,12145,12146],{},"Ejecutas lo siguiente en terminal:",[73,12148,12150],{"className":75,"code":12149,"language":77,"meta":78,"style":78},"chmod a+x ~\u002F.conky\u002Fstartconky.sh\n\nsh ~\u002F.conky\u002Fstartconky.sh\n",[80,12151,12152,12161,12165],{"__ignoreMap":78},[83,12153,12154,12156,12158],{"class":85,"line":86},[83,12155,406],{"class":89},[83,12157,8757],{"class":93},[83,12159,12160],{"class":93}," ~\u002F.conky\u002Fstartconky.sh\n",[83,12162,12163],{"class":85,"line":260},[83,12164,628],{"emptyLinePlaceholder":443},[83,12166,12167,12169],{"class":85,"line":280},[83,12168,3152],{"class":89},[83,12170,12160],{"class":93},[11,12172,12173],{},"Conky iniciara después de 5 segundos, si queremos que conky inicie siempre al inicio buscamos en el Dash \"Aplicacion al inicio\" y seteamos conky como comando:",[11,12175,12176],{},[477,12177],{"alt":78,"src":12178},"\u002Fimg\u002Fposts\u002Fblog\u002Finstalar-conky-tema-infinitysvg-en-linux\u002FCaptura-de-pantalla-de-2013-07-25-03-11-16.png",[11,12180,12181,12182,2743],{},"Cualquier duda no se olviden de visitar ",[420,12183,12185],{"href":12073,"rel":12184},[424],"la documentación del tema",[11,12187,12188,7434,12190],{},[521,12189,10544],{},[420,12191,11968],{"href":11966,"rel":12192},[424],[427,12194,12195],{},"html pre.shiki code .sCK9x, html code.shiki .sCK9x{--shiki-default:#80A665}html pre.shiki code .s7rlk, html code.shiki .s7rlk{--shiki-default:#C98A7D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s_pn2, html code.shiki .s_pn2{--shiki-default:#666666}html pre.shiki code .sXjYR, html code.shiki .sXjYR{--shiki-default:#C99076}",{"title":78,"searchDepth":260,"depth":260,"links":12197},[12198],{"id":12025,"depth":280,"text":12026},"2013-07-25","Conky es un software libre que monitorea el estado de tu sistema operativo para el sistema X Window.","\u002Fimg\u002Fposts\u002Fblog\u002Finstalar-conky-tema-infinitysvg-en-linux\u002FCaptura-de-pantalla-de-2013-07-25-02-36-26.png",{},"\u002Fblog\u002Finstalar-conky-tema-infinitysvg-en-linux",{"title":11959,"description":12200},"blog\u002Finstalar-conky-tema-infinitysvg-en-linux",[11948,5573,7457,5191,12207,11955,3060],"Sistema De Control De Versiones","w9HvVseXbnOe44vid1eZMZfWuju-d-Yy3lP3MCCwej0",{"id":12210,"title":12211,"body":12212,"date":12471,"description":12472,"draft":438,"extension":439,"image":12473,"lang":441,"meta":12474,"navigation":443,"path":12475,"seo":12476,"stem":12477,"tags":12478,"__hash__":12481},"blog\u002Fblog\u002Fconfigurar-resolucion-monitor-ubuntu-xrandr.md","Como configurar la resolución de tu monitor en Ubuntu 13.04 con xrandr",{"type":8,"value":12213,"toc":12468},[12214,12217,12232,12239,12245,12248,12264,12267,12281,12284,12306,12309,12328,12331,12340,12344,12347,12359,12362,12382,12385,12401,12404,12410,12413,12428,12431,12437,12440,12446,12449,12455,12462,12465],[11,12215,12216],{},"Uno de los principales problemas y molestias que he tenido al instalar Ubuntu, es sobre la resolución de mi monitor, especialmente si la pantalla es grande como mía de 24 pulgadas, en fin antes de configurar la resolución vas a comprobar que tu sistema lo soporte.",[11,12218,12219,12220,12223,12224,12227,12228,12231],{},"Vas a ",[521,12221,12222],{},"configuración del sistema"," y seleccionas ",[521,12225,12226],{},"orígenes del software",", pestaña ",[521,12229,12230],{},"controladores adicionales",", debe de estar vacía porque no se están utilizando drivers privativos.",[11,12233,12234,12235,12238],{},"Posteriormente vas a ",[521,12236,12237],{},"configuración del sistema > monitores"," y cómo notarás en la persiana de resoluciones hay muy pocas para seleccionar, además de no ser útiles, pero vamos a configurarlo de manera que te quede como la siguiente imagen:",[11,12240,12241],{},[477,12242],{"alt":12243,"src":12244},"Monitor configuration","\u002Fimg\u002Fposts\u002Fblog\u002Fconfigurar-resolucion-monitor-ubuntu-xrandr\u002FCaptura-de-pantalla-de-2013-07-23-00-33-47.png",[11,12246,12247],{},"Vamos a comprobar como funciona tu tarjeta de video, para ello instala el paquete mesa-utils para tarjetas Intel, Ati y Nvidia:",[73,12249,12251],{"className":75,"code":12250,"language":77,"meta":78,"style":78},"sudo apt-get install mesa-utils\n",[80,12252,12253],{"__ignoreMap":78},[83,12254,12255,12257,12259,12261],{"class":85,"line":86},[83,12256,3070],{"class":89},[83,12258,3073],{"class":93},[83,12260,3076],{"class":93},[83,12262,12263],{"class":93}," mesa-utils\n",[11,12265,12266],{},"Añades el repositorio de drivers libres para Intel, ATI y Nvidia.",[73,12268,12270],{"className":75,"code":12269,"language":77,"meta":78,"style":78},"sudo add-apt-repository ppa:xorg-edgers\u002Fppa\n",[80,12271,12272],{"__ignoreMap":78},[83,12273,12274,12276,12278],{"class":85,"line":86},[83,12275,3070],{"class":89},[83,12277,4632],{"class":93},[83,12279,12280],{"class":93}," ppa:xorg-edgers\u002Fppa\n",[11,12282,12283],{},"Actualizas los repositorios del sistema y aplicas los cambios.",[73,12285,12287],{"className":75,"code":12286,"language":77,"meta":78,"style":78},"sudo apt-get update && sudo apt-get upgrade\n",[80,12288,12289],{"__ignoreMap":78},[83,12290,12291,12293,12295,12297,12299,12301,12303],{"class":85,"line":86},[83,12292,3070],{"class":89},[83,12294,3073],{"class":93},[83,12296,7527],{"class":93},[83,12298,176],{"class":175},[83,12300,4607],{"class":89},[83,12302,3073],{"class":93},[83,12304,12305],{"class":93}," upgrade\n",[11,12307,12308],{},"Reinicias tu ordenador y luego pruebas que tal va la aceleración gráfica:",[73,12310,12312],{"className":75,"code":12311,"language":77,"meta":78,"style":78},"glxinfo | grep -i render\n",[80,12313,12314],{"__ignoreMap":78},[83,12315,12316,12319,12321,12323,12325],{"class":85,"line":86},[83,12317,12318],{"class":89},"glxinfo",[83,12320,4604],{"class":3402},[83,12322,7366],{"class":89},[83,12324,6975],{"class":165},[83,12326,12327],{"class":93}," render\n",[11,12329,12330],{},"Si notas que Direct rendering esta en \"yes\", todo está correcto; si quieres verlo en forma gráfica lo haces tecleando lo siguiente en un terminal:",[73,12332,12334],{"className":75,"code":12333,"language":77,"meta":78,"style":78},"glxgear\n",[80,12335,12336],{"__ignoreMap":78},[83,12337,12338],{"class":85,"line":86},[83,12339,12333],{"class":89},[3517,12341,12343],{"id":12342},"ahora-si-manos-a-la-obra","Ahora si manos a la obra:",[11,12345,12346],{},"Teclea lo siguiente para que veas los modos gráficos activos:",[73,12348,12350],{"className":75,"code":12349,"language":77,"meta":78,"style":78},"sudo xrandr\n",[80,12351,12352],{"__ignoreMap":78},[83,12353,12354,12356],{"class":85,"line":86},[83,12355,3070],{"class":89},[83,12357,12358],{"class":93}," xrandr\n",[11,12360,12361],{},"Estableces tu resolución:",[73,12363,12365],{"className":75,"code":12364,"language":77,"meta":78,"style":78},"sudo cvt (x) (y)\n",[80,12366,12367],{"__ignoreMap":78},[83,12368,12369,12371,12374,12377,12380],{"class":85,"line":86},[83,12370,3070],{"class":89},[83,12372,12373],{"class":93}," cvt",[83,12375,12376],{"class":2742}," (x) (",[83,12378,12379],{"class":89},"y",[83,12381,3254],{"class":2742},[11,12383,12384],{},"Por ejemplo:",[73,12386,12388],{"className":75,"code":12387,"language":77,"meta":78,"style":78},"cvt 1440 900\n",[80,12389,12390],{"__ignoreMap":78},[83,12391,12392,12395,12398],{"class":85,"line":86},[83,12393,12394],{"class":89},"cvt",[83,12396,12397],{"class":339}," 1440",[83,12399,12400],{"class":339}," 900\n",[11,12402,12403],{},"Te aparecerá algo como esto:",[73,12405,12408],{"className":12406,"code":12407,"language":147,"meta":78},[145],"1440x900 59.89 Hz (CVT 1.30MA) hsync: 55.93 kHz; pclk: 106.50 MHz\nModeline \"1440x900_60.00\"  106.50  1440 1528 1672 1904  900 903 909 934 -hsync +vsync\n",[80,12409,12407],{"__ignoreMap":78},[11,12411,12412],{},"Más tarde vas a seleccionar todo lo que hay en la línea \"Modeline\" para utilizarla dentro de un fichero. Vas a generar el fichero xorg.conf en el lugar adecuado, ya que por defecto Ubuntu no lo utiliza y sirve para establecer la configuración de las X (servidor gráfico):",[73,12414,12416],{"className":75,"code":12415,"language":77,"meta":78,"style":78},"sudo gedit \u002Fetc\u002FX11\u002Fxorg.conf\n",[80,12417,12418],{"__ignoreMap":78},[83,12419,12420,12422,12425],{"class":85,"line":86},[83,12421,3070],{"class":89},[83,12423,12424],{"class":93}," gedit",[83,12426,12427],{"class":93}," \u002Fetc\u002FX11\u002Fxorg.conf\n",[11,12429,12430],{},"Pegas lo siguiente:",[73,12432,12435],{"className":12433,"code":12434,"language":147,"meta":78},[145],"Section \"Device\"\nIdentifier \"Configured Video Device\"\nEndSection\n\nSection \"Monitor\"\nIdentifier \"Configured Monitor\"\nVendorname \"Generic LCD Display\"\nModelname \"LCD Panel 1440x900\"\nHorizsync 31.5-64.0\nVertrefresh 56.0 - 65.0\nModeline \"1440x900_60.00\"  106.50  1440 1528 1672 1904  900 903 909 934 -hsync +vsync\nGamma 1.0\n# modeline \"640x480@60\" 25.2 640 656 752 800 480 490 492 525 -vsync -hsync\n# modeline \"800x600@56\" 36.0 800 824 896 1024 600 601 603 625 +hsync +vsync\n# modeline \"800x600@60\" 40.0 800 840 968 1056 600 601 605 628 +hsync +vsync\n# modeline \"1024x768@60\" 65.0 1024 1048 1184 1344 768 771 777 806 -vsync -hsync\n# Modeline \"1440x900_60.00\"  106.50  1440 1528 1672 1904  900 903 909 934 -hsync +vsync\nEndSection\n\nSection \"Screen\"\nIdentifier \"Default Screen\"\nMonitor \"Configured Monitor\"\nDevice \"Configured Video Device\"\nDefaultDepth 24\nSubSection \"Display\"\nDepth 1\nModes \"1440x900\"\nEndSubSection\nSubSection \"Display\"\nDepth 4\nModes \"1440x900\"\nEndSubSection\nSubSection \"Display\"\nDepth 8\nModes \"1440x900\"\nEndSubSection\nSubSection \"Display\"\nDepth 15\nModes \"1440x900\"\nEndSubSection\nSubSection \"Display\"\nDepth 16\nModes \"1440x900\"\nEndSubSection\nSubSection \"Display\"\nDepth 24\nModes \"1440x900\"\nEndSubSection\nEndSection\n",[80,12436,12434],{"__ignoreMap":78},[11,12438,12439],{},"La configuración anterior es para un monitor de 1440x900, si deseas una para la tuya solo reemplaza el siguiente modeline por el tuyo:",[73,12441,12444],{"className":12442,"code":12443,"language":147,"meta":78},[145],"Modeline \"1440x900_60.00\"  106.50  1440 1528 1672 1904  900 903 909 934 -hsync +vsync\n",[80,12445,12443],{"__ignoreMap":78},[11,12447,12448],{},"Agregas una nueva almohadilla con tu configuración, algo así como:",[73,12450,12453],{"className":12451,"code":12452,"language":147,"meta":78},[145],"# Modeline \"1440x900_60.00\"  106.50  1440 1528 1672 1904  900 903 909 934 -hsync +vsync\n",[80,12454,12452],{"__ignoreMap":78},[11,12456,12457,12458,12461],{},"En el editor, buscas en la sección \"Screen\" \"1440x900\" que es lo que tiene el fichero pegado y lo reemplazas por tu configuración. Guardas y cierras tu editor, reinicias el ordenador y de nuevo vas a ",[521,12459,12460],{},"configuración del Sistema > monitores",", escoges y aplicas la resolución para tu monitor.",[11,12463,12464],{},"Espero que este tutorial te haya ayudado mucho, será hasta otra oportunidad...",[427,12466,12467],{},"html pre.shiki code .sCK9x, html code.shiki .sCK9x{--shiki-default:#80A665}html pre.shiki code .s7rlk, html code.shiki .s7rlk{--shiki-default:#C98A7D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s_pn2, html code.shiki .s_pn2{--shiki-default:#666666}html pre.shiki code .s_wWq, html code.shiki .s_wWq{--shiki-default:#CB7676}html pre.shiki code .sXjYR, html code.shiki .sXjYR{--shiki-default:#C99076}html pre.shiki code .sNpkn, html code.shiki .sNpkn{--shiki-default:#DBD7CAEE}html pre.shiki code .sxA9i, html code.shiki .sxA9i{--shiki-default:#4C9A91}",{"title":78,"searchDepth":260,"depth":260,"links":12469},[12470],{"id":12342,"depth":280,"text":12343},"2013-07-23","Uno de los principales problemas y molestias que he tenido al instalar Ubuntu, es sobre la resolución de mi monitor.","\u002Fimg\u002Fposts\u002Fblog\u002Fconfigurar-resolucion-monitor-ubuntu-xrandr\u002FIMG_20130723_121953.jpg",{},"\u002Fblog\u002Fconfigurar-resolucion-monitor-ubuntu-xrandr",{"title":12211,"description":12472},"blog\u002Fconfigurar-resolucion-monitor-ubuntu-xrandr",[11949,5191,12479,11955,3060,12480],"Monitor","Xrandr","Ud44Zv0scfhbOa66sIgfmG9JAbHj9U-4uTcTqt0mE_I",{"id":12483,"title":12484,"body":12485,"date":12786,"description":12787,"draft":438,"extension":439,"image":12492,"lang":441,"meta":12788,"navigation":443,"path":12789,"seo":12790,"stem":12791,"tags":12792,"__hash__":12793},"blog\u002Fblog\u002Fcomo-instalar-git-en-ubuntu-1304.md","Cómo instalar Git en Ubuntu 13.04",{"type":8,"value":12486,"toc":12781},[12487,12493,12500,12508,12511,12515,12518,12534,12538,12541,12544,12556,12559,12590,12598,12610,12613,12635,12638,12665,12668,12682,12686,12692,12707,12710,12749,12752,12766,12769,12775,12778],[11,12488,12489],{},[477,12490],{"alt":12491,"src":12492},"Logo de Git","\u002Fimg\u002Fposts\u002Fblog\u002Fcomo-instalar-git-en-ubuntu-1304\u002Fgit.png",[11,12494,12495,12499],{},[420,12496,5573],{"href":12497,"rel":12498},"http:\u002F\u002Fgit-scm.com\u002F",[424]," es un sistema de control de versiones (VCS) distribuido, publicado de forma pública en 2005. El programa permite el desarrollo no lineal de proyectos y gestiona de manera eficiente grandes cantidades de datos mediante el almacenamiento en un servidor local.",[11,12501,12502,12503,2743],{},"Existen otros sistemas de control de versiones que usan diferentes protocolos, como Subversion (SVN) y Mercurial. Habiendo probado ambos, se eligió Git por sus superiores ",[420,12504,12507],{"href":12505,"rel":12506},"http:\u002F\u002Fgit-scm.com\u002Fbook\u002Fes\u002FEmpezando-Fundamentos-de-Git",[424],"fundamentos",[11,12509,12510],{},"En esta guía se explican dos métodos de instalación de Git para Ubuntu.",[18,12512,12514],{"id":12513},"instalar-git-con-apt-get","Instalar Git con apt-get",[11,12516,12517],{},"Usar apt-get proporciona un proceso de instalación rápido y sencillo. Se instala con un solo comando:",[73,12519,12521],{"className":75,"code":12520,"language":77,"meta":78,"style":78},"sudo apt-get install git\n",[80,12522,12523],{"__ignoreMap":78},[83,12524,12525,12527,12529,12531],{"class":85,"line":86},[83,12526,3070],{"class":89},[83,12528,3073],{"class":93},[83,12530,3076],{"class":93},[83,12532,12533],{"class":93}," git\n",[18,12535,12537],{"id":12536},"instalar-git-desde-el-código-fuente","Instalar Git desde el código fuente",[11,12539,12540],{},"Para obtener la última versión de Git, se recomienda la instalación desde el código fuente.",[11,12542,12543],{},"Primero, actualiza apt-get para asegurar que los paquetes estén al día:",[73,12545,12546],{"className":75,"code":4541,"language":77,"meta":78,"style":78},[80,12547,12548],{"__ignoreMap":78},[83,12549,12550,12552,12554],{"class":85,"line":86},[83,12551,3070],{"class":89},[83,12553,3073],{"class":93},[83,12555,4552],{"class":93},[11,12557,12558],{},"Instala todas las dependencias requeridas antes de Git:",[73,12560,12562],{"className":75,"code":12561,"language":77,"meta":78,"style":78},"sudo apt-get install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev build-essential\n",[80,12563,12564],{"__ignoreMap":78},[83,12565,12566,12568,12570,12572,12575,12578,12581,12584,12587],{"class":85,"line":86},[83,12567,3070],{"class":89},[83,12569,3073],{"class":93},[83,12571,3076],{"class":93},[83,12573,12574],{"class":93}," libcurl4-gnutls-dev",[83,12576,12577],{"class":93}," libexpat1-dev",[83,12579,12580],{"class":93}," gettext",[83,12582,12583],{"class":93}," libz-dev",[83,12585,12586],{"class":93}," libssl-dev",[83,12588,12589],{"class":93}," build-essential\n",[11,12591,12592,12593,613],{},"Descarga la última versión de Git desde ",[420,12594,12597],{"href":12595,"rel":12596},"https:\u002F\u002Fcode.google.com\u002Fp\u002Fgit-core\u002Fdownloads\u002Flist",[424],"Google Code",[73,12599,12601],{"className":75,"code":12600,"language":77,"meta":78,"style":78},"wget https:\u002F\u002Fgit-core.googlecode.com\u002Ffiles\u002Fgit-1.8.3.3.tar.gz\n",[80,12602,12603],{"__ignoreMap":78},[83,12604,12605,12607],{"class":85,"line":86},[83,12606,3197],{"class":89},[83,12608,12609],{"class":93}," https:\u002F\u002Fgit-core.googlecode.com\u002Ffiles\u002Fgit-1.8.3.3.tar.gz\n",[11,12611,12612],{},"Descomprime y navega hacia el directorio:",[73,12614,12616],{"className":75,"code":12615,"language":77,"meta":78,"style":78},"tar -zxf git-1.8.1.2.tar.gz\ncd git-1.8.3.3\n",[80,12617,12618,12628],{"__ignoreMap":78},[83,12619,12620,12622,12625],{"class":85,"line":86},[83,12621,11312],{"class":89},[83,12623,12624],{"class":165}," -zxf",[83,12626,12627],{"class":93}," git-1.8.1.2.tar.gz\n",[83,12629,12630,12632],{"class":85,"line":260},[83,12631,114],{"class":113},[83,12633,12634],{"class":93}," git-1.8.3.3\n",[11,12636,12637],{},"Para una instalación global (usuario y root), usa el prefijo sudo:",[73,12639,12641],{"className":75,"code":12640,"language":77,"meta":78,"style":78},"make prefix=\u002Fusr\u002Flocal all\nsudo make prefix=\u002Fusr\u002Flocal install\n",[80,12642,12643,12653],{"__ignoreMap":78},[83,12644,12645,12647,12650],{"class":85,"line":86},[83,12646,2995],{"class":89},[83,12648,12649],{"class":93}," prefix=\u002Fusr\u002Flocal",[83,12651,12652],{"class":93}," all\n",[83,12654,12655,12657,12660,12662],{"class":85,"line":260},[83,12656,3070],{"class":89},[83,12658,12659],{"class":93}," make",[83,12661,12649],{"class":93},[83,12663,12664],{"class":93}," install\n",[11,12666,12667],{},"Para actualizar Git más adelante, usa el propio Git:",[73,12669,12671],{"className":75,"code":12670,"language":77,"meta":78,"style":78},"git clone git:\u002F\u002Fgit.kernel.org\u002Fpub\u002Fscm\u002Fgit\u002Fgit.git\n",[80,12672,12673],{"__ignoreMap":78},[83,12674,12675,12677,12679],{"class":85,"line":86},[83,12676,90],{"class":89},[83,12678,94],{"class":93},[83,12680,12681],{"class":93}," git:\u002F\u002Fgit.kernel.org\u002Fpub\u002Fscm\u002Fgit\u002Fgit.git\n",[18,12683,12685],{"id":12684},"configurar-git","Configurar Git",[11,12687,12688,12689,613],{},"Una vez instalado, configura tu nombre de usuario y correo en el archivo gitconfig, ubicado en ",[80,12690,12691],{},"~\u002F.gitconfig",[73,12693,12695],{"className":75,"code":12694,"language":77,"meta":78,"style":78},"sudo nano ~\u002F.gitconfig\n",[80,12696,12697],{"__ignoreMap":78},[83,12698,12699,12701,12704],{"class":85,"line":86},[83,12700,3070],{"class":89},[83,12702,12703],{"class":93}," nano",[83,12705,12706],{"class":93}," ~\u002F.gitconfig\n",[11,12708,12709],{},"Agrega la información requerida usando:",[73,12711,12713],{"className":75,"code":12712,"language":77,"meta":78,"style":78},"git config --global user.name \"newUser\"\ngit config --global user.email newUser@example.com\n",[80,12714,12715,12735],{"__ignoreMap":78},[83,12716,12717,12719,12722,12725,12728,12730,12733],{"class":85,"line":86},[83,12718,90],{"class":89},[83,12720,12721],{"class":93}," config",[83,12723,12724],{"class":165}," --global",[83,12726,12727],{"class":93}," user.name",[83,12729,617],{"class":616},[83,12731,12732],{"class":93},"newUser",[83,12734,623],{"class":616},[83,12736,12737,12739,12741,12743,12746],{"class":85,"line":260},[83,12738,90],{"class":89},[83,12740,12721],{"class":93},[83,12742,12724],{"class":165},[83,12744,12745],{"class":93}," user.email",[83,12747,12748],{"class":93}," newUser@example.com\n",[11,12750,12751],{},"Consulta toda la configuración con:",[73,12753,12755],{"className":75,"code":12754,"language":77,"meta":78,"style":78},"git config --list\n",[80,12756,12757],{"__ignoreMap":78},[83,12758,12759,12761,12763],{"class":85,"line":86},[83,12760,90],{"class":89},[83,12762,12721],{"class":93},[83,12764,12765],{"class":165}," --list\n",[11,12767,12768],{},"Omitir el nombre de usuario y el correo puede provocar que Git los complete automáticamente, generando mensajes como:",[73,12770,12773],{"className":12771,"code":12772,"language":147},[145],"[master 0d9d21d] initial project version\n Committer: root\nYour name and email address were configured automatically based\non your username and hostname. Please check that they are accurate.\nYou can suppress this message by setting them explicitly:\n\n    git config --global user.name \"Your Name\"\n    git config --global user.email you@example.com\n\nAfter doing this, you may fix the identity used for this commit with:\n\n    git commit --amend --reset-author\n",[80,12774,12772],{"__ignoreMap":78},[11,12776,12777],{},"En futuras entregas se cubrirá el uso de Git desde la terminal y los sistemas basados en web que dan soporte a este VCS.",[427,12779,12780],{},"html pre.shiki code .sCK9x, html code.shiki .sCK9x{--shiki-default:#80A665}html pre.shiki code .s7rlk, html code.shiki .s7rlk{--shiki-default:#C98A7D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sXjYR, html code.shiki .sXjYR{--shiki-default:#C99076}html pre.shiki code .sm68I, html code.shiki .sm68I{--shiki-default:#B8A965}html pre.shiki code .sNJcY, html code.shiki .sNJcY{--shiki-default:#C98A7D77}",{"title":78,"searchDepth":260,"depth":260,"links":12782},[12783,12784,12785],{"id":12513,"depth":260,"text":12514},{"id":12536,"depth":260,"text":12537},{"id":12684,"depth":260,"text":12685},"2013-07-19","Git es un sistema de control de versiones distribuido publicado en 2005 que permite el desarrollo no lineal de proyectos y maneja grandes cantidades de datos de forma eficiente.",{},"\u002Fblog\u002Fcomo-instalar-git-en-ubuntu-1304",{"title":12484,"description":12787},"blog\u002Fcomo-instalar-git-en-ubuntu-1304",[5573,11955,3060],"BDNPDE2fDXapoS6Qn6U6_JuUhCRDZCXByYF_sw7aNRw",{"id":12795,"title":12796,"body":12797,"date":12786,"description":12868,"draft":438,"extension":439,"image":12804,"lang":441,"meta":12869,"navigation":443,"path":12132,"seo":12870,"stem":12871,"tags":12872,"__hash__":12874},"blog\u002Fblog\u002Finstalacion-del-editor-de-texto-geany.md","Instalación del editor de texto Geany",{"type":8,"value":12798,"toc":12866},[12799,12805,12826,12835,12838,12856,12863],[11,12800,12801],{},[477,12802],{"alt":12803,"src":12804},"Editor Geany","\u002Fimg\u002Fposts\u002Fblog\u002Finstalacion-del-editor-de-texto-geany\u002Fgeany.png",[11,12806,12807,12808,12813,12814,12819,12820,12825],{},"Así como los usuarios de Windows suelen usar el Bloc de notas, ",[420,12809,12812],{"href":12810,"rel":12811},"http:\u002F\u002Fnotepad-plus-plus.org\u002F",[424],"Notepad++"," o ",[420,12815,12818],{"href":12816,"rel":12817},"http:\u002F\u002Fwww.sublimetext.com\u002F",[424],"Sublime Text",", los usuarios de Linux comúnmente usan ",[420,12821,12824],{"href":12822,"rel":12823},"http:\u002F\u002Fwww.geany.org\u002F",[424],"Geany",", un editor de texto que utiliza el toolkit GTK2 con características esenciales de un entorno de desarrollo integrado.",[11,12827,12828,12829,12834],{},"Fue desarrollado para ofrecer \"un IDE pequeño y rápido, que solo tiene unas pocas dependencias de otros paquetes\"; soporta numerosos tipos de archivo y ofrece características atractivas. Revisa algunas ",[420,12830,12833],{"href":12831,"rel":12832},"http:\u002F\u002Fwww.geany.org\u002FDocumentation\u002FScreenshots",[424],"capturas de pantalla"," como referencia.",[11,12836,12837],{},"Para instalar Geany en Ubuntu, escribe el siguiente comando en la terminal:",[73,12839,12841],{"className":75,"code":12840,"language":77,"meta":78,"style":78},"sudo apt-get install geany -y\n",[80,12842,12843],{"__ignoreMap":78},[83,12844,12845,12847,12849,12851,12854],{"class":85,"line":86},[83,12846,3070],{"class":89},[83,12848,3073],{"class":93},[83,12850,3076],{"class":93},[83,12852,12853],{"class":93}," geany",[83,12855,4290],{"class":165},[11,12857,12858,7434,12860],{},[521,12859,10544],{},[420,12861,12824],{"href":12822,"rel":12862},[424],[427,12864,12865],{},"html pre.shiki code .sCK9x, html code.shiki .sCK9x{--shiki-default:#80A665}html pre.shiki code .s7rlk, html code.shiki .s7rlk{--shiki-default:#C98A7D}html pre.shiki code .sXjYR, html code.shiki .sXjYR{--shiki-default:#C99076}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":78,"searchDepth":260,"depth":260,"links":12867},[],"Geany es un editor de texto ligero para Linux que utiliza el toolkit GTK2 y ofrece características básicas de un entorno de desarrollo integrado.",{},{"title":12796,"description":12868},"blog\u002Finstalacion-del-editor-de-texto-geany",[11948,12873,5191,11955,3060],"IDE","ZZj8xrSkV6BtXRIpDFBXyOo3CjUyDYAkCAk1Wh0kCE0",{"id":12876,"title":12877,"body":12878,"date":12980,"description":12981,"draft":438,"extension":439,"image":12884,"lang":441,"meta":12982,"navigation":443,"path":12983,"seo":12984,"stem":12985,"tags":12986,"__hash__":12987},"blog\u002Fblog\u002Fupdate-y-upgrade-ubuntu-1210-1304.md","Update y Upgrade de Ubuntu 12.10 a 13.04",{"type":8,"value":12879,"toc":12977},[12880,12885,12888,12892,12901,12909,12921,12924,12939,12942,12956,12959,12967,12975],[11,12881,12882],{},[477,12883],{"alt":3060,"src":12884},"\u002Fimg\u002Fposts\u002Fblog\u002Fupdate-y-upgrade-ubuntu-1210-1304\u002Fubuntu.jpg",[11,12886,12887],{},"Esta guía explica el proceso de actualización a Ubuntu 13.04 desde Windows usando el instalador Wubi para Ubuntu 12.10, para luego migrar a la versión objetivo sin discos de instalación. La instalación coexistirá con Windows y requiere una partición de disco duro adicional libre.",[18,12889,12891],{"id":12890},"pasos-de-instalación","Pasos de instalación",[11,12893,12894,12895,12900],{},"Comienza instalando ",[420,12896,12899],{"href":12897,"rel":12898},"http:\u002F\u002Fwww.ubuntu.com\u002Fdownload\u002Fdesktop\u002Fwindows-installer",[424],"Wubi",". Después de la instalación, reinicia tu PC y selecciona Ubuntu 12.10. Una vez iniciado, abre la terminal usando Ctrl+Alt+T.",[11,12902,12903,12904,613],{},"Comprueba las actualizaciones en los ",[420,12905,12908],{"href":12906,"rel":12907},"https:\u002F\u002Fhelp.ubuntu.com\u002Fcommunity\u002FRepositories\u002FUbuntu",[424],"repositorios",[73,12910,12911],{"className":75,"code":4541,"language":77,"meta":78,"style":78},[80,12912,12913],{"__ignoreMap":78},[83,12914,12915,12917,12919],{"class":85,"line":86},[83,12916,3070],{"class":89},[83,12918,3073],{"class":93},[83,12920,4552],{"class":93},[11,12922,12923],{},"Aplica las actualizaciones del sistema:",[73,12925,12927],{"className":75,"code":12926,"language":77,"meta":78,"style":78},"sudo apt-get upgrade -y\n",[80,12928,12929],{"__ignoreMap":78},[83,12930,12931,12933,12935,12937],{"class":85,"line":86},[83,12932,3070],{"class":89},[83,12934,3073],{"class":93},[83,12936,7540],{"class":93},[83,12938,4290],{"class":165},[11,12940,12941],{},"Para más detalles sobre el uso de apt-get:",[73,12943,12945],{"className":75,"code":12944,"language":77,"meta":78,"style":78},"sudo apt-get -h\n",[80,12946,12947],{"__ignoreMap":78},[83,12948,12949,12951,12953],{"class":85,"line":86},[83,12950,3070],{"class":89},[83,12952,3073],{"class":93},[83,12954,12955],{"class":165}," -h\n",[11,12957,12958],{},"Abre el Gestor de actualizaciones (Update Manager) presionando la tecla Windows y buscando \"Update Manager\".",[11,12960,12961,12962,2743],{},"Busca las actualizaciones disponibles y procede con la actualización. Para orientación adicional, consulta la ",[420,12963,12966],{"href":12964,"rel":12965},"http:\u002F\u002Fwww.ubuntu.com\u002Fdownload\u002Fdesktop\u002Fupgrade",[424],"página de actualización de Ubuntu",[11,12968,12969,7434,12971],{},[521,12970,10544],{},[420,12972,3060],{"href":12973,"rel":12974},"http:\u002F\u002Fwww.ubuntu.com\u002F",[424],[427,12976,10552],{},{"title":78,"searchDepth":260,"depth":260,"links":12978},[12979],{"id":12890,"depth":260,"text":12891},"2013-07-16","Guía que explica cómo actualizar de Ubuntu 12.10 a 13.04 usando el instalador Wubi para sistemas basados en Windows, sin necesidad de discos de instalación.",{},"\u002Fblog\u002Fupdate-y-upgrade-ubuntu-1210-1304",{"title":12877,"description":12981},"blog\u002Fupdate-y-upgrade-ubuntu-1210-1304",[11949,5191,11955,3060],"N2Ngj4Aq7j4Hz5bjTlkfniIucI4-WlTV3pfeXsN8Wu8",{"id":12989,"title":12990,"body":12991,"date":13078,"description":13079,"draft":438,"extension":439,"image":13080,"lang":441,"meta":13081,"navigation":443,"path":13082,"seo":13083,"stem":13084,"tags":13085,"__hash__":13088},"blog\u002Fblog\u002Fnunca-es-tarde-para-empezar-una-nueva-etapa.md","Nunca es tarde para empezar una nueva etapa...",{"type":8,"value":12992,"toc":13076},[12993,12996,12999,13002,13070,13073],[11,12994,12995],{},"Buen día, si llegaste a este punto, quizás te estés preguntando quien y que contenido se compartirá en este blog, quiero que tomes en cuenta primero el conocimiento es tácito, son mis experiencias y no necesariamente tienen que ser perfectas.",[11,12997,12998],{},"Mi nombre es Marco Torres, Analista de Aseguramiento de Calidad de Software \u002F Arquitecto de Soluciones de AWS, SysOps - BSG Institute, con más de 13 años de experiencia en el desarrollo de aplicaciones cliente-servidor, SysAdmin, pentester, orquestador local y en la nube, desarrollador en Infraestructura como Código y DevOps; con orientación a la sistémica organizacional, ingeniería de software y automatización de procesos industriales.",[11,13000,13001],{},"Entre los temas de interés que quiero compartirles están:",[23,13003,13004,13010,13016,13022,13028,13034,13040,13046,13052,13058,13064],{},[26,13005,13006,13009],{},[521,13007,13008],{},"Cloud Computing:"," AWS (EC2, Lambda, S3, RDS, VPC, CloudFront, IAM, etc.), Google Cloud Platform, Linode, Digital Ocean, Rackspace",[26,13011,13012,13015],{},[521,13013,13014],{},"Networking:"," Cisco\u002FCCNA, capas del Modelo OSI",[26,13017,13018,13021],{},[521,13019,13020],{},"Contenedores:"," Docker\u002FVagrant",[26,13023,13024,13027],{},[521,13025,13026],{},"Linux:"," distribuciones para servidor (AWS Linux, Ubuntu, CentOS, Debian) y variantes de escritorio",[26,13029,13030,13033],{},[521,13031,13032],{},"Control de versiones:"," SVN, Git",[26,13035,13036,13039],{},[521,13037,13038],{},"DevOps:"," herramientas de Atlassian, Jenkins, SonarQube, Prometheus\u002FGrafana, Nagios",[26,13041,13042,13045],{},[521,13043,13044],{},"Análisis y diseño de sistemas:"," arquitectura, UML, BPMN, modelado de datos",[26,13047,13048,13051],{},[521,13049,13050],{},"E-commerce:"," pasarelas de pago y plataformas",[26,13053,13054,13057],{},[521,13055,13056],{},"Lenguajes de programación:"," Java, Python, PHP, JavaScript, Ruby, C\u002FC++, Perl",[26,13059,13060,13063],{},[521,13061,13062],{},"Bases de datos:"," MySQL, PostgreSQL, Oracle, MongoDB, DynamoDB",[26,13065,13066,13069],{},[521,13067,13068],{},"Otras áreas de experiencia:"," Machine Learning, Blockchain, Web Services, Marketing Digital, Gestión de Proyectos, Seguridad, Auditoría de Sistemas",[11,13071,13072],{},"Sería bueno que me hagan sus comentarios así poder recibir un mayor feedback y así lograr una mejora continua.",[11,13074,13075],{},"Será hasta otra nueva oportunidad...",{"title":78,"searchDepth":260,"depth":260,"links":13077},[],"2013-06-03","Marco Torres se presenta como Analista de Aseguramiento de Calidad de Software y Arquitecto de Soluciones de AWS que comparte experiencias y conocimiento sobre cloud computing, DevOps y análisis de sistemas.","\u002Fimg\u002Fposts\u002Fblog\u002Fnunca-es-tarde-para-empezar-una-nueva-etapa\u002FCAM00013.jpg",{},"\u002Fblog\u002Fnunca-es-tarde-para-empezar-una-nueva-etapa",{"title":12990,"description":13079},"blog\u002Fnunca-es-tarde-para-empezar-una-nueva-etapa",[13086,11947,11948,13087],"Análisis De Sistemas","Dirección De Proyectos","3KmzRo4rEkgkNlC1-mv5-RO0hwo3N-3pCzF5XbNklpE",1786343042352]