├── .circleci ├── compose-down.sh ├── compose-up.sh ├── config.yml ├── stack-down.sh └── stack-up.sh ├── .env.template ├── .gitignore ├── README.md ├── apps ├── blog │ └── ghost.yml ├── business-intelligence │ └── bonita.yml ├── chat │ └── shout.yml ├── cms │ ├── drupal.yml │ ├── joomla.yml │ └── wordpress.yml ├── collaboration │ ├── eXo.yml │ ├── gitlab.yml │ ├── hastebin.yml │ ├── hublin.yml │ ├── mattermost.yml │ ├── openfire.yml │ └── rocketchat.yml ├── crm │ └── suitecrm.yml ├── database │ ├── mongo.yml │ ├── mysql.yml │ ├── postgres.yml │ └── redis.yml ├── development │ ├── kong.yml │ └── sonarqube.yml ├── document │ ├── alfresco.yml │ ├── ckan.yml │ ├── logicaldoc.yml │ ├── nuxeo.yml │ └── xibo.yml ├── ecommerce │ └── prestashop.yml ├── erp │ └── odoo.yml ├── multimedia │ ├── koken.yml │ └── plex.yml ├── project-management │ └── tuleap.yml ├── storage │ └── owncloud.yml ├── streaming │ ├── mistserver.yml │ └── red5.yml ├── trouble-ticketing │ ├── osticket.yml │ └── redmine.yml └── wiki │ ├── dokuwiki.yml │ └── mediawiki.yml └── scripts ├── commons.py ├── unify_yamls.py └── v1_to_v2.py /.circleci/compose-down.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | for arg; do 3 | docker-compose -f "$arg" stop 4 | docker-compose -f "$arg" rm -f 5 | done -------------------------------------------------------------------------------- /.circleci/compose-up.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | for arg; do 3 | docker-compose -f "$arg" pull 4 | docker-compose -f "$arg" up -d 5 | done 6 | -------------------------------------------------------------------------------- /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | jobs: 3 | build: 4 | machine: 5 | image: ubuntu-1604:201903-01 6 | steps: 7 | - checkout 8 | - run: cp .env.template .env 9 | - run: 10 | name: autoenv on circleci 11 | command: cat .env | xargs -n1 echo export >> $BASH_ENV 12 | - run: ./.circleci/compose-up.sh apps/cms/wordpress.yml 13 | - run: sleep 20 && ! docker ps --format '{{.Status}}' | grep -v 'Up' 14 | - run: ./.circleci/compose-down.sh apps/cms/wordpress.yml 15 | - run: docker swarm init 16 | - run: ./.circleci/stack-up.sh apps/cms/wordpress.yml 17 | - run: sleep 20 && ! docker stack ps --format "{{.CurrentState}}" wordpress | grep -v 'Running' -------------------------------------------------------------------------------- /.circleci/stack-down.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | for arg; do 3 | docker stack rm "$(basename $arg .yml)" 4 | done -------------------------------------------------------------------------------- /.circleci/stack-up.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | for arg; do 3 | docker stack deploy -c "$arg" $(basename $arg .yml) 4 | done 5 | -------------------------------------------------------------------------------- /.env.template: -------------------------------------------------------------------------------- 1 | DATA_BASE_DIR=/tmp/docker-compose 2 | DB_PASS=aRandomPassword 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.vscode 2 | /.env 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # docker-compose-library 2 | 3 | A collection of ready-to-use and hopefully updated open-source applications with 4 | the help of Docker-Compose. 5 | 6 | ## Setup 7 | 8 | Copy [.env.template](.env.template) as `.env` and customize the variables. 9 | 10 | Run an application with: 11 | 12 | ``` 13 | docker-compose -f apps//.yml up 14 | ``` 15 | 16 | or 17 | 18 | ``` 19 | docker stack deploy -c apps//.yml 20 | ``` 21 | 22 | ## Applications list 23 | 24 | | Name | Category | 25 | | ------------------------------------------- | --------------------- | 26 | | [Ghost](blog/ghost.yml) | blog | 27 | | [Bonita](business-intelligence/bonita.yml) | business-intelligence | 28 | | [Shout](chat/shout.yml) | chat | 29 | | [drupal](cms/drupal.yml) | cms | 30 | | [joomla](cms/joomla.yml) | cms | 31 | | [wordpress](cms/wordpress.yml) | cms | 32 | | [eXo](collaboration/eXo.yml) | collaboration | 33 | | [gitlab](collaboration/gitlab.yml) | collaboration | 34 | | [hastebin](collaboration/hastebin.yml) | collaboration | 35 | | [hublin](collaboration/hublin.yml) | collaboration | 36 | | [mattermost](collaboration/mattermost.yml) | collaboration | 37 | | [openfire](collaboration/openfire.yml) | collaboration | 38 | | [rocket.chat](collaboration/rocketchat.yml) | collaboration | 39 | | [suitecrm](crm/suitecrm.yml) | crm | 40 | | [mongo](database/suitecrm.yml) | database | 41 | | [mysql](database/mysql.yml) | database | 42 | | [postgres](database/postgres.yml) | database | 43 | | [redis](database/redis.yml) | database | 44 | | [kong](development/kong.yml) | development | 45 | | [sonarqube](development/sonarqube.yml) | development | 46 | | [alfresco](document/alfresco.yml) | document | 47 | | [ckan](document/ckan.yml) | document | 48 | | [logicaldoc](document/logicaldoc.yml) | document | 49 | | [nuxeo](document/nuxeo.yml) | document | 50 | | [xibo](document/xibo.yml) | document | 51 | | [prestashop](document/prestashop.yml) | ecommerce | 52 | | [odoo](erp/odoo.yml) | erp | 53 | | [tuleap](project-management/tuleap.yml) | project-management | 54 | | [owncloud](storage/owncloud.yml) | storage | 55 | | [mistserver](streaming/mistserver.yml) | streaming | 56 | | [red5](streaming/red5.yml) | streaming | 57 | | [osticket](trouble-ticketing/osticket.yml) | trouble-ticketing | 58 | | [redmine](trouble-ticketing/redmine.yml) | trouble-ticketing | 59 | | [dokuwiki](wiki/dokuwiki.yml) | wiki | 60 | | [mediawiki](wiki/mediawiki.yml) | wiki | 61 | 62 | ## scripts 63 | 64 | ### unify_yamls.py 65 | 66 | undocumented and probably going to be deprecated 67 | 68 | ### v1_to_v2.py 69 | 70 | deprecated: bulk update from v1 to v2 composer: 71 | `find . -name "*.yml" -exec python v1_to_v2.py --source {} --destination {} \;` 72 | -------------------------------------------------------------------------------- /apps/blog/ghost.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | ghost: 4 | container_name: ghost 5 | image: ghost 6 | ports: 7 | - 2368:2368 8 | volumes: 9 | - ./ghost_blog:/var/lib/ghost 10 | -------------------------------------------------------------------------------- /apps/business-intelligence/bonita.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | postgres: 4 | extends: 5 | file: ../database/postgres.yml 6 | service: postgres 7 | environment: 8 | POSTGRES_DB: bonitadb 9 | bonita: 10 | container_name: bonita 11 | environment: 12 | DB_HOST: postgres 13 | DB_PORT: 5432 14 | DB_USER: postgres 15 | DB_PASS: ${db_pass} 16 | PLATFORM_PASSWORD: ${platform_pass} 17 | PLATFORM_LOGIN: platform_user 18 | TENANT_PASSWORD: ${tenant_pass} 19 | TENANT_LOGIN: tenant_user 20 | HTTP_API: "true" 21 | image: library/bonita 22 | ports: 23 | - 8080:8080 24 | volumes: 25 | - ./bonita_data:/opt/bonita 26 | 27 | # PLATFORM_PASSWORD is never used, tenant can create administrators 28 | # host/bonita 29 | 30 | -------------------------------------------------------------------------------- /apps/chat/shout.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | shout: 4 | container_name: shout 5 | environment: 6 | PORT: 8080 7 | image: arbourd/shout 8 | ports: 9 | - 8080:8080 10 | volumes: 11 | - ./shout_data:/shout 12 | -------------------------------------------------------------------------------- /apps/cms/drupal.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | drupal: 4 | container_name: drupal 5 | environment: 6 | ADMIN_PASSWORD: ${admin_pass} 7 | DB_HOST: mysql 8 | DB_PASS: ${db_pass} 9 | image: samos123/drupal 10 | ports: 11 | - 80:80 12 | mysql: 13 | extends: 14 | file: ../database/mysql.yml 15 | service: mysql 16 | -------------------------------------------------------------------------------- /apps/cms/joomla.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | joomla: 4 | container_name: joomla 5 | environment: 6 | JOOMLA_DB_HOST: mysql:3306 7 | JOOMLA_DB_PASSWORD: ${db_pass} 8 | JOOMLA_DB_USER: root 9 | image: joomla 10 | ports: 11 | - 80:80 12 | volumes: 13 | - ./joomla_html:/var/www/html 14 | mysql: 15 | extends: 16 | file: ../database/mysql.yml 17 | service: mysql 18 | -------------------------------------------------------------------------------- /apps/cms/wordpress.yml: -------------------------------------------------------------------------------- 1 | version: '3.7' 2 | 3 | services: 4 | wordpress: 5 | image: wordpress 6 | environment: 7 | WORDPRESS_DB_HOST: mysql:3306 8 | WORDPRESS_DB_PASSWORD: ${DB_PASS} 9 | WORDPRESS_DB_USER: root 10 | ports: 11 | - 80:80 12 | volumes: 13 | - ${DATA_BASE_DIR}/wordpress_html:/var/www/html 14 | mysql: 15 | image: mysql:5.7 16 | environment: 17 | MYSQL_ROOT_PASSWORD: ${DB_PASS} 18 | volumes: 19 | - ${DATA_BASE_DIR}/mysql_data:/var/lib/mysql 20 | 21 | x-application: 22 | name: Wordpress 23 | headline: 24 | en: The world-leader open-source CMS 25 | it: Il CMS open-source leader nel mondo 26 | category: CMS 27 | tags: 28 | - open-source 29 | - blogging 30 | - php 31 | logo: https://upload.wikimedia.org/wikipedia/commons/thumb/2/20/WordPress_logo.svg/500px-WordPress_logo.svg.png 32 | description: 33 | en: | 34 | Do you need to create a website, blog, or app? Try WordPress, one of the 35 | most popular content management systems in the world! 36 | it: | 37 | Devi creare un sito web, un blog o un'app? Prova WordPress, il software di 38 | content management più usato al mondo! 39 | long_description: 40 | en: | 41 | WordPress is a free and open-source content management system (CMS) based on 42 | PHP & MySQL. Features include a plugin architecture and a template system. 43 | It is most associated with blogging but supports other types of web content 44 | including more traditional mailing lists and forums, media galleries, and 45 | online stores. 46 | it: | 47 | WordPress è una piattaforma software di "blog" e content management 48 | system (CMS) open source ovvero un programma che, girando lato server, 49 | consente la creazione e distribuzione di un sito Internet formato da 50 | contenuti testuali o multimediali, facilmente gestibili ed aggiornabili in 51 | maniera dinamica. 52 | features: 53 | en: 54 | - SEO friendly 55 | - Thusands of themes and plugins available 56 | - Easy to use and update 57 | - Highly customizable 58 | - Supported by a thriving, engaged community 59 | - Quick installation 60 | it: 61 | - SEO friendly 62 | - Migliaia di temi e plugin 63 | - Intuitivo e semplice da usare 64 | - Estremamente flessibile e personalizzabile 65 | - Community online molto attiva 66 | - Semplice da integrare con altri strumenti 67 | -------------------------------------------------------------------------------- /apps/collaboration/eXo.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | eXo: 4 | container_name: eXo 5 | image: exoplatform/exo-community 6 | ports: 7 | - 8080:8080 8 | -------------------------------------------------------------------------------- /apps/collaboration/gitlab.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | gitlab: 4 | container_name: gitlab 5 | environment: 6 | DB_HOST: postgres 7 | DB_NAME: gitlabhq_production 8 | DB_PASS: ${db_pass} 9 | DB_USER: postgres 10 | GITLAB_PORT: 80 11 | GITLAB_SECRETS_DB_KEY_BASE: ${db_key_base} 12 | GITLAB_SSH_PORT: 2222 13 | REDIS_HOST: redis 14 | image: sameersbn/gitlab:8.3.4-2 15 | ports: 16 | - 80:80 17 | - 2222:2222 18 | volumes: 19 | - ./gitlab_logs:/var/log/gitlab 20 | - ./gitlab_data:/home/git/data 21 | postgres: 22 | environment: 23 | POSTGRES_DB: gitlabhq_production 24 | extends: 25 | file: ../database/postgres.yml 26 | service: postgres 27 | redis: 28 | extends: 29 | file: ../database/redis.yml 30 | service: redis 31 | -------------------------------------------------------------------------------- /apps/collaboration/hastebin.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | hastebin: 4 | container_name: hastebin 5 | image: jmvrbanac/hastebin 6 | ports: 7 | - 7777:7777 8 | -------------------------------------------------------------------------------- /apps/collaboration/hublin.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | mongo: 4 | container_name: db 5 | extends: 6 | file: ../database/mongo.yml 7 | service: mongo 8 | redis: 9 | extends: 10 | file: ../database/redis.yml 11 | service: redis 12 | hublin: 13 | container_name: hublin 14 | image: linagora/hublin 15 | ports: 16 | - 8080:8080 17 | -------------------------------------------------------------------------------- /apps/collaboration/mattermost.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | mattermost: 4 | container_name: mattermost 5 | environment: 6 | MYSQL_DATABASE: mattermost_test 7 | MYSQL_PASSWORD: mostest 8 | MYSQL_ROOT_PASSWORD: ${db_pass} 9 | MYSQL_USER: mmuser 10 | image: mattermost/platform 11 | ports: 12 | - 80:80 13 | volumes: 14 | - ./mattermost_mysql:/var/lib/mysql 15 | -------------------------------------------------------------------------------- /apps/collaboration/openfire.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | mysql: 4 | environment: 5 | MYSQL_DATABASE: openfire 6 | MYSQL_PASSWORD: ${usr_pass} 7 | MYSQL_USER: openfire 8 | extends: 9 | file: ../database/mysql.yml 10 | service: mysql 11 | openfire: 12 | container_name: openfire 13 | environment: 14 | DB_1_PORT_3306_TCP_ADDR: mysql 15 | DB_1_PORT_3306_TCP_PORT: 3306 16 | JDBC_PASSWORD: ${usr_pass} 17 | JDBC_USERNAME: openfire 18 | image: fanatic/openfire 19 | ports: 20 | - 9090:9090 21 | restart: always 22 | volumes: 23 | - ./openfire_data:/data/openfire 24 | -------------------------------------------------------------------------------- /apps/collaboration/rocketchat.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | hubot: 4 | container_name: hubot-rocketchat 5 | environment: 6 | - ROCKETCHAT_URL=rocketchat:3000 7 | - ROCKETCHAT_ROOM=GENERAL 8 | - ROCKETCHAT_USER=bot 9 | - ROCKETCHAT_PASSWORD=botpassword 10 | - BOT_NAME=bot 11 | - EXTERNAL_SCRIPTS=hubot-help,hubot-seen,hubot-links,hubot-diagnostics 12 | image: rocketchat/hubot-rocketchat 13 | ports: 14 | - 3001:8080 15 | mongo: 16 | command: mongod --smallfiles --oplogSize 128 17 | extends: 18 | file: ../database/mongo.yml 19 | service: mongo 20 | rocketchat: 21 | container_name: rocketchat 22 | environment: 23 | ROOT_URL: http://localhost:3000 24 | image: rocketchat/rocket.chat:0.14.0 25 | ports: 26 | - 3000:3000 27 | restart: always 28 | -------------------------------------------------------------------------------- /apps/crm/suitecrm.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | mysql: 4 | environment: 5 | MYSQL_DATABASE: suitecrm 6 | MYSQL_USER: suitecrm 7 | MYSQL_PASSWORD: ${usr_pass} 8 | extends: 9 | file: ../database/mysql.yml 10 | service: mysql 11 | suitecrm: 12 | container_name: suitecrm 13 | environment: 14 | DB_TYPE: mysql 15 | DB_MANAGER: MysqlManager 16 | DB_HOST_NAME: mysql 17 | DB_TCP_PORT: 3306 18 | DB_USER_NAME: suitecrm 19 | DB_PASSWORD: ${usr_pass} 20 | DATABASE_NAME: suitecrm 21 | image: spantree/suitecrm 22 | ports: 23 | - 80:80 24 | 25 | -------------------------------------------------------------------------------- /apps/database/mongo.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | mongo: 4 | container_name: mongo 5 | image: mongo 6 | volumes: 7 | - ./mongo_data:/data/db 8 | - ./mongo_dump:/dump 9 | -------------------------------------------------------------------------------- /apps/database/mysql.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | mysql: 4 | container_name: mysql 5 | environment: 6 | MYSQL_ROOT_PASSWORD: ${db_pass} 7 | image: mysql:5.5 8 | volumes: 9 | - ./mysql_data:/var/lib/mysql 10 | -------------------------------------------------------------------------------- /apps/database/postgres.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | postgres: 4 | container_name: postgres 5 | environment: 6 | POSTGRES_PASSWORD: ${db_pass} 7 | POSTGRES_USER: postgres 8 | image: postgres 9 | volumes: 10 | - ./postgres_data:/var/lib/postgresql/data 11 | -------------------------------------------------------------------------------- /apps/database/redis.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | redis: 4 | container_name: redis 5 | image: redis 6 | volumes: 7 | - ./redis_data:/data 8 | 9 | # I know it isn't a db... 10 | -------------------------------------------------------------------------------- /apps/development/kong.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | cassandra: 4 | container_name: cassandra 5 | image: cassandra:2.2.4 6 | kong: 7 | container_name: kong 8 | image: mashape/kong:0.5.4 9 | ports: 10 | - 9999:9999 11 | - 8000:8000 12 | - 8001:8001 13 | - 8443:8443 14 | - 7946:7946 15 | restart: always 16 | -------------------------------------------------------------------------------- /apps/development/sonarqube.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | postgres: 4 | environment: 5 | POSTGRES_DB: sonar 6 | extends: 7 | file: ../database/postgres.yml 8 | service: postgres 9 | sonarqube: 10 | container_name: sonarqube 11 | environment: 12 | SONARQUBE_JDBC_PASSWORD: ${db_pass} 13 | SONARQUBE_JDBC_URL: jdbc:postgresql://postgres/sonar 14 | SONARQUBE_JDBC_USERNAME: postgres 15 | image: sonarqube 16 | ports: 17 | - 9000:9000 18 | - 9092:9092 19 | -------------------------------------------------------------------------------- /apps/document/alfresco.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | alfresco: 4 | container_name: alfresco 5 | environment: 6 | CONTENT_STORE: /mnt/content_store 7 | DB_HOST: postgres 8 | DB_NAME: alfresco 9 | DB_PASSWORD: ${db_pass} 10 | DB_USERNAME: postgres 11 | image: rsippl/alfresco 12 | ports: 13 | - 8080:8080 14 | volumes: 15 | - ./SOME_DATA_FOLDER:/mnt/content_store 16 | postgres: 17 | environment: 18 | POSTGRES_DB: alfresco 19 | extends: 20 | file: ../database/postgres.yml 21 | service: postgres 22 | -------------------------------------------------------------------------------- /apps/document/ckan.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | ckan: 4 | container_name: ckan 5 | environment: 6 | DATABASE_URL: postgresql://ckan:ckan@postgres/ckan 7 | SOLR_URL: http://solr:8983/solr/ckan 8 | image: cygri/ckan:2.2.1 9 | ports: 10 | - 80:80 11 | volumes: 12 | - ./DATA:/opt/solr/example/solr/ckan/data 13 | postgres: 14 | environment: 15 | POSTGRES_DB: ckan 16 | POSTGRES_PASSWORD: ckan 17 | POSTGRES_USER: ckan 18 | extends: 19 | file: ../database/postgres.yml 20 | service: postgres 21 | solr: 22 | container_name: solr 23 | image: ckan/solr 24 | -------------------------------------------------------------------------------- /apps/document/logicaldoc.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | logicaldoc: 4 | container_name: logicaldoc 5 | image: mcsaky/logicaldoc-mysql 6 | ports: 7 | - 8080:8080 8 | volumes: 9 | - ./SOME_DATA_FOLDER:/opt/logicaldoc/repository 10 | - ./SOME_DB_DATA:/var/lib/mysql 11 | 12 | -------------------------------------------------------------------------------- /apps/document/nuxeo.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | elasticsearch: 4 | container_name: elasticsearch 5 | image: elasticsearch:1 6 | volumes: 7 | - ./ES_DATA:/usr/share/elasticsearch/data 8 | nuxeo: 9 | container_name: nuxeo 10 | environment: 11 | NUXEO_DB_HOST: postgres 12 | NUXEO_DB_NAME: nuxeo 13 | NUXEO_DB_PASSWORD: ${db_pass} 14 | NUXEO_DB_TYPE: postgresql 15 | NUXEO_DB_USER: nuxeo 16 | NUXEO_ES_HOSTS: elasticsearch 17 | NUXEO_REDIS_HOST: redis 18 | NUXEO_URL: http://localhost:8080 19 | image: nuxeo 20 | ports: 21 | - 8080:8080 22 | restart: always 23 | volumes: 24 | - ./NUXEO_DATA:/var/lib/nuxeo/data 25 | postgres: 26 | environment: 27 | POSTGRES_DB: nuxeo 28 | POSTGRES_PASSWORD: ${db_pass} 29 | POSTGRES_USER: nuxeo 30 | extends: 31 | file: ../database/postgres.yml 32 | service: postgres 33 | redis: 34 | extends: 35 | file: ../database/redis.yml 36 | service: redis 37 | -------------------------------------------------------------------------------- /apps/document/xibo.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | xibo: 4 | container_name: xibo 5 | environment: 6 | MYSQL_DBNAME: xibo 7 | MYSQL_HOST: 127.0.0.1 8 | MYSQL_PASS: ${db_pass} 9 | XIBO_ADMIN_PASS: ${admin_pass} 10 | image: chimeradev/xibo-docker 11 | ports: 12 | - 80:80 13 | volumes: 14 | - ./xibo_data:/xibo-data 15 | -------------------------------------------------------------------------------- /apps/ecommerce/prestashop.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | mysql: 4 | environment: 5 | MYSQL_DATABASE: prestashop 6 | extends: 7 | file: ../database/mysql.yml 8 | service: mysql 9 | prestashop: 10 | container_name: prestashop 11 | environment: 12 | ADMIN_MAIL: ${admin_mail} 13 | ADMIN_PASSWD: ${admin_passwd} 14 | DB_PASSWD: ${db_pass} 15 | DB_SERVER: mysql 16 | PS_FOLDER_ADMIN: ${admin_folder} 17 | PS_FOLDER_INSTALL: ${install_folder} 18 | PS_INSTALL_AUTO: 1 19 | PS_HANDLE_DYNAMIC_DOMAIN: 1 20 | image: prestashop/prestashop 21 | ports: 22 | - 80:80 23 | 24 | # Admin folder is the administration area 25 | -------------------------------------------------------------------------------- /apps/erp/odoo.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | odoo: 4 | container_name: odoo 5 | environment: 6 | DB_ENV_POSTGRES_PASSWORD: ${db_pass} 7 | DB_ENV_POSTGRES_USER: odoo 8 | DB_PORT_5432_TCP_ADDR: postgres 9 | DB_PORT_5432_TCP_PORT: 5432 10 | image: odoo 11 | ports: 12 | - 8069:8069 13 | volumes: 14 | - ./odoo_data:/var/lib/odoo 15 | - ./odoo_addons:/mnt/extra-addons 16 | postgres: 17 | environment: 18 | POSTGRES_USER: odoo 19 | extends: 20 | file: ../database/postgres.yml 21 | service: postgres 22 | -------------------------------------------------------------------------------- /apps/multimedia/koken.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | koken: 4 | container_name: koken 5 | image: koken/koken-lemp 6 | ports: 7 | - 8080:8080 8 | -------------------------------------------------------------------------------- /apps/multimedia/plex.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | plex: 4 | container_name: plex 5 | image: timhaak/plex 6 | ports: 7 | - 32400:32400 8 | volumes: 9 | - ./plex_config:/config 10 | - ./plex_data:/data 11 | -------------------------------------------------------------------------------- /apps/project-management/tuleap.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | tuleap: 4 | container_name: tuleap 5 | environment: 6 | VIRTUAL_HOST: localhost 7 | image: enalean/tuleap-aio 8 | ports: 9 | - 80:80 10 | volumes: 11 | - ./SOME_DATA_FOLDER:/data 12 | -------------------------------------------------------------------------------- /apps/storage/owncloud.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | owncloud: 4 | container_name: owncloud 5 | image: owncloud:8.1 6 | ports: 7 | - 80:80 8 | volumes: 9 | - ./owncloud_html:/var/www/html 10 | -------------------------------------------------------------------------------- /apps/streaming/mistserver.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | mistserver: 4 | container_name: mistserver 5 | image: ddvtech/mistserver 6 | ports: 7 | - 4242:4242 8 | - 8080:8080 9 | - 1935:1935 10 | - 554:554 11 | volumes: 12 | - ./SOME_FOLDER_WITH_VIDEO_FILES:/video 13 | -------------------------------------------------------------------------------- /apps/streaming/red5.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | red5: 4 | container_name: red5 5 | image: mondain/red5:openjdk7-red5-104R 6 | ports: 7 | - 5080:5080 8 | - 843:843 9 | - 1935:1935 10 | - 5443:5443 11 | - 8081:8081 12 | - 8443:8443 13 | volumes: 14 | - ./red5_data:/opt/red5 15 | -------------------------------------------------------------------------------- /apps/trouble-ticketing/osticket.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | mysql: 4 | environment: 5 | MYSQL_DATABASE: osticket 6 | MYSQL_PASSWORD: ${usr_pass} 7 | MYSQL_USER: osticket 8 | extends: 9 | file: ../database/mysql.yml 10 | service: mysql 11 | osticket: 12 | container_name: osticket 13 | environment: 14 | INSTALL_SECRET: ${secret} 15 | MYSQL_HOST: mysql 16 | MYSQL_PASSWORD: ${usr_pass} 17 | image: campbellsoftwaresolutions/osticket 18 | ports: 19 | - 80:80 20 | volumes: 21 | - ./osticket_data:/data/upload/include/plugins 22 | - ./osticket_logs:/var/log/nginx 23 | -------------------------------------------------------------------------------- /apps/trouble-ticketing/redmine.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | postgres: 4 | extends: 5 | file: ../database/postgres.yml 6 | service: postgres 7 | redmine: 8 | container_name: redmine 9 | environment: 10 | POSTGRES_ENV_POSTGRES_PASSWORD: ${db_pass} 11 | POSTGRES_PORT_5432_TCP: 5432 12 | image: redmine 13 | ports: 14 | - 3000:3000 15 | restart: on-failure 16 | volumes: 17 | - ./redmine_files:/usr/src/redmine/files 18 | -------------------------------------------------------------------------------- /apps/wiki/dokuwiki.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | dokuwiki: 4 | container_name: dokuwiki 5 | image: idef1x/dokuwiki 6 | ports: 7 | - 80:80 8 | volumes: 9 | - ./dokuwiki_storage:/data 10 | -------------------------------------------------------------------------------- /apps/wiki/mediawiki.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | mediawiki: 4 | container_name: mediawiki 5 | environment: 6 | MEDIAWIKI_DB_HOST: mysql 7 | MEDIAWIKI_DB_NAME: mediawiki 8 | MEDIAWIKI_DB_PASSWORD: ${db_pass} 9 | MEDIAWIKI_DB_USER: root 10 | MYSQL_PORT_3306_TCP: 3306 11 | image: synctree/mediawiki 12 | ports: 13 | - 80:80 14 | mysql: 15 | extends: 16 | file: ../database/mysql.yml 17 | service: mysql 18 | -------------------------------------------------------------------------------- /scripts/commons.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import logging 4 | import yaml 5 | 6 | # CONSTANTS 7 | LEVEL = logging.DEBUG 8 | 9 | 10 | def load_yaml_in_memory(file_path): 11 | logging.debug('loading file: {}'.format(file_path)) 12 | with open(file_path, 'r') as f: 13 | return yaml.load(f) 14 | 15 | 16 | def write_yaml_on_fs(file_path, content): 17 | if not file_path: 18 | print content 19 | return 20 | logging.debug('writing file: {}'.format(file_path)) 21 | with open(file_path, 'w') as f: 22 | f.write(content) 23 | -------------------------------------------------------------------------------- /scripts/unify_yamls.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import click 4 | import logging 5 | import yaml 6 | import os 7 | import sys 8 | 9 | from commons import load_yaml_in_memory, write_yaml_on_fs, LEVEL 10 | 11 | 12 | def get_original_env(application): 13 | old_env_vars = None 14 | if 'environment' in application: 15 | old_env_vars = application['environment'] 16 | return old_env_vars 17 | 18 | 19 | @click.command() 20 | @click.option('--source', help='Composer source file', prompt=True) 21 | @click.option('--destination', help='Composer destination path') 22 | def include_extensions(source, destination): 23 | logging.debug('source: {}; destination: {}'.format(source, destination)) 24 | 25 | services_yaml = load_yaml_in_memory(source) 26 | apps_yaml = services_yaml['services'] 27 | 28 | for app_name in apps_yaml.keys(): 29 | if 'extends' not in apps_yaml[app_name]: 30 | logging.debug('skipped {} no extends present'.format(app_name)) 31 | continue 32 | 33 | # Save state of original yaml env_variables 34 | old_env_vars = get_original_env(apps_yaml[app_name]) 35 | 36 | # Retrieve file name from original yaml and load extension in memory 37 | path_from_extends = apps_yaml[app_name]['extends']['file'] 38 | path_of_extension = os.path.join(os.path.dirname(source), path_from_extends) 39 | 40 | yaml_of_extension = load_yaml_in_memory(path_of_extension)['services'] 41 | 42 | # Put the original env_variables in the current yaml 43 | if old_env_vars: 44 | yaml_of_extension[app_name]['environment'].update(old_env_vars) 45 | 46 | if len(yaml_of_extension.values()) != 1: 47 | raise Exception("Unexpected error: lenght of yaml_of_extension.values()") 48 | 49 | # Build new yaml 50 | apps_yaml[app_name] = yaml_of_extension.values()[0] 51 | 52 | new_yaml = yaml.dump(services_yaml, default_flow_style=False) 53 | write_yaml_on_fs(destination, new_yaml) 54 | 55 | 56 | if __name__ == '__main__': 57 | log_format = '%(asctime)s - %(levelname)s - %(message)s' 58 | logging.basicConfig(stream=sys.stdout, level=LEVEL, format=log_format) 59 | logging.info('START') 60 | include_extensions() 61 | logging.info('END') 62 | -------------------------------------------------------------------------------- /scripts/v1_to_v2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import click 4 | import logging 5 | import yaml 6 | import sys 7 | 8 | from commons import load_yaml_in_memory, write_yaml_on_fs, LEVEL 9 | 10 | 11 | def modify_volumes(volume_list): 12 | new_volume_list = [] 13 | for volume in volume_list: 14 | if not volume.startswith('./'): 15 | volume = './' + volume 16 | new_volume_list.append(volume) 17 | return new_volume_list 18 | 19 | 20 | @click.command() 21 | @click.option('--source', help='Composer source file', prompt=True) 22 | @click.option('--destination', help='Composer destination path') 23 | def from_v1_to_v2(source, destination): 24 | logging.debug('source: {}; destination: {}'.format(source, destination)) 25 | 26 | apps_yaml = load_yaml_in_memory(source) 27 | 28 | # edit volume if not starts with ./ 29 | for app_name, app_body in apps_yaml.items(): 30 | for prop, values in app_body.items(): 31 | if prop == 'volumes': 32 | apps_yaml[app_name][prop] = modify_volumes(values) 33 | 34 | # Workaround because: http://pyyaml.org/ticket/29 35 | new_yaml = "version: '2'\n" + yaml.dump({'services': apps_yaml}, default_flow_style=False) 36 | 37 | write_yaml_on_fs(destination, new_yaml) 38 | 39 | 40 | if __name__ == '__main__': 41 | log_format = '%(asctime)s - %(levelname)s - %(message)s' 42 | logging.basicConfig(stream=sys.stdout, level=LEVEL, format=log_format) 43 | logging.info('START') 44 | from_v1_to_v2() 45 | logging.info('END') 46 | --------------------------------------------------------------------------------