Skip to content

Instantly share code, notes, and snippets.

@sergey-egv
Last active May 25, 2020 08:46
Show Gist options
  • Save sergey-egv/93aa13ada9c8053b6531184967a4b208 to your computer and use it in GitHub Desktop.
Save sergey-egv/93aa13ada9c8053b6531184967a4b208 to your computer and use it in GitHub Desktop.
Установка Redmine 3.3 в Windows ((IIS + Puma) + MS SQL)
  • Все конфиги править не обычным блокнотом иначе слетит кодировка файла
  1. Скачиваем Redmine - http://www.redmine.org/releases/redmine-3.3.3.zip
  2. Устанавливаем Ruby 2.3 x64 (поставить галку "Прописатся в PATH" ) - https://dl.bintray.com/oneclick/rubyinstaller/rubyinstaller-2.3.3-x64.exe
  3. Качаем ImageMagick - ftp://ftp.imagemagick.org/pub/ImageMagick/binaries/ImageMagick-6.9.8-10-Q16-x64-dll.exe
  4. Качаем DevKit - https://dl.bintray.com/oneclick/rubyinstaller/DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe
  5. Качаем URL Rewrit и reverse proxy - http://www.iis.net/download/URLRewrite , http://www.iis.net/download/ApplicationRequestRouting
  6. Качаем winsw - http://repo.jenkins-ci.org/releases/com/sun/winsw/winsw/2.1.0/winsw-2.1.0-bin.exe
  7. Создаем БД в MS SQL (Не забываем поменять пароль redminepassword на свой!)
USE [master]
GO

-- Very basic DB creation
CREATE DATABASE [REDMINE]
GO

-- Creation of a login with SQL Server login/password authentication and no password expiration policy
CREATE LOGIN [REDMINE] WITH PASSWORD=N'redminepassword', DEFAULT_DATABASE=[REDMINE], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO

-- User creation using previously created login authentication
USE [REDMINE]
GO
CREATE USER [REDMINE] FOR LOGIN [REDMINE]
GO
-- User permissions set via roles
EXEC sp_addrolemember N'db_datareader', N'REDMINE'
GO
EXEC sp_addrolemember N'db_datawriter', N'REDMINE'
GO
  1. Распаковываем redmine в папку C:\redmine-3.3.3 (путь не критичен однако после следующих этапов путь менять просто так не стоит)

  2. Правим набор пакетов для redmine

    • в windows не работает tiny_tds версии 0.6.2 для этого нужно изменить его на версию 0.7.0 (https://stackoverflow.com/a/44397038) (Однако 0.7.0 у меня не взлетел. Попробовал 1.3.0, вроде работает без проблем)
    1. Открываем C:\redmine-3.3.3\Gemfile
    2. Правим строку
    gem "tiny_tds", "~> 0.6.2", :platforms => [:mri, :mingw, :x64_mingw]
    

    на

    gem "tiny_tds", "~> 1.3.0", :platforms => [:mri, :mingw, :x64_mingw]
    
  3. Настройки к БД

    1. Скопировать C:\redmine-3.3.3\config\database.yml.example в C:\redmine-3.3.3\config\database.yml
    2. Открываем C:\redmine-3.3.3\config\database.yml
      1. Коментируем (или удаляем ) не используемые оснастки (development, test)
      2. Правим блок production:
        production:
          adapter: sqlserver
          database: redmine
          host: 192.168.1.2
          port: 1433
          username: REDMINE
          password: redminepassword
  4. Устанавливаем DevKit

    1. Распаковываем DevKit по пути C:\Ruby23-x64\DevKit
    2. Добавляем C:\Ruby23-x64\DevKit\bin в Path
    3. Открыть консоль и перейти в папку C:\Ruby23-x64\DevKit
    cd C:\Ruby23-x64\DevKit
    
    1. Запустить
    ruby dk.rb init
    
    1. Запустить
    ruby dk.rb install
    
    • 4-5 пункты должны отработать без ошибок пример:
    C:\Ruby23-x64\DevKit>ruby dk.rb init
    [INFO] found RubyInstaller v2.3.3 at C:/Ruby23-x64
    
    Initialization complete! Please review and modify the auto-generated
    'config.yml' file to ensure it contains the root directories to all
    of the installed Rubies you want enhanced by the DevKit.
    
    C:\Ruby23-x64\DevKit>ruby dk.rb install
    [INFO] Updating convenience notice gem override for 'C:/Ruby23-x64'
    [INFO] Installing 'C:/Ruby23-x64/lib/ruby/site_ruby/devkit.rb'
    
  5. Устанавливаем bundler

    1. Команда
    gem install bundler
    
  6. Установка ImageMagick

    1. При установке обязательно указать установку бибилиотек и заголовков для C/C++
  7. Установка необходимых компонентов для ruby

    1. Открыть консоль
    2. Установить переменные(только на текущию сессию) для ImageMagick
    set CPATH=C:\Program Files\ImageMagick-6.9.8-Q16\include
    set LIBRARY_PATH=C:\Program Files\ImageMagick-6.9.8-Q16\lib
    
    1. Перейти в консоли в папку с redmine
    cd C:\redmine-3.3.3
    
    1. Запустить для сбора всех пакетов для текущей реализации redmine
    bundle install --without development test
    
  8. Генерация ключа (для cookie)

    1. В папке redmine запустить
    bundle exec rake generate_secret_token
    
  9. Создание БД и заполнение стандартными настройками

    1. Открыть консоль
    2. Установить переменные(только на текущею сессию)
    set RAILS_ENV=production
    set REDMINE_LANG=ru
    
    1. Выполнить команду для создания таблиц в БД
    bundle exec rake db:migrate
    

    на данном этапе может выскочить ошибки вида

    == 20160416072926 RemovePositionDefaults: migrating ===========================
    -- change_column("boards", :position, :integer, {:default=>nil})
       -> 0.0128s
    -- change_column("custom_fields", :position, :integer, {:default=>nil})
    rake aborted!
    StandardError: An error has occurred, this and all later migrations canceled:
    
    undefined method `type' for nil:NilClass
    C:/redmine-3.3.3/db/migrate/20160416072926_remove_position_defaults.rb:4:in `block in up'
    C:/redmine-3.3.3/db/migrate/20160416072926_remove_position_defaults.rb:3:in `each'
    C:/redmine-3.3.3/db/migrate/20160416072926_remove_position_defaults.rb:3:in `up'
    C:in `migrate'
    NoMethodError: undefined method `type' for nil:NilClass
    C:/redmine-3.3.3/db/migrate/20160416072926_remove_position_defaults.rb:4:in `block in up'
    ....
    

    однако повторный запуск завершает эту миграцию

    == 20160416072926 RemovePositionDefaults: migrating ===========================
    -- change_column("boards", :position, :integer, {:default=>nil})
       -> 0.1129s
    -- change_column("custom_fields", :position, :integer, {:default=>nil})
       -> 0.0647s
    -- change_column("enumerations", :position, :integer, {:default=>nil})
       -> 0.0164s
    -- change_column("issue_statuses", :position, :integer, {:default=>nil})
       -> 0.0216s
    -- change_column("roles", :position, :integer, {:default=>nil})
       -> 0.0086s
    -- change_column("trackers", :position, :integer, {:default=>nil})
       -> 0.0079s
    == 20160416072926 RemovePositionDefaults: migrated (0.3975s) ==================
    
    1. Выполнить команду для заполнения таблиц стандартными данными
    bundle exec rake redmine:load_default_data
    
  10. Проверка установки Redmine

    1. Запустить в консоли
    bundle exec rails server webrick -e production
    
    1. Перейти http://localhost:3000
  11. Установка Puma

    1. Если необходим ssl (если не надо то можно пропустить до пункта 2) Скачиваем архив с библиотеками:
    http://packages.openknapsack.org/openssl/openssl-1.0.0k-x64-windows.tar.lzma
    

    Кладем его в папку (её необходимо создать)

    C:\Ruby23-x64\openssl
    

    Командой в консоли мы распаковываем архив

    c:\Ruby23-x64\devkit\mingw\bin\bsdtar.exe --lzma -xf c:\Ruby23-x64y\openssl\openssl-1.0.0k-x64-windows.tar.lzma
    
    1. Установка Puma Выполнить команду
    gem install puma
    

    если с ssl

    gem install puma -- --with-opt-dir=c:\ruby\openssl
    
    1. Проверка работоспособности Запустить в папке с redmine
    puma -e production -p 3000
    
    1. Установка Puma как сервис windows (winsw)

      1. Создаем папку и кладем в неё winsw (брать в 6 пункте)
      C:\redmine-3.3.3\service
      
      1. Переименовываем
      winsw-2.1.0-bin.exe -> redmine_puma.exe
      
      1. создаем файл
      redmine_puma.xml
      

      рядом с redmine_puma.exe

      1. открываем redmine_puma.xml и вставляем текст
      <service>
        <id>redmine_puma</id>
        <name>Redmine (Puma)</name>
        <description>Redmine - Puma Ruby WebServer</description>
        <!-- Дополнительно можно приписать Path (Не проверно)-->
        <!-- <env name="Path" value="C:\Ruby23-x64\bin;C:\Ruby23-x64\DevKit\bin"/>-->
        <executable>C:\Ruby23-x64\bin\ruby.exe</executable>
        <arguments>"C:\Ruby23-x64\bin\puma" -e production -p 3000 -t 8:32</arguments>
        <workingdirectory>C:\redmine-3.3.3</workingdirectory>
        <logpath>C:\redmine-3.3.3\log</logpath>
      </service>
      1. Устанавливаем сервис

      В консоли администратора перейти в папку с winsw и запустить установку

      cd C:\redmine-3.3.3\service
      redmine_puma.exe install
      

      Пример вывода

      C:\redmine-3.3.3\service>redmine_puma.exe install
      2017-07-02 19:21:07,318 INFO  - Starting ServiceWrapper in the CLI mode
      2017-07-02 19:21:07,443 INFO  - Completed. Exit code is 0
      
      1. Проверка Можно перезагрузить компьютер или запустить службу Redmine (Puma) руками
      http://127.0.0.1:3000/
      
  12. Привязка IIS к Puma

    1. Устанавливаем URL Rewrit и reverse proxy (брать в пункте 5)
    2. Открываем оснастку IIS
    3. Переходим в необходимы сайт (стандартный Default Web Site)
    4. Щелкаем Переопределение URL - адресов
    5. Добавить правило - Обратный прокси-сервер
    6. Заполняем сверху вниз

    Введите имя или ip-адресс ....

    127.0.0.1:3000
    

    Отметить галку Переопределить имена От

    127.0.0.1:3000
    

    Куда

    127.0.0.1
    

    Про примеру выше мы получим по умолчанию на данном сервере redmine

  13. Profit

@an-efremov
Copy link

Отличная статья, не пробовали настраивать Single Sign On?

@alexandr-korchemniy
Copy link

Спасибо за статью! Пытаюсь развернуть у себя на компьютере, но на пункте 16.3 получаю ошибку:
TinyTds::Error: Unable to connect: Adaptive Server is unavailable or does not exist (10.238.68.159:1433)
database.yml файл:
production:
adapter: sqlserver
database: REDMINE
host: 10.238.68.159
port: 1433
username: REDMINE
password: redminepassword

Подскажите пожалуйста, как пофиксить ошибку?

@efer92
Copy link

efer92 commented Nov 21, 2018

@alexandr-korchemniy

У пользователя Redmine какие права (Permissions) в MS SQL, в 7 пункте данной статьи информация не полная. Нужно дать права Redmine - > Permissions (GRANT ALL).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment