Docker para desarrollo Yii2 en MacOS

En el post anterior vimos cómo crear un entorno de desarrollo para Drupal8 usando Docker.

Pero, ¿y si quiero usar otro framework de PHP, por ejemplo Yii2, en mi OSX? Es muy sencillo.

Instalación del DOCKER stack (docker4php)

docker4php miguelm$ cd Sites/testyii2
docker4php miguelm$ git clone https://github.com/wodby/docker4php
docker4php miguelm$ cd docker4php

Editar .env y dejarlo como sigue:

### Documentation available at https://docs.wodby.com/stacks/php/local
### Changelog can be found at https://github.com/wodby/docker4php/releases
### Images tags format explained at https://github.com/wodby/docker4php#images-tags

### PROJECT SETTINGS

PROJECT_NAME=unizaryii
PROJECT_BASE_URL=unizaryii.docker.localhost

DB_NAME=php
DB_USER=php
DB_PASSWORD=php
DB_ROOT_PASSWORD=password
DB_HOST=mariadb
DB_DRIVER=mysql

### --- PHP ----

#PHP_TAG=7.2-dev-4.8.2
#PHP_TAG=7.1-dev-4.8.2
#PHP_TAG=5.6-dev-4.8.2
PHP_TAG=7.2-dev-macos-4.8.2
#PHP_TAG=7.1-dev-macos-4.8.2
#PHP_TAG=5.6-dev-macos-4.8.2

### --- NGINX ----

NGINX_TAG=1.15-5.0.17
#NGINX_TAG=1.14-5.0.17

### --- NODE ---

NODE_TAG=10-0.9.0
#NODE_TAG=8-0.9.0
#NODE_TAG=6-0.9.0

### --- MARIADB ----

MARIADB_TAG=10.1-3.3.11
#MARIADB_TAG=10.2-3.3.11
#MARIADB_TAG=10.3-3.3.11

### --- POSTGRESQL ----

POSTGRES_TAG=11-1.5.0
#POSTGRES_TAG=10-1.5.0
#POSTGRES_TAG=9.6-1.5.0
#POSTGRES_TAG=9.5-1.5.0
#POSTGRES_TAG=9.4-1.5.0
#POSTGRES_TAG=9.3-1.5.0

### --- REDIS ---

REDIS_TAG=4-3.0.2
#REDIS_TAG=5-3.0.2

### --- ELASTICSEARCH ---

ELASTICSEARCH_TAG=6.3-3.0.2
#ELASTICSEARCH_TAG=6.2-3.0.2
#ELASTICSEARCH_TAG=6.1-3.0.2
#ELASTICSEARCH_TAG=6.0-3.0.2
#ELASTICSEARCH_TAG=5.6-3.0.2
#ELASTICSEARCH_TAG=5.5-3.0.2
#ELASTICSEARCH_TAG=5.4-3.0.2

### --- KIBANA ---

KIBANA_TAG=6.3-3.0.2
#KIBANA_TAG=6.2-3.0.2
#KIBANA_TAG=6.1-3.0.2
#KIBANA_TAG=6.0-3.0.2
#KIBANA_TAG=5.6-3.0.2
#KIBANA_TAG=5.5-3.0.2
#KIBANA_TAG=5.4-3.0.2

### --- SOLR ---

SOLR_TAG=7.4-3.0.6
#SOLR_TAG=7.3-3.0.6
#SOLR_TAG=7.2-3.0.6
#SOLR_TAG=7.1-3.0.6
#SOLR_TAG=6.6-3.0.6
#SOLR_TAG=5.5-3.0.6

### OTHERS

ADMINER_TAG=4.6-3.2.0
APACHE_TAG=2.4-4.0.2
ATHENAPDF_TAG=2.10.0
MEMCACHED_TAG=1-2.2.1
RSYSLOG_TAG=latest
VARNISH_TAG=4.1-3.0.10
WEBGRIND_TAG=1.5-1.6.2
OPENSMTPD_TAG=6.0-1.4.0
XHPROF_TAG=1.0.2

Compilamos y levantamos…

docker4php miguelm$ docker-compose up -d

En el fichero docker-compose.yml la variable NGINX_SERVER_ROOT tiene el valor /var/www/html/public
Así que creamos el directorio public y un fichero index.php para probar si todo ha ido bien…

docker4php miguelm$ mkdir public
docker4php miguelm$ echo "" > public/index.php

