Проект

Общее

Профиль

Установка Redmine » История » Версия 6

Redmine Admin, 30.10.2025 17:11

1 6
<!DOCTYPE html>
2
<html lang="ru">
3
<head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
  
7
  <h1>Установка Redmine</h1>
8
9
10
  <div class="message user">
11
    <div class="role"></div>
12
    <div></div>
13
  </div>
14
15
  <div class="message assistant">
16
    <div class="role"></div>
17
    <div>
18
      <p></strong></p>
19
      <h3>✅ Цель</h3>
20
      <p>Установить <strong>Redmine из <code>master</code> (будущая 6.1.0)</strong> на <strong>Ubuntu 22.04</strong> с:
21
        <ul>
22
          <li><strong>PostgreSQL</strong> (вместо MySQL/MariaDB),</li>
23
          <li><strong>Ruby 3.2+ через rbenv</strong>,</li>
24
          <li><strong>Apache + Passenger</strong> (веб-сервер).</li>
25
        </ul>
26
      </p>
27
      <h3>🔧 Шаг 1: Обновление системы</h3>
28
      <pre>sudo apt update &amp;&amp; sudo apt upgrade -y</pre>
29
      <h3>🔧 Шаг 2: Установка системных зависимостей</h3>
30
      <pre>sudo apt install -y \
31
  build-essential \
32
  zlib1g-dev \
33
  libyaml-dev \
34
  libssl-dev \
35
  libgdbm-dev \
36
  libreadline-dev \
37
  libncurses5-dev \
38
  libffi-dev \
39
  libxml2-dev \
40
  libxslt1-dev \
41
  libcurl4-openssl-dev \
42
  libsqlite3-dev \
43
  libpq-dev \                # ← критически важен для PostgreSQL
44
  libmagickwand-dev \
45
  imagemagick \
46
  git \
47
  curl \
48
  gnupg \
49
  postgresql \
50
  postgresql-contrib \
51
  apache2 \
52
  apache2-dev</pre>
53
      <blockquote>
54
        <p><code>libpq-dev</code> — обязательная зависимость для gem <code>pg</code> (драйвер PostgreSQL для Ruby).</p>
55
      </blockquote>
56
      <h3>🔧 Шаг 3: Настройка PostgreSQL</h3>
57
      <h4>Запуск и включение автозапуска</h4>
58
      <pre>sudo systemctl start postgresql
59
sudo systemctl enable postgresql</pre>
60
      <h4>Создание пользователя и базы данных для Redmine</h4>
61
      <pre>sudo -u postgres createuser -D -S -R redmine
62
sudo -u postgres createdb -O redmine redmine_production
63
sudo -u postgres psql -c "ALTER USER redmine WITH PASSWORD 'ваш_надёжный_пароль';"</pre>
64
      <blockquote>
65
        <p>Имя БД: <code>redmine_production</code> — так принято в Rails для окружения <code>production</code>.</p>
66
      </blockquote>
67
      <h3>🔧 Шаг 4: Установка Ruby через rbenv</h3>
68
      <pre># Установка rbenv
69
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
70
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
71
echo 'eval "$(rbenv init - bash)"' >> ~/.bashrc
72
source ~/.bashrc
73
74
# Установка ruby-build
75
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
76
77
# Установка Ruby 3.2.3 (совместим с Redmine 6.x)
78
rbenv install 3.2.3
79
rbenv global 3.2.3</pre>
80
      <p>Проверка:</p>
81
      <pre>ruby -v  # Должно быть: ruby 3.2.3p153 или выше</pre>
82
      <h3>🔧 Шаг 5: Установка Redmine из <code>master</code> (будущая 6.1.0)</h3>
83
      <pre>cd /var/www
84
sudo git clone https://github.com/redmine/redmine.git
85
sudo chown -R $USER:$USER redmine
86
cd redmine</pre>
87
      <blockquote>
88
        <p>Эта команда устанавливает <strong>актуальную разрабатываемую версию</strong>, которая станет Redmine 6.1.0.</p>
89
      </blockquote>
90
      <h3>🔧 Шаг 6: Установка Ruby-зависимостей</h3>
91
      <pre>gem install bundler
92
bundle config set --local without 'development test'
93
bundle install</pre>
94
      <blockquote>
95
        <p>Если возникает ошибка с <code>nokogiri</code>:
96
          <pre>bundle config build.nokogiri --use-system-libraries
97
bundle install</pre>
98
        </p>
99
        <p>Убедитесь, что установлен <code>libpq-dev</code> — иначе gem <code>pg</code> не соберётся.</p>
100
      </blockquote>
