-
Notifications
You must be signed in to change notification settings - Fork 0
Infrastructure
Я ещё не такой крутой, чтобы создавать полноценный скрипт на каком-нибудь Puppet, так что вот шпаргалка по настройке нового VDS:
-
useradd -m dusic- добавление нового пользователя -
sudo passwd dusic- установка пароля -
usermod -aG sudo dusic- выдача расширенных прав
-
nano /etc/ssh/sshd_config- конфигурация SSH- Переопределить опцию
Port. Например, на 2232 - Разрешить авторизацию по паролю:
AllowUsers dusic
- Переопределить опцию
-
sudo ufw allow 2232/tcp- открытие порта в фаерволе -
sudo ufw enable- включение фаервола -
sudo ufw reload- перезагрузка фаервола -
sudo service sshd restart- перезагрузка SSH сервера - На этом моменте следует переоткрыть сессию SSH на новом порту через нового пользователя
-
chsh -s /bin/bash- иногда требуется явно выставить командную оболочку -
sudo ufw deny 22/tcp- закрытие старого SSH порта -
sudo ufw reload- перезагрузка фаервола -
sudo ufw status verbose- можно посмотреть статус фаервола
-
mkdir ~/.ssh- создание директории -
touch ~/.ssh/authorized_keys- создание файла с доверенными клиентами
Локально:
-
cat ~/.ssh/id_rsa.pub | ssh dusic@$IP -p $PORT 'cat >> ~/.ssh/authorized_keys'- добавление ключа на сервер. На месте$IPи$PORTIP и порт (вау)
Теперь можно локально зайти на сервер как крутой: ssh dusic@$IP -p $PORT
А ещё можно локально настроить ~/.ssh/config и быть вообще крутым: ssh dusic-app-1
sudo apt install fail2ban- Конфигурация
sudo vim /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 2232
logpath = /var/log/auth.log
maxretry = 6
sudo service fail2ban restart-
sudo tail -n 1000 /var/log/fail2ban.log- лог
- Всё по гайду
- Возможно потребуется прогнать
source, который советует сам RVM -
rvm install 3.1.1- установка интерпретатора -
gem install bundler:2.3.8- установка Bundler -
gem install rake- установка Rake
- Всё по гайду, нужна 16-я версия
-
sudo npm install -g yarn- установка Yarn
Вообще говоря, можно просто закинуть бинарник собранный под данную систему, но пускай будет инструкция по сборке из исходников
- Установка Crystal по гайду
-
git clone https://github.com/fizvlad/mp3_to_dca-cr && cd mp3_to_dca-cr- исходники -
shards install- библиотеки -
sudo apt install libopus-dev- зависимость -
crystal build -s -t -p --release ./src/main.cr -o ./bin/mp3_to_dca- бинарник -
sudo ln -s $PWD/bin/mp3_to_dca /usr/local/bin/mp3_to_dca- симлинк на конвертер
sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dlsudo chmod a+rx /usr/local/bin/youtube-dl
- Добавить к
~/.bash_profileи/или~/.profileпеременную окружения:RAILS_ENV="production"; export RAILS_ENV
Этот шаг должен быть уже не нужен, учитывая, что репозиторий теперь публичный
-
ssh-keygen -t rsa -b 4096 -C "your@mail.ru" && cat ~/.ssh/id_rsa.pub- SSH ключ сервера, его надо добавить в настройки репозитория Github
-
sudo apt install libpq-dev- взаимодействие с Postgres -
sudo apt install ffmpeg- ffmpeg
- Создать Linux сервис, создав
/etc/systemd/system/puma.service:
[Unit]
Description=Puma HTTP Server for Dusic (production)
After=network.target
[Service]
Type=simple
User=dusic
Environment="RAILS_ENV=production" "RAILS_MAX_THREADS=8"
WorkingDirectory=/home/dusic/dusic/current
ExecStart=/home/dusic/.rvm/bin/rvm default do bundle exec puma -C /home/dusic/dusic/current/config/puma.rb -e production
ExecReload=/bin/kill -TSTP $MAINPID
ExecStop=/bin/kill -TERM $MAINPID
StandardOutput=append:/home/dusic/dusic/shared/log/puma_access.log
StandardError=append:/home/dusic/dusic/shared/log/puma_error.log
Restart=always
[Install]
WantedBy=multi-user.target
-
sudo systemctl daemon-reload- перезагрузка списка демонов - Разрешить перезагрузку сервиса без sudo, добавив
dusic ALL=(ALL) NOPASSWD: /bin/systemctl restart pumaв/etc/sudoers.d/dusic -
systemctl status puma- статус Puma -
sudo systemctl restart puma- перезагрузка Puma -
journalctl -u puma -f- логи Puma
- Всё по гайду
- Создать в БД роль
dusic - Создать в БД роль
blazer:
CREATE ROLE blazer LOGIN PASSWORD 'secret123';
GRANT CONNECT ON DATABASE dusic_production TO blazer;
GRANT USAGE ON SCHEMA public TO blazer;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO blazer;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO blazer;
-
RAILS_ENV=production rails db:prepare- создание БД
- Всё по гайду
sudo service nginx start- Корневой конфиг:
/etc/nginx/nginx.conf
-
sudo ufw allow 80/tcp- HTTP -
sudo ufw allow 443/tcp- HTTPS -
sudo ufw reload- перезагрузка фаервола
- Вот тут:
sudo vim /etc/nginx/conf.d/default.conf
server {
listen 80;
listen 443;
charset utf8;
root /home/dusic/dusic/current/public;
try_files $uri/index.html $uri @app;
location @app {
proxy_pass http://0.0.0.0:3000;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
}
error_page 500 502 503 504 /500.html;
}
-
sudo nginx -t- проверка корректности конфигурации -
sudo service nginx restart- перезагрузка nginx
sudo vim /etc/nginx/conf.d/default.conf
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
} # this is required to proxy Grafana Live WebSocket connections
server {
listen 80;
server_name dusic.fizvlad.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name dusic.fizvlad.com;
ssl_certificate /etc/letsencrypt/live/disic.xyz/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/disic.xyz/privkey.pem;
charset utf8;
root /home/dusic/dusic/current/public;
try_files $uri/index.html $uri @app;
location @app {
proxy_pass http://0.0.0.0:3000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Host $host;
}
location /ws {
proxy_pass http://0.0.0.0:3000/ws;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
location /grafana/ {
proxy_set_header Host $http_host;
proxy_pass http://185.98.87.66:3000/;
}
location /grafana/api/live/ {
rewrite ^/(.*) /$1 break;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $http_host;
proxy_pass http://185.98.87.66:3000/api/live/;
}
error_page 500 502 503 504 /500.html;
}
server {
listen 80;
server_name disic.xiz;
return 301 https://dusic.fizvlad.com$request_uri;
}
server {
listen 443 ssl;
server_name disic.xiz;
ssl_certificate /etc/letsencrypt/live/disic.xyz/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/disic.xyz/privkey.pem;
return 301 https://dusic.fizvlad.com$request_uri;
}
-
sudo nginx -t- проверка корректности конфигурации -
sudo service nginx restart- перезагрузка nginx -
sudo tail -f /var/log/nginx/access.log- лог обращений -
sudo tail -f /var/log/nginx/error.log- лог ошибок
Контекст: Иногда ВК начинает выбивать капчу на логине или на поиске. Лучший способ - создание интерфейса для её решения, либо подключение к какому-нибудь сервису решения капчи. Быстро можно решать, зайдя в ВК через прокси сервера с приложением. Проще всего использовать 3proxy
Примечание: Манипуляции под root-пользователем
-
wget https://github.com/z3APA3A/3proxy/archive/0.9.3.tar.gz- скачать исходники (можно и версии новее) tar -xvf 0.9.3.tar.gzcd 3proxy-0.9.3/-
sudo make -f Makefile.Linux- сбор пакета под Линукс sudo mkdir /etc/3proxysudo mkdir -p /var/log/3proxysudo cp bin/3proxy /usr/local/bin/-
sudo adduser --system --disabled-login --no-create-home --group proxy3- создание пользователя -
id proxy3- копируем ID пользователя (увидим что-то такое:uid=113(proxy3) gid=120(proxy3) groups=120(proxy3)) sudo chown proxy3:proxy3 -R /etc/3proxysudo chown proxy3:proxy3 /usr/local/bin/3proxysudo chown proxy3:proxy3 /var/log/3proxy-
sudo ufw allow 4545/tcp- заранее открываем порт sudo ufw reload
Вот тут: sudo vim /etc/3proxy/3proxy.cfg
# User and group
setgid 120
setuid 113
# Launch as daemon
daemon
# Logging
log /var/log/3proxy/3proxy.log D
logformat "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T"
# Allow all
allow * * * *
# Auth
auth strong
users "dusic:CL:complicatedPassword"
# DNS servers
nserver 8.8.8.8
nserver 77.88.8.8
nserver 127.0.0.53
# DNS cache
nscache 65536
# Port
proxy -p4545 -n -a
Вот тут: sudo vim /etc/systemd/system/3proxy.service
[Unit]
Description=3proxy Proxy Server
[Service]
Type=simple
ExecStart=/usr/local/bin/3proxy /etc/3proxy/3proxy.cfg
ExecStop=/bin/kill `/usr/bin/pgrep 3proxy`
RemainAfterExit=yes
Restart=on-failure
[Install]
WantedBy=multi-user.target
Запускаем нового демона:
sudo systemctl daemon-reload
sudo systemctl enable 3proxy
sudo systemctl start 3proxy