Lo siguiente será editar (como root) el fichero /etc/hosts de la máquina anfitrión y añadir algunas entradas que nos serán útiles:

127.0.0.1 unizaryii.docker.localhost
127.0.0.1 pma.unizaryii.docker.localhost

Y ya podemos ir a nuestro navegador en la máquina anfitrión: http://unizaryii.docker.localhost:8000/ y comprobar que todo funciona.

Instalación de Yii2 y creación de proyecto

Ahora que ya hemos comprobado que el setup funciona, vamos a instalar Yii2.

docker4php miguelm$ git clone https://github.com/yiisoft/yii2 _host-volumes/yii2
docker4php miguelm$ mv _host-volumes/yii2 .
docker4php miguelm$ rm -Rf _host-volumes

Y vamos a crear nuestro primer proyecto Yii2:

# eliminamos el directorio "public" completo
docker4php miguelm$ rm -Rf public
# creamos un nuevo proyecto en la carpeta "demo" 
docker4php miguelm$ composer create-project yiisoft/yii2-app-basic demo

Lo siguiente será editar el fichero docker-compose.yml para indicar el nuevo valor de NGINX_SERVER_ROOT, que deberá ser:

NGINX_SERVER_ROOT: /var/www/html/demo/web

Paramos y arrancamos los dockers con la nueva configuración:

docker4php miguelm$ docker-compose stop
docker4php miguelm$ docker-compose up -d

Ya tenemos nuestro proyecto Yii2 listo…

¿Y si en lugar de NGINX quiero utilizar Apache como servidor web?

Muy sencillo. Editamos el archivo docker-compose.yml y comentamos la sección de NGINX y descomentamos la sección de Apache. El fichero docker-compose.yml quedaría así:

version: "3"

services:
  mariadb:
    image: wodby/mariadb:$MARIADB_TAG
    container_name: "${PROJECT_NAME}_mariadb"
    stop_grace_period: 30s
    environment:
      MYSQL_ROOT_PASSWORD: $DB_ROOT_PASSWORD
      MYSQL_DATABASE: $DB_NAME
      MYSQL_USER: $DB_USER
      MYSQL_PASSWORD: $DB_PASSWORD
#    volumes:
#      - ./mariadb-init:/docker-entrypoint-initdb.d # Place init .sql file(s) here.
#      - /path/to/mariadb/data/on/host:/var/lib/mysql # I want to manage volumes manually.

#  postgres:
#    image: wodby/postgres:$POSTGRES_TAG
#    container_name: "${PROJECT_NAME}_postgres"
#    stop_grace_period: 30s
#    environment:
#      POSTGRES_PASSWORD: $DB_PASSWORD
#      POSTGRES_DB: $DB_NAME
#      POSTGRES_USER: $DB_USER
#    volumes:
#      - ./postgres-init:/docker-entrypoint-initdb.d # Place init file(s) here.
#      - /path/to/postgres/data/on/host:/var/lib/postgresql/data # I want to manage volumes manually.

  php:
    image: wodby/php:$PHP_TAG
    container_name: "${PROJECT_NAME}_php"
    environment:
      PHP_SENDMAIL_PATH: /usr/sbin/sendmail -t -i -S mailhog:1025
      DB_HOST: $DB_HOST
      DB_USER: $DB_USER
      DB_PASSWORD: $DB_PASSWORD
      DB_NAME: $DB_NAME
## Read instructions at https://wodby.com/stacks/php/docs/local/xdebug/
#      PHP_XDEBUG: 1
#      PHP_XDEBUG_DEFAULT_ENABLE: 1
#      PHP_XDEBUG_REMOTE_CONNECT_BACK: 0
#      PHP_IDE_CONFIG: serverName=my-ide
#      PHP_XDEBUG_REMOTE_HOST: 172.17.0.1 # Linux
#      PHP_XDEBUG_REMOTE_HOST: 10.254.254.254 # macOS
#      PHP_XDEBUG_REMOTE_HOST: 10.0.75.1 # Windows
    volumes:
      - ./:/var/www/html
## For macOS users (https://wodby.com/stacks/php/docs/local/docker-for-mac/)
#      - ./:/var/www/html:cached # User-guided caching
#      - docker-sync:/var/www/html # Docker-sync
## For XHProf and Xdebug profiler traces
#      - files:/mnt/files

#  nginx:
#    image: wodby/nginx:$NGINX_TAG
#    container_name: "${PROJECT_NAME}_nginx"
#    depends_on:
#      - php
#    environment:
#      NGINX_STATIC_OPEN_FILE_CACHE: "off"
#      NGINX_ERROR_LOG_LEVEL: debug
#      NGINX_BACKEND_HOST: php
#      NGINX_VHOST_PRESET: php
#      NGINX_SERVER_ROOT: /var/www/html/demo/web
#    volumes:
#      - ./:/var/www/html
# Options for macOS users (https://wodby.com/stacks/php/docs/local/docker-for-mac/)
#      - ./:/var/www/html:cached # User-guided caching
#      - docker-sync:/var/www/html # Docker-sync
#    labels:
#      - 'traefik.backend=${PROJECT_NAME}_nginx'
#      - 'traefik.port=80'
#      - 'traefik.frontend.rule=Host:${PROJECT_BASE_URL}'

  apache:
    image: wodby/apache:$APACHE_TAG
    container_name: "${PROJECT_NAME}_apache"
    depends_on:
      - php
    environment:
      APACHE_LOG_LEVEL: debug
      APACHE_BACKEND_HOST: php
      APACHE_VHOST_PRESET: php
      APACHE_DOCUMENT_ROOT: /var/www/html/demo/web
    volumes:
      - ./:/var/www/html
## For macOS users (https://wodby.com/stacks/php/docs/local/docker-for-mac/)
##      - ./:/var/www/html:cached # User-guided caching
##      - docker-sync:/var/www/html # Docker-sync
    labels:
      - 'traefik.backend=${PROJECT_NAME}_apache'
      - 'traefik.port=80'
      - 'traefik.frontend.rule=Host:${PROJECT_BASE_URL}'

  mailhog:
    image: mailhog/mailhog
    container_name: "${PROJECT_NAME}_mailhog"
    labels:
      - 'traefik.backend=${PROJECT_NAME}_mailhog'
      - 'traefik.port=8025'
      - 'traefik.frontend.rule=Host:mailhog.${PROJECT_BASE_URL}'

#  varnish:
#    image: wodby/varnish:$VARNISH_TAG
#    container_name: "${PROJECT_NAME}_varnish"
#    depends_on:
#      - nginx
#    environment:
#      VARNISH_SECRET: secret
#      VARNISH_BACKEND_HOST: nginx
#      VARNISH_BACKEND_PORT: 80
#      VARNISH_PURGE_EXTERNAL_REQUEST_HEADER: X-Real-IP
#    labels:
#      - 'traefik.backend=${PROJECT_NAME}_varnish'
#      - 'traefik.port=6081'
#      - 'traefik.frontend.rule=Host:varnish.${PROJECT_BASE_URL}'

#  redis:
#    container_name: "${PROJECT_NAME}_redis"
#    image: wodby/redis:$REDIS_TAG

#  adminer:
#    container_name: "${PROJECT_NAME}_adminer"
#    image: wodby/adminer:$ADMINER_TAG
#    environment:
## For PostgreSQL:
##      ADMINER_DEFAULT_DB_DRIVER: pgsql
#      ADMINER_DEFAULT_DB_HOST: $DB_HOST
#      ADMINER_DEFAULT_DB_NAME: $DB_NAME
#    labels:
#      - 'traefik.backend=${PROJECT_NAME}_adminer'
#      - 'traefik.port=9000'
#      - 'traefik.frontend.rule=Host:adminer.${PROJECT_BASE_URL}'

#  pma:
#    image: phpmyadmin/phpmyadmin
#    container_name: "${PROJECT_NAME}_pma"
#    environment:
#      PMA_HOST: $DB_HOST
#      PMA_USER: $DB_USER
#      PMA_PASSWORD: $DB_PASSWORD
#      PHP_UPLOAD_MAX_FILESIZE: 1G
#      PHP_MAX_INPUT_VARS: 1G
#    labels:
#      - 'traefik.backend=${PROJECT_NAME}_pma'
#      - 'traefik.port=80'
#      - 'traefik.frontend.rule=Host:pma.${PROJECT_BASE_URL}'

#  solr:
#    image: wodby/solr:$SOLR_TAG
#    container_name: "${PROJECT_NAME}_solr"
#    environment:
#      SOLR_HEAP: 1024m
#    labels:
#      - 'traefik.backend=${PROJECT_NAME}_solr'
#      - 'traefik.port=8983'
#      - 'traefik.frontend.rule=Host:solr.${PROJECT_BASE_URL}'

