{"id":21953956,"url":"https://github.com/hydroshare/hs-docker-irods","last_synced_at":"2026-05-03T20:32:53.570Z","repository":{"id":31924809,"uuid":"35494187","full_name":"hydroshare/hs-docker-irods","owner":"hydroshare","description":"iRODS v4.1.x, PostgreSQL v9.3.6, Tomcat v8.0.22, iDrop Web v2.1.0 ","archived":false,"fork":false,"pushed_at":"2015-06-09T16:49:27.000Z","size":240,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-10-06T21:30:04.883Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hydroshare.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-05-12T14:49:11.000Z","updated_at":"2016-06-26T18:26:30.000Z","dependencies_parsed_at":"2022-07-28T23:49:09.106Z","dependency_job_id":null,"html_url":"https://github.com/hydroshare/hs-docker-irods","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hydroshare/hs-docker-irods","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hydroshare%2Fhs-docker-irods","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hydroshare%2Fhs-docker-irods/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hydroshare%2Fhs-docker-irods/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hydroshare%2Fhs-docker-irods/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hydroshare","download_url":"https://codeload.github.com/hydroshare/hs-docker-irods/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hydroshare%2Fhs-docker-irods/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32583948,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T06:36:36.687Z","status":"ssl_error","status_checked_at":"2026-05-03T06:36:09.306Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-29T07:14:33.571Z","updated_at":"2026-05-03T20:32:53.535Z","avatar_url":"https://github.com/hydroshare.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# hs-docker-irods\n\nA dockerized version of iRODS v4.1.x using PostgreSQL v9.3.6 as the iCAT database.\n\nTo overcome the ephemeral nature of docker containers this project has been structured to make use of a centralized data container to share and persist data volumes between the running docker containers and the host. In this way the docker containers can come into or out of existence and attach to a previously known state based on the contents of the shared volumes. The iRODS iCAT database and any added data files will remain intact even if the running containers are stopped, removed or have their images destroyed entirely.\n\n---\n\n### How this works\n\n1. A data container is created for the sole purpose of sharing information between other docker containers and the host\n    - Create volumes to share with other containers: \n    \n    ```\n    VOLUME [\"/conf\", \"/var/log\", \"/var/backup\", \"/root/.secret\", \\\n\"/opt/java\", \"/opt/tomcat\", \\\n\"/var/lib/pgsql/9.3/data\", \\\n\"/var/lib/irods\", \"/etc/irods\"]\n```\n    - Mount volumes as shared directories with the host: \n    \n    ```\n    docker run -d --name ${APPSTACK_DATA} -v /srv/conf:/conf -v /srv/log:/var/log -v /srv/backup:/var/backup \\\n        -v /srv/java:/opt/java -v /srv/tomcat:/opt/tomcat \\\n        -v /srv/pgsql:/var/lib/pgsql/9.3/data \\\n        -v /srv/irods:/var/lib/irods -v /srv/etc_irods:/etc/irods \\\n        -v /srv/.secret:/root/.secret \\\n        -ti ${APPSTACK_DATA_IMG}\n``` \n2. A PostgreSQL database is added in two phases\n    - Setup - Configure and install the required PostgreSQL files onto the shared data volumes provided by the data container.\n    - Run - Stand up a light weight container and connect to the pre-configured PostgreSQL instance as defined in the shared data volumes provided by the data container.\n3. An iRODS installation is added in two phases\n    - Setup - Configure and install the required iRODS files onto the shared data volumes provided by the data container.\n    - Run - Stand up a light weight contianer and connect to the pre-configured iRODS instance as defined in the shared data volumes. Certain group and user checks are also performed. \n4. An iDrop Web viewer is added in two phases\n    - Setup - Configure and install the required tomcat and java files onto the shared data volumes provided by the data container.\n    - Run - Stand up a light weight container and connect to the pre-configured tomcat and java files as defined in the shared data volumes provided by the data container.\n    \n---\n\n### How to use\n\n1. Ensure you have a version of docker that can execute `docker exec`. This would be docker version 1.3 or later.\n2. Configure the `irods-config.yaml`, `rodsuser-config.yaml` and `idrop-config.yaml` files\n3. Run the script `run-docker-irods.sh HOST_IP_ADDRESS`, where **HOST_IP_ADDRESS** is the IP of your host you are running on (same as the host you use for viewing the hydroshare application in a browser). \n4. Check [http://HOST_IP_ADDRESS:8080/idrop-web2/](http://HOST_IP_ADDRESS:8080/idrop-web2/), and Sign in as the user defined in `rodsuser-config.yaml`\n\n### Configure\n\nThe first time the script is run it will build the required images to setup and run iRODS with PostgreSQL using the attributes defined in `config-files/irods-config.yaml`, `config-files/rodsuser-config.yaml` and `config-files/idrop-config`. You will want to define the attributes for your environment prior to running the script for the first time. \n\nThe iRODS administrative information, one additional standard **rodsuser** and the defaults for an iDrop Web2 deployment can be defined in the config files. The default settings for each of these files is shown below.\n\n**irods-config.yaml**\n\n```\nSERVICE_ACCT_USERNAME: irods\nSERVICE_ACCT_GROUP: irods\nIRODS_ZONE: hydrodevZone\nIRODS_PORT: 1247\nRANGE_BEGIN: 20000\nRANGE_END: 20199\nVAULT_DIRECTORY: /var/lib/irods/iRODS/Vault\nZONE_KEY: TEMPORARY_zone_key\nNEGOTIATION_KEY: TEMPORARY_32byte_negotiation_key\nCONTROL_PLANE_PORT: 1248\nCONTROL_PLANE_KEY: TEMPORARY__32byte_ctrl_plane_key\nSCHEMA_VALIDATION_BASE_URI: https://schemas.irods.org/configuration\nADMINISTRATOR_USERNAME: rods\nADMINISTRATOR_PASSWORD: rods\nHOSTNAME_OR_IP: irods-db\nDATABASE_PORT: 5432\nDATABASE_NAME: ICAT\nDATABASE_USER: irods\nDATABASE_PASSWORD: irods\n```\n\n**rodsuser-config.yaml**\n\n```\nRODSUSER_IRODS_RESOURCE: hydrodevResc\nRODSUSER_IRODS_ZONE: hydrodevZone\nRODSUSER_IRODS_USERNAME: hsproxy\nRODSUSER_IRODS_AUTH: proxywater1\n```\n\n**idrop-config.yaml**\n\n```\nIDROP_CONFIG_PRESET_HOST: irods-icat\nIDROP_CONFIG_PRESET_PORT: 1247\nIDROP_CONFIG_PRESET_ZONE: hydrodevZone\nIDROP_CONFIG_PRESET_RESOURCE: hydrodevResc\n```\n\n### Run\n\nOnce you've configured the `irods-config.yaml` and `rodsuser-config.yaml` files you only need to run the `run-docker-irods.sh` script with the argument `HOST_IP_ADDRESS`. The information you provided in the config files will be used to setup and run the iRODS environment.\n\n**Example**\n\n```\n$ ./run-docker-irods.sh localhost\n*** RUN SCRIPT run-docker-irods.sh ***\n*** update github submodules ***\n...\nStarting iRODS server...\nConfirming catalog_schema_version... Success\nValidating [/var/lib/irods/.irods/irods_environment.json]... Success\nValidating [/etc/irods/server_config.json]... Success\nValidating [/etc/irods/hosts_config.json]... Success\nValidating [/etc/irods/host_access_control_config.json]... Success\nValidating [/etc/irods/database_config.json]... Success\n*** Create User: docker-irods ***\n...\n*** docker run idrop-web as irods-idrop ***\nabc0d1f72d2bf8c600434e223b2b18d8b5b19fc96d945ecc90cd233d9bcc50a4\n*** FINISHED SCRIPT run-docker-irods.sh ***\n```\n\nIf run using the default configuration as defined by the example you would be able to verify your install by using a browser and navigating to [http://localhost:8080/idrop-web2/](http://localhost:8080/idrop-web2/), and Sign in as:\n\n- user: **hsproxy**\n- pass: **proxywater1**\n\n\n\nYou can also use `docker exec` to get into the running **irods-icat** container and check the status using the **irods** administrative user.\n\n**Example**\n\n```\n$ docker exec -ti irods-icat /bin/bash\n[root@71aaf7becbd9 scripts]# su - irods\n\n-bash-4.1$ iadmin lz\nhydrodevZone\n\n-bash-4.1$ iadmin lr\nbundleResc\ndemoResc\nhydrodevResc\n\n-bash-4.1$ iadmin lu\nrods#hydrodevZone\nhsproxy#hydrodevZone\n```\nFrom here you could also perform any other standard iRODS iCommands or modifications to your running iRODS environment.\n\n### HydroShare usage\n\nThe HydroShare application will not run properly unless there is an already running iRODS installation for it to connect to. The iRODS settings that HydroShare will use are found in the **local_settings.py** file.\n\nUpdate the **local_settings.py** in the `hydroshare/hydroshare` directory with the appropriate value for `HS_IRODS_ICAT_IP`. To find your `HS_IRODS_ICAT_IP` you need to use `docker inspect`.\n\n**Example**\n\n```\n$ docker inspect irods-icat | grep IPAddress\n        \"IPAddress\": \"172.17.0.100\",   \n```\nYou will use the value **172.17.0.100** as the value for `HS_IRODS_ICAT_IP` in the local_settings.py file\n\n\n```\n# iRODS proxy user configuration - reference: https://github.com/hydroshare/hydrodev-irods\nUSE_IRODS = True\nIRODS_ROOT = '/tmp'\nIRODS_ICOMMANDS_PATH = '/usr/bin'\nIRODS_HOST = 'HS_IRODS_ICAT_IP'\nIRODS_PORT = '1247'\nIRODS_DEFAULT_RESOURCE = 'hydrodevResc'\nIRODS_HOME_COLLECTION = '/hydrodevZone/home/hsproxy'\nIRODS_CWD = '/hydrodevZone/home/hsproxy'\nIRODS_ZONE = 'hydrodevZone'\nIRODS_USERNAME = 'hsproxy'\nIRODS_AUTH = 'proxywater1'\nIRODS_GLOBAL_SESSION = True\n```\n\nNow run HydroShare as you normally would\n\n--- \n\n### Other information\n\nSubsequent runs of the `run-docker-irods.sh` script will best effort connect to the pre-existing environment that was already setup and continue from where it left off.\n\n1. **If everything is already running:** leave all running containers as they are\n2. **All containers stopped:** start the containers in order; irods-data, irods-db, and irods-icat\n3. **All containers stopped and removed:** rebuild and start the containers in order; irods-data, irods-db, and irods-icat\n4. **All containers stopped and removed, and all docker images removed:** rebuild the images and then rebuild and start the containers in order; irods-data, irods-db, and irods-icat\n\n**NOTE** - The containers need to be started in the order specified by the script. If they are started out of order, or if some are running and others are not, there is no way to guarantee proper connection between them.\n\n\n### Starting over with a new configuration\n\nBecause the data is persisted to the host, the directories which contain the configured data need to be removed before instantiating a new configured instance.\n\nThese files are all found in the `/srv/` directory on the host and can be removed with root privileges.\n\n```\n/srv/backup  /srv/conf  /srv/etc_irods  /srv/irods  /srv/log  /srv/pgsql /srv/tomcat /srv/java  /srv/.secret\n```\n**Example**\n\nRemove all files and directories from the `/srv/` direcotry on the host\n\n```\ncd /srv\nsudo rm -rf *\nsudo rm -rf .secret\n```\nAdditionally, the `irods-config.yaml`, `rodsuser-config.yaml` and `idrop-config.yaml` files are built as part of the `appstack-data` image when the script is first run. If you change your configuration settings you should also remove the `appstack-data` image prior to executing your next run of the `run-docker-irods.sh` script so that it can build in your new settings.\n\n**Example**\n\nRemove the `appstack-data` docker images from teh host\n\n```\n$ docker images\nREPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE\nappstack-data       latest              fd5bcd12d002        2 hours ago         263.9 MB\n...\n\n$ docker rmi fd5bcd12d002\n```\n\n---\n\n### Configuration Files\n\nThe configuration files are set with default attributes that will build in accordance with the standard hydrodev environment. You are welcome to adapt these settings for whatever makes the most sense in your local environment. \n**Note** - Each config file has an intentionally blank line at the end of it so that the script can correctly parse the information it requires.\n\nDefaults for each file:\n\n**irods-config.yaml**\n\n```\nSERVICE_ACCT_USERNAME: irods\nSERVICE_ACCT_GROUP: irods\nIRODS_ZONE: hydrodevZone\nIRODS_PORT: 1247\nRANGE_BEGIN: 20000\nRANGE_END: 20199\nVAULT_DIRECTORY: /var/lib/irods/iRODS/Vault\nZONE_KEY: TEMPORARY_zone_key\nNEGOTIATION_KEY: TEMPORARY_32byte_negotiation_key\nCONTROL_PLANE_PORT: 1248\nCONTROL_PLANE_KEY: TEMPORARY__32byte_ctrl_plane_key\nSCHEMA_VALIDATION_BASE_URI: https://schemas.irods.org/configuration\nADMINISTRATOR_USERNAME: rods\nADMINISTRATOR_PASSWORD: rods\nHOSTNAME_OR_IP: irods-db\nDATABASE_PORT: 5432\nDATABASE_NAME: ICAT\nDATABASE_USER: irods\nDATABASE_PASSWORD: irods\n### Intentionally Blank line ###\n```\n\n**rodsuser-config.yaml**\n\n```\nRODSUSER_IRODS_RESOURCE: hydrodevResc\nRODSUSER_IRODS_ZONE: hydrodevZone\nRODSUSER_IRODS_USERNAME: hsproxy\nRODSUSER_IRODS_AUTH: proxywater1\n### Intentionally Blank line ###\n```\n\n**idrop-config.yaml**\n\n```\nIDROP_CONFIG_PRESET_HOST: irods-icat\nIDROP_CONFIG_PRESET_PORT: 1247\nIDROP_CONFIG_PRESET_ZONE: hydrodevZone\nIDROP_CONFIG_PRESET_RESOURCE: hydrodevResc\n### Intentionally Blank line ###\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhydroshare%2Fhs-docker-irods","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhydroshare%2Fhs-docker-irods","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhydroshare%2Fhs-docker-irods/lists"}