Для проектов среднего и небольшого размера не всегда оправданно использовать AWS/Kubernetes подобную технологию. Для проектов нуждающихся в нескольких серверах отлично подходит Digital ocean. Который к тому же предоставляет средства вертикального скейлинга(увеличение производительной мощности уже существующих серверов).
Создаем сертификат под которым будем логинится на сервера нашего проекта (на локальной машине)
ssh-keygen -t rsa -b 4096 -f /Users/alex/.ssh/myproject_test -C "myproject comment"
Не забываем сделать его бекап
- Создаем новый Droplet (one-time password)
- Логинимся под рутом
- Создаем пользователя(
superuser) под которым мы в дальнейшем будем ходить по ssh
adduser superuser
Добавляем его в рутовую группу
usermod -aG sudo superuser
Добавляем публичный SSH ключ для superuser на удаленный сервер. И если в проекте несколько серверов, дабы не создавать сертификат для каждого, можем переиспользовать его на каждом из серверов. То есть проделываем данную процедуру для каждого сервера.
ssh-copy-id -i /Users/alex/.ssh/myproject_test.pub [email protected]
Теперь публичный ключ размещен на сервере в файле /home/superuser/.ssh/authorized_keys. Можем логинится через сертификат.
Обрати внимание логинимся через СЕКРЕТНЫЙ ключ, не публичный!
ssh -i /Users/alex/.ssh/myproject_test [email protected]
Заходим под рутом и в бой...
su
Задать FQDN серверу
nano /etc/hostname
mysuperdomain
nano /etc/hosts
127.0.1.1 mysuperdomain.com mysuperdomain
127.0.0.1 localhost
Мета данные сервера
hostnamectl
Установить свое имя сервера вместо имени DO
hostnamectl set-hostname my-server-name
Время
date --set hh:mm
nano /etc/ssh/sshd_config
- Запрещаем логинится по паролю
- Запрещаем руту ходить по ssh
- Меняем дефолтный ssh порт
PasswordAuthentication no
PermitRootLogin no
Port 2222
sudo service ssh restart
Загрузить и установить последние обновления системы
apt update && apt upgrade
reboot or systemctl reboot
Настраиваем локаль
Правим конфиг локалей
nano /etc/default/locale
LANGUAGE=en_US.UTF-8
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
LC_TYPE=en_US.UTF-8
Реконфигурируем локали (из списка выбираем en_US.utf8 и ru_RU.utf8, далее по умолчанию ставим en_US.utf8)
sudo dpkg-reconfigure locales
sudo reboot
Ставим необходимые утилиты
sudo apt install -y zsh htop git curl wget unzip zip mc iftop psmisc screen
Oh-my-zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
Zsh custom config
autoload -U +X bashcompinit && bashcompinit
alias ls='ls -FGA'
alias ll='ls -FGAhl'
alias x='clear'
alias rm='rm -i'
alias rmdir='rm -rfi'
alias cp='cp -i'
alias mv='mv -i'
PROMPT='${ret_status} %{$fg[cyan]%}%n::%m[%d]%{$reset_color%} $(git_prompt_info)'
RPROMPT='[%T]'
%m - hostname
# Keep 1000 lines of history within the shell and save it to ~/.zsh_history:
HISTSIZE=1000
SAVEHIST=1000
HISTFILE=~/.zsh_history
export PROMPT='%n@MY_SERVER_NAME >> %/> '
export RPROMPT='[%T]'
alias ls='ls -lpa'
alias x='clear'
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Включить автодополнение
autoload -U compinit promptinit
compinit
promptinit
# При совпадении первых букв слова вывести меню выбора
zstyle ':completion:*' menu select=long-list select=0
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
# Ignore Uppercase
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
bindkey "^[OB" down-line-or-search
bindkey "^[OC" forward-char
bindkey "^[OD" backward-char
bindkey "^[OF" end-of-line
bindkey "^[OH" beginning-of-line
bindkey "^[[1~" beginning-of-line
bindkey "^[[3~" delete-char
bindkey "^[[4~" end-of-line
bindkey "^[[5~" up-line-or-history
bindkey "^[[6~" down-line-or-history
bindkey "^?" backward-delete-char
#unpack
extract () {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xvjf $1 ;;
*.tar.gz) tar xvzf $1 ;;
*.tar.xz) tar xvfJ $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xvf $1 ;;
*.tbz2) tar xvjf $1 ;;
*.tgz) tar xvzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*) echo "'$1' cannot be extracted via >extract<" ;;
esac
else
echo "'$1' is not a valid file"
fi
}