What we have

  • Девственный Debian 9
  • Root-доступ
  • FTP-клиент (если очень хочется), FileZilla сойдет
  • Какая-нибудь консоль\шелл\терминал (это разные вещи, но мне впадлу вспоминать, что именно я хотел сказать). Короче, Bash или Cmder подойдут. Последний для Винды, в него кстати вроде бы вшит функционал Гита (но это не точно). В нём точно работает Ctrl+С / Ctrl+V, так что при смене пароля не перепечатывайте ручками ради бога. Можно поебаться и с базовым Cmd, но уж больно убого и неудобно

SSH

  • Заваливаемся через консоль на сервер
    ssh имя_пользователя(в_данном_случае_root)@ip_сервера
  • Вам расскажут за ключ ECDSA, попросят принять его и поменять пароль. Меняем минимум на 32-значный в формате base95
    • Энтропийный генератор в помощь. Может не открываться без VPN
    • Когда пароли печатаешь - их не видно. Ну вдруг вы не в курсе, дибилы
    • Если вдруг вывалится ОПАСНОЕ предупреждение о смене идентификации хоста, то просто сделайте то, что там предложено. Намекну: там просят либо подредактировать сохраненный ключ, либо удалить его нахуй. Предлагаю выбрать второе
    • Если вдруг пароль не предлагают поменять
      passwd
  • Чтобы закрыть соединение
    exit

Apt

  • Обновляемся
    apt-get update
    apt-get upgrade -y
  • Также пробуем обновить и систему
    apt-get dist-upgrade

Root is going нахуй (Part 1)

  • Пилим нового пользователя, потому что под рутом мы можем и обязательно натворим какой-нибудь хуйни. Пароль делаем НЕ такой как у рута, ленивый ты ублюдок. Требования к паролю всё те же. Остальные поля можно оставлять пустыми, если вы вдруг не знали
    adduser имя_нового_пользователя
  • Позволим новому пользователю творить непотребства
    adduser имя_нового_пользователя sudo
    или
    usermod -a -G sudo имя_нового_пользователя
  • Чтобы натворить хуйни (когда это нужно - вам скажут), перед командой добавляйте sudo. И с вас спросят ваш пароль
  • Ещё есть варик, что sudo не будет установлено (я не особо шарю, но интернеты так пишут). Если такое случится, то из под рута
    apt-get -y install sudo

Сделать ключника

  • Можно сделать так, что пароль при подключении не будут запрашивать, но так придется делать для каждого компа (если у вас больше одного рабочего)
  • В консоли компа (НЕ СЕРВЕРА)
    ssh-keygen
  • Нас спросят куда сгенерить ключик. Можно просто согласиться с дефолтом (но сука запомните его, он нам понадобится)
  • Также можно ебануть типа проверочную фразу. Если её не указывать, тогда подключение будет без пароля по ключу. Сама фраза ради пущей безопасности. По сути, тут уж как вам удобнее, но с фразой само собой безопаснее
  • Смотрим ключ в файле ~(имя_пользователя_компа)/.ssh/id_rsa.pub, копируем его полностью
  • Заходим на сервер под рутом
  • Переключаемся на нашего второго пользователя
    su - имя_нового_пользователя
  • Пилим папку и ограничиваем к ней доступ всем кроме себя
    mkdir .ssh
    chmod 700 .ssh
  • Открываем (можно создать, можно не создавать перед открытием) файл в консольном текстовом редакторе
    nano .ssh/authorized_keys
  • Вставляем туда ключ, который скопировали
  • Выходим из режима редактирования Ctrl+X
  • Говорим, что хотим сохранить изменения, нажатием Y
  • Подтверждаем имя файла для сохранения нажатием Enter
  • Выкуриваем сигаретку, принимаем успокоительные, запиваем алкоголем, пытаемся забыть консольный текстовый редактор
  • Всё то же самое можно было сделать через FTP-клиент, но так смешнее
  • Ограничиваем доступ к новому файлу
    chmod 600 .ssh/authorized_keys
  • Выходим из под нового пользователя
    exit
  • Выходим с сервера
    exit
  • Выходим из дома, дышим свежим воздухом
  • Теперь можно логиниться под новым пользователем без пароля (по ключу). Для другого компа придется повторить это всё дело заново

Root is going нахуй (Part 2)

Обезопасимся ещё немного

  • Заходим под новым пользователем на сервер
  • Открываем файл настроек SSH в нашем любимом текстовом редакторе
    sudo nano /etc/ssh/sshd_config
    и вводим пароль
  • Превращаем строку
    PermitRootLogin yes
    в
    PermitRootLogin no
    нажимаем
    Ctrl+X
    Y
    Enter
  • Перезапускаем SSH (вам ничего не ответят, если всё норм)
    sudo systemctl restart ssh

Всё, через рут больше не зайти

Nginx

Можно установить Nginx просто, можно сложно. Установим сложно, ведь так интереснее

  • Качаем ключ подписи пакета
    wget http://nginx.org/keys/nginx_signing.key
  • Добавляем этот ключ как публичный
    sudo apt-key add nginx_signing.key
  • Добавляем репозиторий в список источников
    echo "deb http://nginx.org/packages/debian/ stretch nginx" | sudo tee -a /etc/apt/sources.list
    echo "deb-src http://nginx.org/packages/debian/ stretch nginx" | sudo tee -a /etc/apt/sources.list
  • Обновляем и устанавливаем
    sudo apt-get update
    sudo apt-get -y install nginx
  • Самый смех, что можно было сделать только последний пункт (но я хз, мб это плохо или будет криво работать, лучше сделаем как говорят интернеты)
  • Запускаем эту приблуду
    sudo systemctl start nginx.service
  • И делаем, чтобы она сама запускалась при запуске системы
    sudo systemctl enable nginx.service
  • Для каждого домена (и субдомена) создаем папочки
    sudo mkdir -p /var/www/домен_или_субдомен
  • Присваиваем папки пользователю (сейчас они у рута)
    sudo chown -R имя_нового_пользователя:имя_нового_пользователя /var/www/домен_или_субдомен
  • Проверяем (или делаем), чтобы все могли читать из папки с папками доменов (и субодменов)
    sudo chmod 755 /var/www
  • Можете залить в эти папки с доменными именами какие-то сайты (или подобия хотя бы)
  • Далее ковыряем конфиги Nginx

Я не буду тут расписывать, как настраивать Nginx, тупо потому что не уверен, что делаю правильно. Плюс не знаю как правильно хранить конфиги. Сейчас я ебашу просто в отдельный конфиг-файл и закидываю в папку /etc/nginx/conf.d. Но я могу быть не прав, не повторяйте за мной. Я напишу потом как работать с этой поеболой и линкану сюда

Допустим, что вы всё такие сделали как я (ну вы и пидрилы). Создали конфиг и прописали его. Чтобы это было не зря, нужно перезапустить Nginx

  • Давай по новой, всё хуйня
    sudo systemctl restart nginx.service
  • По сути теперь всё должно работать

Учтите, что если хотите, чтобы сайты были доступны по доменным именам и их субдоменам, нужно будет добавить соответствующие записи. Потом содам мини-гайд и либо залинкую, либо пропишу прямо сюда

Node.js

Собственно какую ноду ставить - дело ваше. На сайте ноды есть все возможные способы установки. Версию тоже выбирайте сами. Я приведу свой пример с 10 версией (на данный момент последней)

  • Берем скрипт
    curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
  • И устанавливаем
    sudo apt-get install -y nodejs
  • Если ругается, что нет курла - ставим
    sudo apt-get install -y curl
  • Ещё (в будущем) могут понадобиться пакеты для сборки нативных аддонов
    sudo apt-get install -y build-essential

PM2

  • Это штука для запуска и поднимания упавших приложений на ноде
  • Не рекомендую (но и не не рекомендую), но сам использую именно его
  • Ставим
    sudo npm install -g pm2
  • И делаем, чтобы перезапускалась вместе с системой
    pm2 startup
  • Последней строкой вам скажут, что нужно запустить, чтобы всё работало. Копируете, вставляете, запускаете. Что-то типа этого
    sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u имя_нового_пользователя --hp /home/имя_нового_пользователя
  • Если вдруг захотите убрать PM2 из стартапа
    pm2 unstartup systemd
  • Как работать с PM2 разберетесь сами или ждите гайд - залинкую. Но обычно хватает
    pm2 help