Merge release branch 'release-1.0.0'
Этот коммит содержится в:
@@ -52,10 +52,12 @@ There are multiple ways to install Mattermost depending on your needs.
|
|||||||
|
|
||||||
[](https://travis-ci.org/mattermost/platform)
|
[](https://travis-ci.org/mattermost/platform)
|
||||||
|
|
||||||
#### Production Deployment (for Beta2 and later)
|
#### Production Deployment
|
||||||
|
|
||||||
Prior to production installation, please review [Mattermost system requirements](doc/install/requirements.md).
|
Prior to production installation, please review [Mattermost system requirements](doc/install/requirements.md).
|
||||||
|
|
||||||
|
- [Production Install on Ubuntu 14.04](https://github.com/mattermost/platform/blob/release-1.0.0/doc/install/prod-ubuntu.md) - Install Mattermost for production environments.
|
||||||
|
|
||||||
- [GitLab Mattermost Production Installation](https://gitlab.com/gitlab-org/gitlab-mattermost) - Install Mattermost for production environments bundled with GitLab, a leading open source Git repository, using an omnibus package for Ubuntu 12.04, Ubuntu 14.04, Debian 7, Debian 8, and CentOS 6 (and RedHat/Oracle/Scientific Linux 6), CentOS 7 (and RedHat/Oracle/Scientific Linux 7).
|
- [GitLab Mattermost Production Installation](https://gitlab.com/gitlab-org/gitlab-mattermost) - Install Mattermost for production environments bundled with GitLab, a leading open source Git repository, using an omnibus package for Ubuntu 12.04, Ubuntu 14.04, Debian 7, Debian 8, and CentOS 6 (and RedHat/Oracle/Scientific Linux 6), CentOS 7 (and RedHat/Oracle/Scientific Linux 7).
|
||||||
|
|
||||||
For technical questions and answers, please visit the [Mattermost forum](http://forum.mattermost.org).
|
For technical questions and answers, please visit the [Mattermost forum](http://forum.mattermost.org).
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ func CreateUser(c *Context, team *model.Team, user *model.User) *model.User {
|
|||||||
l4g.Error("Encountered an issue joining default channels user_id=%s, team_id=%s, err=%v", ruser.Id, ruser.TeamId, err)
|
l4g.Error("Encountered an issue joining default channels user_id=%s, team_id=%s, err=%v", ruser.Id, ruser.TeamId, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
fireAndForgetWelcomeEmail(ruser.Email, team.DisplayName, c.GetTeamURLFromTeam(team))
|
fireAndForgetWelcomeEmail(ruser.Email, team.DisplayName, c.GetSiteURL(), c.GetTeamURLFromTeam(team))
|
||||||
if user.EmailVerified {
|
if user.EmailVerified {
|
||||||
if cresult := <-Srv.Store.User().VerifyEmail(ruser.Id); cresult.Err != nil {
|
if cresult := <-Srv.Store.User().VerifyEmail(ruser.Id); cresult.Err != nil {
|
||||||
l4g.Error("Failed to set email verified err=%v", cresult.Err)
|
l4g.Error("Failed to set email verified err=%v", cresult.Err)
|
||||||
@@ -218,12 +218,13 @@ func CreateUser(c *Context, team *model.Team, user *model.User) *model.User {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func fireAndForgetWelcomeEmail(email, teamDisplayName, teamURL string) {
|
func fireAndForgetWelcomeEmail(email, teamDisplayName, siteURL, teamURL string) {
|
||||||
go func() {
|
go func() {
|
||||||
|
|
||||||
subjectPage := NewServerTemplatePage("welcome_subject")
|
subjectPage := NewServerTemplatePage("welcome_subject")
|
||||||
subjectPage.Props["TeamDisplayName"] = teamDisplayName
|
subjectPage.Props["TeamDisplayName"] = teamDisplayName
|
||||||
bodyPage := NewServerTemplatePage("welcome_body")
|
bodyPage := NewServerTemplatePage("welcome_body")
|
||||||
|
bodyPage.Props["SiteURL"] = siteURL
|
||||||
bodyPage.Props["TeamURL"] = teamURL
|
bodyPage.Props["TeamURL"] = teamURL
|
||||||
|
|
||||||
if err := utils.SendMail(email, subjectPage.Render(), bodyPage.Render()); err != nil {
|
if err := utils.SendMail(email, subjectPage.Render(), bodyPage.Render()); err != nil {
|
||||||
|
|||||||
187
doc/install/prod-ubuntu.md
Обычный файл
187
doc/install/prod-ubuntu.md
Обычный файл
@@ -0,0 +1,187 @@
|
|||||||
|
# Production Installation on Ubuntu 14.04 LTS
|
||||||
|
|
||||||
|
## Install Ubuntu Server 14.04 LTS
|
||||||
|
1. Set up 3 machines with Ubuntu 14.04 with 2GB of RAM or more. The servers will be used for the Load Balancer, Mattermost, and Database.
|
||||||
|
1. Make sure the system is up to date with the most recent security patches.
|
||||||
|
* ``` sudo apt-get update```
|
||||||
|
* ``` sudo apt-get upgrade```
|
||||||
|
|
||||||
|
## Setup Database Server
|
||||||
|
1. For the purposes of this guide we will assume this server has an IP address of 10.10.10.1
|
||||||
|
1. Install PostgreSQL 9.3+ (or MySQL 5.2+)
|
||||||
|
* ``` sudo apt-get install postgresql postgresql-contrib```
|
||||||
|
1. PostgreSQL created a user account called `postgres`. You will need to log into that account with:
|
||||||
|
* ``` sudo -i -u postgres```
|
||||||
|
1. You can get a PostgreSQL prompt by typing:
|
||||||
|
* ``` psql```
|
||||||
|
1. Create the Mattermost database by typing:
|
||||||
|
* ```postgres=# CREATE DATABASE mattermost;```
|
||||||
|
1. Create the Mattermost user by typing:
|
||||||
|
* ```postgres=# CREATE USER mmuser WITH PASSWORD 'mmuser_password';```
|
||||||
|
1. Grant the user access to the Mattermost database by typing:
|
||||||
|
* ```postgres=# GRANT ALL PRIVILEGES ON DATABASE mattermost to mmuser;```
|
||||||
|
1. You can exit out of PostgreSQL by typing:
|
||||||
|
* ```postgre=# \q```
|
||||||
|
1. You can exit the postgres account by typing:
|
||||||
|
* ``` exit```
|
||||||
|
|
||||||
|
## Setup Mattermost Server
|
||||||
|
1. For the purposes of this guide we will assume this server has an IP address of 10.10.10.2
|
||||||
|
1. Download the latest Mattermost Server by typing:
|
||||||
|
* ``` wget https://github.com/mattermost/platform/releases/download/v1.0.0/mattermost.tar.gz```
|
||||||
|
1. Unzip the Mattermost Server by typing:
|
||||||
|
* ``` tar -xvzf mattermost.tar.gz```
|
||||||
|
1. For the sake of making this guide simple we located the files at `/home/ubuntu/mattermost`, in the future we will give guidance for storing under `/opt`.
|
||||||
|
1. We have also elected to run the Mattermost Server as the `ubuntu` account for simplicity. We recommend settings up and running the service under a `mattermost` user account with limited permissions.
|
||||||
|
1. Create the storage directory for files. We assume you will have attached a large drive for storage of images and files. For this setup we will assume the directory is located at `/mattermost/data`.
|
||||||
|
* Create the directory by typing:
|
||||||
|
* ``` sudo mkdir -p /mattermost/data```
|
||||||
|
* Set the ubuntu account as the directory owner by typing:
|
||||||
|
* ``` sudo chown -R ubuntu /mattermost```
|
||||||
|
1. Configure Mattermost Server by editing the config.json file at /home/ubuntu/mattermost/config`
|
||||||
|
* ``` cd ~/mattermost/config```
|
||||||
|
* Edit the file by typing:
|
||||||
|
* ``` vi config.json```
|
||||||
|
* replace `DriverName": "mysql"` with `DriverName": "postgres"`
|
||||||
|
* replace `"DataSource": "mmuser:mostest@tcp(dockerhost:3306)/mattermost_test?charset=utf8mb4,utf8"` with `"DataSource": "postgres://mmuser:mmuser_password@10.10.10.1:5432/mattermost?sslmode=disable&connect_timeout=10"`
|
||||||
|
* Optionally you may continue to edit configuration settings in `config.json` or use the System Console described in a later section to finish the configuration.
|
||||||
|
1. Test the Mattermost Server
|
||||||
|
* ``` cd ~/mattermost/bin```
|
||||||
|
* Run the Mattermost Server by typing:
|
||||||
|
* ``` ./platform```
|
||||||
|
* You should see a console log like `Server is listening on :8065` letting you know the service is running.
|
||||||
|
* Stop the server for now by typing `ctrl-c`
|
||||||
|
1. Setup Mattermost to use the Ubuntu Upstart daemon which handles supervision of the Mattermost process.
|
||||||
|
* ``` sudo touch /etc/init/mattermost.conf```
|
||||||
|
* ``` sudo vi /etc/init/mattermost.conf```
|
||||||
|
* Copy the following lines into `/etc/init/mattermost.conf`
|
||||||
|
```
|
||||||
|
start on runlevel [2345]
|
||||||
|
stop on runlevel [016]
|
||||||
|
respawn
|
||||||
|
chdir /home/ubuntu/mattermost
|
||||||
|
setuid ubuntu
|
||||||
|
exec bin/platform
|
||||||
|
```
|
||||||
|
* You can manage the process by typing:
|
||||||
|
* ``` sudo start mattermost```
|
||||||
|
* Verify the service is running by typing:
|
||||||
|
* ``` curl http://10.10.10.2:8065```
|
||||||
|
* You should see a page titles *Mattermost - Signup*
|
||||||
|
* You can also stop the process by running the command ` sudo stop mattermost`, but we will skip this step for now.
|
||||||
|
|
||||||
|
## Setup Nginx Server
|
||||||
|
1. For the purposes of this guide we will assume this server has an IP address of 10.10.10.3
|
||||||
|
1. We use Nginx for proxying request to the Mattermost Server. The main benefits are:
|
||||||
|
* SSL termination
|
||||||
|
* http to https redirect
|
||||||
|
* Port mapping :80 to :8065
|
||||||
|
* Standard request logs
|
||||||
|
1. Install Nginx on Ubuntu with
|
||||||
|
* ``` sudo apt-get install nginx```
|
||||||
|
1. Verify Nginx is running
|
||||||
|
* ``` curl http://10.10.10.3```
|
||||||
|
* You should see a *Welcome to nginx!* page
|
||||||
|
1. You can manage Nginx with the following commands
|
||||||
|
* ``` sudo service nginx stop```
|
||||||
|
* ``` sudo service nginx start```
|
||||||
|
* ``` sudo service nginx restart```
|
||||||
|
1. Map a FQDN (fully qualified domain name) like **mattermost.example.com** to point to the Nginx server.
|
||||||
|
1. Configure Nginx to proxy connections from the internet to the Mattermost Server
|
||||||
|
* Create a configuration for Mattermost
|
||||||
|
* ``` sudo touch /etc/nginx/sites-available/mattermost```
|
||||||
|
* Below is a sample configuration with the minimum settings required to configure Mattermost.
|
||||||
|
*
|
||||||
|
```
|
||||||
|
server {
|
||||||
|
server_name mattermost.example.com;
|
||||||
|
location / {
|
||||||
|
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-Frame-Options SAMEORIGIN;
|
||||||
|
proxy_pass http://localhost:8065;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
* Remove the existing file with
|
||||||
|
* ``` sudo rm /etc/nginx/sites-enabled/default```
|
||||||
|
* Link the mattermost config by typing:
|
||||||
|
* ```sudo ln -s /etc/nginx/sites-available/mattermost /etc/nginx/sites-enabled/mattermost```
|
||||||
|
* Restart Nginx by typing:
|
||||||
|
* ``` sudo service nginx restart```
|
||||||
|
* Verify you can see Mattermost thru the proxy by typing:
|
||||||
|
* ``` curl http://localhost```
|
||||||
|
* You should see a page titles *Mattermost - Signup*
|
||||||
|
|
||||||
|
## Setup Nginx with SSL (Recommended)
|
||||||
|
1. You will need a SSL cert from a certificate authority.
|
||||||
|
1. For simplicity we will generate a test certificate.
|
||||||
|
* ``` mkdir ~/cert```
|
||||||
|
* ``` cd ~/cert```
|
||||||
|
* ``` sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mattermost.key -out mattermost.crt```
|
||||||
|
* Input the following info
|
||||||
|
```
|
||||||
|
Country Name (2 letter code) [AU]:US
|
||||||
|
State or Province Name (full name) [Some-State]:California
|
||||||
|
Locality Name (eg, city) []:Palo Alto
|
||||||
|
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example LLC
|
||||||
|
Organizational Unit Name (eg, section) []:
|
||||||
|
Common Name (e.g. server FQDN or YOUR name) []:mattermost.example.com
|
||||||
|
Email Address []:admin@mattermost.example.com
|
||||||
|
```
|
||||||
|
1. Modify the file at `/etc/nginx/sites-available/mattermost` and add the following lines
|
||||||
|
*
|
||||||
|
```
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name mattermost.example.com;
|
||||||
|
return 301 https://$server_name$request_uri;
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 443 ssl;
|
||||||
|
server_name mattermost.example.com;
|
||||||
|
|
||||||
|
ssl on;
|
||||||
|
ssl_certificate /home/ubuntu/cert/mattermost.crt;
|
||||||
|
ssl_certificate_key /home/ubuntu/cert/mattermost.key;
|
||||||
|
ssl_session_timeout 5m;
|
||||||
|
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
|
||||||
|
ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
|
||||||
|
ssl_prefer_server_ciphers on;
|
||||||
|
|
||||||
|
# add to location / above
|
||||||
|
location / {
|
||||||
|
gzip off;
|
||||||
|
proxy_set_header X-Forwarded-Ssl on;
|
||||||
|
```
|
||||||
|
## Finish Mattermost Server setup
|
||||||
|
1. Navigate to https://mattermost.example.com and create a team and user.
|
||||||
|
1. The first user in the system is automatically granted the `system_admin` role, which gives you access to the System Console.
|
||||||
|
1. From the `town-square` channel click the dropdown and choose the `System Console` option
|
||||||
|
1. Update Email Settings. We recommend using an email sending service. The example below assumes AmazonSES.
|
||||||
|
* Set *Send Email Notifications* to true
|
||||||
|
* Set *Require Email Verification* to true
|
||||||
|
* Set *Feedback Name* to `No-Reply`
|
||||||
|
* Set *Feedback Email* to `mattermost@example.com`
|
||||||
|
* Set *SMTP Username* to `AFIADTOVDKDLGERR`
|
||||||
|
* Set *SMTP Password* to `DFKJoiweklsjdflkjOIGHLSDFJewiskdjf`
|
||||||
|
* Set *SMTP Server* to `email-smtp.us-east-1.amazonaws.com`
|
||||||
|
* Set *SMTP Port* to `465`
|
||||||
|
* Set *Connection Security* to `TLS`
|
||||||
|
* Save the Settings
|
||||||
|
1. Update File Settings
|
||||||
|
* Change *Local Directory Location* from `./data/` to `/mattermost/data`
|
||||||
|
1. Update Log Settings
|
||||||
|
* Set *Log to The Console* to false
|
||||||
|
1. Update Rate Limit Settings
|
||||||
|
* Set *Vary By Remote Address* to false
|
||||||
|
* Set *Vary By HTTP Header* to X-Real-IP
|
||||||
|
1. Feel free to modify other settings.
|
||||||
|
1. Restart the Mattermost Service by typing:
|
||||||
|
* ``` sudo restart mattermost```
|
||||||
@@ -1,100 +0,0 @@
|
|||||||
# Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
|
|
||||||
# See License.txt for license information.
|
|
||||||
FROM ubuntu:14.04
|
|
||||||
|
|
||||||
# Install Dependancies
|
|
||||||
RUN apt-get update && apt-get install -y build-essential
|
|
||||||
RUN apt-get install -y curl
|
|
||||||
RUN curl -sL https://deb.nodesource.com/setup | bash -
|
|
||||||
RUN apt-get install -y nodejs
|
|
||||||
RUN apt-get install -y ruby-full
|
|
||||||
RUN gem install compass
|
|
||||||
|
|
||||||
# Postfix
|
|
||||||
RUN apt-get install -y postfix
|
|
||||||
|
|
||||||
#
|
|
||||||
# Install GO
|
|
||||||
#
|
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y \
|
|
||||||
gcc libc6-dev make git mercurial \
|
|
||||||
--no-install-recommends \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
ENV GOLANG_VERSION 1.4.2
|
|
||||||
|
|
||||||
RUN curl -sSL https://golang.org/dl/go$GOLANG_VERSION.src.tar.gz \
|
|
||||||
| tar -v -C /usr/src -xz
|
|
||||||
|
|
||||||
RUN cd /usr/src/go/src && ./make.bash --no-clean 2>&1
|
|
||||||
|
|
||||||
ENV PATH /usr/src/go/bin:$PATH
|
|
||||||
|
|
||||||
RUN mkdir -p /go/src /go/bin && chmod -R 777 /go
|
|
||||||
ENV GOPATH /go
|
|
||||||
ENV PATH /go/bin:$PATH
|
|
||||||
WORKDIR /go
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#
|
|
||||||
# Install SQL
|
|
||||||
#
|
|
||||||
|
|
||||||
ENV MYSQL_ROOT_PASSWORD=mostest
|
|
||||||
ENV MYSQL_USER=mmuser
|
|
||||||
ENV MYSQL_PASSWORD=mostest
|
|
||||||
ENV MYSQL_DATABASE=mattermost_test
|
|
||||||
|
|
||||||
RUN groupadd -r mysql && useradd -r -g mysql mysql
|
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y perl --no-install-recommends && rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
RUN apt-key adv --keyserver pool.sks-keyservers.net --recv-keys A4A9406876FCBD3C456770C88C718D3B5072E1F5
|
|
||||||
|
|
||||||
ENV MYSQL_MAJOR 5.6
|
|
||||||
ENV MYSQL_VERSION 5.6.25
|
|
||||||
|
|
||||||
RUN echo "deb http://repo.mysql.com/apt/debian/ wheezy mysql-${MYSQL_MAJOR}" > /etc/apt/sources.list.d/mysql.list
|
|
||||||
|
|
||||||
RUN apt-get update \
|
|
||||||
&& export DEBIAN_FRONTEND=noninteractive \
|
|
||||||
&& apt-get -y install mysql-server \
|
|
||||||
&& rm -rf /var/lib/apt/lists/* \
|
|
||||||
&& rm -rf /var/lib/mysql && mkdir -p /var/lib/mysql
|
|
||||||
|
|
||||||
RUN sed -Ei 's/^(bind-address|log)/#&/' /etc/mysql/my.cnf
|
|
||||||
|
|
||||||
VOLUME /var/lib/mysql
|
|
||||||
# ---------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#
|
|
||||||
# Install Redis
|
|
||||||
#
|
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y wget
|
|
||||||
RUN wget http://download.redis.io/redis-stable.tar.gz; \
|
|
||||||
tar xvzf redis-stable.tar.gz; \
|
|
||||||
cd redis-stable; \
|
|
||||||
make install
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
# Copy over files
|
|
||||||
ADD https://github.com/mattermost/platform/archive/v0.50.tar.gz /go/src/github.com/mattermost/
|
|
||||||
RUN mkdir /go/src/github.com/mattermost/platform && tar -zxvf /go/src/github.com/mattermost/v0.50.tar.gz -C /go/src/github.com/mattermost/platform --strip-components=1
|
|
||||||
|
|
||||||
# Insert postfix config
|
|
||||||
ADD ./main.cf /etc/postfix/
|
|
||||||
|
|
||||||
RUN go get github.com/tools/godep
|
|
||||||
RUN cd /go/src/github.com/mattermost/platform; godep restore
|
|
||||||
RUN go install github.com/mattermost/platform
|
|
||||||
RUN cd /go/src/github.com/mattermost/platform/web/react; npm install
|
|
||||||
|
|
||||||
RUN chmod +x /go/src/github.com/mattermost/platform/docker/docker-entry.sh
|
|
||||||
ENTRYPOINT /go/src/github.com/mattermost/platform/docker/docker-entry.sh
|
|
||||||
|
|
||||||
# Ports
|
|
||||||
EXPOSE 80
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"AWSEBDockerrunVersion": "1",
|
|
||||||
"Image": {
|
|
||||||
"Name": "mattermost/platform:helium",
|
|
||||||
"Update": "true"
|
|
||||||
},
|
|
||||||
"Ports": [
|
|
||||||
{
|
|
||||||
"ContainerPort": "80"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"Logging": "/var/log/"
|
|
||||||
}
|
|
||||||
@@ -1,122 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
|
|
||||||
# See License.txt for license information.
|
|
||||||
|
|
||||||
mkdir -p web/static/js
|
|
||||||
|
|
||||||
echo "127.0.0.1 dockerhost" >> /etc/hosts
|
|
||||||
/etc/init.d/networking restart
|
|
||||||
|
|
||||||
echo configuring mysql
|
|
||||||
|
|
||||||
# SQL!!!
|
|
||||||
set -e
|
|
||||||
|
|
||||||
get_option () {
|
|
||||||
local section=$1
|
|
||||||
local option=$2
|
|
||||||
local default=$3
|
|
||||||
ret=$(my_print_defaults $section | grep '^--'${option}'=' | cut -d= -f2-)
|
|
||||||
[ -z $ret ] && ret=$default
|
|
||||||
echo $ret
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Get config
|
|
||||||
DATADIR="$("mysqld" --verbose --help 2>/dev/null | awk '$1 == "datadir" { print $2; exit }')"
|
|
||||||
SOCKET=$(get_option mysqld socket "$DATADIR/mysql.sock")
|
|
||||||
PIDFILE=$(get_option mysqld pid-file "/var/run/mysqld/mysqld.pid")
|
|
||||||
|
|
||||||
if [ ! -d "$DATADIR/mysql" ]; then
|
|
||||||
if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" ]; then
|
|
||||||
echo >&2 'error: database is uninitialized and MYSQL_ROOT_PASSWORD not set'
|
|
||||||
echo >&2 ' Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
mkdir -p "$DATADIR"
|
|
||||||
chown -R mysql:mysql "$DATADIR"
|
|
||||||
|
|
||||||
echo 'Running mysql_install_db'
|
|
||||||
mysql_install_db --user=mysql --datadir="$DATADIR" --rpm --keep-my-cnf
|
|
||||||
echo 'Finished mysql_install_db'
|
|
||||||
|
|
||||||
mysqld --user=mysql --datadir="$DATADIR" --skip-networking &
|
|
||||||
for i in $(seq 30 -1 0); do
|
|
||||||
[ -S "$SOCKET" ] && break
|
|
||||||
echo 'MySQL init process in progress...'
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
if [ $i = 0 ]; then
|
|
||||||
echo >&2 'MySQL init process failed.'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# These statements _must_ be on individual lines, and _must_ end with
|
|
||||||
# semicolons (no line breaks or comments are permitted).
|
|
||||||
# TODO proper SQL escaping on ALL the things D:
|
|
||||||
|
|
||||||
tempSqlFile=$(mktemp /tmp/mysql-first-time.XXXXXX.sql)
|
|
||||||
cat > "$tempSqlFile" <<-EOSQL
|
|
||||||
-- What's done in this file shouldn't be replicated
|
|
||||||
-- or products like mysql-fabric won't work
|
|
||||||
SET @@SESSION.SQL_LOG_BIN=0;
|
|
||||||
|
|
||||||
DELETE FROM mysql.user ;
|
|
||||||
CREATE USER 'root'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ;
|
|
||||||
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION ;
|
|
||||||
DROP DATABASE IF EXISTS test ;
|
|
||||||
EOSQL
|
|
||||||
|
|
||||||
if [ "$MYSQL_DATABASE" ]; then
|
|
||||||
echo "CREATE DATABASE IF NOT EXISTS \`$MYSQL_DATABASE\` ;" >> "$tempSqlFile"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$MYSQL_USER" -a "$MYSQL_PASSWORD" ]; then
|
|
||||||
echo "CREATE USER '"$MYSQL_USER"'@'%' IDENTIFIED BY '"$MYSQL_PASSWORD"' ;" >> "$tempSqlFile"
|
|
||||||
|
|
||||||
if [ "$MYSQL_DATABASE" ]; then
|
|
||||||
echo "GRANT ALL ON \`"$MYSQL_DATABASE"\`.* TO '"$MYSQL_USER"'@'%' ;" >> "$tempSqlFile"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo 'FLUSH PRIVILEGES ;' >> "$tempSqlFile"
|
|
||||||
|
|
||||||
mysql -uroot < "$tempSqlFile"
|
|
||||||
|
|
||||||
rm -f "$tempSqlFile"
|
|
||||||
kill $(cat $PIDFILE)
|
|
||||||
for i in $(seq 30 -1 0); do
|
|
||||||
[ -f "$PIDFILE" ] || break
|
|
||||||
echo 'MySQL init process in progress...'
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
if [ $i = 0 ]; then
|
|
||||||
echo >&2 'MySQL hangs during init process.'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo 'MySQL init process done. Ready for start up.'
|
|
||||||
fi
|
|
||||||
|
|
||||||
chown -R mysql:mysql "$DATADIR"
|
|
||||||
|
|
||||||
mysqld &
|
|
||||||
|
|
||||||
sleep 5
|
|
||||||
|
|
||||||
# ------------------------
|
|
||||||
|
|
||||||
echo starting postfix
|
|
||||||
/etc/init.d/postfix restart
|
|
||||||
|
|
||||||
echo starting redis
|
|
||||||
redis-server &
|
|
||||||
|
|
||||||
echo starting react processor
|
|
||||||
cd /go/src/github.com/mattermost/platform/web/react && npm start &
|
|
||||||
|
|
||||||
echo starting go web server
|
|
||||||
cd /go/src/github.com/mattermost/platform/; go run mattermost.go -config=config_docker.json &
|
|
||||||
|
|
||||||
echo starting compass watch
|
|
||||||
cd /go/src/github.com/mattermost/platform/web/sass-files && compass watch
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
myorigin = mattermost.com
|
|
||||||
myhostname = mattermost.com
|
|
||||||
|
|
||||||
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
|
|
||||||
biff = no
|
|
||||||
|
|
||||||
append_dot_mydomain = no
|
|
||||||
|
|
||||||
readme_directory = no
|
|
||||||
|
|
||||||
# TLS parameters
|
|
||||||
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
|
|
||||||
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
|
|
||||||
smtpd_use_tls=no
|
|
||||||
smtp_use_tls=no
|
|
||||||
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
|
|
||||||
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
|
|
||||||
|
|
||||||
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
|
|
||||||
alias_maps = hash:/etc/aliases
|
|
||||||
alias_database = hash:/etc/aliases
|
|
||||||
mydestination = localhost, localhost.localdomain, localhost
|
|
||||||
relayhost =
|
|
||||||
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
|
|
||||||
mailbox_size_limit = 0
|
|
||||||
recipient_delimiter = +
|
|
||||||
inet_interfaces = all
|
|
||||||
inet_protocols = all
|
|
||||||
Двоичные данные
docker/0.6/Dockerrun.aws.zip
Двоичные данные
docker/0.6/Dockerrun.aws.zip
Двоичный файл не отображается.
@@ -1,99 +0,0 @@
|
|||||||
{
|
|
||||||
"LogSettings": {
|
|
||||||
"ConsoleEnable": false,
|
|
||||||
"ConsoleLevel": "DEBUG",
|
|
||||||
"FileEnable": true,
|
|
||||||
"FileLevel": "INFO",
|
|
||||||
"FileFormat": "",
|
|
||||||
"FileLocation": ""
|
|
||||||
},
|
|
||||||
"ServiceSettings": {
|
|
||||||
"SiteName": "Mattermost",
|
|
||||||
"Mode" : "dev",
|
|
||||||
"AllowTesting" : false,
|
|
||||||
"UseSSL": false,
|
|
||||||
"Port": "80",
|
|
||||||
"Version": "developer",
|
|
||||||
"Shards": {
|
|
||||||
},
|
|
||||||
"InviteSalt": "gxHVDcKUyP2y1eiyW8S8na1UYQAfq6J6",
|
|
||||||
"PublicLinkSalt": "TO3pTyXIZzwHiwyZgGql7lM7DG3zeId4",
|
|
||||||
"ResetSalt": "IPxFzSfnDFsNsRafZxz8NaYqFKhf9y2t",
|
|
||||||
"AnalyticsUrl": "",
|
|
||||||
"UseLocalStorage": true,
|
|
||||||
"StorageDirectory": "/mattermost/data/",
|
|
||||||
"AllowedLoginAttempts": 10
|
|
||||||
},
|
|
||||||
"SSOSettings": {
|
|
||||||
"gitlab": {
|
|
||||||
"Allow": false,
|
|
||||||
"Secret" : "",
|
|
||||||
"Id": "",
|
|
||||||
"AuthEndpoint": "",
|
|
||||||
"TokenEndpoint": "",
|
|
||||||
"UserApiEndpoint": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"SqlSettings": {
|
|
||||||
"DriverName": "mysql",
|
|
||||||
"DataSource": "mmuser:mostest@tcp(localhost:3306)/mattermost_test?charset=utf8mb4,utf8",
|
|
||||||
"DataSourceReplicas": ["mmuser:mostest@tcp(localhost:3306)/mattermost_test?charset=utf8mb4,utf8"],
|
|
||||||
"MaxIdleConns": 10,
|
|
||||||
"MaxOpenConns": 10,
|
|
||||||
"Trace": false,
|
|
||||||
"AtRestEncryptKey": "Ya0xMrybACJ3sZZVWQC7e31h5nSDWZFS"
|
|
||||||
},
|
|
||||||
"AWSSettings": {
|
|
||||||
"S3AccessKeyId": "",
|
|
||||||
"S3SecretAccessKey": "",
|
|
||||||
"S3Bucket": "",
|
|
||||||
"S3Region": ""
|
|
||||||
},
|
|
||||||
"ImageSettings": {
|
|
||||||
"ThumbnailWidth": 120,
|
|
||||||
"ThumbnailHeight": 100,
|
|
||||||
"PreviewWidth": 1024,
|
|
||||||
"PreviewHeight": 0,
|
|
||||||
"ProfileWidth": 128,
|
|
||||||
"ProfileHeight": 128,
|
|
||||||
"InitialFont": "luximbi.ttf"
|
|
||||||
},
|
|
||||||
"EmailSettings": {
|
|
||||||
"ByPassEmail" : true,
|
|
||||||
"SMTPUsername": "",
|
|
||||||
"SMTPPassword": "",
|
|
||||||
"SMTPServer": "",
|
|
||||||
"UseTLS": false,
|
|
||||||
"UseStartTLS": false,
|
|
||||||
"FeedbackEmail": "",
|
|
||||||
"FeedbackName": "",
|
|
||||||
"ApplePushServer": "",
|
|
||||||
"ApplePushCertPublic": "",
|
|
||||||
"ApplePushCertPrivate": ""
|
|
||||||
},
|
|
||||||
"RateLimitSettings": {
|
|
||||||
"UseRateLimiter": true,
|
|
||||||
"PerSec": 10,
|
|
||||||
"MemoryStoreSize": 10000,
|
|
||||||
"VaryByRemoteAddr": true,
|
|
||||||
"VaryByHeader": ""
|
|
||||||
},
|
|
||||||
"PrivacySettings": {
|
|
||||||
"ShowEmailAddress": true,
|
|
||||||
"ShowPhoneNumber": true,
|
|
||||||
"ShowSkypeId": true,
|
|
||||||
"ShowFullName": true
|
|
||||||
},
|
|
||||||
"TeamSettings": {
|
|
||||||
"MaxUsersPerTeam": 150,
|
|
||||||
"AllowPublicLink": true,
|
|
||||||
"AllowValetDefault": false,
|
|
||||||
"TermsLink": "/static/help/configure_links.html",
|
|
||||||
"PrivacyLink": "/static/help/configure_links.html",
|
|
||||||
"AboutLink": "/static/help/configure_links.html",
|
|
||||||
"HelpLink": "/static/help/configure_links.html",
|
|
||||||
"ReportProblemLink": "/static/help/configure_links.html",
|
|
||||||
"TourLink": "/static/help/configure_links.html",
|
|
||||||
"DefaultThemeColor": "#2389D7"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -13,8 +13,6 @@ ENV MYSQL_DATABASE=mattermost_test
|
|||||||
|
|
||||||
RUN groupadd -r mysql && useradd -r -g mysql mysql
|
RUN groupadd -r mysql && useradd -r -g mysql mysql
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y perl --no-install-recommends && rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
RUN apt-key adv --keyserver pool.sks-keyservers.net --recv-keys A4A9406876FCBD3C456770C88C718D3B5072E1F5
|
RUN apt-key adv --keyserver pool.sks-keyservers.net --recv-keys A4A9406876FCBD3C456770C88C718D3B5072E1F5
|
||||||
|
|
||||||
ENV MYSQL_MAJOR 5.6
|
ENV MYSQL_MAJOR 5.6
|
||||||
@@ -24,7 +22,7 @@ RUN echo "deb http://repo.mysql.com/apt/debian/ wheezy mysql-${MYSQL_MAJOR}" > /
|
|||||||
|
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& export DEBIAN_FRONTEND=noninteractive \
|
&& export DEBIAN_FRONTEND=noninteractive \
|
||||||
&& apt-get -y install mysql-server \
|
&& apt-get -y install perl wget mysql-server \
|
||||||
&& rm -rf /var/lib/apt/lists/* \
|
&& rm -rf /var/lib/apt/lists/* \
|
||||||
&& rm -rf /var/lib/mysql && mkdir -p /var/lib/mysql
|
&& rm -rf /var/lib/mysql && mkdir -p /var/lib/mysql
|
||||||
|
|
||||||
@@ -36,8 +34,8 @@ VOLUME /var/lib/mysql
|
|||||||
WORKDIR /mattermost
|
WORKDIR /mattermost
|
||||||
|
|
||||||
# Copy over files
|
# Copy over files
|
||||||
ADD https://github.com/mattermost/platform/releases/download/v0.6.0/mattermost.tar.gz /
|
ADD https://github.com/mattermost/platform/releases/download/v1.0.0-rc1/mattermost.tar.gz /
|
||||||
RUN tar -zxvf /mattermost.tar.gz --strip-components=1
|
RUN tar -zxvf /mattermost.tar.gz --strip-components=1 && rm /mattermost.tar.gz
|
||||||
ADD config_docker.json /
|
ADD config_docker.json /
|
||||||
ADD docker-entry.sh /
|
ADD docker-entry.sh /
|
||||||
|
|
||||||
Двоичные данные
docker/1.0/Dockerrun.aws.zip
Обычный файл
Двоичные данные
docker/1.0/Dockerrun.aws.zip
Обычный файл
Двоичный файл не отображается.
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"AWSEBDockerrunVersion": "1",
|
"AWSEBDockerrunVersion": "1",
|
||||||
"Image": {
|
"Image": {
|
||||||
"Name": "mattermost/platform:0.6",
|
"Name": "mattermost/platform:1.0",
|
||||||
"Update": "true"
|
"Update": "true"
|
||||||
},
|
},
|
||||||
"Ports": [
|
"Ports": [
|
||||||
89
docker/1.0/config_docker.json
Обычный файл
89
docker/1.0/config_docker.json
Обычный файл
@@ -0,0 +1,89 @@
|
|||||||
|
{
|
||||||
|
"ServiceSettings": {
|
||||||
|
"ListenAddress": ":80",
|
||||||
|
"MaximumLoginAttempts": 10,
|
||||||
|
"SegmentDeveloperKey": "",
|
||||||
|
"GoogleDeveloperKey": "",
|
||||||
|
"EnableOAuthServiceProvider": false,
|
||||||
|
"EnableIncomingWebhooks": false,
|
||||||
|
"EnableTesting": false
|
||||||
|
},
|
||||||
|
"TeamSettings": {
|
||||||
|
"SiteName": "Mattermost",
|
||||||
|
"MaxUsersPerTeam": 50,
|
||||||
|
"EnableTeamCreation": true,
|
||||||
|
"EnableUserCreation": true,
|
||||||
|
"RestrictCreationToDomains": ""
|
||||||
|
},
|
||||||
|
"SqlSettings": {
|
||||||
|
"DriverName": "mysql",
|
||||||
|
"DataSource": "mmuser:mostest@tcp(dockerhost:3306)/mattermost_test?charset=utf8mb4,utf8",
|
||||||
|
"DataSourceReplicas": [],
|
||||||
|
"MaxIdleConns": 10,
|
||||||
|
"MaxOpenConns": 10,
|
||||||
|
"Trace": false,
|
||||||
|
"AtRestEncryptKey": "7rAh6iwQCkV4cA1Gsg3fgGOXJAQ43QV"
|
||||||
|
},
|
||||||
|
"LogSettings": {
|
||||||
|
"EnableConsole": false,
|
||||||
|
"ConsoleLevel": "INFO",
|
||||||
|
"EnableFile": true,
|
||||||
|
"FileLevel": "INFO",
|
||||||
|
"FileFormat": "",
|
||||||
|
"FileLocation": ""
|
||||||
|
},
|
||||||
|
"FileSettings": {
|
||||||
|
"DriverName": "local",
|
||||||
|
"Directory": "/mattermost/data/",
|
||||||
|
"EnablePublicLink": true,
|
||||||
|
"PublicLinkSalt": "LhaAWC6lYEKHTkBKsvyXNIOfUIT37AX",
|
||||||
|
"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": "bjlSR4QqkXFBr7TP4oDzlfZmcNuH9Yo",
|
||||||
|
"PasswordResetSalt": "vZ4DcKyVVRlKHHJpexcuXzojkE5PZ5e",
|
||||||
|
"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": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,7 +12,7 @@ import (
|
|||||||
// It should be maitained in chronological order with most current
|
// It should be maitained in chronological order with most current
|
||||||
// release at the front of the list.
|
// release at the front of the list.
|
||||||
var versions = []string{
|
var versions = []string{
|
||||||
"0.8.0",
|
"1.0.0",
|
||||||
"0.7.1",
|
"0.7.1",
|
||||||
"0.7.0",
|
"0.7.0",
|
||||||
"0.6.0",
|
"0.6.0",
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ func TestSplitVersion(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestGetPreviousVersion(t *testing.T) {
|
func TestGetPreviousVersion(t *testing.T) {
|
||||||
if major, minor := GetPreviousVersion("0.8.0"); major != 0 || minor != 7 {
|
if major, minor := GetPreviousVersion("1.0.0"); major != 0 || minor != 7 {
|
||||||
t.Fatal(major, minor)
|
t.Fatal(major, minor)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ export default class GitLabSettings extends React.Component {
|
|||||||
this.handleSubmit = this.handleSubmit.bind(this);
|
this.handleSubmit = this.handleSubmit.bind(this);
|
||||||
|
|
||||||
this.state = {
|
this.state = {
|
||||||
Allow: this.props.config.GitLabSettings.Allow,
|
Enable: this.props.config.GitLabSettings.Enable,
|
||||||
saveNeeded: false,
|
saveNeeded: false,
|
||||||
serverError: null
|
serverError: null
|
||||||
};
|
};
|
||||||
@@ -21,12 +21,12 @@ export default class GitLabSettings extends React.Component {
|
|||||||
handleChange(action) {
|
handleChange(action) {
|
||||||
var s = {saveNeeded: true, serverError: this.state.serverError};
|
var s = {saveNeeded: true, serverError: this.state.serverError};
|
||||||
|
|
||||||
if (action === 'AllowTrue') {
|
if (action === 'EnableTrue') {
|
||||||
s.Allow = true;
|
s.Enable = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (action === 'AllowFalse') {
|
if (action === 'EnableFalse') {
|
||||||
s.Allow = false;
|
s.Enable = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.setState(s);
|
this.setState(s);
|
||||||
@@ -37,7 +37,7 @@ export default class GitLabSettings extends React.Component {
|
|||||||
$('#save-button').button('loading');
|
$('#save-button').button('loading');
|
||||||
|
|
||||||
var config = this.props.config;
|
var config = this.props.config;
|
||||||
config.GitLabSettings.Allow = React.findDOMNode(this.refs.Allow).checked;
|
config.GitLabSettings.Enable = React.findDOMNode(this.refs.Enable).checked;
|
||||||
config.GitLabSettings.Secret = React.findDOMNode(this.refs.Secret).value.trim();
|
config.GitLabSettings.Secret = React.findDOMNode(this.refs.Secret).value.trim();
|
||||||
config.GitLabSettings.Id = React.findDOMNode(this.refs.Id).value.trim();
|
config.GitLabSettings.Id = React.findDOMNode(this.refs.Id).value.trim();
|
||||||
config.GitLabSettings.AuthEndpoint = React.findDOMNode(this.refs.AuthEndpoint).value.trim();
|
config.GitLabSettings.AuthEndpoint = React.findDOMNode(this.refs.AuthEndpoint).value.trim();
|
||||||
@@ -87,7 +87,7 @@ export default class GitLabSettings extends React.Component {
|
|||||||
<div className='form-group'>
|
<div className='form-group'>
|
||||||
<label
|
<label
|
||||||
className='control-label col-sm-4'
|
className='control-label col-sm-4'
|
||||||
htmlFor='Allow'
|
htmlFor='Enable'
|
||||||
>
|
>
|
||||||
{'Enable Sign Up With GitLab: '}
|
{'Enable Sign Up With GitLab: '}
|
||||||
</label>
|
</label>
|
||||||
@@ -95,21 +95,21 @@ export default class GitLabSettings extends React.Component {
|
|||||||
<label className='radio-inline'>
|
<label className='radio-inline'>
|
||||||
<input
|
<input
|
||||||
type='radio'
|
type='radio'
|
||||||
name='Allow'
|
name='Enable'
|
||||||
value='true'
|
value='true'
|
||||||
ref='Allow'
|
ref='Enable'
|
||||||
defaultChecked={this.props.config.GitLabSettings.Allow}
|
defaultChecked={this.props.config.GitLabSettings.Enable}
|
||||||
onChange={this.handleChange.bind(this, 'AllowTrue')}
|
onChange={this.handleChange.bind(this, 'EnableTrue')}
|
||||||
/>
|
/>
|
||||||
{'true'}
|
{'true'}
|
||||||
</label>
|
</label>
|
||||||
<label className='radio-inline'>
|
<label className='radio-inline'>
|
||||||
<input
|
<input
|
||||||
type='radio'
|
type='radio'
|
||||||
name='Allow'
|
name='Enable'
|
||||||
value='false'
|
value='false'
|
||||||
defaultChecked={!this.props.config.GitLabSettings.Allow}
|
defaultChecked={!this.props.config.GitLabSettings.Enable}
|
||||||
onChange={this.handleChange.bind(this, 'AllowFalse')}
|
onChange={this.handleChange.bind(this, 'EnableFalse')}
|
||||||
/>
|
/>
|
||||||
{'false'}
|
{'false'}
|
||||||
</label>
|
</label>
|
||||||
@@ -133,7 +133,7 @@ export default class GitLabSettings extends React.Component {
|
|||||||
placeholder='Ex "jcuS8PuvcpGhpgHhlcpT1Mx42pnqMxQY"'
|
placeholder='Ex "jcuS8PuvcpGhpgHhlcpT1Mx42pnqMxQY"'
|
||||||
defaultValue={this.props.config.GitLabSettings.Id}
|
defaultValue={this.props.config.GitLabSettings.Id}
|
||||||
onChange={this.handleChange}
|
onChange={this.handleChange}
|
||||||
disabled={!this.state.Allow}
|
disabled={!this.state.Enable}
|
||||||
/>
|
/>
|
||||||
<p className='help-text'>{'Obtain this value via the instructions above for logging into GitLab'}</p>
|
<p className='help-text'>{'Obtain this value via the instructions above for logging into GitLab'}</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -155,7 +155,7 @@ export default class GitLabSettings extends React.Component {
|
|||||||
placeholder='Ex "jcuS8PuvcpGhpgHhlcpT1Mx42pnqMxQY"'
|
placeholder='Ex "jcuS8PuvcpGhpgHhlcpT1Mx42pnqMxQY"'
|
||||||
defaultValue={this.props.config.GitLabSettings.Secret}
|
defaultValue={this.props.config.GitLabSettings.Secret}
|
||||||
onChange={this.handleChange}
|
onChange={this.handleChange}
|
||||||
disabled={!this.state.Allow}
|
disabled={!this.state.Enable}
|
||||||
/>
|
/>
|
||||||
<p className='help-text'>{'Obtain this value via the instructions above for logging into GitLab.'}</p>
|
<p className='help-text'>{'Obtain this value via the instructions above for logging into GitLab.'}</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -177,7 +177,7 @@ export default class GitLabSettings extends React.Component {
|
|||||||
placeholder='Ex ""'
|
placeholder='Ex ""'
|
||||||
defaultValue={this.props.config.GitLabSettings.AuthEndpoint}
|
defaultValue={this.props.config.GitLabSettings.AuthEndpoint}
|
||||||
onChange={this.handleChange}
|
onChange={this.handleChange}
|
||||||
disabled={!this.state.Allow}
|
disabled={!this.state.Enable}
|
||||||
/>
|
/>
|
||||||
<p className='help-text'>{'Enter <your-gitlab-url>/oauth/authorize (example http://localhost:3000/oauth/authorize). Make sure you use HTTP or HTTPS in your URLs as appropriate.'}</p>
|
<p className='help-text'>{'Enter <your-gitlab-url>/oauth/authorize (example http://localhost:3000/oauth/authorize). Make sure you use HTTP or HTTPS in your URLs as appropriate.'}</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -199,7 +199,7 @@ export default class GitLabSettings extends React.Component {
|
|||||||
placeholder='Ex ""'
|
placeholder='Ex ""'
|
||||||
defaultValue={this.props.config.GitLabSettings.TokenEndpoint}
|
defaultValue={this.props.config.GitLabSettings.TokenEndpoint}
|
||||||
onChange={this.handleChange}
|
onChange={this.handleChange}
|
||||||
disabled={!this.state.Allow}
|
disabled={!this.state.Enable}
|
||||||
/>
|
/>
|
||||||
<p className='help-text'>{'Enter <your-gitlab-url>/oauth/token. Make sure you use HTTP or HTTPS in your URLs as appropriate.'}</p>
|
<p className='help-text'>{'Enter <your-gitlab-url>/oauth/token. Make sure you use HTTP or HTTPS in your URLs as appropriate.'}</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -221,7 +221,7 @@ export default class GitLabSettings extends React.Component {
|
|||||||
placeholder='Ex ""'
|
placeholder='Ex ""'
|
||||||
defaultValue={this.props.config.GitLabSettings.UserApiEndpoint}
|
defaultValue={this.props.config.GitLabSettings.UserApiEndpoint}
|
||||||
onChange={this.handleChange}
|
onChange={this.handleChange}
|
||||||
disabled={!this.state.Allow}
|
disabled={!this.state.Enable}
|
||||||
/>
|
/>
|
||||||
<p className='help-text'>{'Enter <your-gitlab-url>/api/v3/user. Make sure you use HTTP or HTTPS in your URLs as appropriate.'}</p>
|
<p className='help-text'>{'Enter <your-gitlab-url>/api/v3/user. Make sure you use HTTP or HTTPS in your URLs as appropriate.'}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -388,7 +388,6 @@ export function toTitleCase(str) {
|
|||||||
export function applyTheme(theme) {
|
export function applyTheme(theme) {
|
||||||
if (theme.sidebarBg) {
|
if (theme.sidebarBg) {
|
||||||
changeCss('.sidebar--left', 'background:' + theme.sidebarBg, 1);
|
changeCss('.sidebar--left', 'background:' + theme.sidebarBg, 1);
|
||||||
changeCss('@media(max-width: 768px){.search-bar__container', 'background:' + theme.sidebarBg, 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (theme.sidebarText) {
|
if (theme.sidebarText) {
|
||||||
@@ -423,6 +422,7 @@ export function applyTheme(theme) {
|
|||||||
changeCss('.sidebar--left .team__header, .sidebar--menu .team__header', 'background:' + theme.sidebarHeaderBg, 1);
|
changeCss('.sidebar--left .team__header, .sidebar--menu .team__header', 'background:' + theme.sidebarHeaderBg, 1);
|
||||||
changeCss('.modal .modal-header', 'background:' + theme.sidebarHeaderBg, 1);
|
changeCss('.modal .modal-header', 'background:' + theme.sidebarHeaderBg, 1);
|
||||||
changeCss('#navbar .navbar-default', 'background:' + theme.sidebarHeaderBg, 1);
|
changeCss('#navbar .navbar-default', 'background:' + theme.sidebarHeaderBg, 1);
|
||||||
|
changeCss('@media(max-width: 768px){.search-bar__container', 'background:' + theme.sidebarHeaderBg, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (theme.sidebarHeaderTextColor) {
|
if (theme.sidebarHeaderTextColor) {
|
||||||
@@ -430,8 +430,9 @@ export function applyTheme(theme) {
|
|||||||
changeCss('.sidebar--left .team__header .user__name, .sidebar--menu .team__header .user__name', 'color:' + changeOpacity(theme.sidebarHeaderTextColor, 0.8), 1);
|
changeCss('.sidebar--left .team__header .user__name, .sidebar--menu .team__header .user__name', 'color:' + changeOpacity(theme.sidebarHeaderTextColor, 0.8), 1);
|
||||||
changeCss('.sidebar--left .team__header:hover .user__name, .sidebar--menu .team__header:hover .user__name', 'color:' + theme.sidebarHeaderTextColor, 1);
|
changeCss('.sidebar--left .team__header:hover .user__name, .sidebar--menu .team__header:hover .user__name', 'color:' + theme.sidebarHeaderTextColor, 1);
|
||||||
changeCss('.modal .modal-header .modal-title, .modal .modal-header .modal-title .name, .modal .modal-header button.close', 'color:' + theme.sidebarHeaderTextColor, 1);
|
changeCss('.modal .modal-header .modal-title, .modal .modal-header .modal-title .name, .modal .modal-header button.close', 'color:' + theme.sidebarHeaderTextColor, 1);
|
||||||
changeCss('#navbar .navbar-default .navbar-brand .heading, ', 'color:' + theme.sidebarHeaderTextColor, 1);
|
changeCss('#navbar .navbar-default .navbar-brand .heading', 'color:' + theme.sidebarHeaderTextColor, 1);
|
||||||
changeCss('#navbar .navbar-default .navbar-toggle .icon-bar, ', 'background:' + theme.sidebarHeaderTextColor, 1);
|
changeCss('#navbar .navbar-default .navbar-toggle .icon-bar, ', 'background:' + theme.sidebarHeaderTextColor, 1);
|
||||||
|
changeCss('@media(max-width: 768px){.search-bar__container', 'color:' + theme.sidebarHeaderTextColor, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (theme.onlineIndicator) {
|
if (theme.onlineIndicator) {
|
||||||
@@ -452,7 +453,6 @@ export function applyTheme(theme) {
|
|||||||
changeCss('.app__content, .markdown__table, .markdown__table tbody tr, .command-box', 'background:' + theme.centerChannelBg, 1);
|
changeCss('.app__content, .markdown__table, .markdown__table tbody tr, .command-box', 'background:' + theme.centerChannelBg, 1);
|
||||||
changeCss('#post-list .post-list-holder-by-time', 'background:' + theme.centerChannelBg, 1);
|
changeCss('#post-list .post-list-holder-by-time', 'background:' + theme.centerChannelBg, 1);
|
||||||
changeCss('#post-create', 'background:' + theme.centerChannelBg, 1);
|
changeCss('#post-create', 'background:' + theme.centerChannelBg, 1);
|
||||||
changeCss('.search-bar__container .search__form .search-bar', 'background:' + theme.centerChannelBg, 1);
|
|
||||||
changeCss('.date-separator .separator__text, .new-separator .separator__text', 'background:' + theme.centerChannelBg, 1);
|
changeCss('.date-separator .separator__text, .new-separator .separator__text', 'background:' + theme.centerChannelBg, 1);
|
||||||
changeCss('.post-image__column .post-image__details', 'background:' + theme.centerChannelBg, 1);
|
changeCss('.post-image__column .post-image__details', 'background:' + theme.centerChannelBg, 1);
|
||||||
changeCss('.sidebar--right', 'background:' + theme.centerChannelBg, 1);
|
changeCss('.sidebar--right', 'background:' + theme.centerChannelBg, 1);
|
||||||
@@ -475,7 +475,7 @@ export function applyTheme(theme) {
|
|||||||
changeCss('.post-image__column', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.2), 2);
|
changeCss('.post-image__column', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.2), 2);
|
||||||
changeCss('.post-image__column .post-image__details', 'color:' + theme.centerChannelColor, 2);
|
changeCss('.post-image__column .post-image__details', 'color:' + theme.centerChannelColor, 2);
|
||||||
changeCss('.post-image__column a, .post-image__column a:hover, .post-image__column a:focus', 'color:' + theme.centerChannelColor, 1);
|
changeCss('.post-image__column a, .post-image__column a:hover, .post-image__column a:focus', 'color:' + theme.centerChannelColor, 1);
|
||||||
changeCss('.search-bar__container .search__form .search-bar', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.2) + '; color: ' + theme.centerChannelColor, 2);
|
changeCss('.search-bar__container .search__form .search-bar', 'background:' + changeOpacity(theme.centerChannelColor, 0.2), 1);
|
||||||
changeCss('.search-bar__container .search__form', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.2), 1);
|
changeCss('.search-bar__container .search__form', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.2), 1);
|
||||||
changeCss('.channel-intro .channel-intro__content', 'background:' + changeOpacity(theme.centerChannelColor, 0.05), 1);
|
changeCss('.channel-intro .channel-intro__content', 'background:' + changeOpacity(theme.centerChannelColor, 0.05), 1);
|
||||||
changeCss('.date-separator .separator__text', 'color:' + theme.centerChannelColor, 2);
|
changeCss('.date-separator .separator__text', 'color:' + theme.centerChannelColor, 2);
|
||||||
@@ -512,7 +512,6 @@ export function applyTheme(theme) {
|
|||||||
changeCss('.btn.btn-primary', 'color:' + theme.buttonColor, 2);
|
changeCss('.btn.btn-primary', 'color:' + theme.buttonColor, 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function changeCss(className, classValue, classRepeat) {
|
export function changeCss(className, classValue, classRepeat) {
|
||||||
// we need invisible container to store additional css definitions
|
// we need invisible container to store additional css definitions
|
||||||
var cssMainContainer = $('#css-modifier-container');
|
var cssMainContainer = $('#css-modifier-container');
|
||||||
|
|||||||
@@ -553,13 +553,7 @@
|
|||||||
padding: 0 10px 0 31px;
|
padding: 0 10px 0 31px;
|
||||||
background: rgba(black, 0.2);
|
background: rgba(black, 0.2);
|
||||||
@include border-radius(3px);
|
@include border-radius(3px);
|
||||||
color: #fff;
|
color: inherit;
|
||||||
}
|
|
||||||
input[type=text] {
|
|
||||||
@include input-placeholder {
|
|
||||||
color: #fff;
|
|
||||||
color: rgba(#fff, 0.5);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,8 +32,7 @@
|
|||||||
top: 15px;
|
top: 15px;
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
color: #fff;
|
@include opacity(0.5);
|
||||||
color: rgba(#fff, 0.5);
|
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
.search__form {
|
.search__form {
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user