ПримечаниеУстановку производить на чистую систему

Предустановка необходимых пакетов

Устанавливаем репозитарий EPEL

yum -y install epel-release
yum clean all
yum -y update

Устанавливаем MongoDB

cat <<EOF> /etc/yum.repos.d/mongodb.repo
[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1
EOF
yum -y install mongodb-org-server mongodb-org

systemctl enable mongod
systemctl start mongod

Устанавливаем необходимые пакеты

yum install -y nodejs curl GraphicsMagick npm gcc-c++ nginx

Настройка nginx

Сам чат работает на 3000 порту интерфейса обратной петли 127.0.0.1. Рекомендуем настроить связку с nginx.

Создаём самоподписанные сертификаты

mkdir /etc/nginx/cert
openssl req -x509 -nodes -days 3650 -newkey rsa:4096 \
    -keyout /etc/nginx/cert/rocket.key -out /etc/nginx/cert/rocket.crt \
    -subj '/C=RU/ST=Moscow/L=Moscow/CN=server.local'

Основной конфигурационный файл nginx

cat << EOF > /etc/nginx/nginx.conf
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '\$remote_addr - \$remote_user [\$time_local] "\$request" '
                      '\$status $body_bytes_sent "\$http_referer" '
                      '"\$http_user_agent" "\$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/rocket.conf;
}
EOF

Файл виртуального хоста

cat << EOF > /etc/nginx/conf.d/rocket.conf
upstream rocketbackend {
    server 127.0.0.1:3000;
}

server {
    listen 80 default;
    server_name server.local ;

    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2 default;
    server_name server.local ;

    ssl on;
    ssl_certificate /etc/nginx/cert/rocket.crt;
    ssl_certificate_key /etc/nginx/cert/rocket.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    location / {
        proxy_pass http://rocketbackend/;
        proxy_http_version 1.1;
        proxy_set_header Connection "upgrade";
        proxy_set_header Upgrade $http_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 http;
        proxy_set_header X-Nginx-Proxy true;

        proxy_redirect off;
    }
}
EOF

Настройка демона nginx

systemctl enable nginx
systemctl start nginx

Установка Rocket.Chat

cd /opt

curl -L https://releases.rocket.chat/latest/download -o rocket.chat.tgz
tar zxvf rocket.chat.tgz

mv bundle Rocket.Chat
cd Rocket.Chat/programs/server

npm install

cd ../..

Первый запуск Rocket.Chat

export ROOT_URL=http://server.local/
export MONGO_URL=mongodb://127.0.0.1:27017/rocketchat
export PORT=3000
export ADMIN_USERNAME=admin
export ADMIN_PASS=PASSWORD
export ADMIN_EMAIL=EMAIL

где:

  • PASSWORD — пароль пользователя admin
  • EMAIL — действущий почтовый адрес
node main.js

Настройка демона

cat << EOF > /usr/lib/systemd/system/rocketchat.service
[Unit]
Description=The Rocket.Chat server
After=network.target remote-fs.target nss-lookup.target nginx.target mongod.target

[Service]
ExecStart=/usr/local/bin/node /opt/Rocket.Chat/main.js
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=rocketchat
User=root
Environment=MONGO_URL=mongodb://127.0.0.1:27017/rocketchat ROOT_URL=https://server.local/ PORT=3000

[Install]
WantedBy=multi-user.target
EOF

Запуск Rocket.Chat

systemctl enable rocketchat
systemctl start rocketchat

Настройка firewall

firewall-offline-cmd --zone=public --add-service=http
firewall-offline-cmd --zone=public --add-service=https
firewall-offline-cmd --zone=public --add-service=ssh
firewall-offline-cmd --zone=public --add-port=3000/tcp

Комментарии

  1. Сергей

    Здравствуйте! Есть VM с Centos 7, из вне открыт только 3000 порт. Стоит задача поставить rocketchat с возможностью подключатся с мобильного клиента из внешней сети. Подскажите с настройками портов nginx и rocketchat, какие куда прописать. Так же, хотелось использовать доменное имя, я так понимаю его вписывать вместо server.local при создании сертификата и в настройках nginx?

  2. Dmitry Автор статьи

    Доменное имя необходимо указать вместо server.local. Если наружу открыт только 3000 порт, имеет смысл virtualhost nginx повесить на 3000 порт (вместо 80 и 443), а rocket.chat на любой другой свободный. Вы можете заказать виртуальный сервер с Rocket.Chat у нас, всё настроят наши специалисты.

  3. Сергей

    После смены портов 80 и 443 на 3000, nginx не стартует

  4. Dmitry Автор статьи

    Все правильно, потому что 3000 порт занял Rocket.Chat. Вам необходимо перевесить его на другой порт, к примеру на 8888 и изменить в конфиге nginx соответственно 127.0.0.1:8888.

  5. Сергей

    /usr/lib/systemd/system/rocketchat.service — изменил порты с 3000 на 8888 и в конфиге nginx — /etc/nginx/conf.d/rocket.conf, проблема осталась. Хотя, если в конфиге nginx не менять порт 80, а только 443, то он запускается.

  6. Dmitry Автор статьи

    Суть задачи — перевесить Rocket.Chat на порт 8888, nginx на порт 3000. В файлах изменить значения соответственно: 3000 -> 8888, 443 -> 3000. Перезапустить сервисы. Если сервисы не стартуют, необходимо анализировать логи на предмет ошибок, возможно что проблема где-то еще.

Добавить комментарий