So installierst du die Projektmanagement-Software Redmine unter Debian 11

Redmine ist eine kostenlose und quelloffene Projektmanagementsoftware und ein Tool zur Fehlerverfolgung. Es wurde mit dem Ruby on Rails-Framework geschrieben und kann mit verschiedenen Versionskontrollsystemen integriert werden. Es enthält einen Repository-Browser und einen Diff-Viewer. Es kann für die Verwaltung von Projektfunktionen wie Projektwikis und -foren, Zeiterfassung und rollenbasierte Zugriffskontrolle verwendet werden. Es ist plattform- und datenbankübergreifend und unterstützt 49 Sprachen.

In diesem Tutorial lernst du, wie du Redmine auf einem Debian 11 Server installierst.

Voraussetzungen

  • Ein Server, auf dem Debian 11 läuft.
  • Ein Nicht-Sudo-Benutzer mit Root-Rechten.
  • Die Uncomplicated Firewall (UFW) ist aktiviert und läuft.
  • Einige wenige Pakete, die dein System benötigt.
    $ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release unzip debian-archive-keyring -y
    

    Einige dieser Pakete sind vielleicht schon auf deinem System installiert.

  • Stelle sicher, dass alles auf dem neuesten Stand ist.
    $ sudo apt update && sudo apt upgrade
    

Schritt 1 – Firewall konfigurieren

Bevor du die Pakete installierst, musst du die Firewall so konfigurieren, dass sie HTTP- und HTTPS-Verbindungen zulässt.

Überprüfe den Status der Firewall.

$ sudo ufw status

Du solltest etwas wie das Folgende sehen.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Erlaube HTTP- und HTTPs-Ports. Öffne außerdem Port 3000 für Redmine.

$ sudo ufw allow http
$ sudo ufw allow https
$ sudo ufw allow 3000

Überprüfe den Status erneut, um ihn zu bestätigen.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
80/tcp                     ALLOW       Anywhere                  
443                        ALLOW       Anywhere                  
3000                       ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
80/tcp (v6)                ALLOW       Anywhere (v6)             
443 (v6)                   ALLOW       Anywhere (v6)             
3000 (v6)                  ALLOW       Anywhere (v6)

Schritt 2 – Apache Server installieren

Wir werden den Apache Webserver verwenden, um Redmine einzusetzen. Installiere Apache mit dem folgenden Befehl.

$ sudo apt install apache2

Überprüfe den Status des Apache-Dienstes.

$ sudo systemctl status apache2
? apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2023-03-04 13:28:57 UTC; 41s ago
       Docs: https://httpd.apache.org/docs/2.4/
   Main PID: 3478 (apache2)
      Tasks: 55 (limit: 1129)
     Memory: 9.7M
        CPU: 27ms
     CGroup: /system.slice/apache2.service
             ??3478 /usr/sbin/apache2 -k start
             ??3481 /usr/sbin/apache2 -k start
             ??3482 /usr/sbin/apache2 -k start

Mar 04 13:28:56 redmine systemd[1]: Starting The Apache HTTP Server...
Mar 04 13:28:57 redmine systemd[1]: Started The Apache HTTP Server.

Schritt 3 – Installiere und konfiguriere den MySQL-Server

Wir werden die MySQL-Datenbank verwenden, um die Daten zu speichern. Debian hat MySQL nicht mehr in seinen Repositories. Daher werden wir das offizielle MySQL-Repository für die Installation verwenden.

Importiere den MySQL GPG-Schlüssel.

$ curl https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 | gpg --dearmor | sudo tee /usr/share/keyrings/mysql.gpg >/dev/null

Erstelle eine MySQL-Repository-Datei.

$ echo "deb [signed-by=/usr/share/keyrings/mysql.gpg arch=amd64] http://repo.mysql.com/apt/debian/ `lsb_release -cs` mysql-8.0" | sudo tee /etc/apt/sources.list.d/mysql.list

Aktualisiere die Repository-Liste des Systems.

$ sudo apt update

Installiere MySQL.

$ sudo apt install mysql-server

Du wirst aufgefordert, ein Root-Passwort festzulegen. Wähle ein sicheres Passwort. Als nächstes wirst du aufgefordert, zwischen der neueren MySQL caching_sha2_password Verschlüsselung und der älteren mysql_native_password Verschlüsselung zu wählen. Wähle die neuere, weil Redmine sie unterstützt. Wähle OK, um fortzufahren und die Installation abzuschließen.

Überprüfe den Status des MySQL-Dienstes.

$ sudo systemctl status mysql
? mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2023-03-05 08:18:15 UTC; 4h 14min ago
       Docs: man:mysqld(8)
             http://dev.mysql.com/doc/refman/en/using-systemd.html
   Main PID: 10500 (mysqld)
     Status: "Server is operational"
      Tasks: 38 (limit: 1129)
     Memory: 391.5M
        CPU: 1min 49.904s
     CGroup: /system.slice/mysql.service
             ??10500 /usr/sbin/mysqld

Mar 05 08:18:14 redmine systemd[1]: Starting MySQL Community Server...
Mar 05 08:18:15 redmine systemd[1]: Started MySQL Community Server.

Sichere MySQL-Installation.

$ sudo mysql_secure_installation

Zuerst wirst du nach dem Root-Passwort gefragt. Gib das Passwort ein, das du während der Installation gewählt hast. Als Nächstes wirst du gefragt, ob du das Validate Password Plugin einrichten möchtest, mit dem du die Stärke deines MySQL-Passworts testen kannst. Wähle Y, um fortzufahren. Im nächsten Schritt wirst du aufgefordert, die Stufe der Passwortüberprüfung auszuwählen. Wähle 2. Das ist die stärkste Stufe und verlangt, dass dein Passwort mindestens acht Zeichen lang ist und eine Mischung aus Groß- und Kleinbuchstaben, Zahlen und Sonderzeichen enthält.

Securing the MySQL server deployment.

Enter password for user root:

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: Y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2

Dir wird die Stärke deines Root-Passworts angezeigt und du wirst gefragt, ob du es ändern möchtest. Gib N ein, wenn du es nicht ändern willst und fahre fort. Wenn du es ändern möchtest, kannst du das jetzt tun, indem du Y eingibst und ein Passwort wählst, das den oben genannten Anforderungen entspricht.

Using existing password for root.

Estimated strength of the password: 100 
Change the password for root ? ((Press y|Y for Yes, any other key for No) : N

 ... skipping.

Drücke bei allen folgenden Aufforderungen die Tasten Y und dann ENTER, um anonyme Benutzer und die Testdatenbank zu entfernen, Root-Logins zu deaktivieren und die neu festgelegten Regeln zu laden.

By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
Success.

All done!

Gib die MySQL-Shell ein. Gib dein Root-Passwort ein, um fortzufahren.

$ mysql -u root -p

Erstelle den Benutzer redmine. Vergewissere dich, dass das Passwort den zuvor festgelegten Anforderungen entspricht.

mysql> CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'Your_password2';

Erstelle die Datenbank redmine.

mysql> CREATE DATABASE redmine CHARACTER SET utf8mb4;

Erteile dem Benutzer die Rechte für die Datenbank redmine.

mysql> GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';

Beende die Shell.

mysql> exit

Schritt 4 – Installiere Ruby und andere Voraussetzungen

Die neueste Version von Redmine ist mit Ruby 3.1 kompatibel. Debian wird mit Ruby 2.7 ausgeliefert, also müssen wir die neueste Version mit dem Ruby Version Manager (RVM) installieren.

Installiere den GPG-Schlüssel von RVM.

$ gpg2 --keyserver keyserver.ubuntu.com --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

Installiere RVM.

$ \curl -sSL https://get.rvm.io | bash -s stable

Quelle die RVM-Skripte.

$ source ~/.rvm/scripts/rvm

Installiere Ruby. Du kannst die neueste Version auf der Ruby-Website überprüfen. Zum Zeitpunkt der Erstellung dieses Tutorials ist Ruby 3.1.3 die neueste Version der Reihe.

$ rvm install ruby-3.1.3

Überprüfe die Installation.

$ ruby -v
ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e) [x86_64-linux]

Installiere alle übrigen Pakete, die für Redmine benötigt werden.

$ sudo apt install libxml2-dev libxslt1-dev zlib1g-dev imagemagick libmagickwand-dev libmysqlclient-dev apache2-dev build-essential libcurl4-openssl-dev

