Перед началом работы, не зависимо от ОС нужно закрыть доступ на ваш сервер от root-а и создать нового пользователя под которым будет осуществляться вход/деплой и другие операции.
Но первым делом лучше обновиться:
sudo apt update && sudo apt upgrade
Теперь можно создавать пользователя.
# создаём пользователя и отвечаем на вопросы, которые будут задаваться
adduser имя_пользователя
В некоторых дистрибутивах Linux не доступна команда adduser
.
Тогда используем более низкоуровневую команду:
# создаём пользователя, добавляем его в sudo и ставим bash оболочкой по-умолчанию
useradd --groups sudo --shell /bin/bash --create-home имя_пользователя
и задаём пароль для созданного пользователя:
passwd имя_пользователя
Тепереь нужно добавить созданного пользователя в sudo. Можно об этом почитать здесь.
adduser имя_пользователя sudo
Если не доступна команда adduser
, то можно сделать через visudo.
Для открытия файла /etc/sudoers вводим:
sudo visudo
нужно добавить строку имя_пользователя ALL=(ALL) ALL
и сохраниться.
На крайний случай можно сделать так:
echo 'имя_пользователя ALL=(ALL) ALL' >> /etc/sudoers
Теперь нужно выполнить базовые настройки безопасности, открываем sshd_config:
nano /etc/ssh/sshd_config
И меняем/добавляем строки:
- Отключить авторизацию от root-а заменив строку
PermitRootLogin yes
наPermitRootLogin no
- Разрешить подключение по ssh только созданному пользователю добавив/заменив строку
AllowUsers имя_пользователя
- Запретить использование файлов .rhosts добавив/заменив строку
IgnoreRhosts yes
- Запретить кросс-хостинговую аутентификацию (Host-Based Authentication) добавив/заменив строку
HostbasedAuthentication no
Если требуется более тонкая настройка безопасности, то можно почитать это.
Далее нужно рестартовать сервис ssh:
systemctl restart sshd
Так же рестарт сервиса ssh можно сделать командами service sshd restart
или /etc/init.d/sshd restart
в зависимости от ОС и какие команды доступны.
Выходим из под root-а и заходим под созданным пользователем.
Если не хочется каждый раз при подключении к серверу вводить пароль, то можно добавить на сервер свой ssh-ключ.
Для копирования ssh-ключ-а лучше использовать ssh-copy-id
(подробнее).
На локальном компьютере переходим в папку с ключами:
cd ~/.ssh
и содаём ключ для подключения к нашему серверу:
ssh-copy-id -i id_rsa.pub имя_пользователя@хост
Так же для безопасности лучше сменить права у папки где хранятся ssh-ключ-и. На сервере вводим:
sudo chmod -R 700 ~/.ssh
Если нужно полностью отключить вход по паролю (не рокомендуется) и оставить только вход по ssh-ключу, то:
# открываем файл
nano /etc/ssh/sshd_config
меняем строку PasswordAuthentication yes
на PasswordAuthentication no
и рестартуем ssh-сервис:
sudo systemctl restart sshd
В данном примере показывается настройка firewall-а ufw.
Если он не установлен (для проверки введите например sudo ufw status
), то устанавливаем:
sudo apt install ufw
Добавляем OpenSSH профиль в firewall:
sudo ufw allow 'OpenSSH'
Теперь нужно запустить firewall:
sudo ufw enable
Открываем файл с настройками времени:
sudo nano /etc/systemd/timesyncd.conf
В этом файле нужно добавить/раскомментировать:
[Time]
NTP=0.arch.pool.ntp.org 1.arch.pool.ntp.org 2.arch.pool.ntp.org 3.arch.pool.ntp.org
FallbackNTP=0.pool.ntp.org 1.pool.ntp.org 0.fr.pool.ntp.org
После выполнить:
sudo timedatectl set-ntp true
И проверить статус:
timedatectl status
Настройка времени через systemd-timesyncd доступна в относительно свежих дистрибутивах Linux (в тех где присутствует Systemd). В более старых придётся устанавливать ntpdate и настраивать через него.
Меняем тут:
sudo nano /etc/hostname
и тут:
sudo nano /etc/hosts
и рестартуем сервер:
sudo reboot
Для возможности использовать различные версии NODE.js нужно установить NVM.
Для установки потребуется cURL:
sudo apt install curl
Устанавливаем NVM:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
После установки NVM нужно обновить сессию, достаточно закрыть и открыть заново терминал.
И устанавливаем последнюю LTS-версию NODE.js:
nvm install --lts
sudo apt install nginx
На всякий случай разблокируем сервис nginx
sudo systemctl unmask nginx.service
Чтобы посмотреть для каких приложений установлен профиль:
sudo ufw app list
Добавлем профили nginx:
sudo ufw allow 'Nginx HTTPS'
sudo ufw allow 'Nginx HTTP'
sudo apt install software-properties-common && sudo add-apt-repository universe && sudo add-apt-repository ppa:certbot/certbot
sudo apt install certbot python3-certbot-nginx
Перед добавлением сертификата для доменов должен быть правильно настроен DNS. A/AAAA записи DNS-сервера должны содержать IP-адрес вашего сервера и только потом выполнить:
# можно сразу перечислить все домены
sudo certbot --nginx -d домен.com -d www.домен.com -d домен.ru -d www.домен.ru
после этого появится сгенерированный конфиг с именем default
в папке /etc/nginx/sites-available
,
но лучше его модифицировать под свои нужды.
Создать конфиг можно на сервисе nginxconfig.io.
Либо можно взять за основу конфиг в папке nginx.
Проверяем конфиг на наличие ошибок: sudo nginx -t
Перезагружаем NGINX: sudo systemctl reload nginx
Сертификаты Let’s Encrypt’s валидны всего 90 дней. Для автообновления сертификатов нужно выполнить:
sudo systemctl enable certbot.timer
Теперь добавляем рестарт NGINX-а после каждого обновления сертификатов:
# создаём файл с хуками, которые будут выполняться после каждого автообновления
sudo touch /etc/letsencrypt/renewal-hooks/post/reload-services.sh
и прописываем там:
#!/bin/sh
systemctl reload nginx
так же нужно установить права для хука:
chmod 750 /etc/letsencrypt/renewal-hooks/post/reload-services.sh
и стартуем сервис автообновления:
sudo systemctl start certbot.timer
расписание автообновлений можно посмотреть набрав systemctl list-timers certbot.timer
.
Если нужно вручную обновить сертификаты, то вводим:
sudo certbot renew --post-hook "systemctl reload nginx"
Настраиваем права для папки, где будут храниться сайты: sudo chown -R $USER:$USER /var/www
и создаём папку /var/www/домен/public
, в которую будем складывать статику для NGINX.
Установка MongoDB 4.2 Community Edition на Ubuntu 20 взята с официальной документации. Если нужно установить на другие ОС, то используем официальный tutorial.
Конфиг mongodb по умолчанию лежит в
/etc/mongod.conf
, для MacOS в/usr/local/etc/mongod.conf
Логи по умолчанию лежат в папке/var/log/mongodb
БД по умолчанию лежит в папке/var/lib/mongodb
# создаём папки для БД и арбитра
sudo mkdir /data && sudo mkdir /data/rs0 && sudo mkdir /data/rs1 && sudo mkdir /data/arbiter0
Меняем владельца на mongodb:mongodb от которой будет запускаться БД:
sudo chown -R mongodb:mongodb /data/
Генерируем keyFile для реплик (если Permission Denied, то из под root-а):
openssl rand -base64 756 > /etc/mongod.keyfile
chown mongodb:mongodb /etc/mongod.keyfile
chmod 400 /etc/mongod.keyfile
Заменяем конфиг /etc/mongod.conf
на mongod.conf и запускаем все серверы реплик:
sudo mongod --dbpath /data/rs0 --port 27017 --config /etc/mongod.conf --fork
sudo mongod --dbpath /data/rs1 --port 27018 --config /etc/mongod.conf --fork
sudo mongod --dbpath /data/arbiter0 --port 27019 --config /etc/mongod.conf --fork
Подключаемся к одному из серверов (только не к арбитру):
mongo --port 27017
и выполняем:
rs.initiate()
После добавляем остальные реплики:
rs.add('localhost:27018')
rs.addArb('localhost:27019')
Теперь нужно проверить, что репликация работает:
use test
db.users.insertOne({ first_name: 'John', last_name: 'Smith' })
подключаемся к реплике (можно в соседней вкладке):
mongo --port 27018
и выполняем:
rs.slaveOk()
use test
db.users.find()
Создание пользователей (нужно выполнять на master-е):
use admin
# создание основных пользователей, роль 'userAdminAnyDatabase' позволяет только создавать пользователей и назначать им роли
db.createUser({user: "admin", pwd: "пароль", roles: [{ role: "userAdminAnyDatabase", db: "admin" }]})
db.createUser({user: "root", pwd: "пароль", roles: [{ role: "root", db: "admin" }]})
# создание пользователя для вашей БД
db.createUser({user: "пользователь", pwd: "пароль", roles: [{ role: "readWrite", db: "имя_БД" }]})
Закрываем все серверы БД, но сначала нужно выключить арбитра!:
# подключаемся к арбитру
mongo --port 27019
use admin
db.shutdownServer()
# подключаемся к реплике №1
mongo --port 27017
use admin
db.shutdownServer()
# подключаемся к реплике №2
mongo --port 27018
use admin
db.shutdownServer()
В файле /etc/mongod.conf
нужно раскомментировать весь блок security
.
Настраиваем systemd для реплик:
Создаём/заменяем файл /lib/systemd/system/mongod.service
на mongod.service
sudo nano /lib/systemd/system/mongod.service
а так же копируем файлы mongod-rs0.service, mongod-rs1.service
и mongod-arbiter0.service в каталог /lib/systemd/system/
.
Перезапускаем демона systemd:
sudo systemctl daemon-reload
# запуск сервиса
sudo systemctl start mongod
# добавляем запуск сервера после перезагрузки системы
sudo systemctl enable mongod mongod-rs0 mongod-rs1 mongod-arbiter0
Рекомендуется к прочтению - установка и обеспечение безопасности Redis
sudo apt update
sudo apt install redis-server
Добавляем изменения в конфиг redis-а:
sudo nano /etc/redis/redis.conf
- заменить
supervised no
наsupervised systemd
. - убедиться, что есть
bind 127.0.0.1 ::1
- раскомментировать и заменить
requirepass foobared
наrequirepass пароль
И перезапускаем сервис:
sudo systemctl restart redis.service