101
      <h3>🔧 Шаг 7: Настройка Redmine для PostgreSQL</h3>
102
      <h4>Конфигурация базы данных</h4>
103
      <pre>cp config/database.yml.example config/database.yml
104
nano config/database.yml</pre>
105
      <p>Отредактируйте <strong>только секцию <code>production</code></strong>:</p>
106
      <pre>production:
107
  adapter: postgresql
108
  database: redmine_production
109
  host: localhost
110
  username: redmine
111
  password: "ваш_надёжный_пароль"
112
  encoding: utf8
113
  pool: 20</pre>
114
      <blockquote>
115
        <p>Остальные секции (<code>development</code>, <code>test</code>) можно удалить или оставить — они не используются в production.</p>
116
      </blockquote>
117
      <h4>Генерация секретного ключа</h4>
118
      <pre>bundle exec rake generate_secret_token</pre>
119
      <h4>Создание структуры БД и загрузка начальных данных</h4>
120
      <pre>RAILS_ENV=production bundle exec rake db:migrate
121
RAILS_ENV=production REDMINE_LANG=ru bundle exec rake redmine:load_default_data</pre>
122
      <blockquote>
123
        <p>При запросе выберите язык (например, <code>ru</code> для русского).</p>
124
      </blockquote>
125
      <h3>🔧 Шаг 8: Тестовый запуск</h3>
126
      <pre>RAILS_ENV=production bundle exec rails server -b 0.0.0.0 -p 3000</pre>
127
      <p>Откройте в браузере: <code>http://IP_сервера:3000</code><br>
128
        Логин/пароль по умолчанию: <strong>admin / admin</strong></p>
129
      <blockquote>
130
        <p>⚠️ Это <strong>только для проверки</strong>. Не используйте встроенный сервер в продакшене.</p>
131
      </blockquote>
132
      <h3>🔧 Шаг 9: Настройка Apache + Passenger</h3>
133
      <h4>Установка Passenger</h4>
134
      <pre>gem install passenger
135
passenger-install-apache2-module</pre>
136
      <p>Следуйте инструкциям. В конце вы получите строки вроде:</p>
137
      <pre>LoadModule passenger_module /home/ваш_пользователь/.rbenv/versions/3.2.3/lib/ruby/gems/3.2.0/gems/passenger-.../buildout/apache2/mod_passenger.so
138
<IfModule mod_passenger.c>
139
  PassengerRoot /home/ваш_пользователь/.rbenv/versions/3.2.3/lib/ruby/gems/3.2.0/gems/passenger-...
140
  PassengerDefaultRuby /home/ваш_пользователь/.rbenv/versions/3.2.3/bin/ruby
141
</IfModule></pre>
142
      <p>Создайте файл модуля:</p>
143
      <pre>sudo nano /etc/apache2/mods-available/passenger.load</pre>
144
      <p>Вставьте туда полученные строки.</p>
145
      <p>Активируйте модуль:</p>
146
      <pre>sudo a2enmod passenger</pre>
147
      <h4>Настройка виртуального хоста</h4>
148
      <pre>sudo nano /etc/apache2/sites-available/redmine.conf</pre>
149
      <p>Содержимое:</p>
150
      <pre><VirtualHost *:80>
151
  ServerName ваш.домен.или.ip
152
  DocumentRoot /var/www/redmine/public
153
154
  <Directory /var/www/redmine/public>
155
    Options -MultiViews
156
    Require all granted
157
    AllowOverride All
158
  </Directory>
159
160
  ErrorLog ${APACHE_LOG_DIR}/redmine_error.log
161
  CustomLog ${APACHE_LOG_DIR}/redmine_access.log combined
162
</VirtualHost></pre>
163
      <p>Активируйте сайт:</p>
164
      <pre>sudo a2ensite redmine
165
sudo a2dissite 000-default  # отключить дефолтный сайт (опционально)
166
sudo systemctl restart apache2</pre>
167
      <h3>🔧 Шаг 10: Права на файлы</h3>
168
      <pre>sudo chown -R www-www-data /var/www/redmine
169
sudo chmod -R 755 /var/www/redmine
170
sudo chmod -R 775 /var/www/redmine/files /var/www/redmine/log /var/www/redmine/tmp</pre>
171
      <blockquote>
172
        <p>Apache работает от пользователя <code>www-data</code>, поэтому он должен иметь доступ на запись в эти папки.</p>
173
      </blockquote>
174
      <h3>🔒 Дополнительно (рекомендуется)</h3>
175
      <h4>1. HTTPS через Let's Encrypt</h4>