Schritt 5 – Redmine installieren

Besuche die Downloadseite von Redmine und überprüfe, ob die neueste stabile Version verfügbar ist. Zum Zeitpunkt der Erstellung dieses Tutorials ist die neueste Version 5.0.5 verfügbar.

Verwende wget, um Redmine herunterzuladen.

$ wget https://www.redmine.org/releases/redmine-5.0.5.tar.gz

Es kann sein, dass du beim Herunterladen des Archivs die folgende Fehlermeldung erhältst, weil eines der Root-Zertifikate auf der Website abgelaufen ist.

WARNING: The certificate of ‘www.redmine.org’ is not trusted.
WARNING: The certificate of ‘www.redmine.org’ doesn't have a known issuer.
WARNING: The certificate of ‘www.redmine.org’ has expired.

Wenn du diese Fehlermeldung erhältst, führe stattdessen den folgenden Befehl zum Herunterladen aus.

$ wget https://www.redmine.org/releases/redmine-5.0.5.tar.gz --no-check-certificate

Entpacke die Dateien und verschiebe sie in das Verzeichnis /var/www/redmine.

$ tar xfz redmine-5.0.5.tar.gz
$ sudo mv redmine-5.0.5 /var/www/redmine

Wechsle in das Verzeichnis /var/www/redmine.

$ cd /var/www/redmine

Du erhältst die folgende Ausgabe und eine Warnung bezüglich der Ruby-Version. Das kannst du getrost ignorieren.

RVM used your Gemfile for selecting Ruby, it is all fine - Heroku does that too,
you can ignore these warnings with 'rvm rvmrc warning ignore /var/www/redmine/Gemfile'.
To ignore the warning for all files run 'rvm rvmrc warning ignore allGemfiles'.

Unknown ruby interpreter version (do not know how to handle): >=2.5.0,<3.2.0.

Erstelle die Redmine-Konfigurationsdateien mit Hilfe der mitgelieferten Beispieldateien.

$ cp config/configuration.yml.example config/configuration.yml
$ cp config/database.yml.example config/database.yml
$ cp public/dispatch.fcgi.example public/dispatch.fcgi

Öffne die Datei database.yml zum Bearbeiten.

$ nano config/database.yml

Finde deine Datenbankeinstellungen unter dem folgenden Abschnitt und konfiguriere sie.

production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  password: "Your_password2"
  # Use "utf8" instead of "utfmb4" for MySQL prior to 5.7.7
  encoding: utf8mb4

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Installiere Bundler für die Verwaltung von Ruby Gem-Abhängigkeiten.

$ gem install bundler

Richte die Umgebung für die Installation von Gem-Abhängigkeiten ein.

$ bundle config set --local without 'development test'

Installiere die Gem-Abhängigkeiten.

$ bundle install

Wenn du Probleme mit Gem-Versionen hast, kannst du sie mit dem folgenden Befehl wiederherstellen.

$ gem pristine --all

Füge die Webrick-Abhängigkeit hinzu.

$ bundle add webrick

Erstelle einen zufälligen geheimen Schlüssel, um zu verhindern, dass die Cookies zur Speicherung der Sitzungsdaten manipuliert werden.

$ bundle exec rake generate_secret_token

Erstelle die Datenbankstruktur.

$ RAILS_ENV=production bundle exec rake db:migrate

Füge die Daten in die MySQL-Datenbank ein.

$ RAILS_ENV=production REDMINE_LANG=en bundle exec rake redmine:load_default_data

Erstelle die notwendigen Verzeichnisse und lege die Dateiberechtigungen fest.

$ mkdir -p tmp/pdf
$ mkdir -p public/plugin_assets
$ chown -R $USER:$USER files log tmp public/plugin_assets
$ chmod -R 755 /var/www/redmine/

Führe den folgenden Befehl aus, um eine Rails-Serverinstanz zu starten.

$ bundle exec rails server -u webrick -e production
=> Booting WEBrick
=> Rails 6.1.7.2 application starting in production http://0.0.0.0:3000
=> Run `bin/rails server --help` for more startup options
[2023-03-06 09:12:11] INFO  WEBrick 1.7.0
[2023-03-06 09:12:11] INFO  ruby 3.1.3 (2022-11-24) [x86_64-linux]
[2023-03-06 09:12:11] INFO  WEBrick::HTTPServer#start: pid=34652 port=3000

Öffne die URL http://<yourserverIP>:3000/login, um den Redmine-Anmeldebildschirm zu erhalten.

Redmine Login Screen

Gib die Standard-Anmeldedaten(admin/admin) ein, um dich anzumelden. Du wirst aufgefordert, das Passwort zu ändern.

Redmine Passwort ablaufen Bildschirm

Anschließend wirst du auf die Seite Mein Konto weitergeleitet.

Redmine Mein Konto

Redmine wurde erfolgreich installiert.

Als Nächstes drückst du STRG+C auf dem Terminal, um den Server zu beenden.

Schritt 6 – Phusion Passenger installieren

Phusion Passenger ist ein Ruby-Anwendungsserver, mit dem wir Redmine über einen Drittanbieter-Server bereitstellen können. In unserem Fall werden wir Apache verwenden.

Installiere Passenger.

$ gem install passenger

Installiere das Passenger-Modul für den Apache-Server.

$ passenger-install-apache2-module

Du wirst mit einer Willkommensnachricht begrüßt. Drücke Enter, um fortzufahren.

Welcome to the Phusion Passenger Apache 2 module installer, v6.0.17.

This installer will guide you through the entire installation process. It
shouldn't take more than 3 minutes in total.

Here's what you can expect from the installation process:

 1. The Apache 2 module will be installed for you.
 2. You'll learn how to configure Apache.
 3. You'll learn how to deploy a Ruby on Rails application.

Don't worry if anything goes wrong. This installer will advise you on how to
solve any problems.

Press Enter to continue, or Ctrl-C to abort.
--------------------------------------------

Als nächstes wirst du nach der Sprache gefragt. Standardmäßig ist Ruby ausgewählt, also drücke einfach Enter, um fortzufahren.

Which languages are you interested in?

Use <space> to select.
If the menu doesn't display correctly, press '!'

 ? ?  Ruby
   ?  Python
   ?  Node.js
   ?  Meteor
--------------------------------------------

Der gesamte Vorgang wird etwa 10-15 Minuten dauern. Wenn du eine Fehlermeldung wie die folgende bekommst, liegt das höchstwahrscheinlich an zu wenig RAM. Du solltest entweder den RAM-Speicher deines Servers erhöhen oder Swap-Speicher installieren.

c++: fatal error: Killed signal terminated program cc1plus
compilation terminated.
rake aborted!

Sobald der Vorgang abgeschlossen ist, bekommst du die folgende Meldung.

--------------------------------------------
Almost there!

Please edit your Apache configuration file, and add these lines:

   LoadModule passenger_module /home/navjot/.rvm/gems/ruby-3.1.3/gems/passenger-6.0.17/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /home/navjot/.rvm/gems/ruby-3.1.3/gems/passenger-6.0.17
     PassengerDefaultRuby /home/navjot/.rvm/gems/ruby-3.1.3/wrappers/ruby
   </IfModule>

After you restart Apache, you are ready to deploy any number of web
applications on Apache, with a minimum amount of configuration!

Press ENTER when you are done editing.

Drücke noch nicht die Eingabetaste. Öffne eine neue Sitzung auf deinem Server als aktueller Benutzer und führe die folgenden Konfigurationen durch.

Schritt 7 – Apache Server konfigurieren

Erstelle eine Apache-Modulkonfigurationsdatei für Phusion Passenger.

$ sudo nano /etc/apache2/conf-available/00-passenger.conf

Füge den Code ein, den du am Ende der Passenger-Installation erhalten hast.

 LoadModule passenger_module /home/navjot/.rvm/gems/ruby-3.1.3/gems/passenger-6.0.17/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /home/navjot/.rvm/gems/ruby-3.1.3/gems/passenger-6.0.17
     PassengerDefaultRuby /home/navjot /.rvm/gems/ruby-3.1.3/wrappers/ruby
   </IfModule>

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Erstelle eine weitere Apache-Konfigurationsdatei für die Redmine-Site.

$ sudo nano /etc/apache2/sites-available/redmine.conf

Füge den folgenden Code in diese Datei ein.

Listen 3000
<IfModule mod_passenger.c>
  PassengerRoot /home/navjot/.rvm/gems/ruby-3.1.3/gems/passenger-6.0.17
  PassengerDefaultRuby /home/navjot/.rvm/gems/ruby-3.1.3/wrappers/ruby
</IfModule>
<VirtualHost *:3000>
    ServerName redmine.example.com
    DocumentRoot "/var/www/redmine/public"

    CustomLog ${APACHE_LOG_DIR}/redmine_access.log combined
    ErrorLog ${APACHE_LOG_DIR}/redmine_error.log
    LogLevel warn

    <Directory "/var/www/redmine/public">
        Options Indexes ExecCGI FollowSymLinks
        Require all granted
        AllowOverride all
    </Directory>
</VirtualHost>

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Öffne die Haupt-Apache-Konfigurationsdatei /etc/httpd/conf/httpd.conf zum Bearbeiten.

$ sudo nano /etc/httpd/conf/httpd.conf

Suche die Variable ServerName und entferne die Raute (#) davor und setze ihren Wert wie folgt.

ServerName localhost

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Aktiviere die Redmine-Site und die Phusion Passenger-Konfiguration.

$ sudo a2ensite redmine.conf
$ sudo a2enconf 00-passenger.conf

Überprüfe deine Apache-Konfiguration.

$ sudo apachectl configtest
Syntax OK

Gehe zurück und drücke die Eingabetaste, um die Installation von Passenger fortzusetzen. Es werden einige Überprüfungen durchgeführt und du solltest die folgende Meldung sehen, wenn sie erfolgreich abgeschlossen wurde.

Deploying a web application

To learn how to deploy a web app on Passenger, please follow the deployment
guide:

  https://www.phusionpassenger.com/library/deploy/apache/deploy/

Enjoy Phusion Passenger, a product of Phusion® (www.phusion.nl) :-)
https://www.phusionpassenger.com

Passenger® is a registered trademark of Phusion Holding B.V.

Starte deinen Apache-Server neu.

$ sudo systemctl restart apache2

Deine Website sollte nun unter http://redmine.example.com:3000 erreichbar sein.

Dies ist nicht der perfekte Weg, um auf Redmine zuzugreifen. Sie wird immer noch über das unsichere HTTP-Protokoll bedient und verwendet eine Portnummer. Um dies zu verbessern, werden wir Nginx installieren, das als Reverse Proxy fungiert und Redmine über das HTTPS-Protokoll bereitstellt. Bevor wir mit der Installation und Konfiguration von Nginx beginnen, müssen wir das SSL-Zertifikat einrichten.

Schritt 8 – Nginx installieren

Debian 11 wird mit einer älteren Version von Nginx ausgeliefert. Um die neueste Version zu installieren, musst du das offizielle Nginx-Repository herunterladen.

Importiere den Signierschlüssel von Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Füge das Repository für die stabile Version von Nginx hinzu.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Aktualisiere die System-Repositories.

$ sudo apt update

Installiere Nginx.

$ sudo apt install nginx

Überprüfe die Installation. Unter Debian muss der folgende Befehl ausgeführt werden: sudo.

$ sudo nginx -v
nginx version: nginx/1.22.1

Apache-Listening-Port ändern

Um Konflikte mit Nginx zu vermeiden, müssen wir den Standard-Port ändern, an dem Apache lauscht. Öffne die Datei /etc/apache2/ports.conf zum Bearbeiten.

$ sudo nano /etc/apache2/ports.conf

Ändere den Port wie folgt von 80 auf 8080.

Listen 8080

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Deaktiviere die Standardkonfiguration der Website.

$ sudo a2dissite 000-default.conf

Starte Apache neu.

$ sudo systemctl restart apache2

Starte den Nginx-Server.

$ sudo systemctl start nginx

Überprüfe den Status des Nginx-Servers.

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2023-03-06 10:29:44 UTC; 6s ago
       Docs: https://nginx.org/en/docs/
    Process: 53531 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 53532 (nginx)
      Tasks: 2 (limit: 1129)
     Memory: 1.7M
        CPU: 8ms
     CGroup: /system.slice/nginx.service
             ??53532 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
             ??53533 nginx: worker process

Schritt 9 – SSL installieren

