This repository contains the infrastructure and services for Twake POC. The system is composed of several modular components, each managed via its own docker-compose file.
The POC is split into the following operational layers:
Centralized data storage services used by other components.
- PostgreSQL: Main relational database for Linshare and Meet.
- MongoDB: Document store for LinShare.
- CouchDB: Database for Cozy Stack.
- OpenLDAP: Directory service for user management.
- Valkey (Redis): In-memory data store
Handles entry points and security.
- Traefik: Reverse proxy. Handles routing to all services via
twake-networkand manages SSL. - LemonLDAP::NG: Web Single Sign-On (SSO).
- Docker Socket Proxy: Securely exposes the Docker socket to Traefik.
The video conferencing component.
- LiveKit: Real-time video and audio server.
- Django Backend: APIs and logic for meetings.
- Frontend: Web interface for video calls.
Secure file sharing and storage.
- Backend: Tomcat-based server.
- UI User: Web interface for general users.
- UI Admin: Administration web interface.
- UI Upload Request: Interface for external upload requests.
- ClamAV: Antivirus scanning for uploaded files.
- Cozy Stack: Personal cloud platform server.
- OnlyOffice: Document editing and collaboration.
- Calendar: Calendar application.
- TMail: Email application.
Each component (application) in the PoC repository is defined as a separate Docker Compose project.
Every application includes:
- a docker-compose.yml file that defines its services.
- a wrapper script responsible for generating the required configuration files for those services.
The wrapper generates configuration files dynamically based on the domain specifications defined in the root .env file of the project.
- Docker and Docker Compose installed.
- Domains: The stack is configured for
*.twake.localdomain. Configure your/etc/hostswith:
127.0.0.1 linshare.twake.local admin-linshare.twake.local upload-request-linshare.twake.local meet.twake.local onlyoffice.twake.local calendar.twake.local contacts.twake.local account.twake.local excal.twake.local mail.twake.local jmap.twake.local
127.0.0.1 oauthcallback.twake.local manager.twake.local auth.twake.local tcalendar-side-service.twake.local sabre-dav.twake.local
127.0.0.1 user1.twake.local user1-home.twake.local user1-linshare.twake.local user1-drive.twake.local user1-settings.twake.local user1-mail.twake.local user1-chat.twake.local user1-notes.twake.local user1-dataproxy.twake.local
127.0.0.1 user2.twake.local user2-home.twake.local user2-linshare.twake.local user2-drive.twake.local user2-settings.twake.local user2-mail.twake.local user2-chat.twake.local user2-notes.twake.local user2-dataproxy.twake.local
127.0.0.1 user3.twake.local user3-home.twake.local user3-linshare.twake.local user3-drive.twake.local user3-settings.twake.local user3-mail.twake.local user3-chat.twake.local user3-notes.twake.local user3-dataproxy.twake.local
127.0.0.1 chat.twake.local matrix.twake.local tom.twake.local fed.twake.local traefik.twake.local calendar-ng.twake.localBefore starting any services, create the shared network:
docker network create twake-network --subnet=172.27.0.0/16- In order to pull Linshare components, you need to be logged in to Linagora Docker registry.
- Modify the .env file to update the domain name, the default is
twake.local. - To start the services, use the following script:
./wrapper.sh up -d- If you want to start the components one by one, you can use the following commands:
./wrapper.sh up -d dirnameexample:
./wrapper.sh up -d twake_db- To see how to use the wrapper script, run:
./wrapper.sh --help- If you want to start the services one by one, you can use the following commands:
- Navigate to the database directory and start the services:
cd twake_db
./compose-wrapper.sh up -d
cd ..cd twake_auth
./compose-wrapper.sh up -d
cd ..cd meet_app
./compose-wrapper.sh up -d
cd ..cd linshare_app
./compose-wrapper.sh up -d
cd ..cd onlyoffice_app
docker compose --env-file ../.env up -d
cd ..cd calendar_app
./compose-wrapper.sh up -d
cd ..cd tmail_app
./compose-wrapper.sh up -d
cd ..cd cozy_stack
./compose-wrapper.sh up -d
cd ..cd chat_app
./compose-wrapper.sh up -d
cd ..Check that all services are running:
docker ps- Certificates: SSL certificates are expected in
twake_auth/traefik/ssl/.
Once everything is running:
This POC uses a self-signed Certificate Authority (CA).
When Cozy Stack integrates external applications (Mail,LinShare, etc.), they are loaded inside iframes.
If the CA is not trusted by the browser, browsers will block or partially break these iframes due to TLS and security restrictions.
To avoid iframe loading issues, mixed-content warnings, and blocked resources, you must trust the CA certificate used by the reverse-proxy (Traefik).
Add the self-signed certificate to your system & browser:
twake_auth/traefik/ssl/root-ca.pem
To access cozy stack instances, use the following credentials:
| Workplace | Login | Password |
|---|---|---|
https://user1.twake.local |
user1 |
user1 |
https://user2.twake.local |
user2 |
user2 |
https://user3.twake.local |
user3 |
user3 |