Compare commits

...

334 Commits

Author SHA1 Message Date
voima-eetu
c3ecd245be
Change nginx container to unprivileged (#525) 2021-05-05 09:05:09 +02:00
Sven Hüster
5b52f713bd
Add warning to README (#530)
* Update README.md

* Update README.md

Co-authored-by: Carrie Warner (Mattermost) <74422101+cwarnermm@users.noreply.github.com>

* Update README.md

Co-authored-by: Carrie Warner (Mattermost) <74422101+cwarnermm@users.noreply.github.com>

* Update README.md

Co-authored-by: Carrie Warner (Mattermost) <74422101+cwarnermm@users.noreply.github.com>

Co-authored-by: Carrie Warner (Mattermost) <74422101+cwarnermm@users.noreply.github.com>
2021-03-30 14:42:55 +02:00
Patrick Schratz
d8c52f8d74
Make MM_VERSION an ARG instead of an ENV (#515)
* make MM_VERSION an ARG instead of an ENV
2021-03-21 10:17:41 +01:00
Amy Blais
2b12534f90
Update Dockerfile (#511) 2021-01-15 15:52:40 +01:00
wf6DJd8a3xSSCZbn
6f8c34c0f3
Updating shell scripts to adhear better to Bash style guides (#510)
* Updated Shell Script Format

Signed-off-by: Spencer <wf6DJd8a3xSSCZbn@protonmail.com>
2021-01-08 16:45:00 +01:00
Amy Blais
ad76445269
Update Dockerfile (#508) 2020-12-23 01:25:04 +01:00
Dave Thompson
bb1e8066c4
Enable easy configuration of encrypted PostgreSQL connections with new optional DB_SSLMODE (defaults to current value of "disable") following values allowed by PostgreSQL (#506)
* change to support environment variable configuration of SSL mode for PostgreSQL connections
2020-12-10 15:02:24 +01:00
Carlos Panato
43501880ff
bump to use 5.29.1 release 2020-12-04 16:35:55 +01:00
Yannic Haupenthal
a758c2c52b
Consistency of app/* (#502)
* be consistent with the use of tabs

* tabs; shellcheck; consistency

* use tabs
* use shellcheck to fix non POSIX stuff
* be consistent with the use of quotes and if-then-else / for-do-done
2020-11-17 12:05:16 +01:00
Carlos Panato
7647cce8c1
update MM to 5.29.0 2020-11-16 13:19:28 +01:00
Simon Staszkiewicz
c8b5a40f99
Update SSL ciphers and TLS versions in nginx config file (#501) 2020-11-03 10:12:21 +01:00
Carlos Panato
124a8ba340
Merge remote-tracking branch 'upstream/master' into master 2020-10-20 09:10:29 +02:00
Carlos Panato
8d916d82fa
bump based release 2020-10-20 09:09:12 +02:00
Elisabeth Kulzer
1f5c1b24f1
DOPS-215: Add MM_INSTALL_TYPE environment variable. (#497) 2020-10-07 14:06:26 +02:00
Emanuele Panzeri
66ab03e4fe
Quote arguments (#492) 2020-09-18 11:12:40 +02:00
Carlos Panato
bccdcd527d
update MM to 5.27.0 2020-09-14 17:24:16 +02:00
Carlos Panato
689a8f88db
bump MM to 5.26.1 2020-08-27 08:04:39 +02:00
Carlos Panato
6a4ab2bd12
bump MM to 5.26.0 2020-08-12 23:11:56 +02:00
nvjacobo
7c80c1fdb5
add TLS 1.3 support to web container (#488) 2020-08-10 10:56:21 +02:00
Carlos Panato
85375bfcfd
bump mm to 5.25.2 2020-08-04 15:00:13 +02:00
Carlos Panato
8553ee32aa
update MM to 5.25.1 2020-07-24 16:14:01 +02:00
Francois-D
9eb10f5cf3
Remove sudo: required as it is deprecated. (#485)
Co-authored-by: francois-d <dfrancis2.primus.ca>
2020-07-21 08:52:04 +02:00
Carlos Panato
189bc354fe
bump MM to 5.25.0 2020-07-15 19:03:29 +02:00
Carlos Panato
0f0612f484
bump to 5.24.2 2020-06-29 17:35:50 +02:00
Carlos Panato
0d5ff88269
bump MM to 5.24.1 2020-06-23 11:06:21 +02:00
Carlos Panato
8a288119d9
bump MM to 5.24.0 2020-06-18 14:23:46 +02:00
Amy Blais
8f81794e44
Update Dockerfile (#476) 2020-06-05 14:59:33 +02:00
Jason Blais
5f86258eed
Add ?src=docker-app query parameter to identify download source (#475)
#### Context:

Right now, multiple sources point to the server binaries on releases.mattermost.com, including the download page, upgrade instructions, Helm charts, version archive, and others.

We can identify the download source by adding a querystring to the url, i.e. https://releases.mattermost.com/5.22.1/mattermost-5.22.1-linux-amd64.tar.gz?src=docker-app

The intent is that we can then identify sources of downloads, identify those that typically lead to an unsuccessful server activation, and improve the experience for the developer/administrator.

This PR adds the "?src=docker-app" querysting tag to download source for the Docker app, so we know when someone downloaded it from this source

See https://github.com/mattermost/docs/pull/3596 for a similar change made to download sources on the version archive page.
2020-05-15 09:10:17 +02:00
Carlos Panato
6ba3e35ea0
bump docker app to 5.23.0 2020-05-14 17:49:53 +02:00
craph
50921a7313
Fix : certificate signed by unknown authority refs : https://github.com/mattermost/mattermost-server/issues/13059 (#474) 2020-05-13 17:17:48 +02:00
Carlos Panato
4f0087ebac
bump app dockerfile to 5.22.3 2020-05-12 08:17:17 +02:00
Oliver
a685cc24e5
Fixing docker-compose build process (#471)
Currently the command `docker-compose build` throws an error for building the database because it uses an old pip version.

This PR updates pip right before it is called. Anyways this should just be a temporary fix because the image uses Python 2.7 wich out of support since Jan 2020
2020-04-28 09:57:15 +02:00
Carlos Panato
8e796ba46e
bump mm to 5.22.1 2020-04-25 10:45:34 +02:00
Sven Hüster
69169f73ee
Update Dockerfile (#467) 2020-04-21 14:45:49 +02:00
nvjacobo
7fd2eb47a9
docker-compose: fix DB Docker building error #463 related wal-e 1.0.0 and azure (#464) 2020-04-15 09:30:49 +02:00
Igor Serebryany
1bfa69db5c
allow uncommenting for team edition (#433)
currently, if you follow the instructions and uncomment the lines, you
will get a YAML error:

```
ERROR: yaml.parser.ParserError: while parsing a block mapping
  in "./docker-compose.yml", line 23, column 5
expected <block end>, but found '<block mapping start>'
  in "./docker-compose.yml", line 25, column 7
```

found the potential solution in mattermost/mattermost-docker#343

Co-authored-by: mattermod <mattermod@users.noreply.github.com>
2020-04-01 11:46:36 +02:00
Akendo
068e654249
Fix the linking of the nginx configuration file (#458)
In this commit I'm adding some logic to ensure that the `entrypoint.sh`
file handles a pre-existing `mattermost.conf` file within the nginx
folder.

During deployment of some more custom nginx configuration it was
noticed that the linking process fails, because a file already exists
with the filesystem.

Signed-off-by: Akendo <akendo@akendo.eu>
2020-04-01 11:32:05 +02:00
alessandro
b4482771f7
docker-compose: remove unused ENV variable (#456) 2020-03-26 13:53:10 +01:00
Carlos Panato
ed682904c0
bump mm prod app to 5.21.0 2020-03-13 14:07:29 +01:00
Carlos Panato
e56bfe8a35
bump mm prod app to 5.20.2 2020-03-13 09:59:37 +01:00
alessandro
07b368de41
web entrypoint: forcefully link existing config (#454) 2020-03-13 09:58:26 +01:00
Claas Augner
1427315ef9
Remove deprecated nginx ssl directive (#451) (#452) 2020-03-03 14:30:03 +01:00
Carlos Panato
492ecd5ca3
bump mm prod app to 5.20.1 2020-02-17 09:57:28 +01:00
Carlos Panato
87fd37fc6f
bump mm prod app to 5.20.0 2020-02-15 10:13:58 +01:00
Carlos Panato
0f5428aa0d
bump to 5.19.1 2020-02-12 14:08:59 +01:00
Kevin Kandlbinder
8c8894ea15
Update Dockerfile (#448)
Closes #446.
2020-02-07 10:53:12 +01:00
Joshua Rosenfeld
58f972034d bump to 5.19.0 (#444) 2020-01-21 16:52:42 +01:00
Marc Becker
4075f0f922 Installing missing package pv (#443)
I tried to use wal-e as mentioned on dockerhub (see https://hub.docker.com/r/mattermost/mattermost-prod-db). To do the base backup I had to do some additional steps (see https://github.com/mattermost/mattermost-docker/issues/346):
- mount a volume into the database docker container (path in the container is /etc/wal-e.d/env) and put all credentials and the s3 prefix to this folder
- exec into the container and create a superuser (Command: CREATE USER postgres SUPERUSER;)

Now it still fails with the message, that the package *pv* is missing
2020-01-14 18:25:53 +01:00
Joshua Rosenfeld
a5d81c43fc bump to 5.18.1 (#441) 2020-01-09 19:23:19 +01:00
Raju Devidas
c3916bb1c3 Fixes for the smooth deployment of Team edition. (#438)
* Fixes for the smooth deployment of Team edition.
	- Just uncommenting out the lines does not work as expected.
	- the line for context is required for it to work for team edition deployment.
	- Added the subsequent changes in the installation instructions in README.md

* Adding changes as suggested by @ccoenen
  - making the changes more clear in the code block
  - adding more textual clarity in the sentence on what needs to be changed.
2020-01-09 11:24:03 +01:00
Carlos Panato
b9484f4444
bump to 5.18.0 2019-12-17 13:10:46 +01:00
Simon Staszkiewicz
39e9023691 Bug fixes (#427)
* Call the base container entrypoint with proper arguments

* Build the app container using path to directory

* Add CONTRIBUTING.md
2019-11-29 16:25:20 +01:00
Carlos Panato
ec1908a2ae
bump to 5.17.1 2019-11-25 18:58:05 +01:00
Carlos Panato
13d461d909
bump to 5.17.0 2019-11-21 14:23:17 +01:00
Ventz Petkov
4f4302fe1b Fix for letsencrypt, where to run on 443 you need to setcap cap_net_bind_service=+ep ./bin/mattermost. Note, this is needed internally from the container even if you set the correct CAP_NET_BIND_SERVICE in the docker compose env (#425) 2019-11-11 13:22:06 +01:00
Carlos Panato
3bc888ac7d
bump to 5.16.3 2019-11-07 08:19:16 +01:00
Christopher Poile
8dfd06db9d save the sql datasource into an env variable in the app container (#421) 2019-11-06 14:59:16 +01:00
Carlos Panato
425fcce148
bump to 5.16.2 2019-10-30 18:12:44 +01:00
Carlos Panato
79c50a1fa1
bump to 5.16.1 2019-10-30 07:28:40 +01:00
Carlos Panato
59a20bd83e
bump to 5.16.0 2019-10-18 14:40:02 +02:00
Carlos Panato
65c4244ba6
bump to 5.15.1 2019-10-14 14:08:43 +02:00
Carlos Panato
95d45e75fd
bump to 5.15.0 2019-09-17 09:12:01 +02:00
Carlos Panato
317ec67f2c
bump to 5.14.3 2019-09-17 09:10:34 +02:00
Marco Blessing
29c49db492 update docker-compose version (#415)
* update docker-compose version

* updating to file version 3 shouldn't break anything
2019-09-16 17:40:23 +02:00
Carlos Panato
ed9fed6916
add empty circleci 2019-09-09 12:11:50 +02:00
Kyle Robbertze
5b37c5ff53 Kubernetes Fixes (#413)
* Fix mattermost port number

* Bump version number

* Fix DB_PORT_NUMBER env variable

* List permissions required on data persistentvolume
2019-09-09 11:56:10 +02:00
Carlos Alberto Schneider Júnior
f807181245 bump mm version to 5.14.2 (#412) 2019-09-09 11:53:57 +02:00
Carlos Panato
a315bc042d
bump mm version 2019-08-29 11:24:45 +02:00
Carlos Panato
3a00bbc381
bump mattermost 2019-08-17 11:37:38 +02:00
Carlos Panato
c1dea8605b
update alpine base image 2019-08-17 11:37:30 +02:00
Kyâne Pichou
e755b5eb85 Remove @pichouk from active maintainers (#406) 2019-08-15 16:56:14 +02:00
Carlos Panato
4129a0e804
bump to 5.13.2 2019-07-29 15:31:47 +02:00
Carlos Panato
91701c543d
bump to 5.13.1 2019-07-19 21:35:00 +02:00
Carlos Panato
a46068e305
bump dockerfile to use 5.13.0 2019-07-17 10:42:12 +02:00
Carlos Panato
77ac551419
bump to 5.12.4 2019-07-16 11:35:53 +02:00
Carlos Panato
668f3bfb04
bump mm version in master as well 2019-06-28 11:25:44 +02:00
Carlos Tadeu Panato Junior
801eb4435c
bump to 5.12.0 (#396) 2019-06-15 11:38:32 +02:00
Carlos Tadeu Panato Junior
548091ebd8
bump to 5.11.0 (#393) 2019-05-16 09:44:06 +02:00
redg3ar
1893b95e8a fix typo in readme (#391) 2019-05-15 20:40:19 +02:00
Kyâne Pichou
e5ae4eb1e2 Revert "update readme to add deprecation notice (#388)" (#389)
This reverts commit 65acc9ac54.
2019-05-06 17:08:58 +02:00
scott lee davis
11f233e6b1 include timezone for plugins that use location information. (#390) 2019-05-05 20:50:58 +02:00
Carlos Tadeu Panato Junior
65acc9ac54 update readme to add deprecation notice (#388) 2019-05-03 21:21:34 +02:00
Carlos Tadeu Panato Junior
a7d6eb540f
Merge pull request #384 from cpanato/5.10
update to 5.10.0
2019-04-17 10:29:21 +02:00
Carlos Panato
2522c9c0cd
update to 5.10.0 2019-04-17 10:17:51 +02:00
Carlos Tadeu Panato Junior
cb6690b5f8
Merge pull request #379 from cpanato/5.9.0
bump to use 5.9.0
2019-03-16 10:50:23 +01:00
Carlos Panato
a62aa728ae
bump to use 5.9.0 2019-03-16 10:33:45 +01:00
Carlos Tadeu Panato Junior
201cca1a66
Merge pull request #380 from cpanato/5.8.1
bump to 5.8.1
2019-03-16 10:27:39 +01:00
Carlos Panato
32c53cb7ba
bump to 5.8.1 2019-03-16 10:06:10 +01:00
Carlos Tadeu Panato Junior
d538ee0f0a
Merge pull request #370 from tejasbubane/upgrades
Upgrade alpine to 3.9
2019-03-12 09:33:08 +01:00
Tejas Bubane
9037a92cfb
Upgrade app alpine image to 3.9 2019-03-12 13:10:06 +05:30
Carlos Tadeu Panato Junior
25f7109bc6
Merge pull request #374 from mattermost/change-maintainers
Update maintainers
2019-02-22 15:07:49 +01:00
Kyâne
53ab78d245 Add Carlos Panato as maintainer 2019-02-21 20:27:52 +01:00
Kyâne
ab63404929 Move Pan Luo as previous maintainer 2019-02-21 20:27:35 +01:00
Carlos Tadeu Panato Junior
b95ad214ff
Merge pull request #372 from cpanato/5.8.0
update MM to 5.8.0
2019-02-16 11:18:51 +01:00
Carlos Panato
fa60edeb94
update MM to 5.8.0 2019-02-16 10:57:15 +01:00
Carlos Tadeu Panato Junior
fab23ca3ff
Merge pull request #371 from cpanato/5.7.2
update MM to 5.7.2
2019-02-16 10:54:37 +01:00
Carlos Panato
dd8850f5c5
update MM to 5.7.2 2019-02-16 10:46:59 +01:00
Carlos Tadeu Panato Junior
52fd23b846
Merge pull request #367 from mattermost/change-log-settings
Enable error log to Console by default
2019-02-11 10:06:08 +01:00
Kyâne
bcbfc6a04b Enable error log to Console by default
Closes #365
2019-02-09 19:47:44 +01:00
Kyâne Pichou
738d7b6353
Upgrade to 5.7.1 (#358)
Closes #357
2019-02-01 21:40:01 +01:00
Carlos Tadeu Panato Junior
d3f9a7dec2
Merge pull request #359 from Ovski4/patch-1
Break traefik command in multiple lines
2019-01-29 11:47:18 +01:00
Baptiste Bouchereau
f701af7044
Update docker-stack-traefik.yml
The command is pretty long. I used yaml folded style:
- Each line break is replaced by a space.
- The indention in each line will be ignored
- A line break will be inserted at the end.
Which keep the current behaviour
2019-01-29 21:04:07 +13:00
cpanato
defa175421
update to 5.7.0 2019-01-16 01:39:38 -04:00
cpanato
fc50e8de8b
bump to 5.6.3 2019-01-12 18:39:33 +01:00
Carlos Tadeu Panato Junior
bdc89c926a
Merge pull request #355 from cpanato/update_bean
add config.json to elasticbeanstalk deployment
2019-01-12 16:17:04 +01:00
Kyâne
d8d6ac96bf Add client plugins as bind mount
Closes #356
2019-01-11 19:21:57 +01:00
cpanato
4ccecdd0bd
add config 2019-01-07 11:55:10 +01:00
Carlos Tadeu Panato Junior
4f80ede8bb
Merge pull request #353 from cpanato/bump562
bump to 5.6.2
2018-12-22 16:37:22 +01:00
cpanato
79ae72ec6c
bump to 5.6.2 2018-12-22 15:59:43 +01:00
Carlos Tadeu Panato Junior
c58467c507
Merge pull request #351 from cpanato/bump561
bump to 5.6.1
2018-12-19 23:32:34 +01:00
cpanato
470efcc185
bump to 5.6.1 2018-12-19 23:02:30 +01:00
Carlos Tadeu Panato Junior
2992a9eb70
Merge pull request #350 from cpanato/bump_560
bump to version 5.6.0
2018-12-14 22:29:15 +01:00
cpanato
af5d1dcd3f
bump to version 5.6.0 2018-12-14 22:03:03 +01:00
Kyâne
dd1ecde9c8 Allow to properly shutdown web container
Closes #347
2018-12-14 19:56:30 +01:00
Carlos Tadeu Panato Junior
84fdd0d081
Merge pull request #344 from cpanato/5.5.1
bump to 5.5.1
2018-12-06 11:42:50 +01:00
cpanato
0ef663ca4d
bump to 5.5.1 2018-12-06 11:07:56 +01:00
Schrooms
2efe681682 renamed the vars to be better inline with the readme (#341) 2018-12-04 20:29:02 +01:00
Carlos Tadeu Panato Junior
8516ea1ee9
Merge pull request #338 from cpanato/5.5.0
Bump to 5.5.0
2018-11-15 20:18:11 +01:00
cpanato
b0ad6fc932
Bump to 5.5.0 2018-11-15 20:12:44 +01:00
Carlos Tadeu Panato Junior
026c2bcf49 downgrade alpine to 3.7 due xmlsec1 issues (#334) 2018-11-03 15:27:47 +01:00
Kyâne Pichou
68db80f759
Improve app to db connection setup (#332) 2018-10-29 13:57:59 +01:00
Victor Yang
3ff54bc90f fix S3 wal-e support (#324)
* fix S3 wal-e support
2018-10-29 12:00:20 +01:00
gy741
f49e4894cc fix uuoc and typo (#333)
* Fix typo

* Fix UUOC in app/entrypoint.sh
2018-10-27 17:13:32 +02:00
Carlos Tadeu Panato Junior
647ca3e8c6 fix permission in plugin folder (#331) 2018-10-19 16:08:09 +02:00
Kyâne Pichou
94c09b61a0
Fix database HEALTHCHECK with correct user/db name (#330)
Closes #325
2018-10-17 20:30:46 +02:00
Kyâne Pichou
ec683530be
Upgrade to 5.4.0 (#327) 2018-10-16 20:50:18 +02:00
Kyâne Pichou
e01e8e4c01
Fix typo (#323)
Thanks @adam-golab for the report (#320)
2018-10-05 21:19:39 +02:00
Kyâne Pichou
908ab3c22b
Add warning about read_only (#321)
Closes #317
2018-10-05 16:51:13 +02:00
Kyâne Pichou
42e8e07c3f
Fix database healthcheck (#318)
Because the PostgreSQL user is not always "postgres", do not specify a
user to the Healthcheck command. It will also works correctly.

Closes #313
2018-10-04 09:32:02 +02:00
Carlos Tadeu Panato Junior
e6deb77cbe Remove DB check in the app/entrypoint (#316)
* fix check

* remove db check
2018-10-02 11:53:08 +02:00
Carlos Tadeu Panato Junior
8adcd9e53b if all config was set in the config.json bypass the checks (#315) 2018-09-28 20:24:42 +02:00
Carlos Tadeu Panato Junior
1604e11a5b add ability to build your own mm binary (#314) 2018-09-28 15:01:06 +02:00
Carlos Tadeu Panato Junior
ddbc3cc81b add volume for client/plugins (#312) 2018-09-23 20:02:06 +02:00
Pierre Kuhner
788cb9f641 Bump to MM 5.3.1 (#310) 2018-09-19 10:24:20 +02:00
Carlos Tadeu Panato Junior
f6744c052d Bump to 5.3.0 (#308) 2018-09-14 20:47:35 +02:00
PICHOU Kyâne
a92d3e91a8 Bump to 5.2.2
Close #307
2018-09-14 20:37:51 +02:00
Tejas Bubane
52739026c8 Use alpine image v3.8 for app container (#305)
Closes #304
2018-09-10 21:07:45 +02:00
dcherniv
17b9055ed6 Collapsing RUNs to save space by combining layers (#301) 2018-08-27 22:25:41 +02:00
Carlos Tadeu Panato Junior
83ed83237d
Merge pull request #298 from cpanato/5.2.1
Bump to 5.2.1
2018-08-24 14:50:46 +02:00
cpanato
947d278973
Bump to 5.2.1 2018-08-24 14:35:11 +02:00
cpanato
776169b16b
remove spaces 2018-08-24 14:35:01 +02:00
Yusuke Nemoto
1811af4a75 Backup plugins directory (#297) 2018-08-22 14:47:58 +02:00
Sean Sackowitz
d8868f541e Upgrade to MM 5.2.0 (#296) 2018-08-17 22:25:25 +02:00
Carlos Tadeu Panato Junior
7536571f0a
Merge pull request #294 from cpanato/5.1.1
Bump to MM 5.1.1
2018-08-13 19:29:54 +02:00
cpanato
b71629bfe6
Bump to MM 5.1.1 2018-08-13 10:55:18 +02:00
Sean Sackowitz
ea79d2569c Upgrade to 5.1.0 (#289) 2018-07-16 20:44:12 +02:00
Kyâne Pichou
bf93836cd4
Upgrade to 5.0.1 (#287) 2018-07-09 18:56:47 +02:00
PICHOU Kyâne
c5aaa9512b Fix text
Closes #280
2018-06-24 19:00:21 +02:00
Tejas Bubane
89e162636c Upgrade to mattermost 5.0.0 (#284)
* Upgrade to mattermost 5.0.0

Changelog: https://docs.mattermost.com/administration/changelog.html#release-v5-0

* Change binary name to `mattermost`

As described in the [changelog](https://forum.mattermost.org/t/upcoming-changes-with-mattermost-v5-0/5119).
2018-06-16 15:42:52 +02:00
wildloop
8c6b058e72 Mattermost application Cloud Foundry manifest (#278) 2018-06-12 20:06:32 +02:00
Kyâne Pichou
8e9facbece
Upgrade 4.10.1 (#275)
Changelog is : https://docs.mattermost.com/administration/changelog.html#release-v4-10
2018-06-03 16:58:11 +02:00
Kyâne Pichou
753dad0176
Upgrade to 4.10.0 (#271)
Closes #270
2018-05-16 12:11:40 +02:00
Kyâne Pichou
2c458d7fa8
Upgrade to 4.9.2 (#267) 2018-05-04 18:25:21 +02:00
Kyâne Pichou
f6d5a6b6c1
Upgrade to 4.9.1 (#264) 2018-04-28 13:38:43 +02:00
PICHOU Kyâne
c92df51d68 Add important upgrade notes for 4.9.0 2018-04-18 21:41:55 +02:00
antoineHC
f79bbea7a4 Production Hardening (#241) 2018-04-15 19:33:49 +02:00
Tejas Bubane
4f0a5376f3 Upgrade mattermost to 4.9.0 (#258) 2018-04-15 19:33:20 +02:00
Kyâne Pichou
bfb3a77f9a
Change pip install on DB image (#257) 2018-04-15 00:34:49 +02:00
Compilenix
c9cc81895a Upgrade mattermost to v4.8.1 (#255) 2018-04-10 19:24:34 +02:00
Tejas Bubane
01f7b80e5d Upgrade mattermost to v4.8.0 (#247) 2018-03-16 12:04:35 +01:00
Kyâne Pichou
1aa54549b0
Revert "Improve TLS security (#243)" (#246)
This reverts commit 8bf84cd765.
2018-03-12 19:48:00 +01:00
Kyâne Pichou
8bf84cd765
Improve TLS security (#243)
Closes #242
2018-03-11 20:23:55 +01:00
Kyâne Pichou
b5b27f8abe
Upgrade to 4.7.3 (#244) 2018-03-09 19:15:12 +01:00
3_1_3_u
4e242572f1 Images Postgres Alpine, optimization (#207) 2018-02-26 16:43:54 +01:00
Kyâne Pichou
e895c0d4dd
Upgrade to 4.7.2 (#240)
Changelog is [here](https://docs.mattermost.com/administration/changelog.html#release-v4-7)
2018-02-23 10:17:24 +01:00
Kyâne Pichou
19ab5f2b77
Upgrade to 4.7.1 (#238) 2018-02-19 20:15:05 +01:00
Carlos Tadeu Panato Junior
758f039b1b update dockerfile to use MM 4.7.0 (#237) 2018-02-18 00:09:11 +01:00
3_1_3_u
e6c27a7200 Upgrade to 4.7.0 (#236) 2018-02-17 23:44:11 +01:00
Yusuke Nemoto
dbae001728 update link for ubuntu-16.04 (#235) 2018-02-11 12:28:25 +01:00
3_1_3_u
efec6080cc Use Alpine based image for app (#208) 2018-02-09 00:55:45 +01:00
Kyâne Pichou
563aadce3e
Add mime-support to get /etc/mime.types file (#232) 2018-02-01 23:59:50 +01:00
3_1_3_u
8ef796f137 Upgrade to 4.6.1 (#231) 2018-01-31 11:19:09 +01:00
Yusuke Nemoto
bf2d66321f Fix broken link (#227) 2018-01-21 23:06:54 +01:00
Mauricio Ugaz
09d59556e0 Swarm file flavors (#222)
* Better documentation for swarm file, avoid exposing ports for no reason

* add swarm file using traefik
2018-01-21 23:01:46 +01:00
Kyâne Pichou
bdabd10d4d
Add xmlsec1 package (#226)
Closes #225
2018-01-18 19:06:48 +01:00
3_1_3_u
5e1aea0555 Upgrade to 4.6 (#223) 2018-01-16 11:31:58 +01:00
Kyâne Pichou
30a8217f26
Remove deprecated procedure
Close #221
2018-01-09 22:37:46 +01:00
Dave Lasley
8bb026133d [FIX] URLEncode PSQL Password (#219)
* URL Encode the Postgres password, allowing for special characters in the connection string
2018-01-05 19:26:44 +01:00
Veovis
dfe76684f4 Change the working dir for plugins to work (#218)
Fix https://github.com/mattermost/mattermost-docker/issues/217 with the default configuration on the PluginSettings as they use relative paths.
2018-01-01 17:58:08 +01:00
Tejas Bubane
283d2b71f0 Upgrade mattermost to 4.5.0 (#216) 2017-12-16 19:07:52 +01:00
Kyâne Pichou
18c3bec4c5
Upgrade to 4.4.5 (#213) 2017-12-12 20:40:00 +01:00
Kyâne Pichou
6421fead62
Upgrade to 4.4.3 (#212) 2017-12-05 21:52:00 +01:00
Sven Schliesing
c6c1049552 Fix typo in app Dockerfile (#210) 2017-11-26 19:58:56 +01:00
Pan Luo
5de76764be
Merge pull request #209 from andruwa13/4.4.2
Upgrade to 4.4.2
2017-11-22 21:03:29 -08:00
Andrew Vityuk
91d4d87df4 Upgrade to 4.4.2 2017-11-23 02:26:09 +02:00
3_1_3_u
48ff02839f Images Ubuntu 16.04, optimization and reduce image size (#204) 2017-11-20 20:29:07 +01:00
Pan Luo
7cccaa82d7
Merge pull request #198 from mattermost/use-alpine-on-web
Use Alpine based Nginx image for Web container
2017-11-19 23:29:10 -08:00
3_1_3_u
01a5a5a2b7 Add security config to nginx (#199) 2017-11-19 12:02:45 +01:00
PICHOU Kyâne
d3a8121675 Use Alpine based Nginx image for Web container 2017-11-18 17:04:52 +01:00
3_1_3_u
b4b0aa1866 Upgrade to 4.4.1 (#197) 2017-11-16 21:01:36 +01:00
3_1_3_u
a44c046e3c Upgrade to 4.4 (#196) 2017-11-15 17:45:24 -08:00
3_1_3_u
3baace04bb Upgrade to 4.3.2 (#194) 2017-11-11 13:14:51 +01:00
PICHOU Kyâne
4cc614a3ac Merge branch 'master' of github.com:mattermost/mattermost-docker 2017-11-07 19:38:41 +01:00
PICHOU Kyâne
4062d90068 Remove a remaining quote in README
Close #193
2017-11-07 19:37:46 +01:00
Kyâne Pichou
8dc50a5d31 Allow to customize app host/port (#181)
Allow to use custom hostname and/or port value for app container from the Web
container. Usefull for some people using containers provider (eg. #142)
2017-10-26 21:16:09 +02:00
Kyâne Pichou
3715c7aadd Upgrade to 4.3.1 (#186) 2017-10-23 21:47:46 +02:00
sebgl
1943614f10 Remove deprecated links in docker-compose file (#185)
Using links is considered to be a deprecated feature of Docker,
in favor of user-defined networks (see
https://docs.docker.com/engine/userguide/networking/default_network/dockerlinks/).
Since the docker-compose file is in Version 2, a network is
automatically created for the 3 containers.
2017-10-20 20:19:34 +02:00
Kyâne Pichou
b9491b03ef Upgrade to 4.3.0 (#183) 2017-10-15 22:04:51 +02:00
Kyâne Pichou
29bff18001 Comment and indent app entrypoint (#182) 2017-10-14 16:47:44 +02:00
Kyâne Pichou
5cc50eb522 Use best practices for Dockerfiles (#180) 2017-10-13 14:12:30 +02:00
pierre demagny
bcbe60a8d8 Add docker swarm mode support (#176)
* add docker swarm mode support

Signed-off-by: Pierre DEMAGNY <pdemagny@printoclock.com>

* use official prod-web image, respect project's standard directory layout & update readme accordingly.

Signed-off-by: Pierre DEMAGNY <pdemagny@printoclock.com>
2017-09-25 22:56:04 +02:00
PICHOU Kyâne
0ff2e7ea05 Remove IPv6 listening since it is not enable by default on Docker 2017-09-25 20:57:08 +02:00
PICHOU Kyâne
4aa2665d8e Add Docker requirements 2017-09-25 19:59:24 +02:00
PICHOU Kyâne
ae4c36ef95 Remove old and unused Dockerfile-enterprise 2017-09-25 19:43:55 +02:00
PICHOU Kyâne
9fecc9d366 Update documentation to use MySQL 2017-09-25 18:57:52 +02:00
Kyâne Pichou
6ee75f4f6b Merge app dockerfiles (#146)
* Merge app dockerfiles

* Update readme for choosing team edition
2017-09-24 22:25:47 +02:00
localsnet
250f9e3185 Bash if statement [: missing `]' error 54 line (#174)
Added space
2017-09-20 12:44:15 +02:00
Vít Listík
d05077c3db Added SSL example (#171)
Added commented section for enabling SSL
2017-09-20 09:13:24 +02:00
Tejas Bubane
c4ee11619f Upgrade to mattermost 4.2 (#169) 2017-09-15 14:25:58 +02:00
Jason Blais
19f0bd8302 Update README.md (#166)
* Improve update documentation
2017-08-24 21:45:05 +02:00
Kyâne Pichou
ee170666ec Merge pull request #165 from mattermost/4.1.0
Upgrade to 4.1.0
2017-08-16 22:28:35 +02:00
PICHOU Kyâne
f5ee7c83d7 Upgrade to 4.1.0
Close #164
2017-08-16 22:22:59 +02:00
Kyâne Pichou
3ae1be4871 Merge pull request #163 from tejasbubane/mattermost-4.0.3
Upgrade mattermost to 4.0.3
2017-08-10 19:38:30 +02:00
Tejas Bubane
1fceb3b09e
Upgrade mattermost to 4.0.3 2017-08-10 22:14:09 +05:30
Kyâne Pichou
ddf1fa905d Merge pull request #154 from mattermost/improve_doc
Improve README
2017-08-04 11:50:03 +02:00
Kyâne Pichou
8836d57c91 Merge pull request #160 from mattermost/4.0.2
Upgrade to 4.0.2
2017-07-29 22:24:22 +02:00
PICHOU Kyâne
1f1916794d Upgrade to 4.0.2 2017-07-29 22:18:49 +02:00
Kyâne Pichou
6e2600cad1 Merge pull request #157 from jminardi/patch-1
Add 301 redirect from port 80 to port 443
2017-07-19 21:00:30 +02:00
Jack Minardi
6a7058b30d Add 301 redirect from port 80 to port 443 2017-07-19 14:42:23 -04:00
Kyâne Pichou
21200a42a4 Merge pull request #155 from mattermost/4.0.1
Upgrade to 4.0.1
2017-07-19 09:48:26 +02:00
Kyâne PICHOU
c70bab0f3a Upgrade to 4.0.1
Changelog here: https://docs.mattermost.com/administration/changelog.html#release-v4-0-1
2017-07-19 09:41:59 +02:00
Kyâne Pichou
b74145fad2 Fix datasource option in README 2017-07-16 12:38:23 +02:00
PICHOU Kyâne
ea748c2e52 Improve README 2017-07-16 12:33:41 +02:00
Kyâne Pichou
0fddf35ac5 Merge pull request #153 from mattermost/4.0
Update to 4.0.0
2017-07-16 10:42:06 +02:00
PICHOU Kyâne
9bb060fa07 Update to 4.0.0 2017-07-15 19:38:12 +02:00
Kyâne Pichou
c9a33c73bc Merge pull request #152 from jnbt/master
Only configure database connection if needed
2017-07-11 09:25:37 +02:00
Jonas Thiel
56836d834c Only configure database connection if needed 2017-07-11 08:11:29 +02:00
Kyâne Pichou
7590cefb53 Do not hardcode/override MM_CONFIG value 2017-06-29 14:11:45 +02:00
Kyâne Pichou
09f6b6580a Fix docker-compose file 2017-06-23 14:57:51 +02:00
Kyâne Pichou
4ec6288dbb Merge pull request #144 from mattermost/use_links
Use links instead of depends_on
2017-06-22 09:41:02 +02:00
Kyâne Pichou
5993e1f231 Use links instead of depends_on 2017-06-19 10:47:59 +02:00
Kyâne Pichou
944a4ea7de Drop docker-compose version 1 support
Close #138
2017-06-19 10:38:18 +02:00
Kyâne Pichou
d3358cf2de Merge pull request #141 from tejasbubane/mattermost-3.10
Upgrade to mattermost 3.10.0
2017-06-16 11:10:52 +02:00
Tejas Bubane
05a4fa19b2
Upgrade to mattermost 3.10.0 2017-06-15 13:15:29 +05:30
Pan Luo
9238aafd9e Merge pull request #139 from mattermost/salted
Do not use hardcoded value for salts
2017-06-12 14:00:41 -07:00
PICHOU Kyâne
4a71713587 Directly generate salts when modifying config.json with JQ 2017-06-12 22:44:37 +02:00
PICHOU Kyâne
32c24cb08b Do not use hardcoded value for salts (thanks @pierreozoux) 2017-06-10 23:01:53 +02:00
Kyâne Pichou
16071fdc8f Merge pull request #137 from mattermost/fixapp
Do not use env variables to override APP conf. (fix #136)
2017-06-10 18:19:47 +02:00
PICHOU Kyâne
87b26e155e Do not use env variables to override APP conf.
Since setting environment variables override and force a configuration parameters, it is better to not use them.
Should only override and force database configuration.

resolve #136
2017-06-08 22:02:53 +02:00
Kyâne Pichou
9d5d84409d Fix typo in README 2017-06-08 11:13:10 +02:00
Kyâne Pichou
6512a09608 Improve app Dockerfile (#131)
* Improve app Dockerfile
2017-06-07 22:48:41 +02:00
Kyâne Pichou
2151040683 Merge pull request #133 from mattermost/sort
Move AWS config to contrib folder
2017-06-07 08:52:50 +02:00
PICHOU Kyâne
c50cdfd6a0 Fix readme 2017-06-02 23:56:51 +02:00
PICHOU Kyâne
41c022a80b Move AWS conf to dedicated folder in contrib/ 2017-06-02 23:56:40 +02:00
Pichou Kyâne
e91e69401f Merge pull request #125 from carlosasj/nginx-compatibility
Follows the NGINX Breaking Changes suggestion
2017-06-02 23:46:33 +02:00
Pichou Kyâne
5a022ac7c1 Merge pull request #132 from Brightscout/master
Fix Dockerrun.aws.json so that it works with the latest docker setup
2017-06-02 20:23:38 +02:00
Carlos Schneider
15e7a9cd58 Fix X-Forwarded-Proto (PR suggestion) 2017-06-02 10:19:04 -03:00
Michael DeBonis
08006574fc Fixing AWS EB deployment 2017-06-01 23:40:33 -05:00
Michael DeBonis
16c5d0e217 Defaulting to team edition 2017-06-01 21:49:22 -05:00
Pan Luo
3b3825be65 Merge pull request #130 from pichouk/patch-1
Do you want any help ?
2017-06-01 06:28:28 -07:00
Pan Luo
05f44e1413 Merge pull request #129 from FingerLiu/master
fix build error on Ubuntu 14.04
2017-06-01 06:03:26 -07:00
Pichou Kyâne
3b210eabcf Help proposal 2017-06-01 10:50:36 +02:00
FingerLiu
bd49394e75 add libffi-dev 2017-05-31 11:40:12 +08:00
FingerLiu
307cf8f10a fix build error on Ubuntu 14.04
libssl-dev is needed to be installed on Ubuntu or the build won't be succeed.
2017-05-24 14:41:55 +08:00
Carlos Schneider
3ffc1056c7 Follows the NGINX Breaking Changes suggestion on Mattermost Changelog 2017-05-17 10:28:48 -03:00
Pan Luo
48a14edaca Merge pull request #122 from carlosasj/upgrade-3.9.0
Upgrade to Mattermost 3.9.0
2017-05-17 01:12:44 -07:00
Carlos Schneider
ca43fe3961 Upgrade to Mattermost 3.9.0 2017-05-16 11:33:37 -03:00
Pan Luo
5586656959 Merge pull request #121 from pichouk/master
Upgrade to Mattermost 3.8.2
2017-04-22 13:08:55 -07:00
PICHOU Kyâne
9e9be71ee4 Upgrade to Mattermost 3.8.2 2017-04-22 17:44:06 +02:00
Pan Luo
b1b8f83d7a Merge pull request #117 from mattermost/3.8.1
Update Dockerfile to 3.8.1
2017-04-19 13:03:08 -07:00
Eric Sethna
484fc8d04c Update Dockerfile-enterprise 2017-04-19 13:50:10 -06:00
Eric Sethna
0ce37f1eb9 Update Dockerfile 2017-04-19 13:49:43 -06:00
Pan Luo
7a1a055056 Merge pull request #116 from tejasbubane/upgrade-mattermost-3.8.0
Upgrade mattermost to 3.8.0
2017-04-19 12:14:48 -07:00
Tejas Bubane
b15521700e
Upgrade mattermost to 3.8.0 2017-04-15 12:18:12 +05:30
Pan Luo
a034f8f7ab
Fix the incorrect port in docker-compose 2017-03-26 00:35:45 -07:00
Pan Luo
d6eeccd422
Increase docker-compose up wait time in travis 2017-03-25 23:51:05 -07:00
Pan Luo
b252e9fed1
Update Mattermost EE to 3.7.3 2017-03-25 22:06:23 -07:00
Pan Luo
a29f94d497
Update to Mattermost 3.7.3 2017-03-22 16:52:48 -07:00
Pan Luo
a8b4e73882
Update to Mattermost 3.7.2 2017-03-19 21:46:05 -07:00
Pan Luo
fb268003cb
Update to Mattermost 3.7.1 2017-03-15 15:36:18 -07:00
Pan Luo
f0e0d92b3f
Update to Mattermost 3.6.3 2017-03-15 15:35:12 -07:00
Pan Luo
82f13b1e4c Move enterprise version into this branch (#94)
Since the only difference is mattermost package and  we don't want
to maintain two difference branches, just moved the enterprise version
into a alternative dockerfile
2017-03-13 15:26:45 -07:00
Pan Luo
1a967e8bf3 Merge pull request #108 from quentinus95/patch-1
add update section to the readme
2017-03-13 15:09:42 -07:00
Quentin de Longraye
ddd1363360 add update section to the readme 2017-03-03 17:16:47 +01:00
Pan Luo
7b478061f1 Merge pull request #103 from darkrasid/master
add log dir volume option on docker-compose file
2017-03-01 21:21:38 -08:00
nikosch86
f7c78e675a simplify reverse proxy (#98)
make use of mainline nginx image, switch ssl/non-ssl config file based on presence of cert/key, hardcode app port since it is hardcoded in the app container as well
2017-02-26 00:30:03 -08:00
nikosch86
142b766cde make use of postgres image db init script, use their variable naming … (#100)
* make use of postgres image db init script, use their variable naming scheme, make setup-wale executable so it can actually run
2017-02-23 13:32:24 -08:00
Pan Luo
c6e177cdf2 Merge pull request #99 from nikosch86/docker-compose-dependencies
make use of docker compose dependencies
2017-02-23 13:31:18 -08:00
nikosch86
1cb127e849 services should be stoppable (#97)
services should be stoppable
2017-02-23 13:30:41 -08:00
Pan Luo
2a0cf0cb21 Allow config location to be customized from CLI (#66)
* Allow config location to be customized from CLI

Config file should be stored in a persistent storage as it is stores the
app status and configuration. It should be independent from container
life cycle and mounted into app container. This commit allows config
location to be changed through CLI. So that when the persistent storage
is mounted, the location can be pointed to the mounted config file.

Also some updates for best practices:
* extracted version numbers in Dockerfile into a environment variable
* Added mattermost/bin to PATH environment variable

* Add customizable environment variables to readme
2017-02-22 21:37:43 -08:00
pilsner
d9aaad088a add log dir volume option on docker-compose file 2017-02-23 14:09:53 +09:00
Nikolaus
5094af97e0 make use of docker compose dependencies 2017-02-20 09:56:11 +04:00
Pan Luo
02745dd6b4 Merge pull request #89 from darkrasid/master
set db setting on app also
2017-02-11 16:06:39 -08:00
Pan Luo
327ebae8b5 Merge pull request #91 from mattermost/maintenance
Maintainer Guide
2017-02-11 16:02:23 -08:00
it33
8d186bff81 Updating based on xcompass feedback 2017-02-04 08:39:32 -08:00
it33
60b04f9a3f Capitalization change 2017-02-03 22:54:14 -08:00
it33
773568a835 Update MAINTENANCE.md 2017-02-03 22:46:32 -08:00
it33
b123e7276d Adding short/long name 2017-02-03 22:09:24 -08:00
it33
50971b8529 Tweak name 2017-02-03 22:08:11 -08:00
it33
d95d2a3645 Slight updates to README
Slight updates to README
2017-02-03 22:07:23 -08:00
it33
37d6418c15 Tweak to sound more polite 2017-02-03 21:52:37 -08:00
it33
d40e9b19d8 Fixing typo 2017-02-03 21:43:27 -08:00
it33
3a9ae11c9b Minor formatting and naming changes 2017-02-03 21:42:44 -08:00
it33
adca09354c Correcting dates 2017-02-03 21:35:32 -08:00
it33
b6c13555dc Update MAINTENANCE.md 2017-02-03 21:01:22 -08:00
it33
062bfeafc7 Update MAINTENANCE.md 2017-02-03 20:56:53 -08:00
it33
6c69e82998 Merge pull request #88 from timrsmith/master
Updating Dockerfile for Mattermost 3.6.2
2017-02-03 20:54:37 -08:00
it33
a6c68daef9 Maintenance info page
Drafting maintenance info page to server as a template for other open source projects
2017-02-03 20:33:53 -08:00
Pan Luo
2a89bdc48f
Update to 3.6.2 2017-02-03 14:13:13 -08:00
pilsner
ff571ff4f4 set db setting on app also
- db setting is available on db
- app also uses same valiables (eg. MM_USERNAME...)  however there is no hint on compose file.
2017-02-03 17:19:04 +09:00
Tim Smith
f37ec3d772 Updating Dockerfile for Mattermost 3.6.2
Recommended security update.
2017-02-02 12:13:20 -08:00
Pan Luo
3aea843e38
Add non-docker install doc link 2017-01-30 16:51:36 -08:00
Pan Luo
174d96a0a7 Merge pull request #85 from jasonblais/patch-3
Update link to install guide
2017-01-30 16:08:59 -08:00
Pan Luo
4c30235fde
Export vars to fix the postgres container error 2017-01-30 15:57:17 -08:00
Jason Blais
10b5d1e078 Update link to install guide 2017-01-27 09:25:58 -05:00
lfbrock
5c9589dae0 Update Dockerfile 2017-01-20 10:54:45 -05:00
lfbrock
4c716ea0b6 Update Dockerfile for v3.6.0 2017-01-12 18:20:56 -05:00
Andrey Devyatkin
ce53a32e95 Update docker-compose file to v2 format (#62)
* Added docker-compose file v2 format and renamed old one to docker-compose-v1.yml
2016-12-20 00:13:02 -08:00
Eric Sethna
782129450e Merge pull request #65 from jasonblais/patch-1
Update Dockerfile for Mattermost 3.5.1
2016-11-23 14:17:10 -07:00
Eric Sethna
1bc6468407 Update Dockerfile 2016-11-23 14:15:22 -07:00
Yi EungJun
77163a69c6 Merge pull request #58 from jdoubleu/patch-1
Fixing web proxy dealing with protocols
2016-11-23 01:30:50 +09:00
Jason Blais
f601ee5f25 Update Dockerfile for Mattermost 3.5 2016-11-21 14:31:08 -05:00
Yi EungJun
c1c1fe8a9c Fix 502 gateway error 2016-11-05 21:49:52 +09:00
Yi EungJun
9943072ec7 Merge pull request #56 from 5ak3t/patch-1
updated docker compose file to set db variables at a single source #55
2016-11-05 00:23:13 +09:00
John
a83cc74087 Updated nginx ssl config to provide correct X-Forwared-Proto header 2016-10-15 13:29:13 +02:00
John
d9b9d12d08 Updated nginx config to provide correct X-Forwared-Proto header 2016-10-15 13:26:08 +02:00
5ak3t
b27089605f updated docker compose file to set db variables at a single source #55 2016-10-15 09:53:00 +05:30
Yi EungJun
3cb431a35c Merge pull request #54 from remialvado/fix/fix-wale-dependency
fix(deps): fix dependency toward wal-e to avoid issues with Python mi…
2016-10-08 22:23:35 +09:00
Yi EungJun
41b57ede1b Restart always by default 2016-10-08 19:47:25 +09:00
Yi EungJun
1aaca49a46 k8s: Move files for k8s into contrib directory 2016-10-08 19:12:56 +09:00
Rémi Alvado
1e02b33cd3 fix(deps): fix dependency toward wal-e to avoid issues with Python minimal requirement 2016-10-07 14:52:51 +02:00
Yi EungJun
36ef5ccd28 Merge pull request #50 from rothgar/kubernetes
Kubernetes manifest examples and README
2016-09-20 01:34:04 +09:00
Justin Garrison
39e5b82778 updated main README kubernetes link 2016-09-19 08:30:29 -07:00
Justin Garrison
51167ed1e3 Moved kubernetes/README to contrib/kubernetes/ 2016-09-19 08:29:23 -07:00
Justin Garrison
2a1998b4b2 added link to kubernetes folder in main README 2016-09-18 22:21:01 -07:00
Justin Garrison
3ae6029684 renamed k8s -> kubernetes 2016-09-18 22:17:17 -07:00
Justin Garrison
850fc79407 documentation fixes 📃 2016-09-18 22:16:41 -07:00
Justin Garrison
c8a5cfa236 Switched rc -> deployment and using secret instead of configmap.
Added README with steps to run postgres.
2016-09-18 22:04:44 -07:00
Justin Garrison
9773fa0ce1 initial sample mattermost kubernetes manifests 2016-09-18 10:03:40 -07:00
Yi EungJun
e46a014688 app: upgrade to Mattermost 3.4.0 2016-09-16 18:02:10 +09:00
Yi EungJun
74af02ead1 Merge pull request #47 from xcompass/custom-archive-timeout
Add environment var to allow customize archive timeout
2016-08-18 10:15:36 +09:00
Pan Luo
0f4d339b57
Add environment var to allow customize archive timeout 2016-08-16 23:45:54 -07:00
Yi EungJun
e904375698 app: upgrade to Mattermost 3.3.0 2016-08-17 15:14:16 +09:00
Yi EungJun
914b85dec4 README: fix incorrect SSL certifcate paths
Reported-by: Alax Villmann <alax@users.noreply.github.com>
2016-08-12 10:38:54 +09:00
33 changed files with 1742 additions and 447 deletions

14
.circleci/config.yml Normal file
View File

@ -0,0 +1,14 @@
version: 2.1
jobs:
none:
docker:
- image: alpine:3.10
steps:
- run:
command: echo "Skipping. not implemented"
workflows:
version: 2
mainbuild:
jobs:
- none

8
.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
# Elastic Beanstalk Files
.elasticbeanstalk/*
!.elasticbeanstalk/*.cfg.yml
!.elasticbeanstalk/*.global.yml
# Generated data
volumes

View File

@ -1,5 +1,3 @@
sudo: required
services:
- docker
@ -9,14 +7,16 @@ before_install:
install:
- eval $BUILD
- sleep 10
- sleep 30
env:
- BUILD="docker-compose up -d"
- BUILD="docker run -d --name db mattermost-prod-db && sleep 5 && docker run -d --link db -p 80:80 --name app mattermost-prod-app"
- BUILD="mkdir -p ./volumes/app/mattermost/{data,logs,config,plugins} && docker-compose up -d"
- BUILD="docker run -d --name db -e POSTGRES_USER=mmuser -e POSTGRES_PASSWORD=mmuser_password -e POSTGRES_DB=mattermost mattermost-prod-db && sleep 5 && docker run -d --link db -p 80:8000 --name app -e MM_USERNAME=mmuser -e MM_PASSWORD=mmuser_password mattermost-prod-app"
script:
- curl -sSf http://localhost > /dev/null
- docker ps -a | grep app | grep healthy
- docker ps -a | grep db | grep healthy
after_failure:
- timeout 3s docker-compose logs app db web

5
CONTRIBUTING.md Executable file
View File

@ -0,0 +1,5 @@
# Code Contribution Guidelines
Thank you for your interest in contributing! Please see the [Mattermost Contribution Guide](https://developers.mattermost.com/contribute/getting-started/) which describes the process for making code contributions across Mattermost projects and [join our "Contributors" community channel](https://community.mattermost.com/core/channels/tickets) to ask questions from community members and the Mattermost core team.
When you submit a pull request, it goes through a [code review process outlined here](https://developers.mattermost.com/contribute/getting-started/code-review/).

View File

@ -1,60 +0,0 @@
{
"AWSEBDockerrunVersion": "2",
"volumes": [
{
"name": "app-config",
"host": {
"sourcePath": "/var/app/current/app/mattermost/config"
}
},
{
"name": "app-data",
"host": {
"sourcePath": "/var/app/current/app/mattermost/data"
}
},
{
"name": "db-data",
"host": {
"sourcePath": "/var/app/current/db/mattermost/var/lib/postgresql/data"
}
}
],
"containerDefinitions": [
{
"name": "app",
"image": "mattermost/mattermost-prod-app:latest",
"memory": 128,
"mountPoints": [
{
"sourceVolume": "app-config",
"containerPath": "/mattermost/config"
},
{
"sourceVolume": "app-data",
"containerPath": "/mattermost/data"
}
],
"portMappings": [
{
"hostPort": 80,
"containerPort": 80
}
],
"links": [
"db"
]
},
{
"name": "db",
"image": "mattermost/mattermost-prod-db:latest",
"memory": 128,
"mountPoints": [
{
"sourceVolume": "db-data",
"containerPath": "/var/lib/postgresql/data"
}
]
}
]
}

70
MAINTENANCE.md Normal file
View File

@ -0,0 +1,70 @@
# Maintainer Guide
This file outlines the current maintainer(s) of this open source project and expectations. It also includes credits to past maintainers and the project creator.
## Project Name
When reference externally, please use this for the short name:
- Production Docker deployment for Mattermost
Please use this long name:
- Production Docker deployment for Mattermost by the Mattermost open source project
## Maintainer(s)
The following people help to maintain this open source project:
| Current Maintainer(s) | Start Date |
|:--------------------------------------|:--------------|
| Carlos Tadeu Panato Junior - @cpanato | Feb 18 2018 |
In case something happens where no maintainers are able to complete their responsibilities, the following sponsoring organization can help find a new maintainer:
| Sponsoring Organization | Start Date |
|:-------------------------------|:--------------|
| Mattermost Open Source Project | Dec 04 2016 |
## Activities
The following is a guide for current, new maintainers and prospective maintainers of this open source project to get started and to understand on-going responsibilities:
### Getting Started
The following steps should be completed by a new maintainer
1. **Add your name** - Create a pull request to add your name, GitHub username and start date to this document.
2. **Subscribe to mailing lists** - To be notified of new releases and security updates of Mattermost, subscribe to the [Mattermost Security Update Mailing List](http://mattermost.us11.list-manage.com/subscribe?u=6cdba22349ae374e188e7ab8e&id=3a93eb6929) and the [Mattermost Insiders Newsletter](http://mattermost.us11.list-manage.com/subscribe?u=6cdba22349ae374e188e7ab8e&id=2add1c8034)
### Updating
When receive a mailing list email about a new security update or major version of Mattermost being released, update the version number of this project by doing the following:
In the **master branch**
- Change the [version number](https://github.com/mattermost/mattermost-docker/blob/master/app/Dockerfile#L6) to the latest release
- Tag the repo
### Issue and Pull Request Review
Maintainer(s) should periodically review pull requests and issues submitted to provide feedback and to merge pull request changes when the maintainer feels the change would be appropriate.
## Credits
PREVIOUS MAINTAINERS
| Maintainer | Start Date | End Date |
|:------------------------|:--------------|:------------|
| Yi EungJun - @npcode | Nov 26 2015 | Nov 30 2016 |
| Pan Luo - @xcompass | Nov 30 2015 | Feb 21 2019 |
| Kyâne Pichou - @pichouk | Jun 01 2017 | Aug 15 2019 |
CREATOR
| Creator | Created Date |
|:-----------------------|:--------------|
| Yi EungJun - @npcode | Nov 26 2015 |

293
README.md
View File

@ -1,120 +1,243 @@
Dockerfiles for Mattermost in production
# Production Docker deployment for Mattermost
See [README.aws.md](./README.aws.md) if you want to install it on AWS Elastic Beanstalk.
## WARNING:
The current state of this repository doesn't work out-of-the box since Mattermost server v5.31+ requires PostgreSQL versions of 10 or higher.
We're actively working on a fix to this repository. Until then, please refer to these upgrade instructions: https://github.com/mattermost/mattermost-docker/issues/489#issuecomment-790277661
This project enables a deployment of a Mattermost server in a multi-node production configuration using Docker.
[![Build Status](https://travis-ci.org/mattermost/mattermost-docker.svg?branch=master)](https://travis-ci.org/mattermost/mattermost-docker)
## Requirements
Notes:
- The default Mattermost edition for this repo has changed from Team Edition to Enterprise Edition. Please see [Choose Edition](#choose-edition-to-install) section.
- To install this Docker project on AWS Elastic Beanstalk please see [AWS Elastic Beanstalk Guide](contrib/aws/README.md).
- To run Mattermost on Kubernetes you can start with the [manifest examples in the kubernetes folder](contrib/kubernetes/README.md)
- To install Mattermost without Docker directly onto a Linux-based operating systems, please see [Admin Guide](https://docs.mattermost.com/guides/administrator.html#installing-mattermost).
* [docker]
* [docker-compose]
## Installation using Docker Compose
## Installation
The following instructions deploy Mattermost in a production configuration using multi-node Docker Compose set up.
### Install with SSL certificate
### Requirements
1. Open docker-compose.yml and set `MATTERMOST_ENABLE_SSL` to true.
* [docker] (version `1.12+`)
* [docker-compose] (version `1.10.0+` to support Compose file version `3.0`)
```
environment:
- MATTERMOST_ENABLE_SSL=true
```
### Choose Edition to Install
2. Put your SSL certificate as `./volumes/cert/cert.pem` and the private key that has
no password as `./volumes/cert/key-no-password.pem`. If you don't have
them you may generate a self-signed SSL certificate.
If you want to install Enterprise Edition, you can skip this section.
3. Build and run mattermost
docker-compose up -d
4. Open `https://your.domain` with your web browser.
### Install without SSL certificate
1. Open docker-compose.yml and set `MATTERMOST_ENABLE_SSL` to false.
```
environment:
- MATTERMOST_ENABLE_SSL=false
```
2. Build and run mattermost
docker-compose up -d
3. Open `http://your.domain` with your web browser.
## Starting/Stopping
### Start
docker-compose start
### Stop
docker-compose stop
## Removing
### Remove the containers
docker-compose stop && docker-compose rm
### Remove the data and settings of your mattermost instance
sudo rm -rf volumes
## Database Backup
When AWS S3 environment variables are specified on db docker container, it enables [Wal-E](https://github.com/wal-e/wal-e) backup to S3.
```bash
docker run -d --name mattermost-db \
-e AWS_ACCESS_KEY_ID=XXXX \
-e AWS_SECRET_ACCESS_KEY=XXXX \
-e WALE_S3_PREFIX=s3://BUCKET_NAME/PATH \
-e AWS_REGION=us-east-1
-v ./volumes/db/var/lib/postgresql/data:/var/lib/postgresql/data
-v /etc/localtime:/etc/localtime:ro
db
To install the team edition, change `build: app` to `build:` and uncomment out these lines in `app:` services block to make it look like below in docker-compose.yaml file:
```yaml
app:
build:
context: app
args:
- edition=team
```
The `app` Dockerfile will read the `edition` build argument to install Team (`edition = 'team'`) or Enterprise (`edition != team`) edition.
### Database container
This repository offer a Docker image for the Mattermost database. It is a customized PostgreSQL image that you should configure with following environment variables :
* `POSTGRES_USER`: database username
* `POSTGRES_PASSWORD`: database password
* `POSTGRES_DB`: database name
It is possible to use your own PostgreSQL database, or even use MySQL. But you will need to ensure that Application container can connect to the database (see [Application container](#application-container))
#### AWS
If deploying to AWS, you could also set following variables to enable [Wal-E](https://github.com/wal-e/wal-e) backup to S3 :
* `AWS_ACCESS_KEY_ID`: AWS access key
* `AWS_SECRET_ACCESS_KEY`: AWS secret
* `WALE_S3_PREFIX`: AWS s3 bucket name
* `AWS_REGION`: AWS region
All four environment variables are required. It will enable completed WAL segments sent to archive storage (S3). The base backup and clean up can be done through the following command:
```bash
# base backup
docker exec mattermost-db su - postgres sh -c "/usr/bin/envdir /etc/wal-e.d/env /usr/local/bin/wal-e backup-push /var/lib/postgresql/data"
# keep the most recent 7 base backups and remove the old ones
docker exec mattermost-db su - postgres sh -c "/usr/bin/envdir /etc/wal-e.d/env /usr/local/bin/wal-e delete --confirm retain 7"
# Base backup
docker exec mattermost-db su - postgres sh -c "/usr/bin/envdir /etc/wal-e.d/env /usr/bin/wal-e backup-push /var/lib/postgresql/data"
# Keep the most recent 7 base backups and remove the old ones
docker exec mattermost-db su - postgres sh -c "/usr/bin/envdir /etc/wal-e.d/env /usr/bin/wal-e delete --confirm retain 7"
```
Those tasks can be executed through a cron job or systemd timer.
### Application container
Application container run the Mattermost application. You should configure it with following environment variables :
* `MM_USERNAME`: database username
* `MM_PASSWORD`: database password
* `MM_DBNAME`: database name
If your database use some custom host and port, it is also possible to configure them :
* `DB_HOST`: database host address
* `DB_PORT_NUMBER`: database port
Use this optional variable if your PostgreSQL connection requires encryption (you may need a certificate authority file and/or a certificate revocation list - check the documentation for your database provider). See the [PostgreSQL notes on encrypted connections](https://www.postgresql.org/docs/current/libpq-ssl.html) for recommendations on what values to use when encryption is needed.
* `DB_SSLMODE`: defaults to `disable`, indicating no encryption
PostgreSQL allows two other variables `sslrootcert` and `sslcrl` for connection strings. However these are not broadly supported when the connection string is specified as a URI. If you need these parameters, use the PostgreSQL-specified environment variables
* `PGSSLROOTCERT` specifies the location of CA file
* `PGSSLCRL` specifies the location of a certificate revocation list file
If you use a Mattermost configuration file on a different location than the default one (`/mattermost/config/config.json`) :
* `MM_CONFIG`: configuration file location inside the container.
If you choose to use MySQL instead of PostgreSQL, you should set a different datasource and SQL driver :
* `DB_PORT_NUMBER` : `3306`
* `MM_SQLSETTINGS_DRIVERNAME` : `mysql`
* `MM_SQLSETTINGS_DATASOURCE` : `MM_USERNAME:MM_PASSWORD@tcp(DB_HOST:DB_PORT_NUMBER)/MM_DBNAME?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s`
Don't forget to replace all entries (beginning by `MM_` and `DB_`) in `MM_SQLSETTINGS_DATASOURCE` with the real variables values.
If you want to push Mattermost application to **Cloud Foundry**, use a `manifest.yml` like this one (with external PostgreSQL service):
```
---
applications:
- name: mattermost
docker:
image: mattermost/mattermost-prod-app
instances: 1
memory: 1G
disk_quota: 256M
env:
DB_HOST: database host address
DB_PORT_NUMBER: database port
MM_DBNAME: database name
MM_USERNAME: database username
MM_PASSWORD: database password
```
### Web server container
This image is optional, you should **not** use it when you have your own reverse-proxy. It is a simple front Web server for the Mattermost app container. If you use the provided `docker-compose.yml` file, you don't have to configure anything. But if your application container is reachable on custom host and/or port (eg. if you use a container provider), you should add those two environment variables :
* `APP_HOST`: application host address
* `APP_PORT_NUMBER`: application HTTP port
If you plan to upload large files to your Mattermost instance, Nginx will need to write some temporary files. In that case, the `read_only: true` option on the `web` container should be removed from your `docker-compose.yml` file.
#### Install with SSL certificate
Put your SSL certificate as `./volumes/web/cert/cert.pem` and the private key that has
no password as `./volumes/web/cert/key-no-password.pem`. If you don't have
them you may generate a self-signed SSL certificate.
#### Configure SSO with GitLab
If you are looking for SSO with GitLab and you use self signed certificate you have to add the PKI chain of your authority in app because Alpine doesn't know him. This is required to avoid **Token request failed: certificate signed by unknown authority**
For that uncomment this line and replace with the correct path of your PKI chain:
```
# - <path_to_your_gitlab_pki>/pki_chain.pem:/etc/ssl/certs/pki_chain.pem:ro
```
### Starting/Stopping Docker
#### Start
If you are running docker with non root user, make sure the UID and GID in app/Dockerfile are the same as your current UID/GID
```
mkdir -p ./volumes/app/mattermost/{data,logs,config,plugins}
chown -R 2000:2000 ./volumes/app/mattermost/
docker-compose start
```
#### Stop
```
docker-compose stop
```
### Removing Docker
#### Remove the containers
```
docker-compose stop && docker-compose rm
```
#### Remove the data and settings of your Mattermost instance
```
sudo rm -rf volumes
```
## Update Mattermost to latest version
First, shutdown your containers to back up your data.
```
docker-compose down
```
Back up your mounted volumes to save your data. If you use the default `docker-compose.yml` file proposed on this repository, your data is on `./volumes/` folder.
Then run the following commands.
```
git pull
docker-compose build
docker-compose up -d
```
Your Docker image should now be on the latest Mattermost version.
## Upgrading Mattermost to 4.9+
Docker images for `4.9.0` release introduce some important changes from [PR #241](https://github.com/mattermost/mattermost-docker/pull/241) to improve production use of Mattermost with Docker.
**There are 2 important changes for existing installations**
One important change is that we don't use `root` user by default to run the Mattermost application. So, as explained on [the README](https://github.com/mattermost/mattermost-docker#start), if you use host mounted volume you have to be sure that files on your host server have the correct UID/GID (by default those values are `2000`). In practice, you should just run following commands :
```
mkdir -p ./volumes/app/mattermost/{data,logs,config,plugins}
chown -R 2000:2000 ./volumes/app/mattermost/
```
The second important change is the port used by Mattermost application container. The default port is now `8000`, and existing installations that use port `80` will not work without a little configuration change. You have to open your Mattermost configuration file (`./volumes/app/mattermost/config/config.json` by default) and change the key `ServiceSettings.ListenAddress` to `:8000`.
Also if you use your own web-server/reverse-proxy you need to change its configuration to reach port `8000` of the Mattermost container.
## Upgrading to Team Edition 3.0.x from 2.x
You need to migrate your database before upgrading mattermost to 3.0.x from
2.x. Run these commands in the latest mattermost-docker directory.
You need to migrate your database before upgrading Mattermost to `3.0.x` from
`2.x`. Run these commands in the latest `mattermost-docker` directory.
```
docker-compose rm -f app
docker-compose build app
docker-compose run app -upgrade_db_30
docker-compose up -d
```
See the [official Upgrade Guide](http://docs.mattermost.com/administration/upgrade.html) for more details.
docker-compose rm -f app
docker-compose build app
docker-compose run app -upgrade_db_30
docker-compose up -d
## Installation using Docker Swarm Mode
See the [offical Upgrade Guide](http://docs.mattermost.com/administration/upgrade.html) for more details.
The following instructions deploy Mattermost in a production configuration using docker swarm mode on one node.
Running containerized applications on multi-node swarms involves specific data portability and replication handling that are not covered here.
### Requirements
* [docker] (1.12.0+)
### Swarm Mode Installation
First, create mattermost directory structure on the docker hosts:
```
mkdir -p /var/lib/mattermost/{cert,config,data,logs,plugins}
```
Then, fire up the stack in your swarm:
```
docker stack deploy -c contrib/swarm/docker-stack.yml mattermost
```
## Known Issues
* Do not modify the Listen Address in Service Settings.
* Rarely 'app' container fails to start because of "connection refused" to
* Rarely `app` container fails to start because of "connection refused" to
database. Workaround: Restart the container.
## More informations
## More information
If you want to know how to use docker-compose, see [the overview
page](https://docs.docker.com/compose).
For the server configurations, see [prod-ubuntu.rst] of mattermost.
For the server configurations, see [prod-ubuntu.rst] of Mattermost.
[docker]: http://docs.docker.com/engine/installation/
[docker-compose]: https://docs.docker.com/compose/install/
[prod-ubuntu.rst]: https://github.com/mattermost/docs/blob/master/source/install/prod-ubuntu.rst
[prod-ubuntu.rst]: https://docs.mattermost.com/install/install-ubuntu-1604.html

View File

@ -1,15 +1,57 @@
FROM ubuntu:14.04
FROM alpine:3.10
RUN apt-get update && apt-get -y install curl netcat
RUN mkdir -p /mattermost/data
# Some ENV variables
ENV PATH="/mattermost/bin:${PATH}"
ENV MM_INSTALL_TYPE=docker
RUN curl https://releases.mattermost.com/3.2.0/mattermost-team-3.2.0-linux-amd64.tar.gz | tar -xvz
# Build argument to set Mattermost edition
ARG edition=enterprise
ARG PUID=2000
ARG PGID=2000
ARG MM_BINARY=
ARG MM_VERSION=5.31.0
RUN rm /mattermost/config/config.json
COPY config.template.json /
COPY docker-entry.sh /
RUN chmod +x /docker-entry.sh
ENTRYPOINT ["/docker-entry.sh"]
# Install some needed packages
RUN apk add --no-cache \
ca-certificates \
curl \
jq \
libc6-compat \
libffi-dev \
libcap \
linux-headers \
mailcap \
netcat-openbsd \
xmlsec-dev \
tzdata \
&& rm -rf /tmp/*
EXPOSE 80
# Get Mattermost
RUN mkdir -p /mattermost/data /mattermost/plugins /mattermost/client/plugins \
&& if [ ! -z "$MM_BINARY" ]; then curl $MM_BINARY | tar -xvz ; \
elif [ "$edition" = "team" ] ; then curl https://releases.mattermost.com/$MM_VERSION/mattermost-team-$MM_VERSION-linux-amd64.tar.gz?src=docker-app | tar -xvz ; \
else curl https://releases.mattermost.com/$MM_VERSION/mattermost-$MM_VERSION-linux-amd64.tar.gz?src=docker-app | tar -xvz ; fi \
&& cp /mattermost/config/config.json /config.json.save \
&& rm -rf /mattermost/config/config.json \
&& addgroup -g ${PGID} mattermost \
&& adduser -D -u ${PUID} -G mattermost -h /mattermost -D mattermost \
&& chown -R mattermost:mattermost /mattermost /config.json.save /mattermost/plugins /mattermost/client/plugins \
&& setcap cap_net_bind_service=+ep /mattermost/bin/mattermost
USER mattermost
#Healthcheck to make sure container is ready
HEALTHCHECK CMD curl --fail http://localhost:8000 || exit 1
# Configure entrypoint and command
COPY entrypoint.sh /
ENTRYPOINT ["/entrypoint.sh"]
WORKDIR /mattermost
CMD ["mattermost"]
# Expose port 8000 of the container
EXPOSE 8000
# Declare volumes for mount point directories
VOLUME ["/mattermost/data", "/mattermost/logs", "/mattermost/config", "/mattermost/plugins", "/mattermost/client/plugins"]

View File

@ -1,95 +0,0 @@
{
"ServiceSettings": {
"ListenAddress": ":80",
"MaximumLoginAttempts": 10,
"SegmentDeveloperKey": "",
"GoogleDeveloperKey": "",
"EnableOAuthServiceProvider": false,
"EnableIncomingWebhooks": false,
"EnableOutgoingWebhooks": false,
"EnablePostUsernameOverride": false,
"EnablePostIconOverride": false,
"EnableTesting": false,
"EnableSecurityFixAlert": true
},
"TeamSettings": {
"SiteName": "Mattermost",
"MaxUsersPerTeam": 50,
"EnableTeamCreation": true,
"EnableUserCreation": true,
"RestrictCreationToDomains": "",
"RestrictTeamNames": true,
"EnableTeamListing": false
},
"SqlSettings": {
"DriverName": "postgres",
"DataSource": "postgres://MM_USERNAME:MM_PASSWORD@DB_HOST:DB_PORT/MM_DBNAME?sslmode=disable&connect_timeout=10",
"DataSourceReplicas": [],
"MaxIdleConns": 10,
"MaxOpenConns": 10,
"Trace": false,
"AtRestEncryptKey": "7rAh6iwQCkV4cA1Gsg3fgGOXJAQ43QVg"
},
"LogSettings": {
"EnableConsole": false,
"ConsoleLevel": "INFO",
"EnableFile": true,
"FileLevel": "INFO",
"FileFormat": "",
"FileLocation": ""
},
"FileSettings": {
"DriverName": "local",
"Directory": "/mattermost/data/",
"EnablePublicLink": true,
"PublicLinkSalt": "A705AklYF8MFDOfcwh3I488G8vtLlVip",
"ThumbnailWidth": 120,
"ThumbnailHeight": 100,
"PreviewWidth": 1024,
"PreviewHeight": 0,
"ProfileWidth": 128,
"ProfileHeight": 128,
"InitialFont": "luximbi.ttf",
"AmazonS3AccessKeyId": "",
"AmazonS3SecretAccessKey": "",
"AmazonS3Bucket": "",
"AmazonS3Region": ""
},
"EmailSettings": {
"EnableSignUpWithEmail": true,
"SendEmailNotifications": false,
"RequireEmailVerification": false,
"FeedbackName": "",
"FeedbackEmail": "",
"SMTPUsername": "",
"SMTPPassword": "",
"SMTPServer": "",
"SMTPPort": "",
"ConnectionSecurity": "",
"InviteSalt": "bjlSR4QqkXFBr7TP4oDzlfZmcNuH9YoS",
"PasswordResetSalt": "vZ4DcKyVVRlKHHJpexcuXzojkE5PZ5eL",
"ApplePushServer": "",
"ApplePushCertPublic": "",
"ApplePushCertPrivate": ""
},
"RateLimitSettings": {
"EnableRateLimiter": true,
"PerSec": 10,
"MemoryStoreSize": 10000,
"VaryByRemoteAddr": true,
"VaryByHeader": ""
},
"PrivacySettings": {
"ShowEmailAddress": true,
"ShowFullName": true
},
"GitLabSettings": {
"Enable": false,
"Secret": "",
"Id": "",
"Scope": "",
"AuthEndpoint": "",
"TokenEndpoint": "",
"UserApiEndpoint": ""
}
}

View File

@ -1,33 +0,0 @@
#!/bin/bash
config=/mattermost/config/config.json
DB_HOST=${DB_HOST:-db}
DB_PORT_5432_TCP_PORT=${DB_PORT_5432_TCP_PORT:-5432}
MM_USERNAME=${MM_USERNAME:-mmuser}
MM_PASSWORD=${MM_PASSWORD:-mmuser_password}
MM_DBNAME=${MM_DBNAME:-mattermost}
echo -ne "Configure database connection..."
if [ ! -f $config ]
then
cp /config.template.json $config
sed -Ei "s/DB_HOST/$DB_HOST/" $config
sed -Ei "s/DB_PORT/$DB_PORT_5432_TCP_PORT/" $config
sed -Ei "s/MM_USERNAME/$MM_USERNAME/" $config
sed -Ei "s/MM_PASSWORD/$MM_PASSWORD/" $config
sed -Ei "s/MM_DBNAME/$MM_DBNAME/" $config
echo OK
else
echo SKIP
fi
echo "Wait until database $DB_HOST:$DB_PORT_5432_TCP_PORT is ready..."
until nc -z $DB_HOST $DB_PORT_5432_TCP_PORT
do
sleep 1
done
# Wait to avoid "panic: Failed to open sql connection pq: the database system is starting up"
sleep 1
echo "Starting platform"
cd /mattermost/bin
./platform $*

82
app/entrypoint.sh Executable file
View File

@ -0,0 +1,82 @@
#!/bin/sh
# Function to generate a random salt
generate_salt() {
tr -dc 'a-zA-Z0-9' </dev/urandom | fold -w 48 | head -n 1
}
# Read environment variables or set default values
DB_HOST=${DB_HOST:-db}
DB_PORT_NUMBER=${DB_PORT_NUMBER:-5432}
# see https://www.postgresql.org/docs/current/libpq-ssl.html
# for usage when database connection requires encryption
# filenames should be escaped if they contain spaces
# i.e. $(printf %s ${MY_ENV_VAR:-''} | jq -s -R -r @uri)
# the location of the CA file can be set using environment var PGSSLROOTCERT
# the location of the CRL file can be set using PGSSLCRL
# The URL syntax for connection string does not support the parameters
# sslrootcert and sslcrl reliably, so use these PostgreSQL-specified variables
# to set names if using a location other than default
DB_USE_SSL=${DB_USE_SSL:-disable}
MM_DBNAME=${MM_DBNAME:-mattermost}
MM_CONFIG=${MM_CONFIG:-/mattermost/config/config.json}
_1=$(echo "$1" | awk '{ s=substr($0, 0, 1); print s; }')
if [ "$_1" = '-' ]; then
set -- mattermost "$@"
fi
if [ "$1" = 'mattermost' ]; then
# Check CLI args for a -config option
for ARG in "$@"; do
case "$ARG" in
-config=*) MM_CONFIG=${ARG#*=} ;;
esac
done
if [ ! -f "$MM_CONFIG" ]; then
# If there is no configuration file, create it with some default values
echo "No configuration file $MM_CONFIG"
echo "Creating a new one"
# Copy default configuration file
cp /config.json.save "$MM_CONFIG"
# Substitute some parameters with jq
jq '.ServiceSettings.ListenAddress = ":8000"' "$MM_CONFIG" >"$MM_CONFIG.tmp" && mv "$MM_CONFIG.tmp" "$MM_CONFIG"
jq '.LogSettings.EnableConsole = true' "$MM_CONFIG" >"$MM_CONFIG.tmp" && mv "$MM_CONFIG.tmp" "$MM_CONFIG"
jq '.LogSettings.ConsoleLevel = "ERROR"' "$MM_CONFIG" >"$MM_CONFIG.tmp" && mv "$MM_CONFIG.tmp" "$MM_CONFIG"
jq '.FileSettings.Directory = "/mattermost/data/"' "$MM_CONFIG" >"$MM_CONFIG.tmp" && mv "$MM_CONFIG.tmp" "$MM_CONFIG"
jq '.FileSettings.EnablePublicLink = true' "$MM_CONFIG" >"$MM_CONFIG.tmp" && mv "$MM_CONFIG.tmp" "$MM_CONFIG"
jq ".FileSettings.PublicLinkSalt = \"$(generate_salt)\"" "$MM_CONFIG" >"$MM_CONFIG.tmp" && mv "$MM_CONFIG.tmp" "$MM_CONFIG"
jq '.EmailSettings.SendEmailNotifications = false' "$MM_CONFIG" >"$MM_CONFIG.tmp" && mv "$MM_CONFIG.tmp" "$MM_CONFIG"
jq '.EmailSettings.FeedbackEmail = ""' "$MM_CONFIG" >"$MM_CONFIG.tmp" && mv "$MM_CONFIG.tmp" "$MM_CONFIG"
jq '.EmailSettings.SMTPServer = ""' "$MM_CONFIG" >"$MM_CONFIG.tmp" && mv "$MM_CONFIG.tmp" "$MM_CONFIG"
jq '.EmailSettings.SMTPPort = ""' "$MM_CONFIG" >"$MM_CONFIG.tmp" && mv "$MM_CONFIG.tmp" "$MM_CONFIG"
jq ".EmailSettings.InviteSalt = \"$(generate_salt)\"" "$MM_CONFIG" >"$MM_CONFIG.tmp" && mv "$MM_CONFIG.tmp" "$MM_CONFIG"
jq ".EmailSettings.PasswordResetSalt = \"$(generate_salt)\"" "$MM_CONFIG" >"$MM_CONFIG.tmp" && mv "$MM_CONFIG.tmp" "$MM_CONFIG"
jq '.RateLimitSettings.Enable = true' "$MM_CONFIG" >"$MM_CONFIG.tmp" && mv "$MM_CONFIG.tmp" "$MM_CONFIG"
jq '.SqlSettings.DriverName = "postgres"' "$MM_CONFIG" >"$MM_CONFIG.tmp" && mv "$MM_CONFIG.tmp" "$MM_CONFIG"
jq ".SqlSettings.AtRestEncryptKey = \"$(generate_salt)\"" "$MM_CONFIG" >"$MM_CONFIG.tmp" && mv "$MM_CONFIG.tmp" "$MM_CONFIG"
jq '.PluginSettings.Directory = "/mattermost/plugins/"' "$MM_CONFIG" >"$MM_CONFIG.tmp" && mv "$MM_CONFIG.tmp" "$MM_CONFIG"
else
echo "Using existing config file $MM_CONFIG"
fi
# Configure database access
if [ -z "$MM_SQLSETTINGS_DATASOURCE" ] && [ -n "$MM_USERNAME" ] && [ -n "$MM_PASSWORD" ]; then
echo "Configure database connection..."
# URLEncode the password, allowing for special characters
ENCODED_PASSWORD=$(printf %s "$MM_PASSWORD" | jq -s -R -r @uri)
export MM_SQLSETTINGS_DATASOURCE="postgres://$MM_USERNAME:$ENCODED_PASSWORD@$DB_HOST:$DB_PORT_NUMBER/$MM_DBNAME?sslmode=$DB_USE_SSL&connect_timeout=10"
echo "OK"
else
echo "Using existing database connection"
fi
# Wait another second for the database to be properly started.
# Necessary to avoid "panic: Failed to open sql connection pq: the database system is starting up"
sleep 1
echo "Starting mattermost"
fi
exec "$@"

5
contrib/aws/.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
# Elastic Beanstalk Files
.elasticbeanstalk/*
!.elasticbeanstalk/*.cfg.yml
!.elasticbeanstalk/*.global.yml

View File

@ -0,0 +1,119 @@
{
"AWSEBDockerrunVersion": "2",
"volumes": [
{
"name": "app-config",
"host": {
"sourcePath": "/var/app/current/app/mattermost/config"
}
},
{
"name": "app-data",
"host": {
"sourcePath": "/var/app/current/app/mattermost/data"
}
},
{
"name": "app-logs",
"host": {
"sourcePath": "/var/app/current/app/mattermost/logs"
}
},
{
"name": "app-plugins",
"host": {
"sourcePath": "/var/app/current/app/mattermost/plugins"
}
},
{
"name": "db-data",
"host": {
"sourcePath": "/var/app/current/db/mattermost/var/lib/postgresql/data"
}
},
{
"name": "web-cert",
"host": {
"sourcePath": "/var/app/current/web/cert"
}
}
],
"containerDefinitions": [
{
"name": "db",
"image": "mattermost/mattermost-prod-db:latest",
"memory": 128,
"essential": true,
"mountPoints": [
{
"sourceVolume": "db-data",
"containerPath": "/var/lib/postgresql/data"
}
],
"environment": [
{
"name": "POSTGRES_USER",
"value": "mmuser"
}, {
"name": "POSTGRES_PASSWORD",
"value": "mmuser_password"
}, {
"name": "POSTGRES_DB",
"value": "mattermost"
}
]
},
{
"name": "app",
"image": "mattermost/mattermost-prod-app:latest",
"memory": 128,
"essential": true,
"mountPoints": [
{
"sourceVolume": "app-config",
"containerPath": "/mattermost/config"
},
{
"sourceVolume": "app-data",
"containerPath": "/mattermost/data"
},
{
"sourceVolume": "app-logs",
"containerPath": "/mattermost/logs"
},
{
"sourceVolume": "app-plugins",
"containerPath": "/mattermost/plugins"
}
],
"links": [
"db"
]
},
{
"name": "web",
"image": "mattermost/mattermost-prod-web:5.9.0",
"memory": 128,
"essential": true,
"mountPoints": [
{
"sourceVolume": "web-cert",
"containerPath": "/cert"
}
],
"portMappings": [
{
"hostPort": 80,
"containerPort": 80
},
{
"hostPort": 443,
"containerPort": 443
}
],
"links": [
"app"
]
}
]
}

View File

@ -6,6 +6,8 @@
### Install
Make the changes in the config file to reflect your needs (app/mattermost/config/config.json)
```
eb init
eb create prod

View File

@ -0,0 +1,413 @@
{
"ServiceSettings": {
"SiteURL": "",
"WebsocketURL": "",
"LicenseFileLocation": "",
"ListenAddress": ":8000",
"ConnectionSecurity": "",
"TLSCertFile": "",
"TLSKeyFile": "",
"TLSMinVer": "1.2",
"TLSStrictTransport": false,
"TLSStrictTransportMaxAge": 63072000,
"TLSOverwriteCiphers": [],
"UseLetsEncrypt": false,
"LetsEncryptCertificateCacheFile": "./config/letsencrypt.cache",
"Forward80To443": false,
"ReadTimeout": 300,
"WriteTimeout": 300,
"MaximumLoginAttempts": 10,
"GoroutineHealthThreshold": -1,
"GoogleDeveloperKey": "",
"EnableOAuthServiceProvider": false,
"EnableIncomingWebhooks": true,
"EnableOutgoingWebhooks": true,
"EnableCommands": true,
"EnableOnlyAdminIntegrations": true,
"EnablePostUsernameOverride": false,
"EnablePostIconOverride": false,
"EnableAPIv3": false,
"EnableLinkPreviews": false,
"EnableTesting": false,
"EnableDeveloper": false,
"EnableSecurityFixAlert": true,
"EnableInsecureOutgoingConnections": false,
"AllowedUntrustedInternalConnections": "",
"EnableMultifactorAuthentication": false,
"EnforceMultifactorAuthentication": false,
"EnableUserAccessTokens": false,
"AllowCorsFrom": "",
"CorsExposedHeaders": "",
"CorsAllowCredentials": false,
"CorsDebug": false,
"AllowCookiesForSubdomains": false,
"SessionLengthWebInDays": 30,
"SessionLengthMobileInDays": 30,
"SessionLengthSSOInDays": 30,
"SessionCacheInMinutes": 10,
"SessionIdleTimeoutInMinutes": 0,
"WebsocketSecurePort": 443,
"WebsocketPort": 80,
"WebserverMode": "gzip",
"EnableCustomEmoji": false,
"EnableEmojiPicker": true,
"EnableGifPicker": false,
"GfycatApiKey": "2_KtH_W5",
"GfycatApiSecret": "3wLVZPiswc3DnaiaFoLkDvB4X0IV6CpMkj4tf2inJRsBY6-FnkT08zGmppWFgeof",
"RestrictCustomEmojiCreation": "all",
"RestrictPostDelete": "all",
"AllowEditPost": "always",
"PostEditTimeLimit": -1,
"ExperimentalEnableAuthenticationTransfer": true,
"TimeBetweenUserTypingUpdatesMilliseconds": 5000,
"EnablePostSearch": true,
"EnableUserTypingMessages": true,
"EnableChannelViewedMessages": true,
"EnableUserStatuses": true,
"ClusterLogTimeoutMilliseconds": 2000,
"EnablePreviewFeatures": true,
"CloseUnusedDirectMessages": false,
"EnableTutorial": true,
"ExperimentalEnableDefaultChannelLeaveJoinMessages": true,
"ExperimentalGroupUnreadChannels": "disabled",
"ExperimentalChannelOrganization": false,
"ImageProxyType": "",
"ImageProxyOptions": "",
"ImageProxyURL": "",
"EnableAPITeamDeletion": false,
"ExperimentalEnableHardenedMode": false,
"EnableEmailInvitations": false
},
"TeamSettings": {
"SiteName": "Mattermost",
"MaxUsersPerTeam": 50,
"EnableTeamCreation": true,
"EnableUserCreation": true,
"EnableOpenServer": false,
"EnableUserDeactivation": false,
"RestrictCreationToDomains": "",
"EnableCustomBrand": false,
"CustomBrandText": "",
"CustomDescriptionText": "",
"RestrictDirectMessage": "any",
"RestrictTeamInvite": "all",
"RestrictPublicChannelManagement": "all",
"RestrictPrivateChannelManagement": "all",
"RestrictPublicChannelCreation": "all",
"RestrictPrivateChannelCreation": "all",
"RestrictPublicChannelDeletion": "all",
"RestrictPrivateChannelDeletion": "all",
"RestrictPrivateChannelManageMembers": "all",
"EnableXToLeaveChannelsFromLHS": false,
"UserStatusAwayTimeout": 300,
"MaxChannelsPerTeam": 2000,
"MaxNotificationsPerChannel": 1000,
"EnableConfirmNotificationsToChannel": true,
"TeammateNameDisplay": "username",
"ExperimentalViewArchivedChannels": false,
"ExperimentalEnableAutomaticReplies": false,
"ExperimentalHideTownSquareinLHS": false,
"ExperimentalTownSquareIsReadOnly": false,
"ExperimentalPrimaryTeam": "",
"ExperimentalDefaultChannels": ""
},
"DisplaySettings": {
"CustomUrlSchemes": [],
"ExperimentalTimezone": false
},
"ClientRequirements": {
"AndroidLatestVersion": "",
"AndroidMinVersion": "",
"DesktopLatestVersion": "",
"DesktopMinVersion": "",
"IosLatestVersion": "",
"IosMinVersion": ""
},
"SqlSettings": {
"DriverName": "postgres",
"DataSource": "postgres://mmuser:mmuser_password@db:5432/mattermost?sslmode=disable&connect_timeout=10",
"DataSourceReplicas": [],
"DataSourceSearchReplicas": [],
"MaxIdleConns": 20,
"ConnMaxLifetimeMilliseconds": 3600000,
"MaxOpenConns": 300,
"Trace": false,
"AtRestEncryptKey": "",
"QueryTimeout": 30
},
"LogSettings": {
"EnableConsole": true,
"ConsoleLevel": "DEBUG",
"ConsoleJson": true,
"EnableFile": true,
"FileLevel": "INFO",
"FileJson": true,
"FileLocation": "",
"EnableWebhookDebugging": true,
"EnableDiagnostics": true
},
"PasswordSettings": {
"MinimumLength": 5,
"Lowercase": false,
"Number": false,
"Uppercase": false,
"Symbol": false
},
"FileSettings": {
"EnableFileAttachments": true,
"EnableMobileUpload": true,
"EnableMobileDownload": true,
"MaxFileSize": 52428800,
"DriverName": "local",
"Directory": "./data/",
"EnablePublicLink": false,
"PublicLinkSalt": "",
"InitialFont": "nunito-bold.ttf",
"AmazonS3AccessKeyId": "",
"AmazonS3SecretAccessKey": "",
"AmazonS3Bucket": "",
"AmazonS3Region": "",
"AmazonS3Endpoint": "s3.amazonaws.com",
"AmazonS3SSL": true,
"AmazonS3SignV2": false,
"AmazonS3SSE": false,
"AmazonS3Trace": false
},
"EmailSettings": {
"EnableSignUpWithEmail": true,
"EnableSignInWithEmail": true,
"EnableSignInWithUsername": true,
"SendEmailNotifications": true,
"UseChannelInEmailNotifications": false,
"RequireEmailVerification": false,
"FeedbackName": "",
"FeedbackEmail": "test@example.com",
"FeedbackOrganization": "",
"EnableSMTPAuth": false,
"SMTPUsername": "",
"SMTPPassword": "",
"SMTPServer": "dockerhost",
"SMTPPort": "2500",
"ConnectionSecurity": "",
"InviteSalt": "",
"SendPushNotifications": true,
"PushNotificationServer": "https://push-test.mattermost.com",
"PushNotificationContents": "generic",
"EnableEmailBatching": false,
"EmailBatchingBufferSize": 256,
"EmailBatchingInterval": 30,
"EnablePreviewModeBanner": true,
"SkipServerCertificateVerification": false,
"EmailNotificationContentsType": "full",
"LoginButtonColor": "",
"LoginButtonBorderColor": "",
"LoginButtonTextColor": ""
},
"RateLimitSettings": {
"Enable": false,
"PerSec": 10,
"MaxBurst": 100,
"MemoryStoreSize": 10000,
"VaryByRemoteAddr": true,
"VaryByUser": false,
"VaryByHeader": ""
},
"PrivacySettings": {
"ShowEmailAddress": true,
"ShowFullName": true
},
"SupportSettings": {
"TermsOfServiceLink": "https://about.mattermost.com/default-terms/",
"PrivacyPolicyLink": "https://about.mattermost.com/default-privacy-policy/",
"AboutLink": "https://about.mattermost.com/default-about/",
"HelpLink": "https://about.mattermost.com/default-help/",
"ReportAProblemLink": "https://about.mattermost.com/default-report-a-problem/",
"SupportEmail": "feedback@mattermost.com"
},
"AnnouncementSettings": {
"EnableBanner": false,
"BannerText": "",
"BannerColor": "#f2a93b",
"BannerTextColor": "#333333",
"AllowBannerDismissal": true
},
"ThemeSettings": {
"EnableThemeSelection": true,
"DefaultTheme": "default",
"AllowCustomThemes": true,
"AllowedThemes": []
},
"TimezoneSettings": {
"SupportedTimezonesPath": "timezones.json"
},
"GitLabSettings": {
"Enable": false,
"Secret": "",
"Id": "",
"Scope": "",
"AuthEndpoint": "",
"TokenEndpoint": "",
"UserApiEndpoint": ""
},
"GoogleSettings": {
"Enable": false,
"Secret": "",
"Id": "",
"Scope": "profile email",
"AuthEndpoint": "https://accounts.google.com/o/oauth2/v2/auth",
"TokenEndpoint": "https://www.googleapis.com/oauth2/v4/token",
"UserApiEndpoint": "https://www.googleapis.com/plus/v1/people/me"
},
"Office365Settings": {
"Enable": false,
"Secret": "",
"Id": "",
"Scope": "User.Read",
"AuthEndpoint": "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
"TokenEndpoint": "https://login.microsoftonline.com/common/oauth2/v2.0/token",
"UserApiEndpoint": "https://graph.microsoft.com/v1.0/me"
},
"LdapSettings": {
"Enable": false,
"EnableSync": false,
"LdapServer": "",
"LdapPort": 389,
"ConnectionSecurity": "",
"BaseDN": "",
"BindUsername": "",
"BindPassword": "",
"UserFilter": "",
"FirstNameAttribute": "",
"LastNameAttribute": "",
"EmailAttribute": "",
"UsernameAttribute": "",
"NicknameAttribute": "",
"IdAttribute": "",
"PositionAttribute": "",
"LoginIdAttribute": "",
"SyncIntervalMinutes": 60,
"SkipCertificateVerification": false,
"QueryTimeout": 60,
"MaxPageSize": 0,
"LoginFieldName": "",
"LoginButtonColor": "",
"LoginButtonBorderColor": "",
"LoginButtonTextColor": ""
},
"ComplianceSettings": {
"Enable": false,
"Directory": "./data/",
"EnableDaily": false
},
"LocalizationSettings": {
"DefaultServerLocale": "en",
"DefaultClientLocale": "en",
"AvailableLocales": ""
},
"SamlSettings": {
"Enable": false,
"EnableSyncWithLdap": false,
"EnableSyncWithLdapIncludeAuth": false,
"Verify": true,
"Encrypt": true,
"IdpUrl": "",
"IdpDescriptorUrl": "",
"AssertionConsumerServiceURL": "",
"ScopingIDPProviderId": "",
"ScopingIDPName": "",
"IdpCertificateFile": "",
"PublicCertificateFile": "",
"PrivateKeyFile": "",
"IdAttribute": "",
"FirstNameAttribute": "",
"LastNameAttribute": "",
"EmailAttribute": "",
"UsernameAttribute": "",
"NicknameAttribute": "",
"LocaleAttribute": "",
"PositionAttribute": "",
"LoginButtonText": "SAML",
"LoginButtonColor": "",
"LoginButtonBorderColor": "",
"LoginButtonTextColor": ""
},
"NativeAppSettings": {
"AppDownloadLink": "https://about.mattermost.com/downloads/",
"AndroidAppDownloadLink": "https://about.mattermost.com/mattermost-android-app/",
"IosAppDownloadLink": "https://about.mattermost.com/mattermost-ios-app/"
},
"ClusterSettings": {
"Enable": false,
"ClusterName": "",
"OverrideHostname": "",
"UseIpAddress": true,
"UseExperimentalGossip": false,
"ReadOnlyConfig": true,
"GossipPort": 8074,
"StreamingPort": 8075,
"MaxIdleConns": 100,
"MaxIdleConnsPerHost": 128,
"IdleConnTimeoutMilliseconds": 90000
},
"MetricsSettings": {
"Enable": false,
"BlockProfileRate": 0,
"ListenAddress": ":8067"
},
"ExperimentalSettings": {
"ClientSideCertEnable": false,
"ClientSideCertCheck": "secondary",
"EnablePostMetadata": false
},
"AnalyticsSettings": {
"MaxUsersForStatistics": 2500
},
"ElasticsearchSettings": {
"ConnectionUrl": "http://dockerhost:9200",
"Username": "elastic",
"Password": "changeme",
"EnableIndexing": false,
"EnableSearching": false,
"Sniff": true,
"PostIndexReplicas": 1,
"PostIndexShards": 1,
"AggregatePostsAfterDays": 365,
"PostsAggregatorJobStartTime": "03:00",
"IndexPrefix": "",
"LiveIndexingBatchSize": 1,
"BulkIndexingTimeWindowSeconds": 3600,
"RequestTimeoutSeconds": 30
},
"DataRetentionSettings": {
"EnableMessageDeletion": false,
"EnableFileDeletion": false,
"MessageRetentionDays": 365,
"FileRetentionDays": 365,
"DeletionJobStartTime": "02:00"
},
"MessageExportSettings": {
"EnableExport": false,
"DailyRunTime": "01:00",
"ExportFromTimestamp": 0,
"FileLocation": "export",
"BatchSize": 10000,
"GlobalRelaySettings": {
"CustomerType": "A9",
"SmtpUsername": "",
"SmtpPassword": "",
"EmailAddress": ""
}
},
"JobSettings": {
"RunJobs": true,
"RunScheduler": true
},
"PluginSettings": {
"Enable": true,
"EnableUploads": false,
"Directory": "./plugins",
"ClientDirectory": "./client/plugins",
"Plugins": {},
"PluginStates": {}
}
}

View File

@ -0,0 +1,110 @@
Mattermost on Kubernetes
=======
You can use these manifests as a starting point to run Mattermost on Kubernetes.
If you already have a Kubernetes cluster you can skip this first step.
### Start local Kubernetes cluster
To get started we can use [minikube](https://github.com/kubernetes/minikube/) to run a local kubernetes cluster.
Download and install minikube and any dependancies for your operating system (see minikube readme). You will also need to install [kubectl](http://kubernetes.io/docs/user-guide/prereqs/).
Start the minikube VM and Kubernetes API server
```
minikube start
```
### Start a Postgres database
#### WARNING: The database is not backup up and will lose all data if the pod is restarted. Consider using a [persistent volume](http://kubernetes.io/docs/user-guide/persistent-volumes/) for storing pgdata
This will run a postgres deployment with default values for database name, username, and password.
```
kubectl run postgres --image=postgres:9 \
--env="POSTGRES_PASSWORD=mmuser_password" \
--env="POSTGRES_DB=mattermost" \
--env="POSTGRES_USER=mmuser"
```
Expose the postgres database as a service named "db"
```
kubectl expose deployment postgres \
--name=db \
--port 5432 \
--target-port 5432
```
### Run Mattermost container
The Mattermost application is split into three manifests.
First, create the secret which will set the environment varibles for the main application container. If you changed the values for the Postgres container you will also need to set the values in mattermost.secret.yaml using the [manual steps for creating a secret](http://kubernetes.io/docs/user-guide/secrets/#creating-a-secret-manually).
```
kubectl create -f mattermost.secret.yaml
```
Next create the Mattermost deployment (main application) with
```
kubectl create -f mattermost.deployment.yaml
```
You should check that the pod started successfully with
```
kubectl get po -l app=mattermost
NAME READY STATUS RESTARTS AGE
mattermost-app-1605216003-fvnz1 1/1 Running 0 44m
```
Finally, you can expose the application with a service so you can easily access the application from a web browser. The example service is using a `type: NodePort` which means it will be exposed on a random high port on your cluster nodes (or minikube VM if you're using minikube). If you are running your Kubernetes cluster in AWS or GCE you should change the type to loadBalancer.
```
kubectl create -f mattermost.svc.yaml
```
Now you can get your VM's IP address with
```
minikube ip
192.168.99.100
```
and the exposed port for the application with
```
kubectl describe svc mattermost
Name: mattermost
Namespace: default
Labels: <none>
Selector: app=mattermost,tier=app
Type: NodePort
IP: 10.0.0.194
Port: http 80/TCP
NodePort: http 32283/TCP
Endpoints: 172.17.0.4:8000
Session Affinity: None
No events.
```
Make sure the Endpoints shows an IP address. This should correlate to the pod IP started by the deployment.
Now browse to your node IP and exposed NodePort in your browser to view the application or test it with curl
```
curl -L http://192.168.99.100:32283
```
### Optional steps
* If you want your data to be persistent you will need to make persistent volumes for Mattermost and Postgres. This requires adding a [securityContext](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#discussion) to the deployment to set `runAsUser: 2000`, `runAsGroup: 2000` and `fsGroup: 2000`.
* If you want to change advanced settings for the mattermost container you can make a [configMap](http://blog.kubernetes.io/2016/04/configuration-management-with-containers.html) for the /mattermost/config/config.json file
* If you want the application exposed on port 80 you can either specify the port in the service manifest or use an [ingress controller](http://kubernetes.io/docs/user-guide/ingress/#ingress-controllers) and an ingress map for the mattermost service. A sample ingress map would be
```
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: mattermost
spec:
rules:
- host: mattermost
http:
paths:
- backend:
serviceName: mattermost
servicePort: 80
```

View File

@ -0,0 +1,61 @@
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: mattermost-app
labels:
app: mattermost
tier: app
namespace: default
spec:
replicas: 1
template:
metadata:
name: mattermost-app
labels:
app: mattermost
tier: app
spec:
containers:
- name: mattermost-app
image: "mattermost/mattermost-prod-app:5.14.1"
env:
- name: DB_HOST
valueFrom:
secretKeyRef:
name: mattermost.env
key: db-host
- name: DB_PORT_NUMBER
valueFrom:
secretKeyRef:
name: mattermost.env
key: db-port
- name: MM_USERNAME
valueFrom:
secretKeyRef:
name: mattermost.env
key: mm-username
- name: MM_PASSWORD
valueFrom:
secretKeyRef:
name: mattermost.env
key: mm-password
- name: MM_DBNAME
valueFrom:
secretKeyRef:
name: mattermost.env
key: mm-dbname
volumeMounts:
# optional persistent storage
#- name: appdata
#mountPath: /mattermost/data
- name: etclocaltime
mountPath: /etc/localtime
readOnly: true
volumes:
# optional persistent storage
#- name: appdata
#persistentVolumeClaim:
# claimName: mattermost-app
- name: etclocaltime
hostPath:
path: /etc/localtime

View File

@ -0,0 +1,19 @@
kind: Secret
apiVersion: v1
metadata:
name: mattermost.env
namespace: default
type: Opaque
data:
# see http://kubernetes.io/docs/user-guide/secrets/#creating-a-secret-using-kubectl-create-secret
# for creating secrets manually
# db
db-host: ZGI=
# 5432
db-port: NTQzMg==
# mmuser
mm-username: bW11c2Vy
# mmuser_password
mm-password: bW11c2VyX3Bhc3N3b3Jk
# mattermost
mm-dbname: bWF0dGVybW9zdA==

View File

@ -0,0 +1,15 @@
apiVersion: v1
kind: Service
metadata:
name: mattermost
namespace: default
spec:
type: NodePort
ports:
- port: 80
targetPort: 8000
protocol: TCP
name: http
selector:
app: mattermost
tier: app

View File

@ -0,0 +1,135 @@
# This file allows you to run mattermost within your docker swarm mode cluster
# for more informations check: https://docs.docker.com/engine/swarm/
#
# Simply run:
#
# `docker stack up [STACK NAME] -c docker-stack-traefik.yml`
#
# In this case `mm` is going to be stack name, so the command will be:
#
# `docker stack up mm -c docker-stack-traefik.yml`
#
# From now on all the services that belong to this stack will be prefixed with `mm_`
# this file defines 3 services, these are going to be mm_db, mm_app and mm_web,
# each of these names is the service's hostname as well, they can communicate
# with each other easily by using the hostname instead of the ip or exposing ports to the host.
#
# As a side note, images tagged as latest are pulled by default,
# that means there's no need to use `image:latest`
#
# use latest compose v3.3 file format for optimal compatibility with latest docker release and swarm features.
# see https://docs.docker.com/compose/compose-file/compose-versioning/#version-3
# and https://docs.docker.com/compose/compose-file/compose-versioning/#version-33
# and https://docs.docker.com/compose/compose-file/compose-versioning/#upgrading
version: '3.3'
networks:
# network for App <-> DB transactions
mm-in:
driver: overlay
internal: true
# this network faces the outside world
mm-out:
driver: overlay
internal: false
volumes:
mm-dbdata:
traefik-certs:
services:
db:
# use official mattermost prod-db image
image: mattermost/mattermost-prod-db
networks:
- mm-in
volumes:
# use a named-volume for data persistency
- mm-dbdata:/var/lib/postgresql/data
- /etc/localtime:/etc/localtime:ro
environment:
- POSTGRES_USER=mmuser
- POSTGRES_PASSWORD=mmuser_password
- POSTGRES_DB=mattermost
# uncomment the following to enable backup
# - AWS_ACCESS_KEY_ID=XXXX
# - AWS_SECRET_ACCESS_KEY=XXXX
# - WALE_S3_PREFIX=s3://BUCKET_NAME/PATH
# - AWS_REGION=us-east-1
deploy:
restart_policy:
condition: on-failure
app:
# use official mattermost prod-app image
image: mattermost/mattermost-prod-app:5.13.0
networks:
- mm-in
- mm-out
volumes:
- /var/lib/mattermost/config:/mattermost/config:rw
- /var/lib/mattermost/data:/mattermost/data:rw
- /var/lib/mattermost/logs:/mattermost/logs:rw
- /var/lib/mattermost/plugins:/mattermost/plugins:rw
- /etc/localtime:/etc/localtime:ro
environment:
# use service's hostname
- DB_HOST=mm_db
# talk to the port within the overlay network
# without (over)exposing ports
- DB_PORT_NUMBER=5432
- MM_USERNAME=mmuser
- MM_PASSWORD=mmuser_password
- MM_DBNAME=mattermost
# pass the edition to be used, default is enterprise
# setting this env var will make the app use the team edition
- edition=team
# in case your config is not in default location
# - MM_CONFIG=/mattermost/config/config.json
deploy:
labels:
- "traefik.backend.loadbalancer.sticky=true"
- "traefik.backend.loadbalancer.swarm=true"
# the backend service needs a name
- "traefik.backend=mmapp"
# network is prefixed `mm_` as well
- "traefik.docker.network=mm_mm-out"
# generate a TLS cert for this domain
- "traefik.entrypoints=https"
- "traefik.frontend.passHostHeader=true"
# add your domain below here
- "traefik.frontend.rule=Host:mattermost.domain.com"
- "traefik.port=80"
restart_policy:
condition: on-failure
web:
# use official traefik image
image: traefik
ports:
- "80:80"
# you can view the traefik's dashboard in http://localhost:8080
- "8080:8080"
- "443:443"
networks:
- mm-out
command: >
--acme
--acme.email="[ADD YOUR EMAIL HERE]"
--acme.entrypoint=https --acme.onhostrule
--acme.storage="acme/certs.json"
--acme.acmelogging
--web
--docker
--docker.domain=docker.localhost
--docker.swarmmode
--docker.watch
--logLevel=DEBUG
volumes:
# traefik needs the docker socket in order to work properly
- /var/run/docker.sock:/var/run/docker.sock
# no traefik config file is being used
# you can deep further in the traefik docs
# http://docs.traefik.io/user-guide/examples/
- /dev/null:/traefik.toml
# use a named-volume for certs persistency
- traefik-certs:/acme
deploy:
restart_policy:
condition: on-failure

View File

@ -0,0 +1,108 @@
# This file allows you to run mattermost within your docker swarm mode cluster
# for more informations check: https://docs.docker.com/engine/swarm/
#
# Simply run:
#
# `docker stack up [STACK NAME] -c docker-stack.yml`
#
# In this case `mattermost` is going to be stack name, so the command will be:
#
# `docker stack up mattermost -c docker-stack.yml`
#
# From now on all the services that belong to this stack will be prefixed with `mattermost_`
# this file defines 3 services, these are going to be mattermost_db, mattermost_app and mattermost_web,
# each of these names is the service's hostname as well, they can communicate
# with each other easily by using the hostname instead of the ip or exposing ports to the host.
#
# As a side note, images tagged as latest are pulled by default,
# that means there's no need to use `image:latest`
#
# use latest compose v3.3 file format for optimal compatibility with latest docker release and swarm features.
# see https://docs.docker.com/compose/compose-file/compose-versioning/#version-3
# and https://docs.docker.com/compose/compose-file/compose-versioning/#version-33
# and https://docs.docker.com/compose/compose-file/compose-versioning/#upgrading
version: '3.3'
networks:
# network for App <-> DB transactions
mm-in:
driver: overlay
internal: true
# this network faces the outside world
mm-out:
driver: overlay
internal: false
volumes:
mm-dbdata:
services:
db:
# use official mattermost prod-db image
image: mattermost/mattermost-prod-db
networks:
- mm-in
volumes:
# use a named-volume for data persistency
- mm-dbdata:/var/lib/postgresql/data
- /etc/localtime:/etc/localtime:ro
environment:
- POSTGRES_USER=mmuser
- POSTGRES_PASSWORD=mmuser_password
- POSTGRES_DB=mattermost
# uncomment the following to enable backup
# - AWS_ACCESS_KEY_ID=XXXX
# - AWS_SECRET_ACCESS_KEY=XXXX
# - WALE_S3_PREFIX=s3://BUCKET_NAME/PATH
# - AWS_REGION=us-east-1
deploy:
restart_policy:
condition: on-failure
app:
# use official mattermost prod-app image
image: mattermost/mattermost-prod-app:5.13.0
networks:
- mm-in
- mm-out
volumes:
- /var/lib/mattermost/config:/mattermost/config:rw
- /var/lib/mattermost/data:/mattermost/data:rw
- /var/lib/mattermost/logs:/mattermost/logs:rw
- /var/lib/mattermost/plugins:/mattermost/plugins:rw
- /etc/localtime:/etc/localtime:ro
environment:
# use service's hostname
- DB_HOST=db
# talk to the port within the overlay network
# without (over)exposing ports
- DB_PORT_NUMBER=5432
- MM_USERNAME=mmuser
- MM_PASSWORD=mmuser_password
- MM_DBNAME=mattermost
# pass the edition to be used, default is enterprise
# setting this env var will make the app use the team edition
- edition=team
# in case your config is not in default location
# - MM_CONFIG=/mattermost/config/config.json
deploy:
restart_policy:
condition: on-failure
web:
# use official mattermost prod-web image
image: mattermost/mattermost-prod-web
ports:
- "80:80"
- "443:443"
networks:
- mm-out
volumes:
# This directory must have cert files
- /var/lib/mattermost/cert:/cert:ro
- /etc/localtime:/etc/localtime:ro
environment:
# use app service's hostname
- APP_HOST=app
# talk to the port within the overlay network
# without (over)exposing ports
- APP_PORT_NUMBER=80
deploy:
restart_policy:
condition: on-failure

View File

@ -1,19 +1,33 @@
FROM postgres:9.4
FROM postgres:9.4-alpine
RUN apt-get update \
&& apt-get install -y python-dev lzop pv daemontools curl build-essential \
&& curl --silent --show-error --retry 5 https://bootstrap.pypa.io/get-pip.py | python \
&& pip install wal-e \
&& apt-get remove -y build-essential python-dev \
&& apt-get autoremove -y \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
ENV DEFAULT_TIMEZONE UTC
ADD make_db.sh /docker-entrypoint-initdb.d/
ADD setup-wale.sh /docker-entrypoint-initdb.d/
COPY docker-entrypoint1.sh /
RUN chmod +x /docker-entrypoint1.sh
# Install some packages to use WAL
RUN echo "azure<5.0.0" > pip-constraints.txt
RUN apk add --no-cache \
build-base \
curl \
libc6-compat \
libffi-dev \
linux-headers \
python-dev \
py-pip \
py-cryptography \
pv \
libressl-dev \
&& pip install --upgrade pip \
&& pip --no-cache-dir install -c pip-constraints.txt 'wal-e<1.0.0' envdir \
&& rm -rf /var/cache/apk/* /tmp/* /var/tmp/*
ENTRYPOINT ["/docker-entrypoint1.sh"]
# Add wale script
COPY setup-wale.sh /docker-entrypoint-initdb.d/
#Healthcheck to make sure container is ready
HEALTHCHECK CMD pg_isready -U $POSTGRES_USER -d $POSTGRES_DB || exit 1
# Add and configure entrypoint and command
COPY entrypoint.sh /
ENTRYPOINT ["/entrypoint.sh"]
CMD ["postgres"]
VOLUME ["/var/run/postgresql", "/usr/share/postgresql/", "/var/lib/postgresql/data", "/tmp", "/etc/wal-e.d/env"]

View File

@ -1,44 +0,0 @@
#!/bin/bash
# if wal backup is not enabled, use minimal wal logging to reduce disk space
: ${WAL_LEVEL:=minimal}
: ${ARCHIVE_MODE:=off}
# PGDATA is defined in upstream postgres dockerfile
function update_conf () {
if [ -f $PGDATA/postgresql.conf ]; then
sed -i "s/wal_level =.*$/wal_level = $WAL_LEVEL/g" $PGDATA/postgresql.conf
sed -i "s/archive_mode =.*$/archive_mode = $ARCHIVE_MODE/g" $PGDATA/postgresql.conf
fi
}
if [ "${1:0:1}" = '-' ]; then
set -- postgres "$@"
fi
if [ "$1" = 'postgres' ]; then
VARS=(AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY WALE_S3_PREFIX AWS_REGION)
for v in ${VARS[@]}; do
if [ "${!v}" = "" ]; then
echo "$v is required for Wal-E but not set. Skipping Wal-E setup."
update_conf
. /docker-entrypoint.sh
exit
fi
done
umask u=rwx,g=rx,o=
mkdir -p /etc/wal-e.d/env
for v in ${VARS[@]}; do
echo "${!v}" > /etc/wal-e.d/env/$v
done
chown -R root:postgres /etc/wal-e.d
WAL_LEVEL=archive
ARCHIVE_MODE=on
update_conf
. /docker-entrypoint.sh
fi

62
db/entrypoint.sh Executable file
View File

@ -0,0 +1,62 @@
#!/bin/bash
# if wal-e backup is not enabled, use minimal wal-e logging to reduce disk space
export WAL_LEVEL=${WAL_LEVEL:-minimal}
export ARCHIVE_MODE=${ARCHIVE_MODE:-off}
export ARCHIVE_TIMEOUT=${ARCHIVE_TIMEOUT:-60}
function update_conf() {
wal=$1
# PGDATA is defined in upstream postgres dockerfile
config_file=$PGDATA/postgresql.conf
# Check if configuration file exists. If not, it probably means that database is not initialized yet
if [ ! -f $config_file ]; then
return
fi
# Reinitialize config
sed -i "s/log_timezone =.*$//g" $PGDATA/postgresql.conf
sed -i "s/timezone =.*$//g" $PGDATA/postgresql.conf
sed -i "s/wal_level =.*$//g" $config_file
sed -i "s/archive_mode =.*$//g" $config_file
sed -i "s/archive_timeout =.*$//g" $config_file
sed -i "s/archive_command =.*$//g" $config_file
# Configure wal-e
if [ "$wal" = true ]; then
/docker-entrypoint-initdb.d/setup-wale.sh
fi
echo "log_timezone = $DEFAULT_TIMEZONE" >>$config_file
echo "timezone = $DEFAULT_TIMEZONE" >>$config_file
}
if [ "${1:0:1}" = '-' ]; then
set -- postgres "$@"
fi
if [ "$1" = 'postgres' ]; then
# Check wal-e variables
wal_enable=true
VARS=(AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY WALE_S3_PREFIX AWS_REGION)
for v in ${VARS[@]}; do
if [ "${!v}" = "" ]; then
echo "$v is required for Wal-E but not set. Skipping Wal-E setup."
wal_enable=false
fi
done
# Setup wal-e env variables
if [ "$wal_enable" = true ]; then
for v in ${VARS[@]}; do
export $v="${!v}"
done
WAL_LEVEL=archive
ARCHIVE_MODE=on
fi
# Update postgresql configuration
update_conf $wal_enable
# Run the postgresql entrypoint
docker-entrypoint.sh postgres
fi

View File

@ -1,12 +0,0 @@
#!/bin/bash
set -e
MM_USERNAME=${MM_USERNAME:-mmuser}
MM_PASSWORD=${MM_PASSWORD:-mmuser_password}
MM_DBNAME=${MM_DBNAME:-mattermost}
psql -v ON_ERROR_STOP=1 --username "postgres" <<- EOSQL
CREATE DATABASE $MM_DBNAME;
CREATE USER $MM_USERNAME WITH PASSWORD '$MM_PASSWORD';
GRANT ALL PRIVILEGES ON DATABASE $MM_DBNAME to $MM_USERNAME;
EOSQL

14
db/setup-wale.sh Normal file → Executable file
View File

@ -1,11 +1,7 @@
#!/bin/bash
# wal-e specific
echo "wal_level = $WAL_LEVEL" >> $PGDATA/postgresql.conf
echo "archive_mode = $ARCHIVE_MODE" >> $PGDATA/postgresql.conf
echo "archive_command = 'envdir /etc/wal-e.d/env /usr/local/bin/wal-e wal-push %p'" >> $PGDATA/postgresql.conf
echo "archive_timeout = 60" >> $PGDATA/postgresql.conf
# no cron in the image, use systemd timer on host instead
#su - postgres -c "crontab -l | { cat; echo \"0 3 * * * /usr/bin/envdir /etc/wal-e.d/env /usr/local/bin/wal-e backup-push /var/lib/postgresql/data\"; } | crontab -"
#su - postgres -c "crontab -l | { cat; echo \"0 4 * * * /usr/bin/envdir /etc/wal-e.d/env /usr/local/bin/wal-e delete --confirm retain 7\"; } | crontab -"
# wal-e specific configuration
echo "wal_level = $WAL_LEVEL" >>$PGDATA/postgresql.conf
echo "archive_mode = $ARCHIVE_MODE" >>$PGDATA/postgresql.conf
echo "archive_command = '/usr/bin/wal-e wal-push %p'" >>$PGDATA/postgresql.conf
echo "archive_timeout = $ARCHIVE_TIMEOUT" >>$PGDATA/postgresql.conf

100
docker-compose.yml Normal file → Executable file
View File

@ -1,33 +1,67 @@
db:
build: db
volumes:
- ./volumes/db/var/lib/postgresql/data:/var/lib/postgresql/data
- /etc/localtime:/etc/localtime:ro
# uncomment the following to enable backup
#environment:
# - AWS_ACCESS_KEY_ID=XXXX
# - AWS_SECRET_ACCESS_KEY=XXXX
# - WALE_S3_PREFIX=s3://BUCKET_NAME/PATH
# - AWS_REGION=us-east-1
app:
build: app
links:
- db:db
volumes:
- ./volumes/app/mattermost/config:/mattermost/config:rw
- ./volumes/app/mattermost/data:/mattermost/data:rw
- /etc/localtime:/etc/localtime:ro
web:
build: web
ports:
- "80:80"
- "443:443"
links:
- app:app
volumes:
# This directory must have cert files
- ./volumes/web/cert:/cert:ro
- /etc/localtime:/etc/localtime:ro
environment:
- MATTERMOST_ENABLE_SSL=false
- PLATFORM_PORT_80_TCP_PORT=80
version: "3"
services:
db:
build: db
read_only: true
restart: unless-stopped
volumes:
- ./volumes/db/var/lib/postgresql/data:/var/lib/postgresql/data
- /etc/localtime:/etc/localtime:ro
environment:
- POSTGRES_USER=mmuser
- POSTGRES_PASSWORD=mmuser_password
- POSTGRES_DB=mattermost
# uncomment the following to enable backup
# - AWS_ACCESS_KEY_ID=XXXX
# - AWS_SECRET_ACCESS_KEY=XXXX
# - WALE_S3_PREFIX=s3://BUCKET_NAME/PATH
# - AWS_REGION=us-east-1
app:
build:
context: app
# uncomment following lines for team edition or change UID/GID
# args:
# - edition=team
# - PUID=1000
# - PGID=1000
# - MM_VERSION=5.31
restart: unless-stopped
volumes:
- ./volumes/app/mattermost/config:/mattermost/config:rw
- ./volumes/app/mattermost/data:/mattermost/data:rw
- ./volumes/app/mattermost/logs:/mattermost/logs:rw
- ./volumes/app/mattermost/plugins:/mattermost/plugins:rw
- ./volumes/app/mattermost/client-plugins:/mattermost/client/plugins:rw
- /etc/localtime:/etc/localtime:ro
# When you want to use SSO with GitLab, you have to add the cert pki chain of GitLab inside Alpine
# to avoid Token request failed: certificate signed by unknown authority (link: https://github.com/mattermost/mattermost-server/issues/13059)
# - <path_to_your_gitlab_pki>/pki_chain.pem:/etc/ssl/certs/pki_chain.pem:ro
environment:
# set same as db credentials and dbname
- MM_USERNAME=mmuser
- MM_PASSWORD=mmuser_password
- MM_DBNAME=mattermost
# use the credentials you've set above, in the format:
# MM_SQLSETTINGS_DATASOURCE=postgres://${MM_USERNAME}:${MM_PASSWORD}@db:5432/${MM_DBNAME}?sslmode=disable&connect_timeout=10
- MM_SQLSETTINGS_DATASOURCE=postgres://mmuser:mmuser_password@db:5432/mattermost?sslmode=disable&connect_timeout=10
# in case your config is not in default location
#- MM_CONFIG=/mattermost/config/config.json
web:
build: web
ports:
- "80:8080"
- "443:8443"
read_only: true
restart: unless-stopped
volumes:
# This directory must have cert files if you want to enable SSL
- ./volumes/web/cert:/cert:ro
- /etc/localtime:/etc/localtime:ro
cap_drop:
- ALL

View File

@ -1,22 +1,40 @@
FROM ubuntu:14.04
FROM nginxinc/nginx-unprivileged:mainline-alpine
RUN apt-get update && apt-get install -y nginx
USER root
RUN rm /etc/nginx/sites-enabled/default
# Remove default configuration and add our custom Nginx configuration files
RUN rm /etc/nginx/conf.d/default.conf \
&& apk add --no-cache curl
COPY mattermost /etc/nginx/sites-available/
COPY mattermost-ssl /etc/nginx/sites-available/
ADD docker-entry.sh /
COPY ["./mattermost", "./mattermost-ssl", "/etc/nginx/sites-available/"]
RUN chmod +x /docker-entry.sh
# Add and setup entrypoint
COPY entrypoint.sh /
# You can see the logs using `docker-compose logs web`.
RUN ln -sf /dev/stdout /var/log/nginx/access.log
RUN ln -sf /dev/stderr /var/log/nginx/error.log
RUN chown -R nginx:nginx /etc/nginx/sites-available && \
chown -R nginx:nginx /var/cache/nginx && \
chown -R nginx:nginx /var/log/nginx && \
chown -R nginx:nginx /etc/nginx/conf.d && \
chown nginx:nginx entrypoint.sh
RUN touch /var/run/nginx.pid && \
chown -R nginx:nginx /var/run/nginx.pid
# Define working directory.
WORKDIR /etc/nginx
COPY ./security.conf /etc/nginx/conf.d/
ENTRYPOINT /docker-entry.sh
RUN chown -R nginx:nginx /etc/nginx/conf.d/security.conf
RUN chmod u+x /entrypoint.sh
RUN sed -i "/^http {/a \ proxy_buffering off;\n" /etc/nginx/nginx.conf
RUN sed -i '/temp_path/d' /etc/nginx/nginx.conf \
&& sed -i 's!/tmp/nginx.pid!/var/run/nginx.pid!g' /etc/nginx/nginx.conf
USER nginx
#Healthcheck to make sure container is ready
HEALTHCHECK CMD curl --fail http://localhost:8080 || exit 1
ENTRYPOINT ["/entrypoint.sh"]
VOLUME ["/var/run", "/etc/nginx/conf.d/", "/var/cache/nginx/"]
EXPOSE 80 443

View File

@ -1,9 +0,0 @@
#!/bin/bash
echo Starting Nginx
sed -Ei "s/APP_PORT/$PLATFORM_PORT_80_TCP_PORT/" /etc/nginx/sites-available/mattermost
sed -Ei "s/APP_PORT/$PLATFORM_PORT_80_TCP_PORT/" /etc/nginx/sites-available/mattermost-ssl
if [ "$MATTERMOST_ENABLE_SSL" = true ]; then
ssl="-ssl"
fi
ln -s /etc/nginx/sites-available/mattermost$ssl /etc/nginx/sites-enabled/mattermost
nginx -g 'daemon off;'

24
web/entrypoint.sh Executable file
View File

@ -0,0 +1,24 @@
#!/bin/sh
# Define default value for app container hostname and port
APP_HOST=${APP_HOST:-app}
APP_PORT_NUMBER=${APP_PORT_NUMBER:-8000}
# Check if SSL should be enabled (if certificates exists)
if [ -f "/cert/cert.pem" -a -f "/cert/key-no-password.pem" ]; then
echo "found certificate and key, linking ssl config"
ssl="-ssl"
else
echo "linking plain config"
fi
# Ensure that the configuration file is not present before linking.
test -w /etc/nginx/conf.d/mattermost.conf && rm /etc/nginx/conf.d/mattermost.conf
# Linking Nginx configuration file
ln -s -f /etc/nginx/sites-available/mattermost$ssl /etc/nginx/conf.d/mattermost.conf
# Setup app host and port on configuration file
sed -i "s/{%APP_HOST%}/${APP_HOST}/g" /etc/nginx/conf.d/mattermost.conf
sed -i "s/{%APP_PORT%}/${APP_PORT_NUMBER}/g" /etc/nginx/conf.d/mattermost.conf
# Run Nginx
exec nginx -g 'daemon off;'

View File

@ -1,17 +1,39 @@
map $http_x_forwarded_proto $proxy_x_forwarded_proto {
default $http_x_forwarded_proto;
'' $scheme;
}
server {
listen 80;
listen 8080;
location / {
gzip off;
client_max_body_size 50M;
location ~ /api/v[0-9]+/(users/)?websocket$ {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
client_max_body_size 50M;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Proto $proxy_x_forwarded_proto;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_pass http://app:APP_PORT;
proxy_buffers 256 16k;
proxy_buffer_size 16k;
proxy_read_timeout 600s;
proxy_pass http://{%APP_HOST%}:{%APP_PORT%};
}
location / {
gzip on;
client_max_body_size 50M;
proxy_set_header Connection "";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $proxy_x_forwarded_proto;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_buffers 256 16k;
proxy_buffer_size 16k;
proxy_read_timeout 600s;
proxy_pass http://{%APP_HOST%}:{%APP_PORT%};
}
}

59
web/mattermost-ssl Normal file → Executable file
View File

@ -1,34 +1,59 @@
# server {
# listen 80;
# server_name mattermost.example.com;
# return 301 https://$server_name$request_uri;
# }
server {
listen 8080 default_server;
server_name _;
return 301 https://$host$request_uri;
}
map $http_x_forwarded_proto $proxy_x_forwarded_proto {
default $http_x_forwarded_proto;
'' $scheme;
}
server {
listen 443;
listen 8443 ssl http2;
ssl on;
ssl_certificate /cert/cert.pem;
ssl_certificate_key /cert/key-no-password.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:MEDIUM:!SSLv2:!PSK:!SRP:!ADH:!AECDH;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1.2 TLSv1.3;
# Please update the ciphers in this file every 6 months.
# https://ssl-config.mozilla.org/
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
location / {
gzip off;
location ~ /api/v[0-9]+/(users/)?websocket$ {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header Connection "upgrade";
client_max_body_size 50M;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Proto $proxy_x_forwarded_proto;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_pass http://app:APP_PORT;
proxy_buffers 256 16k;
proxy_buffer_size 16k;
proxy_read_timeout 600s;
proxy_pass http://{%APP_HOST%}:{%APP_PORT%};
}
location / {
gzip on;
proxy_set_header X-Forwarded-Ssl on;
client_max_body_size 50M;
proxy_set_header Connection "";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $proxy_x_forwarded_proto;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_buffers 256 16k;
proxy_buffer_size 16k;
proxy_read_timeout 600s;
proxy_pass http://{%APP_HOST%}:{%APP_PORT%};
}
}
# See https://github.com/mattermost/docs/blob/master/source/install/prod-ubuntu.rst for the SSL configuration
# See https://docs.mattermost.com/install/install-ubuntu-1604.html#configuring-nginx-with-ssl-and-http-2 for the SSL configuration

22
web/security.conf Normal file
View File

@ -0,0 +1,22 @@
# don't send the nginx version number in error pages and Server header
server_tokens off;
# config to don't allow the browser to render the page inside an frame or iframe
# and avoid clickjacking http://en.wikipedia.org/wiki/Clickjacking
# if you need to allow [i]frames, you can use SAMEORIGIN or even set an uri with ALLOW-FROM uri
# https://developer.mozilla.org/en-US/docs/HTTP/X-Frame-Options
add_header X-Frame-Options SAMEORIGIN;
# when serving user-supplied content, include a X-Content-Type-Options: nosniff header along with the Content-Type: header,
# to disable content-type sniffing on some browsers.
# https://www.owasp.org/index.php/List_of_useful_HTTP_headers
# currently supported in IE > 8 http://blogs.msdn.com/b/ie/archive/2008/09/02/ie8-security-part-vi-beta-2-update.aspx
# http://msdn.microsoft.com/en-us/library/ie/gg622941(v=vs.85).aspx
# 'soon' on Firefox https://bugzilla.mozilla.org/show_bug.cgi?id=471020
add_header X-Content-Type-Options nosniff;
# This header enables the Cross-site scripting (XSS) filter built into most recent web browsers.
# It's usually enabled by default anyway, so the role of this header is to re-enable the filter for
# this particular website if it was disabled by the user.
# https://www.owasp.org/index.php/List_of_useful_HTTP_headers
add_header X-XSS-Protection "1; mode=block";