#  elasticsearch:
#    image: wodby/elasticsearch:$ELASTICSEARCH_TAG
#    environment:
#      ES_JAVA_OPTS: "-Xms500m -Xmx500m"
#    ulimits:
#      memlock:
#        soft: -1
#        hard: -1

#  kibana:
#    image: wodby/kibana:$KIBANA_TAG
#    depends_on:
#      - elasticsearch
#    labels:
#      - 'traefik.backend=${PROJECT_NAME}_kibana'
#      - 'traefik.port=5601'
#      - 'traefik.frontend.rule=Host:kibana.php.docker.localhost'

#  memcached:
#    container_name: "${PROJECT_NAME}_memcached"
#    image: wodby/memcached:$MEMCACHED_TAG

#  rsyslog:
#    container_name: "${PROJECT_NAME}_rsyslog"
#    image: wodby/rsyslog:$RSYSLOG_TAG

#  athenapdf:
#    image: arachnysdocker/athenapdf-service:$ATHENAPDF_TAG
#    container_name: "${PROJECT_NAME}_athenapdf"
#    environment:
#      WEAVER_AUTH_KEY: weaver-auth-key
#      WEAVER_ATHENA_CMD: "athenapdf -S"
#      WEAVER_MAX_WORKERS: 10
#      WEAVER_MAX_CONVERSION_QUEUE: 50
#      WEAVER_WORKER_TIMEOUT: 90
#      WEAVER_CONVERSION_FALLBACK: "false"

#  node:
#    image: wodby/node:$NODE_TAG
#    container_name: "${PROJECT_NAME}_node"
#    working_dir: /app
#    labels:
#      - 'traefik.backend=${PROJECT_NAME}_node'
#      - 'traefik.port=3000'
#      - 'traefik.frontend.rule=Host:front.${PROJECT_BASE_URL}'
#    expose:
#      - "3000"
#    volumes:
#      - ./path/to/your/single-page-app:/app
#    command: sh -c 'npm install && npm run start'

#  blackfire:
#    image: blackfire/blackfire
#    environment:
#      BLACKFIRE_SERVER_ID: XXXXX
#      BLACKFIRE_SERVER_TOKEN: YYYYY

#  webgrind:
#    image: wodby/webgrind:$WEBGRIND_TAG
#    environment:
#      WEBGRIND_PROFILER_DIR: /mnt/files/xdebug/profiler
#    labels:
#      - 'traefik.backend=${PROJECT_NAME}_webgrind'
#      - 'traefik.port=8080'
#      - 'traefik.frontend.rule=Host:webgrind.php.docker.localhost'
#    volumes:
#      - files:/mnt/files

#  opensmtpd:
#    container_name: "${PROJECT_NAME}_opensmtpd"
#    image: wodby/opensmtpd:$OPENSMTPD_TAG

#  xhprof:
#    image: wodby/xhprof:$XHPROF_TAG
#    restart: always
#    volumes:
#      - files:/mnt/files
#    labels:
#      - 'traefik.backend=${PROJECT_NAME}_xhprof'
#      - 'traefik.port=8080'
#      - 'traefik.frontend.rule=Host:xhprof.${PROJECT_BASE_URL}'

  portainer:
    image: portainer/portainer
    container_name: "${PROJECT_NAME}_portainer"
    command: --no-auth -H unix:///var/run/docker.sock
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    labels:
      - 'traefik.backend=${PROJECT_NAME}_portainer'
      - 'traefik.port=9000'
      - 'traefik.frontend.rule=Host:portainer.${PROJECT_BASE_URL}'

  traefik:
    image: traefik
    container_name: "${PROJECT_NAME}_traefik"
    command: -c /dev/null --web --docker --logLevel=INFO
    ports:
      - '8000:80'
#      - '8080:8080' # Dashboard
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

#volumes:
## Docker-sync for macOS users
#  docker-sync:
#    external: true
## For Xdebug profiler
#  files:

Después simplemente:

docker4php miguelm$ docker-compose up -d --remove-orphans

Entorno para desarrollo Drupal 8 en Mac: Docker con Apache + MariaDB + PHP + …