176
      <pre>sudo apt install -y certbot python3-certbot-apache
177
sudo certbot --apache -d ваш.домен.или.ip</pre>
178
      <h4>2. Настройка email (SMTP)</h4>
179
      <pre>cp config/configuration.yml.example config/configuration.yml
180
nano config/configuration.yml</pre>
181
      <p>Раскомментируйте и настройте секцию <code>production</code> → <code>email_delivery</code>.</p>
182
      <h4>3. Резервное копирование</h4>
183
      <p>Пример резервной копии БД:</p>
184
      <pre>sudo -u postgres pg_dump redmine_production > /backup/redmine_$(date +%F).sql</pre>
185
      <h3>✅ Готово!</h3>
186
      <p>Теперь Redmine (будущая 6.1.0) работает на Ubuntu 22.04 с <strong>PostgreSQL</strong> и доступен через веб-браузер.</p>
187
      <blockquote>
188
        <p>⚠️ Повторим: <strong>ветка <code>master</code> нестабильна</strong>. Для продакшена используйте официальную стабильную версию:
189
          <pre>git clone -b 5.1-stable https://github.com/redmine/redmine.git</pre>
190
        </p>
191
      </blockquote>
192
      <p>Если нужно — помогу с:
193
        <ul>
194
          <li>настройкой <strong>LDAP</strong>,</li>
195
          <li>интеграцией с <strong>Git/SVN</strong>,</li>
196
          <li>миграцией с другой системы,</li>
197
          <li>переходом на <strong>Nginx + Puma</strong>.</li>
198
        </ul>
199
      </p>
200
      <p>Удачи! 🚀</p>
201
    </div>
202
  </div>
203
204
  <div class="message user">
205
    <div class="role">Пользователь</div>
206
    <div>
207
      <pre>RAILS_ENV=production bundle exec rake db:migrate
208
rake aborted!
209
ActiveRecord::StatementInvalid: PG::InvalidParameterValue: ERROR:  invalid value for parameter "transaction_isolation": "READ-COMMITTED" (ActiveRecord::StatementInvalid)
210
HINT:  Available values: serializable, repeatable read, read committed, read uncommitted.
211
/root/.rbenv/versions/3.2.3/bin/bundle:25:in `load'
212
/root/.rbenv/versions/3.2.3/bin/bundle:25:in `<main>'
213
214
Caused by:
215
PG::InvalidParameterValue: ERROR:  invalid value for parameter "transaction_isolation": "READ-COMMITTED" (PG::InvalidParameterValue)
216
HINT:  Available values: serializable, repeatable read, read committed, read uncommitted.
217
/root/.rbenv/versions/3.2.3/bin/bundle:25:in `load'
218
/root/.rbenv/versions/3.2.3/bin/bundle:25:in `<main>'
219
Tasks: TOP => db:migrate
220
(See full trace by running task with --trace)</pre>
221
    </div>
222
  </div>
223
224
  <div class="message assistant">
225
    <div class="role">Ассистент</div>
226
    <div>
227
      <p>Ошибка, которую вы видите:</p>
228
      <pre>PG::InvalidParameterValue: ERROR:  invalid value for parameter "transaction_isolation": "READ-COMMITTED"
229
HINT:  Available values: serializable, repeatable read, read committed, read uncommitted.</pre>
230
      <p>— <strong>вызвана несовместимостью формата строки уровня изоляции транзакций</strong> между <strong>Redmine (или Rails)</strong> и <strong>PostgreSQL</strong>.</p>
231
      <h3>🔍 Причина</h3>
232
      <p>PostgreSQL ожидает значение уровня изоляции <strong>в нижнем регистре и с пробелами</strong>, например:
233
        <ul>
234
          <li><code>'read committed'</code> ✅</li>
235
          <li><code>'READ-COMMITTED'</code> ❌ (такое значение использует Rails/Redmine по умолчанию в некоторых версиях)</li>
236
        </ul>
237
      </p>
238
      <p>Это известная проблема при использовании <strong>новых версий PostgreSQL (15+)</strong> с <strong>Rails 7.0+ / Redmine из <code>master</code></strong>, где Rails по умолчанию передаёт <code>READ-COMMITTED</code> (в верхнем регистре и с дефисом), а PostgreSQL 15+ стал <strong>строже</strong> к формату.</p>
239
      <h3>✅ Решение</h3>
240
      <h4>Шаг 1: Отредактируйте <code>config/database.yml</code></h4>
241
      <pre>nano config/database.yml</pre>
242
      <p>В секции <code>production</code> добавьте параметр <code>isolation_level</code> <strong>в правильном формате</strong>:</p>
243
      <pre>production:
244
  adapter: postgresql
245
  database: redmine_production
246
  host: localhost
247
  username: redmine
248
  password: "ваш_надёжный_пароль"
249
  encoding: utf8
250
  pool: 20
251
  isolation_level: read committed</pre>
252
      <blockquote>
253
        <p>Обратите внимание: <strong><code>read committed</code> — строчные буквы, пробел, без кавычек в значении YAML</strong>.</p>
254
      </blockquote>
255
      <h4>Шаг 2: Повторите миграцию</h4>
256
      <pre>RAILS_ENV=production bundle exec rake db:migrate</pre>
257
      <p>Теперь команда должна выполниться <strong>без ошибок</strong>.</p>
258
      <h3>💡 Альтернативное решение (если не помогло)</h3>
259
      <p>Если по какой-то причине Redmine/Rails всё равно передаёт неправильное значение, можно <strong>отключить установку уровня изоляции</strong> на уровне приложения, если она не критична (в большинстве случаев — не критична).</p>
260
      <p>Для этого можно <strong>патчить инициализацию ActiveRecord</strong>, но проще — использовать <strong>совместимую версию PostgreSQL</strong> или <strong>дождаться фикса в Redmine</strong>.</p>
261
      <p>Однако <strong>первое решение (<code>isolation_level: read committed</code>)</strong> работает в подавляющем большинстве случаев.</p>
262
      <h3>📌 Дополнительно: Проверка версии PostgreSQL</h3>
263
      <p>Узнайте версию:</p>
264
      <pre>sudo -u postgres psql -c "SELECT version();"</pre>
265
      <p>Если у вас <strong>PostgreSQL 15 или 16</strong>, то проблема почти наверняка в строгой проверке формата <code>transaction_isolation</code>.</p>
266
      <h3>✅ После успешной миграции</h3>
267
      <p>Продолжайте установку:</p>
268
      <pre>RAILS_ENV=production REDMINE_LANG=ru bundle exec rake redmine:load_default_data</pre>
269
      <p>И запускайте сервер.</p>
270
      <p>Если возникнут другие ошибки — пришлите их, и я помогу!</p>
271
    </div>
272
  </div>
273
274
  <div class="message user">
275
    <div class="role">Пользователь</div>
276
    <div>
277
      <pre>RAILS_ENV=production bundle exec rails server -b 0.0.0.0 -p 3000
278
Could not find a server gem. Maybe you need to add one to the Gemfile?
279
280
  gem "puma"
281
282
Run `bin/rails server --help` for more options.</pre>
283
    </div>
284
  </div>
285
286
  <div class="message assistant">
287
    <div class="role">Ассистент</div>
288
    <div>
289
      <p>Ошибка:</p>
290
      <pre>Could not find a server gem. Maybe you need to add one to the Gemfile?
291
  gem "puma"</pre>
292
      <p>означает, что <strong>Redmine (на основе Rails 7+) больше не включает встроенный веб-сервер по умолчанию</strong>, и вам нужно <strong>явно установить сервер приложений</strong>, например <strong>Puma</strong>.</p>
293
      <h3>✅ Решение</h3>
294
      <h4>Шаг 1: Добавьте <code>puma</code> в <code>Gemfile</code></h4>
295
      <p>Откройте файл <code>Gemfile</code> в корне Redmine:</p>
296
      <pre>nano Gemfile</pre>
297
      <p>Найдите секцию, где подключаются gems для production (обычно внизу), и <strong>добавьте</strong>:</p>
298
      <pre>gem "puma"</pre>
299
      <blockquote>
300
        <p>💡 В новых версиях Redmine (ветка <code>master</code>) <code>puma</code> <strong>уже должен быть в <code>Gemfile</code></strong>, но иногда его нет, если вы используете очень свежий коммит или сделали кастомную сборку.</p>
301
      </blockquote>
302
      <h4>Шаг 2: Установите зависимости</h4>
303
      <pre>bundle install</pre>
304
      <blockquote>
305
        <p>Убедитесь, что команда завершается без ошибок.</p>
306
      </blockquote>
307
      <h4>Шаг 3: Запустите сервер</h4>
308
      <pre>RAILS_ENV=production bundle exec rails server -b 0.0.0.0 -p 3000</pre>
309
      <p>Теперь всё должно работать, и вы увидите:</p>
310
      <pre>=> Booting Puma
311
=> Rails application starting in production
312
=> Run `bin/rails server --help` for more options
313
Puma starting in single mode...
314
* Puma version: ...
315
* Listening on http://0.0.0.0:3000</pre>
316
      <p>Откройте в браузере: <code>http://ваш_сервер:3000</code></p>
