Встановлення Redmine на VPS для керування проєктами та відстеження завдань
TL;DR
У цьому детальному посібнику ми крок за кроком налаштуємо Redmine — потужну, гнучку та відкриту систему керування проєктами та відстеження завдань — на вашому власному VPS-сервері. Ви навчитеся готувати сервер, встановлювати всі необхідні компоненти (PostgreSQL, Ruby, Nginx, Puma), налаштовувати їх для спільної роботи, забезпечувати безпеку за допомогою HTTPS та організовувати регулярне резервне копіювання. У результаті ви отримаєте повністю контрольовану платформу для ефективного керування проєктами вашої команди.
- Повне встановлення Redmine 5.x на Ubuntu 24.04 LTS з використанням Nginx, Puma та PostgreSQL.
- Налаштування безпечного доступу через HTTPS за допомогою Certbot для безкоштовних SSL/TLS сертифікатів.
- Детальні інструкції з підготовки сервера, включно з налаштуванням SSH, фаєрвола та базових утиліт.
- Рекомендації щодо вибору оптимального VPS-конфігу та масштабування.
- Скрипти для автоматичного резервного копіювання бази даних та файлів Redmine.
- Розділ усунення типових проблем та поширених запитань.
Що ми налаштовуємо і навіщо
У цьому посібнику ми зосередимося на встановленні та налаштуванні Redmine — відкритої та гнучкої системи керування проєктами, заснованої на Ruby on Rails. Redmine надає широкий спектр функцій для команд будь-якого розміру: відстеження завдань (issue tracking), діаграми Ганта, календар, керування документами, форуми, вікі, керування часом, а також інтеграцію із системами контролю версій, такими як Git та Subversion.
Вибравши Redmine, ви отримаєте потужний інструмент для організації роботи, який допоможе вам:
- Централізувати керування проєктами: Усі завдання, документи, обговорення та плани будуть знаходитися в одному місці, доступному для всієї команди.
- Ефективно відстежувати завдання: Створюйте завдання, призначайте виконавців, встановлюйте пріоритети та терміни, відстежуйте прогрес та статуси.
- Покращити комунікацію: Використовуйте вбудовані форуми та вікі для обміну знаннями та обговорень щодо проєктів.
- Отримати повний контроль над даними: На відміну від хмарних рішень, ваші дані зберігаються на вашому VPS, забезпечуючи максимальну конфіденційність та безпеку.
- Гнучкість та кастомізація: Відкритий вихідний код Redmine дозволяє адаптувати його під унікальні потреби вашої команди, встановлювати плагіни та налаштовувати зовнішній вигляд.
Альтернативи: Cloud-Managed vs. Self-Hosted
На ринку існує безліч рішень для керування проєктами. Їх можна умовно розділити на дві категорії:
-
Хмарні (Cloud-Managed) сервіси: Це такі платформи, як Jira, Asana, Trello, Monday.com. Вони пропонують готове рішення "з коробки", що не вимагає від вас технічних знань з налаштування сервера. Ви просто реєструєтеся, сплачуєте щомісячну підписку та починаєте працювати.
- Плюси: Простота початку роботи, мінімальне адміністрування, підтримка від провайдера.
- Мінуси: Залежність від стороннього провайдера, відсутність повного контролю над даними, обмежені можливості кастомізації, потенційно вищі витрати в довгостроковій перспективі, особливо для великих команд.
-
Самостійно розміщувані (Self-Hosted) рішення на VPS: До них належать Redmine, GitLab, Mattermost, Nextcloud. Ви орендуєте VPS, встановлюєте та налаштовуєте ПЗ самостійно.
- Плюси: Повний контроль над даними та безпекою, високий ступінь кастомізації, часто нижчі довгострокові витрати, особливо якщо у вас вже є досвід адміністрування серверів.
- Мінуси: Потрібні технічні знання для встановлення та обслуговування, відповідальність за резервні копії та оновлення лежить на вас.
Вибір Redmine на VPS ідеальний для тих, хто цінує контроль, конфіденційність та хоче мати можливість тонкого налаштування системи під свої потреби, не бажаючи при цьому переплачувати за хмарні сервіси, особливо в міру зростання команди. Цей посібник допоможе вам освоїти всі необхідні кроки для успішного розгортання.
Який VPS-конфіг потрібен для цього завдання
Вибір правильного VPS-конфігу є ключовим для забезпечення стабільної та швидкої роботи Redmine. Вимоги можуть варіюватися залежно від розміру вашої команди, кількості проєктів, інтенсивності використання та обсягу збережених файлів.
Мінімальні вимоги для невеликої команди (до 10 користувачів)
- CPU: 2 ядра. Хоча Redmine може працювати і на 1 ядрі, 2 ядра забезпечать кращу чутливість, особливо при одночасній роботі кількох користувачів або виконанні ресурсоємних операцій (наприклад, генерації звітів або індексації).
- RAM: 4 ГБ. Ruby on Rails (на якому працює Redmine), база даних (PostgreSQL) та веб-сервер (Nginx + Puma) досить вимогливі до оперативної пам'яті. 4 ГБ — це комфортний мінімум для стабільної роботи.
- Диск: 80 ГБ SSD. SSD-накопичувачі значно прискорюють роботу бази даних та завантаження програми. 80 ГБ буде достатньо для операційної системи, Redmine, бази даних та деякого обсягу прикріплених файлів. Якщо ви плануєте зберігати багато файлів або використовувати Redmine для керування великою кількістю проєктів із зображеннями та документами, розгляньте 100-120 ГБ.
- Мережа: 100 Мбіт/с. Для більшості завдань цього буде достатньо. Якщо ви плануєте активно використовувати Redmine з великою кількістю користувачів, які працюють з великими файлами, розгляньте 1 Гбіт/с.
Рекомендований VPS-план для середніх команд (10-30 користувачів)
Для більш активного використання та команд середнього розміру варто розглянути такі характеристики:
- CPU: 4 ядра
- RAM: 8 ГБ
- Диск: 160 ГБ SSD
- Мережа: 1 Гбіт/с
Такий конфіг забезпечить відмінну продуктивність та запас міцності для зростання. Ви можете розглянути VPS із зазначеними характеристиками для оренди.
Коли потрібен Dedicated, а не VPS
Dedicated сервер (виділений сервер) стає кращим за VPS у таких випадках:
- Дуже великі команди (від 50+ користувачів) або високе навантаження на систему.
- Критично важливі проєкти, де потрібна максимальна продуктивність та мінімальні затримки.
- Вимоги до ізоляції: Якщо ви не хочете ділити ресурси з іншими користувачами на одному фізичному сервері.
- Особливі вимоги до безпеки або відповідності стандартам: Деякі регуляції можуть вимагати фізичної ізоляції.
- Планується запуск безлічі інших сервісів на тому ж сервері, крім Redmine.
Для таких сценаріїв підійде відповідний dedicated сервер, який надасть вам усі фізичні ресурси машини без віртуалізації.
Локація VPS: на що впливає
Вибір локації VPS-сервера важливий з кількох причин:
- Затримка (Latency): Чим ближче сервер до вашої команди та кінцевих користувачів, тим нижчою буде затримка та швидшою відповідь Redmine. Обирайте дата-центр, розташований географічно близько до основного місця роботи вашої команди.
- Законодавство про дані: У деяких юрисдикціях діють суворі закони про зберігання даних (наприклад, GDPR в Європі). Вибір локації сервера, що відповідає цим законам, може бути критично важливим.
- Доступність та надійність: Великі провайдери зазвичай мають дата-центри в різних регіонах з високою доступністю та надійністю мережевих каналів.
Враховуйте ці фактори при виборі провайдера та конкретного дата-центру для вашого VPS.
Підготовка сервера
Перед встановленням Redmine необхідно виконати базове налаштування та підготовку вашого VPS. Ми будемо використовувати Ubuntu Server 24.04 LTS як актуальну та стабільну операційну систему на 2026 рік.
1. Підключення до сервера та оновлення системи
Насамперед підключіться до вашого VPS через SSH, використовуючи облікові дані, надані провайдером. Зазвичай це користувач root та пароль.
ssh root@ВАШ_IP_АДРЕС
Після підключення оновіть список пакетів та встановіть усі доступні оновлення. Це забезпечить актуальність усіх компонентів та виправлення відомих вразливостей.
sudo apt update # Оновлення списку пакетів
sudo apt upgrade -y # Встановлення всіх доступних оновлень
2. Створення нового користувача з правами sudo
Робота під користувачем root небезпечна. Створіть нового користувача та надайте йому права sudo.
adduser redmineuser # Створення нового користувача з ім'ям redmineuser
usermod -aG sudo redmineuser # Додавання користувача до групи sudo
Встановіть надійний пароль для нового користувача, коли система запитає його. Після цього вийдіть із сесії root та увійдіть під новим користувачем.
exit # Вихід із сесії root
ssh redmineuser@ВАШ_IP_АДРЕС # Вхід під новим користувачем
3. Налаштування SSH-ключів (рекомендується)
Для підвищення безпеки та зручності рекомендується використовувати SSH-ключі замість паролів. Якщо у вас ще немає пари ключів, згенеруйте їх на локальній машині:
ssh-keygen -t rsa -b 4096 # Генерація нової пари SSH-ключів на локальній машині
Потім скопіюйте публічний ключ на ваш VPS:
ssh-copy-id redmineuser@ВАШ_IP_АДРЕС # Копіювання публічного ключа на сервер
Після цього ви можете відключити автентифікацію за паролем для SSH (редагуючи /etc/ssh/sshd_config: PasswordAuthentication no та перезапустивши sudo systemctl restart sshd), але робіть це лише переконавшись, що вхід за ключем працює.
4. Налаштування фаєрвола (UFW)
Встановіть та налаштуйте UFW (Uncomplicated Firewall) для обмеження доступу до сервера лише необхідними портами.
sudo apt install ufw -y # Встановлення UFW
sudo ufw allow OpenSSH # Дозволити SSH-підключення (порт 22)
sudo ufw allow http # Дозволити HTTP-трафік (порт 80)
sudo ufw allow https # Дозволити HTTPS-трафік (порт 443)
sudo ufw enable # Увімкнення фаєрвола
sudo ufw status # Перевірка статусу фаєрвола
Переконайтеся, що SSH дозволено, перш ніж вмикати фаєрвол, інакше ви можете втратити доступ до сервера.
5. Встановлення Fail2Ban
Fail2Ban допомагає захиститися від атак підбору паролів (brute-force) шляхом блокування IP-адрес, з яких надходить занадто багато невдалих спроб входу.
sudo apt install fail2ban -y # Встановлення Fail2Ban
sudo systemctl enable fail2ban # Увімкнення автозапуску Fail2Ban
sudo systemctl start fail2ban # Запуск Fail2Ban
Fail2Ban за замовчуванням захищає SSH. Для більш тонкого налаштування можна скопіювати файл конфігурації /etc/fail2ban/jail.conf до /etc/fail2ban/jail.local та внести зміни там.
6. Встановлення базових утиліт
Встановіть деякі корисні утиліти, які можуть знадобитися в процесі встановлення та адміністрування.
sudo apt install git curl wget htop build-essential -y # Встановлення Git, Curl, Wget, Htop та інструментів для збірки
Тепер ваш сервер підготовлений до встановлення Redmine та його компонентів.
Встановлення ПЗ — покроково
У цьому розділі ми встановимо все необхідне програмне забезпечення для запуску Redmine: базу даних PostgreSQL, середовище виконання Ruby, веб-сервер Nginx та сервер додатків Puma.
1. Встановлення PostgreSQL 16
Redmine добре працює з PostgreSQL. Встановимо актуальну версію.
sudo apt install postgresql postgresql-contrib -y # Встановлення PostgreSQL та додаткових утиліт
Створимо користувача бази даних і саму базу даних для Redmine. Замініть redmine_user та your_strong_password на свої значення.
sudo -u postgres psql -c "CREATE USER redmine_user WITH PASSWORD 'your_strong_password';" # Створення користувача БД
sudo -u postgres psql -c "CREATE DATABASE redmine_db OWNER redmine_user ENCODING 'UTF8';" # Створення бази даних
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE redmine_db TO redmine_user;" # Видача прав користувачу
2. Встановлення RVM для керування Ruby (альтернатива: rbenv)
Ми будемо використовувати RVM (Ruby Version Manager) для встановлення та керування версіями Ruby. Це дозволить легко встановити потрібну версію Ruby та уникнути конфліктів із системною версією.
sudo apt install software-properties-common gnupg2 -y # Встановлення залежностей для додавання репозиторіїв
gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB # Імпорт GPG ключів RVM
curl -sSL https://get.rvm.io | bash -s stable --ruby # Встановлення RVM та останньої стабільної версії Ruby
Після встановлення RVM необхідно завантажити його в поточну сесію. Вам може знадобитися вийти і знову увійти в SSH або виконати:
source /home/redmineuser/.rvm/scripts/rvm # Завантаження RVM у поточну сесію
rvm install ruby-3.4.0 # Встановлення Ruby 3.4.0 (актуальна на 2026 рік)
rvm use ruby-3.4.0 --default # Встановлення Ruby 3.4.0 як версії за замовчуванням
ruby -v # Перевірка встановленої версії Ruby
Встановіть Bundler — менеджер залежностей Ruby.
gem install bundler -v 2.5.1 # Встановлення Bundler версії 2.5.1
3. Завантаження Redmine
Створіть директорію для Redmine та завантажте останню стабільну версію (наприклад, 5.1.x або 5.2.x, актуальну на 2026 рік) з офіційного сайту або GitHub. Ми будемо використовувати /var/www/redmine.
sudo mkdir -p /var/www/redmine # Створення директорії для Redmine
sudo chown -R redmineuser:redmineuser /var/www/redmine # Зміна власника директорії
cd /var/www/redmine # Перехід у директорію Redmine
wget https://www.redmine.org/releases/redmine-5.1.2.tar.gz # Завантаження Redmine 5.1.2 (приклад)
tar -xvzf redmine-5.1.2.tar.gz # Розпакування архіву
mv redmine-5.1.2/ . # Переміщення вмісту в поточну директорію
rmdir redmine-5.1.2 # Видалення порожньої директорії
rm redmine-5.1.2.tar.gz # Видалення архіву
4. Встановлення залежностей Redmine
Перейдіть у директорію Redmine та встановіть усі необхідні геми (бібліотеки Ruby) за допомогою Bundler.
cd /var/www/redmine # Перехід у директорію Redmine
bundle install --without development test # Встановлення залежностей, виключаючи dev та test
Можливо, знадобиться встановити додаткові системні бібліотеки для деяких гемів:
sudo apt install libpq-dev libmagickwand-dev imagemagick -y # Встановлення залежностей для PostgreSQL та ImageMagick
Після встановлення цих залежностей, якщо bundle install завершився з помилками, спробуйте виконати його знову.
5. Налаштування бази даних Redmine
Скопіюйте приклад файлу конфігурації бази даних та відредагуйте його, вказавши дані вашої PostgreSQL бази.
cp config/database.yml.example config/database.yml # Копіювання файлу конфігурації
nano config/database.yml # Відкриття файлу для редагування
У файлі config/database.yml знайдіть секцію production: та приведіть її до наступного вигляду (замініть дані на свої):
production:
adapter: postgresql
database: redmine_db
host: localhost
username: redmine_user
password: "your_strong_password"
encoding: utf8
pool: 5
Збережіть та закрийте файл (Ctrl+X, Y, Enter).
6. Генерація секретного токена
Redmine вимагає секретний токен для захисту сесій та інших криптографічних операцій.
bundle exec rake generate_secret_token # Генерація секретного токена
7. Міграція бази даних та завантаження даних за замовчуванням
Виконайте міграції бази даних для створення всіх необхідних таблиць Redmine.
bundle exec rake db:migrate RAILS_ENV=production # Виконання міграцій бази даних
Завантажте дані за замовчуванням (мови, ролі, статуси завдань). Виберіть мову за замовчуванням (наприклад, ru для російської).
bundle exec rake redmine:load_default_data RAILS_ENV=production # Завантаження даних за замовчуванням
Коли система запитає мову, введіть ru та натисніть Enter.
8. Налаштування дозволів
Переконайтеся, що Redmine має необхідні дозволи для запису в директорії files, log та tmp.
sudo chown -R redmineuser:redmineuser files log tmp public/plugin_assets # Встановлення власника
chmod -R 755 files log tmp public/plugin_assets # Встановлення прав доступу
9. Тестовий запуск Puma
Для перевірки працездатності Redmine, запустіть його в режимі розробки за допомогою Puma.
bundle exec puma -e production -b tcp://127.0.0.1:3000 # Запуск Puma на порту 3000
Якщо все налаштовано правильно, ви побачите повідомлення про запуск Puma. Ви можете перевірити доступність Redmine з сервера за допомогою curl http://127.0.0.1:3000. Ви повинні побачити HTML-код сторінки. Натисніть Ctrl+C, щоб зупинити Puma. У наступному розділі ми налаштуємо його як системний сервіс.
Конфігурація
Після встановлення основних компонентів необхідно налаштувати їх для стабільної та безпечної роботи Redmine. Це включає налаштування Nginx як зворотного проксі, запуск Puma як системного сервісу та увімкнення HTTPS.
1. Налаштування Puma як системного сервісу (systemd)
Щоб Redmine запускався автоматично при старті сервера та працював у фоновому режимі, ми налаштуємо Puma як сервіс systemd.
Створіть файл сервісу для Puma:
sudo nano /etc/systemd/system/redmine.service # Створення нового файлу сервісу
Вставте наступний вміст, замінивши redmineuser на ім'я вашого користувача, а /var/www/redmine на шлях до вашої інсталяції Redmine:
[Unit]
Description=Puma HTTP Server for Redmine
After=network.target postgresql.service
[Service]
Type=simple
User=redmineuser
Group=redmineuser
WorkingDirectory=/var/www/redmine
Environment=RAILS_ENV=production
ExecStart=/home/redmineuser/.rvm/bin/rvm-auto-ruby bundle exec puma -C /var/www/redmine/config/puma.rb
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=15
RestartSec=2
Restart=on-failure
[Install]
WantedBy=multi-user.target
Збережіть та закрийте файл.
Тепер створіть файл конфігурації Puma config/puma.rb:
nano /var/www/redmine/config/puma.rb # Створення файлу конфігурації Puma
Вставте наступний вміст:
# config/puma.rb
# Замініть 'redmineuser' на ім'я вашого користувача
# Замініть '/var/www/redmine' на шлях до вашої інсталяції Redmine
workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['RAILS_MAX_THREADS'] || 5)
threads threads_count, threads_count
rackup DefaultRackup
port ENV['PORT'] || 3000
environment ENV['RACK_ENV'] || 'production'
pidfile "/var/www/redmine/tmp/pids/puma.pid"
state_path "/var/www/redmine/tmp/pids/puma.state"
stdout_redirect "/var/www/redmine/log/puma.stdout.log", "/var/www/redmine/log/puma.stderr.log", true
# On workers boot
on_worker_boot do
ActiveRecord::Base.establish_connection if defined?(ActiveRecord)
end
# Allow puma to be restarted by rails restart command.
plugin :tmp_restart
Збережіть та закрийте файл.
Перезавантажте systemd, увімкніть та запустіть сервіс Redmine:
sudo systemctl daemon-reload # Перезавантаження конфігурації systemd
sudo systemctl enable redmine.service # Увімкнення автозапуску сервісу Redmine
sudo systemctl start redmine.service # Запуск сервісу Redmine
sudo systemctl status redmine.service # Перевірка статусу сервісу
Переконайтеся, що сервіс запущено та він не містить помилок. Вивід має бути зеленим "active (running)".
2. Налаштування Nginx як зворотного проксі
Встановіть Nginx, якщо його ще не встановлено:
sudo apt install nginx -y # Встановлення Nginx
Створіть новий файл конфігурації Nginx для Redmine:
sudo nano /etc/nginx/sites-available/redmine.conf # Створення файлу конфігурації Nginx
Вставте наступний вміст, замінивши your_domain.com на ваш домен:
upstream redmine {
server unix:///var/www/redmine/tmp/sockets/puma.sock fail_timeout=0;
# Або, якщо Puma слухає TCP-порт:
# server 127.0.0.1:3000;
}
server {
listen 80;
server_name your_domain.com; # Замініть на ваш домен
return 301 https://$host$request_uri; # Перенаправлення HTTP на HTTPS
}
server {
listen 443 ssl http2;
server_name your_domain.com; # Замініть на ваш домен
ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem; # Буде створено Certbot
ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem; # Буде створено Certbot
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
root /var/www/redmine/public; # Шлях до public директорії Redmine
access_log /var/log/nginx/redmine_access.log;
error_log /var/log/nginx/redmine_error.log;
location / {
try_files $uri @redmine;
}
location @redmine {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://redmine; # Використовуємо upstream redmine
}
error_page 500 502 503 504 /500.html;
client_max_body_size 100M; # Максимальний розмір завантажуваних файлів
keepalive_timeout 10;
}
Збережіть та закрийте файл. Активуйте конфігурацію, створивши символічне посилання та видаливши стандартну:
sudo ln -s /etc/nginx/sites-available/redmine.conf /etc/nginx/sites-enabled/ # Створення символічного посилання
sudo rm /etc/nginx/sites-enabled/default # Видалення стандартної конфігурації Nginx
sudo nginx -t # Перевірка синтаксису конфігурації Nginx
sudo systemctl restart nginx # Перезапуск Nginx
Якщо Puma налаштований на сокет, то в config/puma.rb потрібно додати рядок bind "unix:///var/www/redmine/tmp/sockets/puma.sock" та переконатися, що директорія tmp/sockets існує і має потрібні права.
mkdir -p /var/www/redmine/tmp/sockets
chmod 777 /var/www/redmine/tmp/sockets # Тимчасово для тестування, пізніше можна обмежити
3. Налаштування TLS/HTTPS за допомогою Certbot
Настійно рекомендується використовувати HTTPS для захисту трафіку. Ми скористаємося Certbot для отримання безкоштовних SSL/TLS сертифікатів від Let's Encrypt.
sudo apt install certbot python3-certbot-nginx -y # Встановлення Certbot та плагіна для Nginx
sudo certbot --nginx -d your_domain.com # Отримання та встановлення сертифіката (замініть домен)
Certbot автоматично змінить вашу конфігурацію Nginx для використання HTTPS та налаштує автоматичне продовження сертифікатів. Дотримуйтесь інструкцій на екрані. Переконайтеся, що ваш домен вже вказує на IP-адресу вашого VPS.
4. Перевірка працездатності
Відкрийте ваш домен (https://your_domain.com) у браузері. Ви повинні побачити сторінку входу в Redmine. За замовчуванням ім'я користувача: admin, пароль: admin. Обов'язково змініть його при першому вході.
Ви також можете перевірити доступність за допомогою curl:
curl -I https://your_domain.com # Перевірка HTTP-заголовків
Переконайтеся, що статус HTTP 200 OK. Якщо виникли проблеми, перевірте логи Nginx (/var/log/nginx/error.log) та Puma/Redmine (/var/www/redmine/log/puma.stderr.log або /var/www/redmine/log/production.log).
Резервне копіювання та обслуговування
Регулярне резервне копіювання та своєчасне обслуговування є критично важливими для будь-якої production-системи, включно з Redmine. Це дозволить уникнути втрати даних та забезпечити стабільну роботу.
1. Що резервувати
Для повного відновлення Redmine вам знадобляться три основні компоненти:
- База даних Redmine: Містить усі завдання, проєкти, користувачів, налаштування та інші структуровані дані.
- Директорія
files: Зберігає всі прикріплені файли, зображення та документи, завантажені користувачами. - Файли конфігурації Redmine: Ключові файли, такі як
config/database.yml,config/configuration.yml(для налаштувань пошти та інших опцій) таconfig/initializers/secret_token.rb.
2. Простий скрипт авторезервного копіювання
Створимо простий Bash-скрипт, який виконуватиме резервне копіювання цих компонентів. Створіть директорію для резервних копій та сам скрипт.
sudo mkdir -p /var/backups/redmine # Створення директорії для зберігання резервних копій
sudo chown redmineuser:redmineuser /var/backups/redmine # Зміна власника
nano /home/redmineuser/redmine_backup.sh # Створення скрипта резервного копіювання
Вставте наступний вміст у скрипт, замінивши redmine_user, redmine_db, /var/www/redmine та /var/backups/redmine на свої значення.
#!/bin/bash
# Змінні
DB_USER="redmine_user"
DB_NAME="redmine_db"
REDMINE_ROOT="/var/www/redmine"
BACKUP_DIR="/var/backups/redmine"
TIMESTAMP=$(date +%Y%m%d%H%M%S)
# Створення директорії для поточної резервної копії
CURRENT_BACKUP_DIR="$BACKUP_DIR/$TIMESTAMP"
mkdir -p "$CURRENT_BACKUP_DIR"
echo "Починаємо резервне копіювання Redmine в $CURRENT_BACKUP_DIR..."
# 1. Резервне копіювання бази даних PostgreSQL
echo "Дамп бази даних..."
sudo -u postgres pg_dump -Fc "$DB_NAME" > "$CURRENT_BACKUP_DIR/redmine_db.dump"
if [ $? -eq 0 ]; then
echo "Дамп бази даних успішно створено."
else
echo "Помилка при створенні дампа бази даних."
fi
# 2. Резервне копіювання директорії files
echo "Копіювання файлів..."
rsync -a "$REDMINE_ROOT/files" "$CURRENT_BACKUP_DIR/"
if [ $? -eq 0 ]; then
echo "Файли успішно скопійовано."
else
echo "Помилка при копіюванні файлів."
fi
# 3. Копіювання файлів конфігурації
echo "Копіювання конфігураційних файлів..."
cp "$REDMINE_ROOT/config/database.yml" "$CURRENT_BACKUP_DIR/"
cp "$REDMINE_ROOT/config/configuration.yml" "$CURRENT_BACKUP_DIR/"
cp "$REDMINE_ROOT/config/initializers/secret_token.rb" "$CURRENT_BACKUP_DIR/"
if [ $? -eq 0 ]; then
echo "Конфігураційні файли успішно скопійовано."
else
echo "Помилка при копіюванні конфігураційних файлів."
fi
# 4. Видалення старих резервних копій (наприклад, старших за 7 днів)
echo "Видалення старих резервних копій (старших за 7 днів)..."
find "$BACKUP_DIR" -maxdepth 1 -mtime +7 -exec rm -rf {} \;
echo "Резервне копіювання завершено."
Зробіть скрипт виконуваним:
chmod +x /home/redmineuser/redmine_backup.sh # Робимо скрипт виконуваним
3. Налаштування Cron для автоматичного запуску резервного копіювання
Додайте скрипт до планувальника Cron, щоб він запускався автоматично, наприклад, щодня о 3:00 ночі.
crontab -e # Відкриття crontab для поточного користувача
Додайте наступний рядок у кінець файлу:
0 3 * * * /home/redmineuser/redmine_backup.sh >> /var/log/redmine_backup.log 2>&1
Цей рядок означає: "Щодня о 3 годині 0 хвилин запускати скрипт і перенаправляти його вивід у лог-файл".
4. Куди зберігати резервні копії
Зберігати резервні копії на тому ж сервері, що й робоча система, ризиковано. Якщо сервер вийде з ладу, ви втратите і систему, і резервні копії. Рекомендується використовувати зовнішні сховища:
- S3-сумісне сховище: Такі сервіси, як AWS S3, Backblaze B2, DigitalOcean Spaces. Ви можете використовувати утиліти типу
s3cmdабоrcloneдля автоматичного завантаження резервних копій. - Окремий VPS: Орендуйте невеликий VPS виключно для зберігання резервних копій та синхронізуйте їх туди по SSH/rsync.
- Локальний NAS/сервер: Якщо у вас є власна інфраструктура, можна налаштувати синхронізацію з нею.
Наприклад, для відправки на S3 можна додати в скрипт рядок, що використовує aws cli або rclone після створення локальної резервної копії.
5. Оновлення: Rolling vs. Maintenance Window
Підтримання Redmine та базового ПЗ в актуальному стані важливе для безпеки та отримання нових функцій.
-
Оновлення ОС та системних пакетів: Рекомендується застосовувати оновлення безпеки регулярно (раз на тиждень/місяць) у "вікно обслуговування" (maintenance window), коли навантаження на сервер мінімальне.
sudo apt update && sudo apt upgrade -y # Оновлення системних пакетів sudo apt autoremove -y # Видалення непотрібних пакетів - Оновлення Ruby: Оновлення Ruby мають бути ретельно протестовані, оскільки вони можуть вплинути на роботу Redmine. Використовуйте RVM для встановлення нової версії Ruby, протестуйте Redmine з нею, потім переключіться.
-
Оновлення Redmine:
- Завжди робіть повну резервну копію перед оновленням Redmine.
- Зупиніть сервіс Redmine (
sudo systemctl stop redmine.service). - Завантажте нову версію Redmine, розпакуйте її, скопіюйте файли (крім
files,config,plugins). - Оновіть геми (
bundle install --without development test). - Виконайте міграції бази даних (
bundle exec rake db:migrate RAILS_ENV=production). - Запустіть сервіс Redmine (
sudo systemctl start redmine.service).
Плануйте оновлення Redmine як окремі проєкти, бажано спочатку протестувавши їх на стейджинг-сервері.
Troubleshooting + FAQ
У цьому розділі зібрані відповіді на часто задавані питання та рішення типових проблем, які можуть виникнути при встановленні та експлуатації Redmine на VPS.
1. Redmine не запускається або видає помилку 502 Bad Gateway з Nginx. Що перевіряти?
Помилка 502 Bad Gateway зазвичай означає, що Nginx не може зв'язатися з бекенд-додатком (Puma). Це може бути викликано кількома причинами:
- Puma не запущено: Перевірте статус сервісу Puma:
sudo systemctl status redmine.service. Якщо він неактивний, подивіться логи Puma:journalctl -u redmine.serviceабо/var/www/redmine/log/puma.stderr.log. - Неправильна конфігурація Nginx: Переконайтеся, що
proxy_passу конфігурації Nginx вказує на правильну адресу/сокет Puma (наприклад,http://127.0.0.1:3000абоunix:///var/www/redmine/tmp/sockets/puma.sock). Перевірте синтаксис Nginx:sudo nginx -t. - Проблеми з дозволами: Переконайтеся, що користувач Nginx (зазвичай
www-data) має доступ до сокета Puma, якщо ви використовуєте сокет. - Проблеми з базою даних: Якщо Puma запускається, але відразу падає, можливо, Redmine не може підключитися до бази даних. Перевірте
config/database.ymlі переконайтеся, що PostgreSQL запущено (sudo systemctl status postgresql).
2. Як налаштувати відправку пошти з Redmine?
Для відправки сповіщень з Redmine (наприклад, про нові завдання або коментарі) необхідно налаштувати параметри SMTP. Відредагуйте файл config/configuration.yml (якщо його немає, скопіюйте configuration.yml.example):
# config/configuration.yml
default:
email_delivery:
delivery_method: :smtp
smtp_settings:
address: "smtp.your-email-provider.com" # Наприклад, smtp.mail.ru, smtp.gmail.com
port: 587 # Або 465 для SSL
authentication: :plain
domain: "your_domain.com" # Ваш домен
user_name: "noreply@your_domain.com" # Ваш email
password: "your_email_password" # Пароль від пошти
enable_starttls_auto: true
Після збереження файлу перезапустіть сервіс Redmine (Puma): sudo systemctl restart redmine.service. Перевірте відправку тестового листа в налаштуваннях Redmine (Адміністрування -> Налаштування -> Сповіщення електронною поштою).
3. Який VPS-конфіг мінімально підійде для Redmine?
Для Redmine та невеликої команди (до 10 користувачів) мінімально рекомендується VPS з 2 ядрами CPU, 4 ГБ оперативної пам'яті та 80 ГБ SSD-диска. Це забезпечить досить комфортну роботу без помітних затримок. Для більших команд або інтенсивного використання варто розглянути 4 ядра CPU та 8 ГБ RAM.
4. Що вибрати — VPS чи dedicated для цього завдання?
Для більшості сценаріїв використання Redmine (невеликі та середні команди, до 50 активних користувачів) VPS буде оптимальним та економічно вигідним рішенням. Dedicated сервер варто обирати, якщо у вас дуже велика команда, вкрай високе навантаження, суворі вимоги до продуктивності та ізоляції ресурсів, або якщо ви плануєте розміщувати безліч інших ресурсоємних сервісів на тому ж фізичному обладнанні.
5. Як оновити Redmine до нової версії?
Процес оновлення Redmine включає кілька кроків:
- Резервне копіювання: Зробіть повну резервну копію бази даних та директорії
files. - Зупинка Redmine:
sudo systemctl stop redmine.service. - Завантаження нової версії: Завантажте новий архів Redmine, розпакуйте його в нову директорію.
- Копіювання файлів: Скопіюйте ваші
config/database.yml,config/configuration.yml,config/initializers/secret_token.rb, а також директоріюfilesтаpluginsзі старої установки в нову. - Встановлення гемів: Перейдіть до нової директорії Redmine та виконайте
bundle install --without development test. - Міграція бази даних:
bundle exec rake db:migrate RAILS_ENV=production. - Запуск Redmine:
sudo systemctl start redmine.service.
Завжди читайте офіційні інструкції з оновлення для конкретної версії Redmine, оскільки можуть бути специфічні кроки.
6. Чому не відображаються зображення/файли або виникають помилки при їх завантаженні?
Ця проблема найчастіше пов'язана з неправильними правами доступу до директорії files або відсутністю ImageMagick. Перевірте наступне:
- Права доступу: Переконайтеся, що директорія
/var/www/redmine/filesта весь її вміст доступні для запису користувачем, під яким працює Puma (redmineuser) та Nginx (www-data). Виконайте:sudo chown -R redmineuser:redmineuser /var/www/redmine/filesтаsudo chmod -R 755 /var/www/redmine/files. - ImageMagick: Redmine використовує ImageMagick для обробки зображень (наприклад, для прев'ю). Переконайтеся, що його встановлено:
sudo apt install imagemagick libmagickwand-dev -y. - Розмір файлів: Перевірте
client_max_body_sizeу конфігурації Nginx. Якщо намагаєтеся завантажити файл більшого розміру, ніж дозволено, Nginx може відхилити запит.
7. Як змінити порт, на якому працює Puma?
За замовчуванням Puma прослуховує порт 3000. Щоб змінити його, відредагуйте файл /var/www/redmine/config/puma.rb та змініть рядок port ENV['PORT'] || 3000 на бажаний порт, наприклад: port 3001. Потім перезапустіть сервіс Redmine: sudo systemctl restart redmine.service. Не забудьте оновити конфігурацію Nginx, якщо ви використовуєте TCP-порт замість сокета.
Висновки та наступні кроки
Вітаємо! Ви успішно встановили та налаштували Redmine на вашому VPS, створивши надійну та повністю контрольовану платформу для управління проєктами та відстеження завдань. Тепер ваша команда може ефективно співпрацювати, відстежувати прогрес та досягати цілей, маючи повний контроль над своїми даними та інструментами.
Щоб максимально використати потенціал вашої нової системи, розгляньте наступні кроки:
- Інтеграція з системами контролю версій: Налаштуйте інтеграцію Redmine з вашими репозиторіями Git або SVN для автоматичного зв'язування комітів із завданнями та перегляду змін прямо з Redmine.
- Встановлення плагінів: Вивчіть обширну бібліотеку плагінів Redmine для розширення функціональності, такої як додаткові звіти, діаграми, інтеграції з іншими сервісами або покращення користувацького інтерфейсу.
- Моніторинг продуктивності: Впровадьте інструменти моніторингу (наприклад, Prometheus + Grafana) для відстеження завантаження сервера, використання пам'яті та диска, а також продуктивності самого Redmine, щоб своєчасно реагувати на потенційні проблеми.
Чи був цей гайд корисним?
Ваш відгук допомагає нам покращувати гайди.