Wir müssen Certbot installieren, um das SSL-Zertifikat zu erstellen. Du kannst Certbot entweder über das Repository von Debian installieren oder die neueste Version mit dem Snapd-Tool herunterladen. Wir werden die Snapd-Version verwenden.

Bei Debian ist Snapd noch nicht installiert. Installiere deshalb Snapd.

$ sudo apt install snapd

Führe die folgenden Befehle aus, um sicherzustellen, dass deine Version von Snapd auf dem neuesten Stand ist.

$ sudo snap install core && sudo snap refresh core

Installiere Certbot.

$ sudo snap install --classic certbot

Verwende den folgenden Befehl, um sicherzustellen, dass der Certbot-Befehl ausgeführt werden kann, indem du einen symbolischen Link zum Verzeichnis /usr/bin erstellst.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Erstelle das SSL-Zertifikat.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m name@example.com -d redmine.example.com

Mit dem obigen Befehl wird ein Zertifikat in das Verzeichnis /etc/letsencrypt/live/redmine.example.com auf deinem Server heruntergeladen.

Erstelle ein Diffie-Hellman-Gruppenzertifikat.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Überprüfe den Certbot Erneuerungszeitplanungsdienst.

$ sudo systemctl list-timers

Du findest snap.certbot.renew.service als einen der Dienste, die für die Ausführung vorgesehen sind.

NEXT                        LEFT         LAST                        PASSED       UNIT                         ACTIVATES
Mon 2023-03-06 11:37:00 UTC 1h 2min left n/a                         n/a          snap.certbot.renew.timer     snap.certbot.renew.service
Mon 2023-03-06 13:37:15 UTC 3h 2min left Sun 2023-03-05 13:37:15 UTC 20h ago      systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Tue 2023-03-07 00:00:00 UTC 13h left     Mon 2023-03-06 00:00:15 UTC 10h ago      logrotate.timer              logrotate.service

Führe einen Probelauf des Prozesses durch, um zu prüfen, ob die SSL-Erneuerung einwandfrei funktioniert.

$ sudo certbot renew --dry-run

Wenn du keine Fehler siehst, bist du bereit. Dein Zertifikat wird automatisch erneuert.

Schritt 10 – Nginx als Reverse-Proxy konfigurieren

Erstelle und öffne die Datei /etc/nginx/conf.d/redmine.conf zum Bearbeiten.

$ sudo nano /etc/nginx/conf.d/redmine.conf

Füge den folgenden Code in die Datei ein.

# Redirect all non-encrypted to encrypted
server {
    listen 80;
    server_name redmine.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;

    server_name redmine.example.com;

    ssl_certificate     /etc/letsencrypt/live/redmine.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/redmine.example.com/privkey.pem;
	ssl_trusted_certificate /etc/letsencrypt/live/redmine.example.com/chain.pem;

	ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 8.8.8.8;

    access_log /var/log/nginx/redmine.access.log main;
    error_log  /var/log/nginx/redmine.error.log;

	location / {
        proxy_pass          http://localhost:3000;
        proxy_redirect      off;
        proxy_buffering     off;
        proxy_set_header    Host $host;
        proxy_set_header    X-Real-IP $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Öffne die Datei /etc/nginx/nginx.conf und bearbeite sie.

$ sudo nano /etc/nginx/nginx.conf

Füge die folgende Zeile vor der Zeile include /etc/nginx/conf.d/*.conf; ein.

server_names_hash_bucket_size  64;

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Überprüfe die Syntax der Nginx-Konfigurationsdatei.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Starte den Nginx-Dienst neu, um die neue Konfiguration zu aktivieren.

$ sudo systemctl restart nginx

Deine Redmine-Anwendung sollte nun unter https://redmine.example.com erreichbar sein.

Du solltest den Eintrag für Port 3000 in der Firewall löschen, da er nicht mehr benötigt wird.

$ sudo ufw delete allow 3000

Fazit

Dies ist der Abschluss unseres Tutorials, in dem du gelernt hast, wie du Redmine Project Manager auf einem Debian 11 Server installierst. Außerdem hast du gelernt, wie du die Redmine-Anwendung über Nginx mit dem HTTPS-Protokoll bereitstellst. Wenn du Fragen hast, schreibe sie unten in die Kommentare.

Das könnte dich auch interessieren …