├── .gitignore ├── COPYING ├── COPYING.md ├── README.md ├── conf ├── catalina.properties ├── home │ ├── advanced.set.up.html │ ├── css │ │ ├── agency.css │ │ ├── agency.min.css │ │ ├── fonts.css │ │ └── fonts │ │ │ ├── arimo │ │ │ ├── arimo-v9-latin-700.eot │ │ │ ├── arimo-v9-latin-700.svg │ │ │ ├── arimo-v9-latin-700.ttf │ │ │ ├── arimo-v9-latin-700.woff │ │ │ ├── arimo-v9-latin-700.woff2 │ │ │ ├── arimo-v9-latin-700italic.eot │ │ │ ├── arimo-v9-latin-700italic.svg │ │ │ ├── arimo-v9-latin-700italic.ttf │ │ │ ├── arimo-v9-latin-700italic.woff │ │ │ ├── arimo-v9-latin-700italic.woff2 │ │ │ ├── arimo-v9-latin-italic.eot │ │ │ ├── arimo-v9-latin-italic.svg │ │ │ ├── arimo-v9-latin-italic.ttf │ │ │ ├── arimo-v9-latin-italic.woff │ │ │ ├── arimo-v9-latin-italic.woff2 │ │ │ ├── arimo-v9-latin-regular.eot │ │ │ ├── arimo-v9-latin-regular.svg │ │ │ ├── arimo-v9-latin-regular.ttf │ │ │ ├── arimo-v9-latin-regular.woff │ │ │ └── arimo-v9-latin-regular.woff2 │ │ │ ├── groups.eot │ │ │ ├── groups.svg │ │ │ ├── groups.ttf │ │ │ ├── groups.woff │ │ │ └── montserrat │ │ │ ├── montserrat-v7-latin-700.eot │ │ │ ├── montserrat-v7-latin-700.svg │ │ │ ├── montserrat-v7-latin-700.ttf │ │ │ ├── montserrat-v7-latin-700.woff │ │ │ ├── montserrat-v7-latin-700.woff2 │ │ │ ├── montserrat-v7-latin-regular.eot │ │ │ ├── montserrat-v7-latin-regular.svg │ │ │ ├── montserrat-v7-latin-regular.ttf │ │ │ ├── montserrat-v7-latin-regular.woff │ │ │ └── montserrat-v7-latin-regular.woff2 │ ├── img │ │ ├── logos │ │ │ └── linshare-logo-white.png │ │ └── portfolio │ │ │ ├── ex-admin.png │ │ │ ├── ex-l2.png │ │ │ ├── ex-roundcube.png │ │ │ ├── ex-ur.png │ │ │ ├── preview.png │ │ │ └── swagger-background.png │ ├── index.html │ ├── js │ │ ├── agency.js │ │ ├── agency.min.js │ │ ├── html5shiv.js │ │ ├── jquery.easing.min.js │ │ ├── respond.min.js │ │ ├── strapdown.css │ │ ├── strapdown.js │ │ └── themes │ │ │ ├── bootstrap-responsive.min.css │ │ │ └── united.min.css │ ├── markdown.html │ ├── md │ │ └── advanced.set.up.md │ └── vendor │ │ ├── bootstrap │ │ ├── css │ │ │ ├── bootstrap.css │ │ │ └── bootstrap.min.css │ │ ├── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ │ └── js │ │ │ ├── bootstrap.js │ │ │ └── bootstrap.min.js │ │ ├── font-awesome │ │ ├── css │ │ │ ├── font-awesome.css │ │ │ └── font-awesome.min.css │ │ ├── fonts │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ └── fontawesome-webfont.woff2 │ │ ├── less │ │ │ ├── animated.less │ │ │ ├── bordered-pulled.less │ │ │ ├── core.less │ │ │ ├── fixed-width.less │ │ │ ├── font-awesome.less │ │ │ ├── icons.less │ │ │ ├── larger.less │ │ │ ├── list.less │ │ │ ├── mixins.less │ │ │ ├── path.less │ │ │ ├── rotated-flipped.less │ │ │ ├── screen-reader.less │ │ │ ├── stacked.less │ │ │ └── variables.less │ │ └── scss │ │ │ ├── _animated.scss │ │ │ ├── _bordered-pulled.scss │ │ │ ├── _core.scss │ │ │ ├── _fixed-width.scss │ │ │ ├── _icons.scss │ │ │ ├── _larger.scss │ │ │ ├── _list.scss │ │ │ ├── _mixins.scss │ │ │ ├── _path.scss │ │ │ ├── _rotated-flipped.scss │ │ │ ├── _screen-reader.scss │ │ │ ├── _stacked.scss │ │ │ ├── _variables.scss │ │ │ └── font-awesome.scss │ │ └── jquery │ │ ├── jquery.js │ │ └── jquery.min.js ├── log4j.properties ├── mail_conf │ └── main.cf ├── smtpd.conf ├── traefik │ ├── dynamic.toml │ └── traefik.toml └── webmail_conf │ └── config.inc.php ├── docker-compose.yml └── ssl ├── ca.pem ├── full.pem ├── linshare.key └── linshare.pem /.gitignore: -------------------------------------------------------------------------------- 1 | data* 2 | conf/home/md/README.md 3 | -------------------------------------------------------------------------------- /COPYING: -------------------------------------------------------------------------------- 1 | See COPYING.md or http://download.linshare.org/licence/. 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Linshare-Docker 2 | 3 | > Docker is available [here](https://www.docker.com/products/docker) and docker-compose [here](https://docs.docker.com/compose). 4 | > Make sure that these are installed on your system before starting. 5 | 6 | * Docker can be installed with the following lines on most distros : 7 | 8 | ```bash 9 | $ curl -sSL https://get.docker.com | sudo curl 10 | ``` 11 | 12 | * docker-compose : 13 | 14 | you can install it according to the offcial documentaion [here](https://docs.docker.com/compose/install/) 15 | 16 | ### Presentation 17 | 18 | Deploy a Linshare instance with ease using Docker and docker-compose 19 | 20 | This docker-compose aims to make possible to quickly run a Linshare appliance. 21 | It consists of several containers : 22 | 23 | * Tomcat with Linshare server 24 | * Postgresql for the server 25 | * MongoDB for the server 26 | * Apache2 with Linshare Admin's interface 27 | * Apache2 with Linshare User's interface 28 | * Apache2 with Linshare Upload request's interface 29 | * Apache2 acting as a reverse-proxy for the above (except Postgresql & MongoDB) 30 | * Thumbnail server to generate preview for input files on Linshare 31 | * Opensmtp server configured in relay mode 32 | * ClamAV server to be used by Tomcat 33 | * LDAP directory containing some sample users. [see](https://github.com/linagora/linshare-ldap-for-tests-dockerfile) 34 | * An init container: it will create a domain with a connexion to the embedded 35 | LDAP. 36 | 37 | Most of the containers can be configured to suits your needs, the available settings are either already used (and you have just to replace them) or commented out. 38 | Automatic upgrades for data used by containers is not available. 39 | 40 | ### How to use it 41 | 42 | ```bash 43 | # use this line to launch it 44 | $ docker-compose up -d 45 | 46 | # Once containers are created and running in backgroup, you must check if they are running properly: 47 | $ docker-compose ps 48 | # If a container exits with an error code different than 0, it means it failed. 49 | # In this case, you should take a look to the container. 50 | 51 | # use this line to see logs for all containers 52 | $ docker-compose logs 53 | 54 | # use this line to stop 55 | $ docker-compose stop 56 | 57 | # use this line to delete previously created containers 58 | $ docker-compose down 59 | 60 | # use this line to delete all data created by containers (reset all modifications) 61 | $ sudo rm -fr data 62 | ``` 63 | 64 | By default the containers are listenning to **linshare.local** so you may have to add the following lines in your hosts file : 65 | 66 | ```bash 67 | 127.0.0.1 admin.linshare.local user.linshare.local linshare.local traefik.linshare.local webmail.linshare.local upload-request.linshare.local docs.linshare.local 68 | ``` 69 | 70 | And all uses the ```https``` protocol via the port 443. 71 | 72 | ### Quick start 73 | 74 | Once everything is running, you can start using LinShare [home page](https://linshare.local). 75 | 76 | If you do not want to use the init container, you can setup the link with the 77 | LDAP manually with the following guide: 78 | 1. Browse to [admin.linshare.local](https://admin.linshare.local) and log in using 79 | - mail : **root@localhost.localdomain** 80 | - password : **adminlinshare** 81 | 2. Select **Domain** → **LDAP connections** 82 | - Click on the '**+**' icon 83 | - Fill the fields with your LDAP credentials 84 | - Hit **Save** 85 | 3. Select **Domain** → **Domain patterns** 86 | - In **Model selector** chose **default-pattern-demo** 87 | - Fill the field **Name** 88 | - Hit **Save** 89 | 4. Select **Domain** → **Manage domains** 90 | - Click on the '**+**' button after **LinShareRootDomain** 91 | - Fill the fields **Identifier**, **Name** and **Description** 92 | - Leave **Inter-domains communication rules** to ```DefaultDomainPolicy``` 93 | - Select the wanted settings for the remaining fields 94 | - Click on **Add provider** 95 | - Select the previous created elements in **step 2** and **step 3** for each fields and provide your **Base dn** in the last one 96 | - Hit **Save** 97 | 5. You can now go [user.linshare.local](https://user.linshare.local/) and start using your LDAP users. 98 | 99 | | firstName | lastName | mail | 100 | |-----------|-------------|---------------------------------| 101 | | Abbey | CURRY | abbey.curry@linshare.org | 102 | | Amy | WOLSH | amy.wolsh@linshare.org | 103 | | Anderson | WAXMAN | anderson.waxman@linshare.org | 104 | | Cornell | ABLE | cornell.able@linshare.org | 105 | | Dawson | WATERFIELD | dawson.waterfield@linshare.org | 106 | | Felton | GUMPER | felton.gumper@linshare.org | 107 | | Grant | BIG | grant.big@linshare.org | 108 | | Nick | DERBIES | nick.derbies@linshare.org | 109 | | Peter | WILSON | peter.wilson@linshare.org | 110 | | Walker | MCCALLISTER | walker.mccallister@linshare.org | 111 | 112 | - password : secret 113 | 114 | External users: They only have access to the webmail. They could be used as external contacts for anonymours URL, Upload request or LinShare guests 115 | 116 | | mail | Password 117 | |---------------------------------| ---------------------| 118 | | guest1@linshare.org | password1 | 119 | | guest2@linshare.org | password2 | 120 | | guest3@linshare.org | password3 | 121 | | guest4@linshare.org | password4 | 122 | | guest5@linshare.org | password5 | 123 | | external1@linshare.org | password1 | 124 | | external2@linshare.org | password2 | 125 | | external3@linshare.org | password3 | 126 | | external4@linshare.org | password4 | 127 | | external5@linshare.org | password5 | 128 | 129 | 130 | ### License 131 | View [license information](http://www.linshare.org/licenses/LinShare-License_AfferoGPL-v3_en.pdf) for the software contained in this image. 132 | 133 | ### Supported Docker versions 134 | 135 | * required **docker** engine release : 18.06.0+ see [ documentation](https://docs.docker.com/installation/) 136 | * required **composer** release : Compose 1.21.0+ see [documentation](https://github.com/docker/docker.github.io/blob/master/compose/compose-file/compose-versioning.md) 137 | 138 | 139 | ### User Feedback 140 | 141 | #### Documentation 142 | 143 | Official Linshare documentation is available here : [Linshare Configuration Guide (pdf format)](http://download.linshare.org/documentation/admins/Linagora_DOC_LinShare-1.7.0_Guide-Config-Admin_fr_20150303.pdf). 144 | 145 | 146 | #### Issues 147 | 148 | If you have any problems with or questions about this image, please contact us through a [GitHub issue](https://github.com/linagora/linshare-docker/issues). 149 | -------------------------------------------------------------------------------- /conf/catalina.properties: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one or more 2 | # contributor license agreements. See the NOTICE file distributed with 3 | # this work for additional information regarding copyright ownership. 4 | # The ASF licenses this file to You under the Apache License, Version 2.0 5 | # (the "License"); you may not use this file except in compliance with 6 | # the License. You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | 16 | # 17 | # List of comma-separated packages that start with or equal this string 18 | # will cause a security exception to be thrown when 19 | # passed to checkPackageAccess unless the 20 | # corresponding RuntimePermission ("accessClassInPackage."+package) has 21 | # been granted. 22 | package.access=sun.,org.apache.catalina.,org.apache.coyote.,org.apache.jasper.,org.apache.tomcat. 23 | # 24 | # List of comma-separated packages that start with or equal this string 25 | # will cause a security exception to be thrown when 26 | # passed to checkPackageDefinition unless the 27 | # corresponding RuntimePermission ("defineClassInPackage."+package) has 28 | # been granted. 29 | # 30 | # by default, no packages are restricted for definition, and none of 31 | # the class loaders supplied with the JDK call checkPackageDefinition. 32 | # 33 | package.definition=sun.,java.,org.apache.catalina.,org.apache.coyote.,\ 34 | org.apache.jasper.,org.apache.naming.,org.apache.tomcat. 35 | 36 | # 37 | # 38 | # List of comma-separated paths defining the contents of the "common" 39 | # classloader. Prefixes should be used to define what is the repository type. 40 | # Path may be relative to the CATALINA_HOME or CATALINA_BASE path or absolute. 41 | # If left as blank,the JVM system loader will be used as Catalina's "common" 42 | # loader. 43 | # Examples: 44 | # "foo": Add this folder as a class repository 45 | # "foo/*.jar": Add all the JARs of the specified folder as class 46 | # repositories 47 | # "foo/bar.jar": Add bar.jar as a class repository 48 | # 49 | # Note: Values are enclosed in double quotes ("...") in case either the 50 | # ${catalina.base} path or the ${catalina.home} path contains a comma. 51 | # Because double quotes are used for quoting, the double quote character 52 | # may not appear in a path. 53 | common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar" 54 | 55 | # 56 | # List of comma-separated paths defining the contents of the "server" 57 | # classloader. Prefixes should be used to define what is the repository type. 58 | # Path may be relative to the CATALINA_HOME or CATALINA_BASE path or absolute. 59 | # If left as blank, the "common" loader will be used as Catalina's "server" 60 | # loader. 61 | # Examples: 62 | # "foo": Add this folder as a class repository 63 | # "foo/*.jar": Add all the JARs of the specified folder as class 64 | # repositories 65 | # "foo/bar.jar": Add bar.jar as a class repository 66 | # 67 | # Note: Values may be enclosed in double quotes ("...") in case either the 68 | # ${catalina.base} path or the ${catalina.home} path contains a comma. 69 | # Because double quotes are used for quoting, the double quote character 70 | # may not appear in a path. 71 | server.loader= 72 | 73 | # 74 | # List of comma-separated paths defining the contents of the "shared" 75 | # classloader. Prefixes should be used to define what is the repository type. 76 | # Path may be relative to the CATALINA_BASE path or absolute. If left as blank, 77 | # the "common" loader will be used as Catalina's "shared" loader. 78 | # Examples: 79 | # "foo": Add this folder as a class repository 80 | # "foo/*.jar": Add all the JARs of the specified folder as class 81 | # repositories 82 | # "foo/bar.jar": Add bar.jar as a class repository 83 | # Please note that for single jars, e.g. bar.jar, you need the URL form 84 | # starting with file:. 85 | # 86 | # Note: Values may be enclosed in double quotes ("...") in case either the 87 | # ${catalina.base} path or the ${catalina.home} path contains a comma. 88 | # Because double quotes are used for quoting, the double quote character 89 | # may not appear in a path. 90 | shared.loader= 91 | 92 | # Default list of JAR files that should not be scanned using the JarScanner 93 | # functionality. This is typically used to scan JARs for configuration 94 | # information. JARs that do not contain such information may be excluded from 95 | # the scan to speed up the scanning process. This is the default list. JARs on 96 | # this list are excluded from all scans. The list must be a comma separated list 97 | # of JAR file names. 98 | # The list of JARs to skip may be over-ridden at a Context level for individual 99 | # scan types by configuring a JarScanner with a nested JarScanFilter. 100 | # The JARs listed below include: 101 | # - Tomcat Bootstrap JARs 102 | # - Tomcat API JARs 103 | # - Catalina JARs 104 | # - Jasper JARs 105 | # - Tomcat JARs 106 | # - Common non-Tomcat JARs 107 | # - Test JARs (JUnit, Cobertura and dependencies) 108 | tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\ 109 | bootstrap.jar,commons-daemon.jar,tomcat-juli.jar,\ 110 | annotations-api.jar,el-api.jar,jsp-api.jar,servlet-api.jar,websocket-api.jar,\ 111 | catalina.jar,catalina-ant.jar,catalina-ha.jar,catalina-storeconfig.jar,\ 112 | catalina-tribes.jar,\ 113 | jasper.jar,jasper-el.jar,ecj-*.jar,\ 114 | tomcat-api.jar,tomcat-util.jar,tomcat-util-scan.jar,tomcat-coyote.jar,\ 115 | tomcat-dbcp.jar,tomcat-jni.jar,tomcat-websocket.jar,\ 116 | tomcat-i18n-en.jar,tomcat-i18n-es.jar,tomcat-i18n-fr.jar,tomcat-i18n-ja.jar,\ 117 | tomcat-juli-adapters.jar,catalina-jmx-remote.jar,catalina-ws.jar,\ 118 | tomcat-jdbc.jar,\ 119 | tools.jar,\ 120 | commons-beanutils*.jar,commons-codec*.jar,commons-collections*.jar,\ 121 | commons-dbcp*.jar,commons-digester*.jar,commons-fileupload*.jar,\ 122 | commons-httpclient*.jar,commons-io*.jar,commons-lang*.jar,commons-logging*.jar,\ 123 | commons-math*.jar,commons-pool*.jar,\ 124 | jstl.jar,taglibs-standard-spec-*.jar,\ 125 | geronimo-spec-jaxrpc*.jar,wsdl4j*.jar,\ 126 | ant.jar,ant-junit*.jar,aspectj*.jar,jmx.jar,h2*.jar,hibernate*.jar,httpclient*.jar,\ 127 | jmx-tools.jar,jta*.jar,log4j*.jar,mail*.jar,slf4j*.jar,\ 128 | xercesImpl.jar,xmlParserAPIs.jar,xml-apis.jar,\ 129 | junit.jar,junit-*.jar,ant-launcher.jar,\ 130 | cobertura-*.jar,asm-*.jar,dom4j-*.jar,icu4j-*.jar,jaxen-*.jar,jdom-*.jar,\ 131 | jetty-*.jar,oro-*.jar,servlet-api-*.jar,tagsoup-*.jar,xmlParserAPIs-*.jar,\ 132 | jclouds-bouncycastle-1.9.2.jar,bcprov-*.jar,\ 133 | xom-*.jar 134 | 135 | # Default list of JAR files that should be scanned that overrides the default 136 | # jarsToSkip list above. This is typically used to include a specific JAR that 137 | # has been excluded by a broad file name pattern in the jarsToSkip list. 138 | # The list of JARs to scan may be over-ridden at a Context level for individual 139 | # scan types by configuring a JarScanner with a nested JarScanFilter. 140 | tomcat.util.scan.StandardJarScanFilter.jarsToScan=\ 141 | log4j-core*.jar,log4j-taglib*.jar,log4javascript*.jar,slf4j-taglib*.jar 142 | 143 | # String cache configuration. 144 | tomcat.util.buf.StringCache.byte.enabled=true 145 | #tomcat.util.buf.StringCache.char.enabled=true 146 | #tomcat.util.buf.StringCache.trainThreshold=500000 147 | #tomcat.util.buf.StringCache.cacheSize=5000 148 | -------------------------------------------------------------------------------- /conf/home/advanced.set.up.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |