# Open Productive Stack ## Overview This repository contains a productive stack of open-source applications for team collaboration and communication. The stack includes: ### Core Infrastructure - **Traefik**: Edge router that handles routing and load balancing for all services - **PostgreSQL**: Relational database for applications requiring PostgreSQL - **MariaDB**: MySQL-compatible database for applications requiring MySQL - **Adminer**: Database management tool for easy database administration ### Mail - **Mailcow**: Complete mail server solution with SMTP, IMAP, antivirus, and webmail ### Collaboration Tools - **Nextcloud**: Self-hosted file sync and share platform with collaboration features - **OnlyOffice**: Online office suite for document editing and collaboration - **OpenProject**: Project management and team collaboration software - **HedgeDoc**: Collaborative markdown notes editor for team documentation ### Web Publishing - **Drupal**: Flexible content management system (CMS) for building websites All components are containerized using Docker for easy deployment, scaling, and management, creating a complete productivity environment for teams. ## Requirements You need [docker](https://docs.docker.com/get-started/get-docker/) and with [docker compose plugin](https://docs.docker.com/compose/). You may want to follow the [post installation instructions](https://docs.docker.com/engine/install/linux-postinstall/). At least 6 cores with 16GB RAM 100GB SSD would be sufficent. ## Install ### Core environment 1) Copy the `.example-env` to `.env` and add you settings. ```bash cp core/.example-env core/.env ``` 2) Start traefik, mariadb, postgres and adminer with: ```bash docker compose -f core/docker-compose.yml up -d ``` ### Drupal 1) Copy the `.example-env` to `.env` and add you settings. ```bash cp drupal/.example-env drupal/.env ``` 2) Create databse and Drupal root. ```bash drupal/create_infra.bash ``` 3) Start Drupal containers. ```bash docker compose -f drupal/docker-compose.yml up -d ``` #### Additional steps You may want to use Redis Caching. 3) add to drupal/sites/default/settings.php: ```php // Redis Configuration $settings['redis.connection']['interface'] = 'PhpRedis'; $settings['redis.connection']['host'] = 'redis'; $settings['redis.connection']['port'] = 6379; $settings['cache']['default'] = 'cache.backend.redis'; $settings['cache']['bins']['bootstrap'] = 'cache.backend.chainedfast'; $settings['cache']['bins']['discovery'] = 'cache.backend.chainedfast'; $settings['cache']['bins']['config'] = 'cache.backend.chainedfast'; ``` 4) Visit your Domain and install Drupal site. ### Gitlab 1) Copy the `.example-env` to `.env` and add you settings. ```bash cp gitlab/.example-env gitlab/.env ``` 2) Start gitlab. ```bash docker compose -f gitlab/docker-compose.yml up -d ``` 3) Get your root password. ```bash sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password ``` 4) Visit you domain and log in. ### Hedgedoc 1) Copy the `.example-env` to `.env` and add you settings. ```bash cp hedgedoc/.example-env hedgedoc/.env ``` 2) Create database and Drupal root. ```bash hedgedoc/create_infra.bash ``` 3) Start containers. ```bash docker compose -f hedgedoc/docker-compose.yml up -d ``` 4) Add your user. ```bash source hedgedoc/.env docker exec hedgedoc bin/manage_users --pass ${HEDGEDOC_USER_PASSWORD} --add ${HEDGEDOC_USER_EMAIL} ``` ### Mailcow 1) Generate config ```bash cd mailcow ./geneare_config.bash ``` 2) Copy config to .env ```bash cp mailcow.conf .env ``` 3) Start containers. ```bash docker compose docker-compose.yml up -d ``` 4) Visit DOMAIN/admin and log in with admin:admin. 5) Consider the post installation steps, i. e. [watchdog](https://docs.mailcow.email/de/post_installation/firststeps-authorize_watchdog_and_bounces/) [dmarc](https://docs.mailcow.email/de/post_installation/firststeps-dmarc_reporting/) [dkim](https://docs.mailcow.email/getstarted/prerequisite-dns/) (You get your dkim key when you registered your email domain in mailcow ui) ### OnylOffice 1) Copy the `.example-env` to `.env` and add you settings. ```bash cp onlyoffice/.example-env onlyoffice/.env ``` 2) Create database and Drupal root. ```bash onlyoffice/create_infra.bash ``` 3) Start containers. ```bash docker compose -f onlyoffice/docker-compose.yml up -d ``` ### Nextcloud 1) Start OnlyOffice first! 2) Copy the `.example-env` to `.env` and add you settings. ```bash cp nextcloud/.example-env nextcloud/.env ``` 3) Create database and Drupal root. ```bash nextcloud/create_infra.bash ``` 4) Start containers. ```bash docker compose -f nextcloud/docker-compose.yml up -d ``` 5) Visit nextcloud domain and login with your .env credentials. ### Openproject 1) Copy the `.example-env` to `.env` and add you settings. ```bash cp nextcloud/.example-env nextcloud/.env ``` 2) Create database and Drupal root. ```bash hedgedoc/create_infra.bash ``` 3) Start containers. ```bash docker compose -f hedgedoc/docker-compose.yml up -d ``` 4) Visit openproject domain and login with admin:admin and set new password. ## Roadmap - Tweak the core components and subservices for petter performance. - More automatisation when installing the environment. - Add more services - [ ] Matrix/Synapse + Element - Better reuse of gits for updating and maintainment. ## Changelog