Files
SecondBrain/90 Library/Programming/Ruby On Rails/Deploy - finreport-analyzer.md
T
2026-05-31 23:23:32 +03:00

5.0 KiB

title, status, type, tags, created, updated, source
title status type tags created updated source
Инструкция по деплою finreport-analyzer seed guide
programming
ruby-on-rails
deploy
linux
2026-05-31 2026-05-31 Инструкция по деплою finreport-analyzer.md

Инструкция по деплою finreport-analyzer

Заметка перенесена из входящих. Описывает процесс настройки сервера и деплоя приложения на Rails.

Сервер

  • Хост: finances-deploy (10.10.108.52, Debian, без systemd)
  • SSH: через ProxyJump dragon (10.102.179.132, user: gkkryuchkov)
  • Deploy user: deploy
  • Deploy path: /srv/finreport-analyzer
  • Ветка деплоя: migrate_rails_to8 (временно; в будущем master)

Первоначальная настройка сервера (один раз)

1. Пакеты

apt install git postgresql libpq-dev nginx nodejs supervisor

2. Пользователь deploy

adduser deploy
# добавить ~/.ssh/authorized_keys

3. Rbenv + Ruby

# от имени deploy
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
# добавить rbenv в PATH в ~/.bashrc
rbenv install 3.3.0
rbenv global 3.3.0
gem install bundler

4. PostgreSQL

sudo -u postgres createuser deploy
sudo -u postgres createdb finanalyzer_production -O deploy
sudo -u postgres psql -c "ALTER USER deploy WITH PASSWORD 'пароль';"

5. Директория деплоя

mkdir -p /srv/finreport-analyzer
chown deploy:deploy /srv/finreport-analyzer

6. Shared-файлы

mkdir -p /srv/finreport-analyzer/shared/config

# database.yml
cat > /srv/finreport-analyzer/shared/config/database.yml << 'EOF'
default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5

production:
  <<: *default
  url: <%= ENV["DATABASE_URL"] %>
EOF

# .env
cat > /srv/finreport-analyzer/shared/.env << 'EOF'
RAILS_ENV=production
DATABASE_URL=postgres://deploy:ПАРОЛЬ@localhost/finanalyzer_production
EOF

# credentials и master.key — скопировать с локальной машины:
# scp config/credentials.yml.enc finances-deploy:/srv/finreport-analyzer/shared/config/
# scp config/master.key finances-deploy:/srv/finreport-analyzer/shared/config/

7. Deploy key для GitLab

# на сервере от deploy:
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N ""
cat ~/.ssh/id_ed25519.pub
# добавить в [[Gitlab]]: Settings → Repository → Deploy keys

8. Sudoers

sudo visudo -f /etc/sudoers.d/deploy
deploy ALL=(ALL) NOPASSWD: /usr/bin/supervisorctl restart puma
deploy ALL=(ALL) NOPASSWD: /usr/bin/supervisorctl restart solid_queue
deploy ALL=(ALL) NOPASSWD: /usr/bin/supervisorctl start puma
deploy ALL=(ALL) NOPASSWD: /usr/bin/supervisorctl start solid_queue
deploy ALL=(ALL) NOPASSWD: /usr/bin/supervisorctl stop puma
deploy ALL=(ALL) NOPASSWD: /usr/bin/supervisorctl stop solid_queue
deploy ALL=(ALL) NOPASSWD: /usr/bin/supervisorctl reread
deploy ALL=(ALL) NOPASSWD: /usr/bin/supervisorctl update
deploy ALL=(ALL) NOPASSWD: /bin/mv /tmp/puma.conf /etc/supervisor/conf.d/puma.conf
deploy ALL=(ALL) NOPASSWD: /bin/mv /tmp/solid_queue.conf /etc/supervisor/conf.d/solid_queue.conf
deploy ALL=(ALL) NOPASSWD: /bin/mv /tmp/nginx.conf /etc/nginx/sites-available/finreport-analyzer
deploy ALL=(ALL) NOPASSWD: /usr/sbin/nginx -t
deploy ALL=(ALL) NOPASSWD: /usr/sbin/service nginx reload
deploy ALL=(ALL) NOPASSWD: /bin/ln -sf /etc/nginx/sites-available/finreport-analyzer /etc/nginx/sites-enabled/finreport-analyzer
deploy ALL=(ALL) NOPASSWD: /bin/rm -f /etc/nginx/sites-enabled/default

9. Supervisor и nginx (через Capistrano)

bundle exec cap production setup:supervisor
bundle exec cap production setup:nginx

Регулярный деплой

bundle exec cap production deploy

Подключение к серверу

ssh finances-deploy
# или с туннелем для браузера:
sudo ssh -L 80:localhost:80 -J gkkryuchkov@10.102.179.132 -i ~/.ssh/id_ed25519 deploy@10.10.108.52

Логи на сервере

tail -f /srv/finreport-analyzer/shared/log/puma.log
tail -f /srv/finreport-analyzer/shared/log/solid_queue.log
sudo supervisorctl status

Известные нюансы

  • force_ssl = false и assume_ssl = false — сервер работает по HTTP, SSL не настроен
  • Solid Queue supervisor конфиг: rake solid_queue:start (не rails solid_queue:start)
  • net-ssh не читает Include в ~/.ssh/config — ProxyJump задан явно в config/deploy/production.rb
  • HSTS-кэш браузера может мешать при тестировании через туннель — использовать инкогнито

Связи

  • Ruby On Rails - MOC
  • Capistrano deploy через systemd
  • Gitlab