Vamos a ver cómo crear un entorno de desarrollo para Drupal 8 en OSX utilizando docker-compose. Con unos sencillos pasos conseguiremos tener montado de forma muy rápida un entorno completo que cuente con todo lo necesario para empezar a desarrollar en Drupal 8. Lo que vamos a tener será:
– MariaDB
– PHP-FPM
– Apache
– PhpMyAdmin
– Traefik
– Portainer

INSTALACIÓN DE DOCKER.

La instalación es muy sencilla. En linux ya viene preinstalado. En Mac se instala de forma muy simple, basta con seguir las instrucciones de la documentación oficial: https://docs.docker.com/docker-for-mac/install/#install-and-run-docker-for-mac

INSTALACIÓN DE dockerfordrupal

Lo primero será crear una cuenta en Docker Hub (repositorio de imgs Docker). Después abrimos Terminal y nos loggeamos:

docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: AQUITULOGIN
Password: AQUITUPASSWORD
Login Succeeded

Vamos a aprovechar el trabajo realiazdo por Wodby y clonamos su repo dockerfordrupal.

Para ello:

git clone https://github.com/wodby/docker4drupal
cd dockerfordrupal

En el directorio veremos varios archivos:

docker-compose.override.yml  docker.mk        LICENSE.md  README.md  traefik.yml
docker-compose.yml           docker-sync.yml  Makefile    tests

Vamos a modificar el fichero .env para darle nombre a nuestro proyecto (en mi caso unizar) e indicarle la base url. Para eso editaremos estas líneas.

PROJECT_NAME=unizar
PROJECT_BASE_URL=unizar.docker.localhost

El archivo docker-compose.override.yml de momento no vamos a usarlo. Es útil cuando se tienen varios entornos (desarrollo/producción) con distintos settings. En este caso lo vamos a renombrar porque editaremos directamente docker-compose.yml:

mv docker-compose.override.yml docker-compose.override.yml.back

Lo siguiente será eliminar todo el contenido de docker-compose.yml y reemplazarlo por el siguiente:

version: "3"
  
services:
  mariadb:
    image: wodby/mariadb:$MARIADB_TAG
    container_name: "${PROJECT_NAME}_mariadb"
    stop_grace_period: 30s
    environment:
      MYSQL_ROOT_PASSWORD: $DB_ROOT_PASSWORD
      MYSQL_DATABASE: $DB_NAME
      MYSQL_USER: $DB_USER
      MYSQL_PASSWORD: $DB_PASSWORD

  php:
    image: wodby/drupal:$DRUPAL_TAG
    container_name: "${PROJECT_NAME}_php"
    environment:
      PHP_SENDMAIL_PATH: /usr/sbin/sendmail -t -i -S mailhog:1025
      DB_HOST: $DB_HOST
      DB_USER: $DB_USER
      DB_PASSWORD: $DB_PASSWORD
      DB_NAME: $DB_NAME
      DB_DRIVER: $DB_DRIVER
      COLUMNS: 80 # Set 80 columns for docker exec -it.
## Read instructions at https://wodby.com/stacks/drupal/docs/local/xdebug/
      PHP_XDEBUG: 1
      PHP_XDEBUG_DEFAULT_ENABLE: 1
      PHP_XDEBUG_REMOTE_CONNECT_BACK: 1
      PHP_FPM_CLEAR_ENV: "no"
      #PHP_IDE_CONFIG: serverName=my-ide
      #PHP_XDEBUG_REMOTE_HOST: host.docker.internal # Docker 18.03+ & Linux/Mac/Win
      PHP_XDEBUG_REMOTE_HOST: 172.17.0.1 # Linux, Docker < 18.03
    volumes:
      - ./code:/var/www/html


  apache:
    image: wodby/apache:$APACHE_TAG
    container_name: "${PROJECT_NAME}_apache"
    depends_on:
      - php
    environment:
      APACHE_LOG_LEVEL: debug
      APACHE_BACKEND_HOST: php
      APACHE_VHOST_PRESET: php
      APACHE_DOCUMENT_ROOT: /var/www/html/web
    volumes:
      - ./code/:/var/www/html
