# Instalación

### 1. Requisitos Previos (Prerequisites)

Antes de que el usuario clone o descargue nada, debe saber si su sistema es compatible.

- **Sistema Operativo:** Linux
- **Software/Herramientas:** Versiones específicas de lenguajes (ej. Node.js v24, Composer 2.7.1)
- **Gestores de paquetes o bases de datos:** Docker, Composer, nodejs, npm

> **Tip:** Si es posible, incluye los enlaces oficiales para descargar estos requisitos.

### 2. Clonación o Descarga del Proyecto

El primer paso práctico. Indica cómo obtener el código fuente.

```bash
git clone https://github.com/openemr/openemr.git
git checkout v8_0_0_3
```

### 3. Configuración del Entorno (Environment Setup)

```bash
sudo apt install composer
sudo apt install nodejs npm
sudo npm install -g n
sudo n 24
composer install --no-dev
npm install
npm run build
```

#### 3.1 Configuración de Compose

Actualizar el archivo **openemr/docker/development-easy/docker-compose.yml con la imagen de openemr(línea 29)**

<details id="bkmrk-services%3A-mysql%3A-res"><summary></summary>

```yaml
services:
  mysql:
    restart: always
    image: mariadb:11.8
    command: ['mariadbd','--character-set-server=utf8mb4','--ssl-ca=/etc/ssl/ca.pem','--ssl_cert=/etc/ssl/server-cert.pem','--ssl_key=/etc/ssl/server-key.pem']
    ports:
    - 8320:3306
    volumes:
    - ../library/sql-ssl-certs-keys/easy/ca.pem:/etc/ssl/ca.pem:ro
    - ../library/sql-ssl-certs-keys/easy/server-cert.pem:/etc/ssl/server-cert.pem:ro
    - ../library/sql-ssl-certs-keys/easy/server-key.pem:/etc/ssl/server-key.pem:ro
    - databasevolumev8:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
    healthcheck:
      test:
      - CMD
      - /usr/local/bin/healthcheck.sh
      - --su-mysql
      - --connect
      - --innodb_initialized
      start_period: 1m
      start_interval: 10s
      interval: 1m
      timeout: 5s
      retries: 3
  openemr:
    restart: always
    image: openemr/openemr:flex //Actualizar
    ports:
    - 8300:80
    - 9300:443
    volumes:
    - ${OPENEMR_DIR:-../..}:/openemr:ro
    - ${OPENEMR_DIR:-../..}:/var/www/localhost/htdocs/openemr:rw
    - assetvolumev8:/var/www/localhost/htdocs/openemr/public/assets:rw
    - themevolumev8:/var/www/localhost/htdocs/openemr/public/themes:rw
    - sitesvolumev8:/var/www/localhost/htdocs/openemr/sites:rw
    - nodemodulesv8:/var/www/localhost/htdocs/openemr/node_modules:rw
    - vendordirv8:/var/www/localhost/htdocs/openemr/vendor:rw
    - ccdanodemodulesv8:/var/www/localhost/htdocs/openemr/ccdaservice/node_modules:rw
    - ccdanodemodules2v8:/var/www/localhost/htdocs/openemr/ccdaservice/packages/oe-cqm-service/node_modules:rw
    - logvolumev8:/var/log
    - couchdbvolumev8:/couchdb/data
    environment:
      DEBUG_COLORS: "true"
      TERM: xterm-256color
      COLORTERM: truecolor
      MYSQL_HOST: mysql
      MYSQL_ROOT_PASS: root
      MYSQL_USER: openemr
      MYSQL_PASS: openemr
      OE_USER: admin
      OE_PASS: pass
      EASY_DEV_MODE: "yes"
      EASY_DEV_MODE_NEW: "yes"
      DEVELOPER_TOOLS: "yes"
      XDEBUG_ON: 1
      XDEBUG_PROFILER_ON: 1
      # setting xdebug client host for cases where xdebug.discover_client_host fails
      XDEBUG_CLIENT_HOST: host.docker.internal
      GITHUB_COMPOSER_TOKEN: c313de1ed5a00eb6ff9309559ec9ad01fcc553f0
      GITHUB_COMPOSER_TOKEN_ENCODED: Z2hwX0NpbnJ4aXlNd0NzcGZXWG1UWFUwcXhGa040elFKSDJoZGJXVw==
      GITHUB_COMPOSER_TOKEN_ENCODED_ALTERNATE: '103 104 112 95 57 54 108 115 88 116 87 72 51 75 81 105 69 88 88 119 97 79 80 78 109 69 66 115 85 97 106 78 112 71 49 81 90 102 74 121'
      SELENIUM_USE_GRID: "true"
      SELENIUM_HOST: selenium
      SELENIUM_FORCE_HEADLESS: "false"
      SELENIUM_BASE_URL: "http://openemr"
      OPENEMR_DOCKER_ENV_TAG: easy-dev-docker
      OPENEMR_SETTING_site_addr_oath: 'https://localhost:9300'
      OPENEMR_SETTING_oauth_password_grant: 3
      OPENEMR_SETTING_rest_system_scopes_api: 1
      OPENEMR_SETTING_rest_api: 1
      OPENEMR_SETTING_rest_fhir_api: 1
      OPENEMR_SETTING_rest_portal_api: 1
      OPENEMR_SETTING_portal_onsite_two_enable: 1
      OPENEMR_SETTING_ccda_alt_service_enable: 3
      OPENEMR_SETTING_couchdb_host: couchdb
      OPENEMR_SETTING_couchdb_port: 6984
      OPENEMR_SETTING_couchdb_user: admin
      OPENEMR_SETTING_couchdb_pass: password
      OPENEMR_SETTING_couchdb_dbase: example
      OPENEMR_SETTING_couchdb_ssl_allow_selfsigned: 1
      OPENEMR_SETTING_gbl_ldap_host: 'ldap://openldap:389'
      OPENEMR_SETTING_gbl_ldap_dn: 'cn={login},dc=example,dc=org'
      OPENEMR_SETTING_EMAIL_METHOD: SMTP
      OPENEMR_SETTING_SMTP_HOST: mailpit
      OPENEMR_SETTING_SMTP_PORT: 1025
      OPENEMR_SETTING_SMTP_USER: openemr
      OPENEMR_SETTING_SMTP_PASS: openemr
      OPENEMR_SETTING_SMTP_SECURE: ''
      OPENEMR_SETTING_SMTP_Auth: 'TRUE'
      OPENEMR_SETTING_practice_return_email_path: 'noreply@openemr.local'
      OPENEMR_SETTING_Patient_Reminder_Sender_Name: 'OpenEMR Reminders'
    depends_on:
      mysql:
        condition: service_healthy
    healthcheck:
      test:
      - CMD
      - /usr/bin/curl
      - --fail
      - --insecure
      - --location
      - --show-error
      - --silent
      - https://localhost/meta/health/readyz
      start_period: 3m
      start_interval: 10s
      interval: 1m
      timeout: 5s
      retries: 3
  selenium:
    restart: always
    image: selenium/standalone-chromium:4.40.0
    ports:
    - 4444:4444    # Selenium WebDriver interface
    - 7900:7900    # VNC port for viewing browser during tests (to work, will require SELENIUM_FORCE_HEADLESS to be "false" in openemr service)
    environment:
      SE_VNC_PASSWORD: openemr123
      SE_SCREEN_WIDTH: 1920
      SE_SCREEN_HEIGHT: 1080
      SE_SCREEN_DEPTH: 24
      SE_START_XVFB: true
    volumes:
    - /dev/shm:/dev/shm
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:4444/wd/hub/status"]
      start_period: 30s
      interval: 30s
      timeout: 5s
      retries: 3
  phpmyadmin:
    restart: always
    image: phpmyadmin
    ports:
    - 8310:80
    environment:
      PMA_HOSTS: mysql
    depends_on:
      mysql:
        condition: service_healthy
  couchdb:
    restart: always
    image: couchdb
    ports:
    - 5984:5984
    - 6984:6984
    volumes:
    - ../library/couchdb-config-ssl-cert-keys/local.ini:/opt/couchdb/etc/local.ini:rw
    - ../library/couchdb-config-ssl-cert-keys/easy/ca.pem:/etc/ssl/ca.pem:ro
    - ../library/couchdb-config-ssl-cert-keys/easy/server-cert.pem:/etc/ssl/server-cert.pem:ro
    - ../library/couchdb-config-ssl-cert-keys/easy/server-key.pem:/etc/ssl/server-key.pem:ro
    - couchdbvolumev8:/opt/couchdb/data
    environment:
      COUCHDB_USER: admin
      COUCHDB_PASSWORD: password
  openldap:
    restart: always
    image: openemr/dev-ldap:easy
    environment:
      LDAP_TLS_VERIFY_CLIENT: try
      LDAP_TLS_CA_CRT_FILENAME: ca.pem
      LDAP_TLS_CRT_FILENAME: server-cert.pem
      LDAP_TLS_KEY_FILENAME: server-key.pem
  mailpit:
    restart: unless-stopped
    image: axllent/mailpit:latest
    ports:
    - 8025:8025    # Web UI and API
    - 1025:1025    # SMTP server
    environment:
      MP_SMTP_AUTH_ACCEPT_ANY: 1
      MP_SMTP_AUTH_ALLOW_INSECURE: 1
      MP_MAX_MESSAGES: 5000
      MP_DATABASE: /data/mailpit.db
    volumes:
    - mailpitvolumev8:/data
    healthcheck:
      test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:8025/api/v1/messages"]
      start_period: 10s
      interval: 30s
      timeout: 5s
      retries: 3
volumes:
  databasevolumev8: {}
  assetvolumev8: {}
  themevolumev8: {}
  sitesvolumev8: {}
  nodemodulesv8: {}
  vendordirv8: {}
  ccdanodemodulesv8: {}
  ccdanodemodules2v8: {}
  logvolumev8: {}
  couchdbvolumev8: {}
  mailpitvolumev8: {}

```

</details>### 4. Ejecución de la Aplicación (Running the App)

```bash
docker compose -f docker/development-easy/docker-compose.yml up -d
```

#### 4.1 Acceso

- url: [https://localhost:9300/](https://localhost:9300/)
- usuario: admin
- password: pass