Как установить Rocket.Chat на Ubuntu 20.04 LTS с Let’s Encrypt SSL
Rocket.Chat — это чат-платформа с открытым исходным кодом, которую можно использовать как альтернативу Slack. Он поставляется с множеством функций, которые вы хотели бы иметь в своей автономной среде, например, видеоконференцсвязь, групповые чаты и интеграция с другими платформами.
- В этом руководстве мы обсудим, как установить сервер Rocket.Chat на Ubuntu 20.04 LTS с Let’s Encrypt.Для установки мы будем использовать следующее:
- Сервер Ubuntu 20.04 LTS
- Node.js
- MongoDB
- Веб-сервер Nginx
- SSL-сертификат Let’s Encrypt
- Доменное имя — в этом примере мы используем chat.infoit.com.ua
Шаг 1. Обновите систему Ubuntu
Обновите свою систему Ubuntu 20.04
sudo apt-get -y update
Шаг 2 — Установите необходимые зависимости пакета
Добавьте ключ подписи MongoDB GPG:
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
Добавить репозиторий MongoDB:
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
Настройте Node.js для установки через диспетчер пакетов Ubuntu:
sudo apt-get -y update && sudo apt-get install -y curl && curl -sL https://deb.nodesource.com/setup_12.x | sudo bash -
Установите Node.js, MongoDB, инструменты сборки и graphicsmagick:
sudo apt-get install -y build-essential mongodb-org nodejs graphicsmagick
Установка другой версии узла, отличной от установленной базовой версии, вызывает конфликт с Rocket.Chat в Ubuntu 20.04. Вам следует установить только ту версию, которая совпадает с базовой версией, или создать символическую ссылку на базовую версию. Чтобы проверить установленную версию:
$ node --version
Установите inherits і n.
sudo npm install -g inherits n
Создайте символическую ссылку для двоичного файла узла:
sudo ln -s /usr/bin/node /usr/local/bin/node
Шаг 3 — Установите Rocket.Chat в Ubuntu 20.04
Загрузите последнюю версию Rocket.Chat со следующими:
curl -L https://releases.rocket.chat/latest/download -o /tmp/rocket.chat.tgz
Распакуйте загруженный файл в /tmp
папку:
tar -xzf /tmp/rocket.chat.tgz -C /tmp
Установите Rocket.Chat в каталог по вашему выбору. В этом руководстве мы установим его в /opt
каталог
cd /tmp/bundle/programs/server && npm install
sudo mv /tmp/bundle /opt/Rocket.Chat
Шаг 4 — Создайте пользователя системы Rocketchat
Создайте пользователя rocketchat и назначьте право собственности на папку Rocket.Chat.
sudo useradd -M rocketchat && sudo usermod -L rocketchat
sudo chown -R rocketchat:rocketchat /opt/Rocket.Chat
После создания пользователя вы можете приступить к созданию службы.
Шаг 5 — Создайте сервис Rocket.Chat
Создайте файл служебной единицы Rocket.Chat.
cat << EOF |sudo tee /etc/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=rocketchat
Environment=MONGO_URL=mongodb://localhost:27017/rocketchat?replicaSet=rs01 MONGO_OPLOG_URL=mongodb://localhost:27017/local?replicaSet=rs01 ROOT_URL=http://localhost:3000/ PORT=3000
[Install]
WantedBy=multi-user.target
EOF
Настройте механизм хранения и репликацию для MongoDB, затем запустите службу MongoDB.
sudo sed -i "s/^# engine:/ engine: mmapv1/" /etc/mongod.conf
sudo sed -i "s/^#replication:/replication:\n replSetName: rs01/" /etc/mongod.conf
Запустить и включить службу MongoDB:
sudo systemctl enable mongod && sudo systemctl start mongod
Тест:
mongo --eval "printjson(rs.initiate())"
Запустите сервис Rocket.Chat:
sudo systemctl enable rocketchat && sudo systemctl start rocketchat
Проверьте, запущена ли служба:
$ systemctl status rocketchat
● rocketchat.service - The Rocket.Chat server
Loaded: loaded (/lib/systemd/system/rocketchat.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-11-27 10:05:54 UTC; 31s ago
Main PID: 28294 (node)
Tasks: 11 (limit: 19076)
Memory: 559.7M
CGroup: /system.slice/rocketchat.service
└─28294 /usr/local/bin/node /opt/Rocket.Chat/main.js
Nov 27 10:06:20 chat rocketchat[28294]: ➔ | MongoDB Version: 4.0.21 |
Nov 27 10:06:20 chat rocketchat[28294]: ➔ | MongoDB Engine: mmapv1 |
Nov 27 10:06:20 chat rocketchat[28294]: ➔ | Platform: linux |
Nov 27 10:06:20 chat rocketchat[28294]: ➔ | Process Port: 3000 |
Nov 27 10:06:20 chat rocketchat[28294]: ➔ | Site URL: http://0.0.0.0:3000/ |
Nov 27 10:06:20 chat rocketchat[28294]: ➔ | ReplicaSet OpLog: Enabled |
Nov 27 10:06:20 chat rocketchat[28294]: ➔ | Commit Hash: b471caf9c9 |
Nov 27 10:06:20 chat rocketchat[28294]: ➔ | Commit Branch: HEAD |
Nov 27 10:06:20 chat rocketchat[28294]: ➔ | |
Nov 27 10:06:20 chat rocketchat[28294]: ➔ +---------------------------------------------------+
Шаг 6 — Настройте обратный прокси Nginx
Настройте Nginx для работы в качестве обратного прокси. Мы также настроим Let’s Encrypt в том же файле конфигурации.
Установите веб-сервер Nginx:
sudo apt install nginx
Перед настройкой SSL используйте конфигурацию ниже для настройки обратного прокси.
sudo nano /etc/nginx/conf.d/rocketchat.conf
Файл будет иметь подобное содержимое:
upstream rocket_backend {
server 127.0.0.1:3000;
}
server {
listen 80;
server_name chat.infoit.com.ua;
access_log /var/log/nginx/rocketchat-access.log;
error_log /var/log/nginx/rocketchat-error.log;
location / {
proxy_pass http://rocket_backend/;
proxy_http_version 1.1;
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-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forward-Proto http;
proxy_set_header X-Nginx-Proxy true;
proxy_redirect off;
}
}
Где:
- rocket.example.com необходимо заменить на доменное имя.
Убедитесь, что конфигурация Nginx в порядке.
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Перезагрузите и включите службу Nginx.
sudo systemctl restart nginx
sudo systemctl enable nginx
Шаг 7 — Настройка Let’s Encrypt SSL
Скачайте и настройте Let’s Encrypt для SSL-сертификата.
sudo apt install certbot python3-certbot-nginx
Затем запустите certbot, чтобы получить сертификат SSL.
$ certbot --nginx
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: chat.infoit.com.ua
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for chat.infoit.com.ua
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/conf.d/chat.conf
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Redirecting all traffic on port 80 to ssl in /etc/nginx/conf.d/chat.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled
https://chat.infoit.com.ua
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=chat.infoit.com.ua
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/chat.infoit.com.ua/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/chat.infoit.com.ua/privkey.pem
Your cert will expire on 2021-02-26. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Окончательная конфигурация Nginx после SSL должна выглядеть так:
upstream rocket_backend {
server 127.0.0.1:3000;
}
server {
server_name chat.infoit.com.ua;
access_log /var/log/nginx/rocketchat-access.log;
error_log /var/log/nginx/rocketchat-error.log;
location / {
proxy_pass http://rocket_backend/;
proxy_http_version 1.1;
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-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forward-Proto http;
proxy_set_header X-Nginx-Proxy true;
proxy_redirect off;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/chat.infoit.com.ua/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/chat.infoit.com.ua/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = chat.infoit.com.ua) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name chat.infoit.com.ua;
return 404; # managed by Certbot
}
Убедитесь, что конфигурация Nginx в порядке.
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Перезагрузите и включите службу Nginx:
sudo systemctl restart nginx
Теперь ваш чат-сервер должен быть доступен через ваше полное доменное имя с https.
Настройте свой сервер с помощью мастера настройки:
После успешной настройки сервера доступ к сайту можно получить, используя учетные данные администратора, которые вы создали на предыдущем шаге.
Мы успешно установили Rocket.Chat на сервер Ubuntu 20.04 и настроили его.