# For macOS users (https://wodby.com/stacks/drupal/docs/local/docker-for-mac/)
#      - ./:/var/www/html:cached # User-guided caching
#      - docker-sync:/var/www/html # Docker-sync
    labels:
      - 'traefik.backend=${PROJECT_NAME}_apache'
      - 'traefik.port=80'
      - 'traefik.frontend.rule=Host:${PROJECT_BASE_URL}'


  pma:
    image: phpmyadmin/phpmyadmin
    container_name: "${PROJECT_NAME}_pma"
    environment:
      PMA_HOST: $DB_HOST
      PMA_USER: $DB_USER
      PMA_PASSWORD: $DB_PASSWORD
      PHP_UPLOAD_MAX_FILESIZE: 1G
      PHP_MAX_INPUT_VARS: 1G
    labels:
      - 'traefik.backend=${PROJECT_NAME}_pma'
      - 'traefik.port=80'
      - 'traefik.frontend.rule=Host:pma.${PROJECT_BASE_URL}'

  portainer:
    image: portainer/portainer
    container_name: "${PROJECT_NAME}_portainer"
    command: --no-auth -H unix:///var/run/docker.sock
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    labels:
      - 'traefik.backend=${PROJECT_NAME}_portainer'
      - 'traefik.port=9000'
      - 'traefik.frontend.rule=Host:portainer.${PROJECT_BASE_URL}'

  traefik:
    image: traefik
    container_name: "${PROJECT_NAME}_traefik"
    command: -c /dev/null --web --docker --logLevel=INFO
    ports:
      - '8000:80'
      - '8080:8080' # Dashboard
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

Compilamos y construimos:

docker-compose up -d

En este momento ya podemos ver los contenedores, para ello empleamos el comando "docker-compose ps"

docker-compose ps
      Name                    Command               State                      Ports
--------------------------------------------------------------------------------------------------------
unizar_apache      /docker-entrypoint.sh sudo ...   Up      80/tcp
unizar_mariadb     /docker-entrypoint.sh mysqld     Up      3306/tcp
unizar_php         /docker-entrypoint.sh sudo ...   Up      9000/tcp
unizar_pma         /run.sh supervisord -n           Up      80/tcp, 9000/tcp
unizar_portainer   /portainer --no-auth -H un ...   Up      9000/tcp
unizar_traefik     /traefik -c /dev/null --we ...   Up      0.0.0.0:8000->80/tcp, 0.0.0.0:8080->8080/tcp

Si queremos pararlos:

docker-compose stop

Y para arrancarlos:

docker-compose start

Para ver logs:

docker-compose logs

Lo siguiente será editar (como root) el fichero /etc/hosts para indicarle algunos nombres que nos irán bien. Para ello debemos tener presente lo que escribimos anteriormente en el fichero .env. En mi caso sería así:

# /etc/hosts
127.0.0.1    unizar.docker.localhost
127.0.0.1    pma.unizar.docker.localhost
127.0.0.1    portainer.unizar.docker.localhost 

Llegados a este punto ya podremos abrir un navegador y acceder a varias direcciones:
http://unizar.docker.localhost:8000 -> para comenzar la instalación de Drupal, una vez traido el source
http://pma.unizar.docker.localhost:8000 -> para acceder a PhpMyAdmin
http://portainer.unizar.docker.localhost:8000 -> para tener una visión web de los contenedores Dockers.

Si lo que queremos es ENTRAR a la máquina host, podemos hacerlo asi:

docker-compose ps # nos da la lista de dockers que están corriendo

docker exec -it unizar_php bash # ejecutar "bash" dentro del docker llamado "unizar_php" # así mantiene la máquina "viva"

RESUELTO – Conectar a VMware VCenter desde OSX (Mac)

¿Cuál es la forma más sencilla de conectarte a VCenter desde tu Mac? Sigue los pasos del post para instalar VirtualBox y una máquina virtual Windows, después inicia la máquina virtual recién instalada, abre un navegador web, conéctate a tu VCenter y descarga e instala el cliente VMware.

Conectar a Vcenter en Mac (OSX)

Una vez lo hayas hecho, toma un snapshot (instantánea) de tu máquina en VirtualBox. Asi siempre tendrás una instantánea con el cliente vmware instalado, lista para funcionar.

Fácil y ¡gratis!

RESUELTO – Internet Explorer (IE7, IE8, IE9, IE10, IE11) en MAC (OS X)

Muchas veces nos vemos en la obligación de probar cómo se ve una web en Internet Explorer. Inexplicablemente, todavía hay muchos usuarios que emplean Internet Explorer en sus versiones más antiguas (IE6, IE7, IE8, IE9), pese a las obvias desventajas de elegir este navegador.

Internet Explorer en MAC OSX

