Redmine je populární webová aplikace pro správu projektů s otevřeným zdrojovým kódem. Podporuje hlavní databáze jako MySQL a PostgreSQL jako backend a můžete také změnit frontend na Apache z webového serveru WEBrick (doporučeno pro produkční použití) dodávaného s instalací. V tomto článku nainstalujeme nejnovější Redmine na RHEL 8 / CentOS 8 pomocí PostgreSQL jako backendu, ale ponecháme výchozí WEBrick jako frontend, který bude perfektně sloužit našim testům.
Neočekávejte, že tento proces bude snadný a bez chyb. I při dodržení těchto kroků do písmene se jistě vyskytnou nějaké chyby, zdá se, že nastavení zvládá sudo
kroky jsou poněkud nekonzistentní – ale jsou zde také zahrnuta řešení, která tyto chyby provedou.
V tomto tutoriálu se naučíte:
- Jak nainstalovat požadované balíčky operačního systému
- Jak nastavit databázi
- Jak nainstalovat aplikaci Redmine
- Jak spustit aplikaci a přihlásit se k ní
Konfigurační stránka Redmine na RHEL 8.
Požadavky na software a použité konvence
Kategorie | Požadavky, konvence nebo použitá verze softwaru |
---|---|
Systém | RHEL 8 / CentOS 8 |
Software | Redmine 4.0.3, PostgreSQL 10.5 |
Jiné | Privilegovaný přístup k vašemu systému Linux jako root nebo prostřednictvím sudo příkaz. |
Konvence | # – vyžaduje, aby dané linuxové příkazy byly spouštěny s právy root buď přímo jako uživatel root, nebo pomocí sudo příkaz$ – vyžaduje, aby dané linuxové příkazy byly spouštěny jako běžný neprivilegovaný uživatel |
Jak nainstalovat redmine na Redhat 8 krok za krokem
Redmine je aplikace Ruby. Pro instalaci budeme muset použít rubygems
a bundler
a zkompilovat spoustu závislostí, takže to chvíli potrvá. K vyřešení závislostí operačního systému použijeme úložiště Red Hat dostupná po povolení správy předplatného. Podrobné nastavení databáze obecně najdete v instalační příručce PostgreSQL na RHEL8, v tomto článku se budeme zabývat pouze kroky potřebnými pro Redmine. Pokud je nastavení databáze nové, nezapomeňte dokončit initdb
krok ve zmíněném průvodci, nebo se spuštění databáze nezdaří.
- Vytvoříme uživatele, který bude vlastníkem aplikace, a dočasně mu dáme
sudo
přístup. Po dokončení instalace můžeme tento přístup zrušit.# useradd redmine
Novému uživateli musíme nastavit heslo, které použijeme při použití
sudo
:# passwd redmine
U distribucí založených na RHEL existuje
wheel
uživatelská skupina, která má povoleno používatsudo
spouštět privilegované příkazy. Chcete-li zkontrolovat, zda je tato skupina nastavena jakosudoer
, můžemegrep
/etc/sudoers
soubor:# grep "%wheel" /etc/sudoers %wheel ALL=(ALL) ALL # %wheel ALL=(ALL) NOPASSWD: ALL
Druhý řádek s možností NOPASSWD je zakomentován, což bude vyhovovat našim potřebám. S výše uvedenou konfigurací, vše, co musíme udělat, je přidat
redmine
uživatele nawheel
skupina:# usermod -a -G wheel redmine
- K instalaci balíčků, které poskytne operační systém, použijeme
dnf
:# dnf install kernel-devel kernel-headers gcc postgresql-devel ruby ruby-devel rubygems
- Chcete-li získat aplikaci, navštivte oficiální stránku ke stažení (která běží na Redmine). Odtud si můžeme stáhnout komprimovaný
tarball
pomocíwget
do cílového systému:# wget https://www.redmine.org/releases/redmine-4.0.3.tar.gz -O /opt/redmine-4.0.3.tar.gz
Jak naznačuje výše uvedený příkaz, nainstalujeme aplikaci pod
/opt
adresář. Přepneme se do tohoto adresáře a rozbalíme archiv:# cd /opt # tar -xzf redmine-4.0.3.tar.gz
Volitelně můžeme také vytvořit
symlink
pro snazší přístup – tímto způsobem si nemusíme pamatovat přesnou verzi:# ln -s /opt/redmine-4.0.3 /opt/redmine
Nyní můžeme nastavit
redmine
uživatele jako vlastníka extrahované hierarchie adresářů, rekurzivně:# chown -R redmine:redmine /opt/redmine*
- Chceme-li nastavit databázi pro připojení aplikace, musíme ji spustit, pokud ještě neběží:
# systemctl start postgresql
- Budeme muset vytvořit prázdnou databázi, do které bude aplikace ukládat svá data. Abychom tak učinili, přepneme na
postgres
uživatel operačního systému vytvořen ve výchozím nastavení při instalaci databáze:# su - postgres
Přihlásíme se do
psql
jako superuživatel databáze:$ psql psql (10.5) Type "help" for help. postgres=#
Vytvoříme roli, kterou bude aplikace používat (poznamenejte si uživatelské jméno a heslo):
postgres=# CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD 'R3DM1N3' NOINHERIT VALID UNTIL 'infinity';
Vytvoříme také novou databázi s vlastníkem vytvořeným výše:
postgres=# CREATE DATABASE rmdb WITH ENCODING='UTF8' OWNER=redmine;
V dalším kroku budeme potřebovat uživatelské jméno, heslo, kódování a název databáze.
- Nyní, když je uživatel nastaven, musíme mu povolit přihlášení na databázový server. Uživatel redmine se připojí lokálně, takže do
pg_hba.conf
přidáme následující řádek soubor, který se ve výchozím nastavení nachází na/var/lib/pgsql/data
ve výchozím nastavení u distribucí založených na RHEL:host rmdb redmine 127.0.0.1/32 md5
Zkontrolujte, zda váš konfigurační soubor neobsahuje následující položky:
# IPv4 local connections: host all all 127.0.0.1/32 ident
Pokud takový řádek máte, zakomentujte jej, bude v rozporu s přihlášením, které plánujeme nastavit.
- Když je to na místě, musíme restartovat databázi, aby se nastavení projevilo:
# systemctl restart postgresql
- Nyní máme všechny informace potřebné k tomu, abychom aplikaci sdělili, kde a jak najde databázi. V
config
je příklad konfiguračního souboru databázového připojení se všemi podporovanými databázemi podadresář extrahovaného archivu. Můžeme vytvořit kopii tohoto souboru (pomocíredmine
uživatel):$ cp config/database.yml.example config/database.yml
Můžeme smazat nebo okomentovat všechna ukázková nastavení kromě těch, která se týkají PostgreSQL, nebo jen vytvořit prázdný soubor s potřebnou konfigurací (v souboru tak zůstane méně odpadu). Na konci je
/opt/redmine/config/database.yml
by měl obsahovat následující:# PostgreSQL configuration production: adapter: postgresql database: rmdb host: 127.0.0.1 username: redmine password: "R3DM1N3"
Všimněte si, že jsme použili informace o připojení k databázi, které jsme nastavili v posledních dvou krocích.
- Abychom snížili počet možných problémů, otestujeme, zda se můžeme přihlásit do
rmdb
databázi s pověřeními poskytnutými v konfiguračním souboru. Je snazší ladit problémy s připojením pomocí sady nástrojů PostgreSQL než kterákoli jiná:$ psql -d rmdb -U redmine -W Password for user redmine: psql (10.5) Type "help" for help. rmdb=>
- Tady ta snadná část končí. Nyní nainstalujeme různé balíčky Ruby, na kterých Redmine závisí. Některé z nich potřebují
root
přístup, některé se nainstalují pod jménemredmine
uživatele a později budou pravděpodobně některé potřebovat opravu. Bez legrace. Nejprve budeme potřebovatbundler
:# gem install bundler Fetching: bundler-2.0.1.gem (100%) Successfully installed bundler-2.0.1 1 gem installed
Použijeme
bundler
pomocíredmine
uživatele, ale budeme potřebovat takéroot
k instalaci nebo opravěRuby gems
, takže doporučuji otevřít jiný terminál, přepnout naredmine
a přejděte na/opt/redmine
adresář a zároveň ponechat kořenovou konzoli otevřenou. - Jako
redmine
zahájíme instalaci v/opt/redmine
adresář:$ bundle install --without development test rmagick
Bude nainstalováno mnoho závislostí a pro některé se instalační program zeptá na
sudo
password – což je hesloredmine
uživatel. Zdá se, že tato funkce sudo je nějakým způsobem rozbitá a dokáže zvládnout některé instalace balíků s privilegovaným oprávněním root a nemůže se dostat k ostatním. Ty, které selžou, lze nainstalovat do kořenové konzole a výše uvedenéhobundle
příkaz lze znovu provést na uživatelské konzoli redmine. Co bylo potřeba nainstalovat v mém případě sroot
jsou následující:# gem install nokogiri -v '1.10.2' --source 'https://rubygems.org/' # gem install pg -v '1.1.4' --source 'https://rubygems.org/'
Existují také některé balíčky, které se mohou během instalace zlomit. Ty lze také opravit na kořenové konzoli. Stejně jako u výše uvedených neúspěšných kroků instalace balíčku, výstup
bundler
příkaz řekne, který balíček má problémy a jak je vyřešit. V mém případě potřebovaly opravu následující balíčky:# gem pristine nio4r --version 2.3.1 # gem pristine redcarpet --version 3.4.0 # gem pristine websocket-driver --version 0.7.0
Upozorňujeme, že pokud instalujete jinou verzi Redmine, čísla verzí balíčků se budou pravděpodobně lišit. Po opravě všech poškozených a chybějících balíčků,
bundler
příkaz by měl být dokončen bez chyb, s následujícím koncem výstupu:[...] Installing roadie-rails 1.3.0 Fetching rouge 3.3.0 Installing rouge 3.3.0 Bundle complete! 26 Gemfile dependencies, 57 gems now installed. Gems in the groups development, test and rmagick were not installed. Use `bundle info [gemname]` to see where a bundled gem is installed.
- Po dokončení této složité části musíme vygenerovat token, který bude použit ke kódování souborů cookie relace:
$ bundle exec rake generate_secret_token
- Dále vygenerujeme databázové objekty potřebné pro aplikaci:
$ RAILS_ENV=production bundle exec rake db:migrate
Kromě vytvoření potřebných databázových objektů tento krok vygeneruje velké množství výstupu protokolováním všech kroků do konzole. Uvidíme, že mnoho záznamů bude vypadat podobně jako následující:
[...] == 20180913072918 AddVerifyPeerToAuthSources: migrating ======================= -- change_table(:auth_sources) -> 0.0082s == 20180913072918 AddVerifyPeerToAuthSources: migrated (0.0083s) ============== == 20180923082945 ChangeSqliteBooleansTo0And1: migrating ====================== == 20180923082945 ChangeSqliteBooleansTo0And1: migrated (0.0000s) =============
Tento proces by měl být dokončen během několika sekund.
- Můžeme zkontrolovat naplněnou databázi pomocí
psql
:rmdb=> \dt List of relations Schema | Name | Type | Owner --------+-------------------------------------+-------+--------- public | ar_internal_metadata | table | redmine public | attachments | table | redmine public | auth_sources | table | redmine public | boards | table | redmine public | changes | table | redmine [...]
- Posledním krokem instalace je načtení výchozích dat do databáze. Poskytnutím
REDMINE_LANG
Parametrem se můžeme uchránit před případnými otázkami během počátečního načítání.$ RAILS_ENV=production REDMINE_LANG=en bundle exec rake redmine:load_default_data Default configuration data loaded.
- Instalace je dokončena. Aplikaci můžeme spustit:
$ bundle exec rails server webrick -e production => Booting WEBrick => Rails 5.2.2.1 application starting in production on http://0.0.0.0:3000 => Run `rails server -h` for more startup options [2019-04-14 18:39:12] INFO WEBrick 1.4.2 [2019-04-14 18:39:12] INFO ruby 2.5.1 (2018-03-29) [x86_64-linux] [2019-04-14 18:39:12] INFO WEBrick::HTTPServer#start: pid=30062 port=3000
- Aplikace je nyní spuštěna a lze k ní přistupovat pomocí prohlížeče. Z výše uvedeného výstupu můžeme odhadnout, že je přístupný na portu
3000
, takže pokud na cílovém počítači běží firewall, musíme pro vzdálený přístup ke službě otevřít tento port:# firewall-cmd --zone=public --add-port=3000/tcp --permanent # firewall-cmd --reload
- Po otevření prohlížeče a nasměrování na adresu a port 3000 stroje (http://192.168.1.14:3000 na níže uvedeném snímku obrazovky) získáme přístup k webovému rozhraní naší čerstvé nové instalace Redmine. Přihlašovací stránka Redmine.
Výchozí přihlašovací údaje jsou
admin
pro uživatelské jméno a také pro heslo. Při prvním přihlášení vás dobře fungující aplikace vyzve ke změně hesla pro tento privilegovaný účet. Odtud je na nás, abychom ji naplnili, nakonfigurovali a mohli si ji užívat. - Po dokončení instalace můžeme odstranit
redmine
uživatele zwheel
group, čímž se eliminuje bezpečnostní díra potřebná během procesu:# gpasswd -d redmine wheel Removing user redmine from group wheel # id redmine uid=1008(redmine) gid=1008(redmine) groups=1008(redmine)