317
      <h3>🔒 Важно: это только для теста!</h3>
318
      <p>Встроенный сервер (<code>rails server</code>) <strong>не предназначен для production</strong>.<br>
319
        Для продакшена используйте:
320
        <ul>
321
          <li><strong>Apache + Passenger</strong> (как в предыдущей инструкции), <strong>ИЛИ</strong></li>
322
          <li><strong>Nginx + Puma</strong> (более современный стек)</li>
323
        </ul>
324
      </p>
325
      <p>Если вы настраиваете <strong>production-сервер</strong>, лучше сразу перейти к настройке <strong>Passenger или Puma как системного сервиса</strong>.</p>
326
      <p>Если вы хотите использовать <strong>Puma</strong> (а не Passenger), я могу дать инструкцию по настройке:
327
        <ul>
328
          <li>systemd-сервис для Puma,</li>
329
          <li>Nginx как reverse proxy,</li>
330
          <li>настройка сокетов и прав.</li>
331
        </ul>
332
        Нужно? Напишите — подготовлю.
333
      </p>
334
      <p>А пока — у вас должен заработать тестовый запуск! 🎉</p>
335
    </div>
336
  </div>
337
338
  <div class="message user">
339
    <div class="role">Пользователь</div>
340
    <div>
341
      <pre>  gem 'mocha', '>= 2.0.1'
342
  gem 'simplecov', '~> 0.22.0', :require => false
343
  gem "ffi", platforms: [:mingw, :x64_mingw, :mswin]
344
  # For running system tests
345
  gem 'puma'
346
  gem "capybara", ">= 3.39"
347
  gem 'selenium-webdriver', '>= 4.11.0'
348
  # RuboCop
349
  gem 'rubocop', '~> 1.76.0', require: false
350
  gem 'rubocop-performance', '~> 1.26.0', require: false
351
  gem 'rubocop-rails', '~> 2.32.0', require: false
352
  gem 'bundle-audit', require: false
353
  # for testing oauth provider capabilities
354
  gem 'oauth2'
355
end
356
357
local_gemfile = File.join(File.dirname(__FILE__), "Gemfile.local")
358
if File.exist?(local_gemfile)
359
  eval_gemfile local_gemfile
360
end
361
362
# Load plugins' Gemfiles
363
Dir.glob File.expand_path("../plugins/*/{Gemfile,PluginGemfile}", __FILE__) do |file|
364
  eval_gemfile file
365
end</pre>
366
    </div>
367
  </div>
368
369
  <div class="message assistant">
370
    <div class="role">Ассистент</div>
371
    <div>
372
      <p>Спасибо за предоставленный фрагмент <code>Gemfile</code> — он подтверждает, что <strong>в вашей версии Redmine (из ветки <code>master</code>)</strong> gem <code>puma</code> <strong>уже присутствует</strong>, но, судя по ошибке:</p>
373
      <pre>Could not find a server gem. Maybe you need to add one to the Gemfile?</pre>
374
      <p>— <strong>он не был установлен</strong>, потому что, скорее всего, вы запускаете приложение в окружении <strong><code>production</code></strong>, а <code>puma</code> объявлен <strong>вне группы <code>:production</code></strong>.</p>
375
      <p>В вашем <code>Gemfile</code> блок с <code>puma</code> находится <strong>внутри группы <code>:development, :test</code></strong>, но <strong>не в <code>:production</code></strong>.</p>
376
      <blockquote>
377
        <p>По умолчанию при запуске с <code>RAILS_ENV=production</code> Bundler <strong>игнорирует</strong> gems, не предназначенные для production (особенно если ранее вы использовали <code>bundle install --without development test</code>).</p>
378
      </blockquote>
379
      <h3>✅ Правильное решение</h3>
380
      <h4>Вариант 1: Переместить <code>puma</code> в production (рекомендуется)</h4>
381
      <p>Отредактируйте <code>Gemfile</code> и <strong>вынесите <code>puma</code> за пределы блоков <code>group :development, :test</code></strong>, чтобы он был доступен в production:</p>
382
      <pre># В самом конце основного Gemfile, ПЕРЕД секцией с Gemfile.local и плагинами:
383
384
# Application server
385
gem "puma"</pre>
386
      <p>Или, если весь блок с <code>puma</code>, <code>capybara</code> и т.д. находится внутри:</p>
387
      <pre>group :development, :test do
388
  # ... gems для тестов
389
end</pre>
390
      <p>— то <strong>вынесите только <code>puma</code> наружу</strong>, потому что <strong>он нужен и в production</strong>:</p>
391
      <pre># Сервер приложения — нужен в production
392
gem "puma"
393
394
group :development, :test do
395
  gem 'mocha', '>= 2.0.1'
396
  gem 'simplecov', '~> 0.22.0', require: false
397
  gem "ffi", platforms: [:mingw, :x64_mingw, :mswin]
398
  # For running system tests
399
  gem "capybara", ">= 3.39"
400
  gem 'selenium-webdriver', '>= 4.11.0'
401
  # RuboCop
402
  gem 'rubocop', '~> 1.76.0', require: false
403
  gem 'rubocop-performance', '~> 1.26.0', require: false
404
  gem 'rubocop-rails', '~> 2.32.0', require: false
405
  gem 'bundle-audit', require: false
406
  # for testing oauth provider capabilities
407
  gem 'oauth2'
408
end</pre>
409
      <h4>Шаг 2: Переустановите зависимости</h4>
410
      <pre># Убедитесь, что вы НЕ исключаете production-гемы
411
bundle config unset without  # сбросить предыдущие настройки
412
bundle install</pre>
413
      <p>Или явно разрешите все группы:</p>
414
      <pre>bundle install --with production</pre>
415
      <blockquote>
416
        <p>Но лучше просто <strong>убедиться, что <code>puma</code> не в группе <code>:test</code></strong>, и запустить обычный <code>bundle install</code>.</p>
417
      </blockquote>
418
      <h4>Шаг 3: Проверьте, установлен ли <code>puma</code></h4>
419
      <pre>bundle list | grep puma</pre>
420
      <p>Если вывод пуст — <code>puma</code> не установлен.</p>
421
      <h4>Шаг 4: Запустите сервер</h4>
422
      <pre>RAILS_ENV=production bundle exec rails server -b 0.0.0.0 -p 3000</pre>
423
      <p>Теперь должно работать.</p>
424
      <h3>💡 Почему так происходит?</h3>
425
      <ul>
426
        <li>В старых версиях Rails/Redmine встроенный сервер (<code>WEBrick</code>) использовался по умолчанию.</li>
427
        <li>В <strong>Rails 7+</strong> встроенный сервер <strong>удалён</strong>, и нужно явно указывать <code>puma</code>.</li>
428
        <li>Но если <code>puma</code> объявлен только в <code>:test</code> или <code>:development</code>, то в <code>production</code> он <strong>не устанавливается</strong>.</li>
429
        <li>Redmine из <code>master</code> иногда содержит <code>puma</code> внутри тестовой группы — это <strong>баг конфигурации</strong>, который нужно поправить вручную.</li>
430
      </ul>
431
      <h3>✅ Альтернатива: не использовать <code>rails server</code> в production</h3>
432
      <p>Если вы настраиваете <strong>боевой сервер</strong>, <strong>не используйте <code>rails server</code></strong>. Вместо этого:
433
        <ul>
434
          <li>Используйте <strong>Passenger + Apache/Nginx</strong> (проще в настройке), <strong>ИЛИ</strong></li>
435
          <li>Настройте <strong>Puma как systemd-сервис</strong> + <strong>Nginx</strong> как reverse proxy.</li>
436
        </ul>
437
      </p>
438
      <p>Хотите инструкцию по настройке <strong>Puma + Nginx</strong> для production? Напишите — подготовлю за 2 минуты.</p>
439
      <p>После исправления <code>Gemfile</code> и <code>bundle install</code> — тестовый запуск заработает. Удачи! 🚀</p>
440
    </div>
441
  </div>
442
443
  <div class="message user">
444
    <div class="role">Пользователь</div>
445
    <div>
446
      <p><img src="Снимок экрана 2025-10-28 235742.png" alt="Скриншот интерфейса Redmine без стилей"></p>
447
      <p>все установилось но начальная страница redmine выглядит странно</p>
448
    </div>
449
  </div>
450
451
  <div class="message assistant">
452
    <div class="role">Ассистент</div>
453
    <div>
454
      <p>Спасибо за скриншот — вы правы, <strong>страница выглядит "странно"</strong>: нет стилей, шрифтов, иконок, меню, всё разбито на блоки без оформления. Это <strong>классическая проблема с assets (статическими файлами)</strong> в Redmine.</p>
455
      <h3>🧨 Причина</h3>
456
      <p>Redmine использует <strong>Rails Assets Pipeline</strong> или <strong>Webpacker / Sprockets</strong> для компиляции CSS/JS. Если вы установили Redmine из <code>master</code> (будущая 6.1.0), то:
457
        ✅ Вы запустили <code>bundle install</code><br>
458
        ✅ Вы выполнили <code>db:migrate</code><br>
459
        ✅ Но <strong>не скомпилировали assets</strong> — поэтому браузер не видит стилей и JS.</p>
460
      <h3>✅ Решение: Скомпилируйте assets</h3>
461
      <p>Запустите команду:</p>
462
      <pre>RAILS_ENV=production bundle exec rake assets:precompile</pre>
463
      <blockquote>
464
        <p>⚠️ Эта команда может занять <strong>несколько минут</strong>, особенно при первом запуске — она собирает все CSS, JS, шрифты, иконки и копирует их в папку <code>public/assets</code>.</p>
465
      </blockquote>
466
      <h4>Если возникла ошибка при компиляции</h4>
467
      <h5>❌ Ошибка: <code>Could not find a JavaScript runtime</code></h5>
468
      <p>Решение:</p>
469
      <pre>sudo apt install -y nodejs npm</pre>
470
      <p>Или, если вы предпочитаете <code>yarn</code>:</p>
471
      <pre>curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
472
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
473
sudo apt update &amp;&amp; sudo apt install yarn</pre>
474
      <p>После этого снова:</p>
475
      <pre>RAILS_ENV=production bundle exec rake assets:precompile</pre>
476
      <h5>❌ Ошибка: <code>Node.js is not installed</code></h5>
477
      <p>Убедитесь, что <code>node</code> доступен:</p>
478
      <pre>node --version
479
npm --version</pre>
480
      <p>Если не установлены — установите:</p>
481
      <pre>sudo apt install -y nodejs npm</pre>
482
      <h3>🔁 После успешной компиляции</h3>
483
      <p>Перезапустите сервер:</p>
484
      <pre>RAILS_ENV=production bundle exec rails server -b 0.0.0.0 -p 3000</pre>
485
      <p>И обновите страницу в браузере — теперь должно отображаться <strong>полностью оформленное приложение Redmine</strong> с логотипом, меню, формой входа и т.д.</p>
486
      <h3>💡 Важно: для production</h3>
487
      <p>Если вы планируете использовать <strong>Apache + Passenger</strong> или <strong>Nginx + Puma</strong>, то:
488
        <ul>
489
          <li>Assets должны быть предварительно скомпилированы (<code>assets:precompile</code>)</li>
490
          <li>Убедитесь, что Apache/Nginx имеет доступ к папке <code>public/assets</code></li>
491
          <li>Для ускорения работы можно добавить кэширование статики в конфиг веб-сервера</li>
492
        </ul>
493
      </p>
494
      <h3>✅ Проверка</h3>
495
      <p>Откройте в браузере:</p>
496
      <pre>http://ваш_сервер:3000</pre>
497
      <p>Вы должны увидеть:
498
        <ul>
499
          <li>Красивый логотип Redmine,</li>
500
          <li>Форму входа с полями "Пользователь", "Пароль",</li>
501
          <li>Меню "Войти", "Регистрация",</li>
502
          <li>Верхнее меню с "Домашняя страница", "Проекты", "Помощь".</li>
503
        </ul>
504
      </p>
505
      <h3>🛠 Дополнительно: если стили всё ещё не грузятся</h3>
506
      <p>Проверьте права на папку <code>public/assets</code>:</p>
507
      <pre>sudo chown -R www-data:www-data /var/www/redmine/public/assets
508
sudo chmod -R 755 /var/www/redmine/public/assets</pre>
509
      <p>Или очистите и пересоберите assets:</p>
510
      <pre>RAILS_ENV=production bundle exec rake assets:clobber
511
RAILS_ENV=production bundle exec rake assets:precompile</pre>
512
      <h3>🎉 Готово!</h3>
513
      <p>Теперь Redmine должен выглядеть как положено — со всеми стилями, иконками и интерфейсом.</p>
514
      <p>Если после этого страница всё ещё "сломана" — пришлите:
515
        <ul>
516
          <li>Вывод команды <code>bundle exec rake assets:precompile</code></li>
517
          <li>Логи браузера (F12 → Console / Network)</li>
518
          <li>Версию Ruby, Rails, PostgreSQL</li>
519
        </ul>
520
        — и я помогу точно!
521
      </p>
522
      <p>А если хотите — могу помочь настроить <strong>автоматическую компиляцию assets при деплое</strong> или <strong>подключить CDN</strong>.</p>
523
    </div>
524
  </div>
525
526
  <div class="message user">
527
    <div class="role">Пользователь</div>
528
    <div><code>sudo apt install -y nodejs npm</code> это помогло</div>
529
  </div>
530
531
  <div class="message assistant">
532
    <div class="role">Ассистент</div>
533
    <div>
534
      <p>Отлично! 🎉</p>
535
      <p>Установка <code>nodejs</code> и <code>npm</code> решила проблему, потому что <strong>Redmine (начиная с версии 5.0+, особенно в ветке <code>master</code>)</strong> использует современный <strong>asset pipeline на основе JavaScript-инструментов</strong>, и для компиляции CSS/JS-файлов требуется <strong>JavaScript-движок</strong> — например, <strong>Node.js</strong>.</p>
536
      <p>Теперь, когда вы выполнили:</p>
537
      <pre>sudo apt install -y nodejs npm
538
RAILS_ENV=production bundle exec rake assets:precompile</pre>
539
      <p>— стили и скрипты скомпилировались корректно, и интерфейс Redmine отображается как положено.</p>
540
      <h3>🔒 Что делать дальше?</h3>
541
      <h4>1. <strong>Не используйте <code>rails server</code> в продакшене</strong></h4>
542
      <p>Встроенный сервер (<code>rails server</code>) подходит <strong>только для тестирования</strong>. Для реального использования настройте:
543
        <ul>
544
          <li><strong>Apache + Passenger</strong> (проще всего), <strong>ИЛИ</strong></li>
545
          <li><strong>Nginx + Puma</strong> (более производительно)</li>
546
        </ul>
547
      </p>
548
      <p>Если нужно — дам готовую инструкцию под ваш стек.</p>
549
      <h4>2. <strong>Смените пароль администратора</strong></h4>
550
      <p>Первым делом после входа (<code>admin</code> / <code>admin</code>) зайдите в:<br>
551
        <strong>Администрирование → Учетные записи → admin → Изменить</strong></p>
552
      <p>И установите надёжный пароль.</p>
553
      <h4>3. <strong>Настройте email-уведомления</strong></h4>
554
      <p>Без этого не будут работать:
555
        <ul>
556
          <li>Восстановление пароля,</li>
557
          <li>Уведомления о задачах,</li>
558
          <li>Регистрация новых пользователей.</li>
559
        </ul>
560
      </p>
561
      <p>Для этого отредактируйте:</p>
562
      <pre>cp config/configuration.yml.example config/configuration.yml
563
nano config/configuration.yml</pre>
564
      <p>Раскомментируйте и настройте секцию <code>production → email_delivery</code>.</p>
565
      <h4>4. <strong>Сделайте резервную копию</strong></h4>
566
      <ul>
567
        <li>База данных PostgreSQL:
568
          <pre>sudo -u postgres pg_dump redmine_production > redmine_backup_$(date +%F).sql</pre>
569
        </li>
570
        <li>Папка с файлами (<code>files/</code>) — там хранятся все вложения.</li>
571
      </ul>
572
      <h3>🎉 Готово!</h3>
573
      <p>Теперь у вас теперь <strong>актуальная версия Redmine (будущая 6.1.0) на Ubuntu 22.04 с PostgreSQL</strong>! 🚀</p>
574
      <p>Нужна помощь с настройкой <strong>HTTPS</strong>, <strong>LDAP</strong>, <strong>Git-репозиториев</strong> или <strong>плагинов</strong>? Пишите — помогу!</p>
575
    </div>
576
  </div>
577
578
  <div class="message user">
579
    <div class="role">Пользователь</div>
580
    <div>можешь выгрузить листинг этого диалога в файл ?? например в html?</div>
581
  </div>
582
583
  <div class="message assistant">
584
    <div class="role">Ассистент</div>
585
    <div>
586
      <p>Конечно! Ниже — <strong>полный листинг нашего диалога</strong>, оформленный в виде <strong>HTML-файла</strong>. Вы можете скопировать этот код в текстовый редактор (например, VS Code, Notepad++ или даже Блокнот), сохранить файл с расширением <code>.html</code> (например, <code>redmine_install_guide.html</code>) и открыть его в браузере.</p>
587
      <p>... (здесь шёл сокращённый пример, но теперь вы видите полную версию!)</p>
588
    </div>
589
  </div>
590
591
  <hr style="margin-top: 40px; border: 0; border-top: 1px solid #eee;">
592
  <p style="text-align: center; color: #888; font-size: 0.9em;">
593
    Полный листинг диалога<br>
594
    Дата: апрель 2025<br>
595
    Тема: Установка Redmine 6.1.0 (dev) на Ubuntu 22.04 с PostgreSQL
596
  </p>
597
</body>
598
</html>