Desde Windows resulta más sencillo. Pero, ¿cómo ejecutar Internet Explorer desde tu OS X (Mac)?

La solución es sencilla:

1. Instala VirtualBox (descargar el instalador de VirtualBox para OSX)

2. Decide qué versiones de IE quieres instalar, abre Terminal y escribe el comando adecuado en función a la versión que desees *
— Todas las versiones de IE (crearás tantas máquinas virtuales como versiones de IE se instalen)

curl -s https://raw.githubusercontent.com/xdissent/ievms/master/ievms.sh | bash

— Internet Explorer 7 (IE7):

curl -s https://raw.github.com/xdissent/ievms/master/ievms.sh | IEVMS_VERSIONS="7" bash

— Internet Explorer (IE8):

curl -s https://raw.github.com/xdissent/ievms/master/ievms.sh | IEVMS_VERSIONS="8" bash

— Internet Explorer (IE9):

curl -s https://raw.githubusercontent.com/xdissent/ievms/master/ievms.sh | IEVMS_VERSIONS="9" bash

— Internet Explorer (IE10):

curl -s https://raw.githubusercontent.com/xdissent/ievms/master/ievms.sh | IEVMS_VERSIONS="10" bash

— Internet Explorer (IE11):

curl -s https://raw.githubusercontent.com/xdissent/ievms/master/ievms.sh | IEVMS_VERSIONS="11" bash

3. Abre VirtualBox (lo tendrás instalado en “Aplicaciones” > “Virtual Box”) e inicia la máquina virtual adecuada. Se iniciará Windows y tendrás la versión de Internet Explorer que elegiste disponible. Recuerda que la contraseña por defecto de Windows es “Password1”.
Además, puedes realizar un snapshot de las máquinas para “solventar” el problema de la licencia de evaluación de 30 días que Microsoft aplica a su SO. Crea un snapshot nada más instalar las máquinas virtuales y arráncalo. Asi siempre tendrás tus 30 días de evaluación restantes.

Internet Explorer en Mac (resuelto)

* Los comandos del paso 2 son parte del ievsms script de xdissent y se encargan del proceso completo de descarga, conversión e instalación. Más fácil no puede ser 🙂

Nota: Si las URL’s de arriba no funcionan correctamente, puede ser que github haya cambiado la estructura de URL’s de raw.github.com a raw.githubusercontent.com. Corrige las URL’s superiores según este patrón.

Rename multiple files using sequence number in OSX from command line [SOLVED]

With this command you will rename all the jpg files in the current directory to PREFIX_0000.jpg to PREFIX_9999.jpg

find . -name '*.jpg' \
| awk 'BEGIN{ a=0 }{ printf "mv %s PREFIX_%04d.jpg\n", $0, a++ }' \
| bash

If you just need two numbers (PREFIX_00.jpg to PREFIX_99.jpg) you can do it by:

find . -name '*.jpg' \
| awk 'BEGIN{ a=0 }{ printf "mv %s PREFIX_%02d.jpg\n", $0, a++ }' \
| bash

OS X y cliente SAMBA para conectar a disco usb de LIVEBOX Orange [Resuelto]

Una de las cosas que menos me ha gustado del proceso de migración a OS X ha sido que el sistema no permita conectarse a servidores samba.

Si, como yo, tenéis un router Livebox de Orange, podéis conectar un disco duro o pendrive a él y verlo desde todos los ordenadores de la casa… que no ejecuten OS X. Simplemente tendréis que ir al navegador y poner \\Livebox\ (Windows) o smb:\\Livebox\ para los MAC anteriores.

Si el disco está en NFTS solo se podrá leer. Para que pueda leerse y escribirse deberá estar en FAT32.

Vamos a ver cómo hacer que se vean también en OS X. Para ello vamos a levantar el servicio samba instalando el donationware SMBup.

Con esta aplicación se realizarán los cambios necesarios en el sistema para que puedas ver tus discos montados con SMB (como el que hayas conectado al router Livebox de Orange). El software, además, te permite deshacer todo el proceso, si lo deseas hacer en algún momento.

¡No os olvidéis de donar algo! 🙂

Apple Wireless Keyboard en Windows 7 [resuelto]

Hace días adquirí un teclado Wireless Keyboard de Apple (bluetooth) y quiero utilizarlo tanto en mi PC como en el MAC. Es el modelo bluetooth de DOS pilas.

Para que funcione correctamente en PC:

– Debes contar con bluetooth en tu PC. Si es un portátil, seguramente lo tendrá. Sino, tendrás que adquirir un dongle bluetooth. En mi caso, compré este en amazon

– Vamos a añadir funcionalidades con AppleWirelessKeyboard tool (en codeplex). En concreto, éstas:

    F3: PrintScreen
    F4: Task Manager
    F7-F9: iTunes control
    F10-F12: System volume Control
    Eject button toggles Fkeys/Functions.
    Fn + F key triggers function (useful when in F keys mode)
    Fn + Backspace = Delete
    Fn+ Eject: Eject CD

Descargamos el programa de su nueva página web y lo ejecutamos (como administrador). Probamos las nuevas funcionalidades y vemos que funcionan.

Por ejemplo, al pulsar F10 el sonido se apagará. Si queremos la funcionalidad habitual de la tecla F10 (lo habitual en windows), pulsaremos ctrl+F10. Podemos alternar entre un modo (MAC o Windows) y otro pulsando la tecla Eject.

En mi caso, sin embargo, se perdían con cada reinicio.

Por tanto, añadí este programa para que se ejecute automáticamente cada vez que Windows se inicia. En mi caso, copié el acceso directo al path C:\Users\miguel\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup.

– Windows 7 lo detecta (teclado español internacional). Comprobemos:

En esta situación, “mayor que” y “menor que” no están donde deberían, sino encima del tabulador izquierdo. Al pulsar las teclas < ó > aparecen los símbolos ª y º.

Vamos a arreglar este problema con SharpKeys (hay otros programas similares, como KeyTweak ó The Microsoft Keyboard Layout Creator), pero SharpKeys es muy sencillo de usar (y solo hay que ejecutarlo una vez, escribir los cambios en el registro, y se puede borrar).

Primero abrimos el programa, y a continuación hacemos click en el botón “Add”. Se abre una ventana en la que encontramos dos listas, la de la izquierda con las teclas de origen y la de la derecha con las teclas de destino. La tecla de origen es la tecla que queremos cambiar, y la de destino representa la nueva función que le queremos dar.

Podemos asignar las teclas seleccionandolas directamente de la lista pero algunas apareceran al final de la lista como desconocidas (“unknown”). Para encontrarlas facilmente podemos usar el botón “Type key”, que nos permite presionar la tecla que queremos editar. Una vez hecho elegimos la nueva función en la lista de la derecha y Pulsamos OK para aceptar, y repetimos el proceso para las demás teclas.

Haré DOS cambios. El primero, pulsar sobre el “type here izquierdo”, la tecla ºª, “type here derecho” y tecla <>. El segundo, “type here izquierdo”, tecla <>, “type here derecho”, tecla ºª.

Deberá quedar algo asi:

Cuando las tengamos todas sólo hay que pulsar el botón Write to Registry, cerrar el programa y reniciar la sesión en Windows, o reiniciar el ordenador.

El teclado Apple Wireless Keyboard funcionará ahora perfectamente con Windows 7.

OS X: Mostrar unidades conectadas en el escritorio [resuelto]

Como usuario habitual de Windows, estoy acostumbrado a que al conectar un disco USB, Windows abra una ventana que me permite explorar directamente el disco. Es cómodo.

En OS X 10.8, por defecto, las unidades se montan de forma automática y puedes acceder a ellas desde Finder->Ir->Ordenador (o pulsando Shift+Cmd+C). Sin embargo, resulta más cómodo que la unidad, al montarse, aparezca directamente en el escritorio.

Para ello, vamos al Finder-> Preferencias -> General y marcamos “Mostrar estos ítems en el escritorio“, como en la siguiente imagen:
mostrar discos en el escritorio OS X 10.8</img></p>
  </div>
  
    
  <div class= Posted in: OS XTagged: , , , ,

Descomprimir ficheros ZIP/RAR en OS X: aplicación gratuita

Como os decía en otro post, llevo unos días muy entretenido descubriendo las posibilidades de OS X. La migración desde un sistema Windows está siendo bastante natural e intuitiva, aunque algunos aspectos se me resisten un poco más. Por ejemplo, escribir en discos NTFS.

Otra de las tareas más habituales consiste en comprimir/descomprimir archivos ZIP y RAR.

He probado varias aplicaciones y la que más me gusta es: Zipeg (freeware) 🙂