Projekte/Forum/Upgrade: Unterschied zwischen den Versionen

Aus FunkFeuer Wiki
Zur Navigation springen Zur Suche springen
(anpassung ldap fix 3)
 
(16 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
(initial credits @kaefert:)
(initial credits @kaefert for documentation)
(credits to @lcnittl for ldap fix 2+3)


Hallo Leute!
Hallo Leute!


Ich dokumentiere hier mal was zum Upgrade dieser Discourse Instanz (mit angepasstem LDAP Plugin) notwendig ist.
Ich dokumentiere hier mal was zum Upgrade dieser Discourse Instanz (mit angepasstem LDAP Plugin) notwendig ist.
Dieser Beitrag ist auch im Forum hinterlegt: https://forum.funkfeuer.at/t/discourse-upgrade/229


'''Achtung:''' SSH Zugang wird benötigt! Upgrade ohne nachträgliche Anpassung mittels SSH Zugang hinterlässt das LDAP Plugin funktionsunfähig!
'''Achtung:''' SSH Zugang wird benötigt! Upgrade ohne nachträgliche Anpassung mittels SSH Zugang hinterlässt das LDAP Plugin funktionsunfähig!


Dieser Beitrag ist 1:1 auch im Forum hinterlegt: https://forum.funkfeuer.at/t/discourse-upgrade/229
Evtl. will man vor einem Discourse Upgrade prüfen, ob das FunkFeuer Wiki gerade „schnell“ funktioniert oder lange (mehr als 2-3 Sekunden) ladet um einen Artikel anzuzeigen oder eine Suche durchzuführen.
 
Da das Wiki am gleichen Server rennt wie das Forum, kann man daran "erkennen", ob der Server gerade „ausgelastet“ ist oder nicht.
 
Hintergrund: falls zu wenig Ressourcen zur Verfügung stehen, kann das Upgrade (wegen Zeitüberschreitungen bei der Installation) fehl schlagen.


== FunkFeuer Forum - Discourse Upgrade ==
== FunkFeuer Forum - Discourse Upgrade ==
Zeile 15: Zeile 22:
(Download bricht im aktuellen Firefox Browser manchmal ab, da einfach auf einen anderen Browser ausweichen.)
(Download bricht im aktuellen Firefox Browser manchmal ab, da einfach auf einen anderen Browser ausweichen.)


2. Mit einem Administrator/Moderator (jeder sollte eigentlich SSH Zugang haben) abklären ob es ein aktuelles Systembackup mit State "Success" gibt: <code>sudo veeam</code>
2. Mit einem Administrator/Moderator (jeder sollte eigentlich SSH Zugang haben) abklären ob es ein aktuelles Systembackup gibt:


(falls der letzte Job nicht im State "Success" ist, bitte @vchrizz dazu kontaktieren, die Backups werden derzeit noch per SMB (über das SIL-Peering direkt) offsite auf seinen Server am Node "mh" abgelegt, solange keine entsprechende Möglichkeit auf FunkFeuer Infrastruktur gegeben ist. Wünschenswert wäre eine verlässliche Möglichkeit Backups sicher auf FunkFeuer Infrastruktur abzulegen. Derzeit scheint das leider nicht der Fall zu sein.)
Wünschenswert wäre eine verlässliche Möglichkeit Backups sicher auf FunkFeuer Infrastruktur abzulegen.


    Latest backup sessions:
[[Services/Organisation|Derzeit scheint es diese Möglichkeit noch nicht zu geben.]]
   
      Job name                State          Started at            Finished at
     
      FunkfeuerForum          Success        2018-04-18 06:00:02    2018-04-18 06:01:50
      FunkfeuerForum          Success        2018-04-17 06:00:01    2018-04-17 06:14:05


3. Ein System-Upgrade durchführen:
3. Ein System-Upgrade durchführen:
Zeile 38: Zeile 40:
4.1. Falls das Forum nicht geladen wird, kann das Problem am Theme liegen. Versuche den [https://forum.funkfeuer.at/safe-mode Safe-Mode].
4.1. Falls das Forum nicht geladen wird, kann das Problem am Theme liegen. Versuche den [https://forum.funkfeuer.at/safe-mode Safe-Mode].


4.2. Mittels Safe-Mode dann in der [https://forum.funkfeuer.at/admin/customize/themes/2 Administration / Anpassen] beim Default-Theme die beiden Theme-Komponenten Slick und Tiles entfernen.
4.2. Mittels Safe-Mode dann in der [https://forum.funkfeuer.at/admin/customize/themes/2 Administration / Anpassen] beim Default-Theme die beiden Theme-Komponenten Slick und Tiles entfernen und nach dem erfolgreichen Upgrade wieder hinzufügen.


4.3. Es könnte auch sein, dass eine Meldung kommt, dass das Upgrade per CLI gemacht werden muss:
4.3. Es könnte auch sein, dass eine Meldung kommt, dass das Upgrade per CLI gemacht werden muss:
Zeile 59: Zeile 61:
Dort den oben verlinkten Git-Commit die zwei grün markierten Zeilen in diese Datei einpflegen:
Dort den oben verlinkten Git-Commit die zwei grün markierten Zeilen in diese Datei einpflegen:


  /var/www/discourse/plugins/discourse-ldap-auth/gems/2.6.5/gems/omniauth-ldap-1.0.5/lib/omniauth/strategies/ldap.rb
  /var/www/discourse/plugins/discourse-ldap-auth/gems/2.7.2/gems/omniauth-ldap-1.0.5/lib/omniauth/strategies/ldap.rb


5.2. LDAP fix 2 einspielen, damit über LDAP authentifizierte User automatisch der Gruppe zugeordnet werden, die auf Funkfeuer-intern und Sub-Kategorien zugreifen kann:
5.2. LDAP fix 2 einspielen, damit über LDAP authentifizierte User automatisch der Gruppe zugeordnet werden, die auf Funkfeuer-intern und Sub-Kategorien zugreifen kann:


https://github.com/kaefert/discourse-ldap-auth/commit/b112b83640e7769daeb25043c9d12db8b011b29b
<strike>https://github.com/kaefert/discourse-ldap-auth/commit/b112b83640e7769daeb25043c9d12db8b011b29b</strike>
 
Code so anpassen:
        match[:name] = match[:name] || auth_info[:name]
        return LDAPUser.new(match).auth_result
      when 'auto'
        auth_info[:groups] = [] unless auth_info.key?(:groups)
        auth_info[:groups] |= ['redeemer-user','vertrauensstufe_2']
        ldap_user = LDAPUser.new(auth_info)
        return ldap_user.auth_result
      else
        return fail_auth('Invalid option for ldap_user_create_mode setting.')


Auf dem selben weg wie 5.1. diesmal in die Datei einfplegen:
Auf dem selben weg wie 5.1. diesmal in die Datei einfplegen:
Zeile 69: Zeile 82:
  /var/www/discourse/plugins/discourse-ldap-auth/plugin.rb
  /var/www/discourse/plugins/discourse-ldap-auth/plugin.rb


5.3. LDAP Anpassungen aktiv bringen durch Restart von Discourse:
5.3 LDAP fix 3
 
class LDAPUser
  attr_reader :name, :email, :username, :user
  def initialize (auth_info)
    @name = auth_info[:name]
    @email = auth_info[:email]
    @username = auth_info[:nickname]
    @user = SiteSetting.ldap_lookup_users_by == 'username' ? User.find_by_username(@username) : User.find_by_email(@email)
    create_user() unless self.account_exists?
    assign_user_groups(auth_info[:groups]) unless auth_info[:groups].nil?
  end
  def auth_result
    result = Auth::Result.new
    result.name = @name
    result.username = @username
    result.email = @email
    result.user = @user
    result.omit_username = true
    result.email_valid = true
    return result
  end
  def account_exists?
    return !@user.nil?
  end
  private
  def create_user
    @user = User.create!(name: self.name, email: self.email, username: self.username)
    @user.activate
  end
  private
  def assign_user_groups(user_groups)
    user_groups.each do |group_name|
      group = Group.find_by(name: group_name)
      @user.groups |= [group] unless group.nil?
    end
  end
end
 
 
Auf dem selben weg wie 5.2. diesmal in die Datei einfplegen:
 
/var/www/discourse/plugins/discourse-ldap-auth/lib/ldap_user.rb
 
5.4. LDAP Anpassungen aktiv bringen durch Restart von Discourse:


(evtl. mit <code>logout</code> zuerst aus dem container wieder ausloggen)
(evtl. mit <code>logout</code> zuerst aus dem container wieder ausloggen)
Zeile 90: Zeile 151:


Sollte es dennoch Probleme mit SSL geben: https://meta.discourse.org/t/setting-up-https-support-with-lets-encrypt/40709
Sollte es dennoch Probleme mit SSL geben: https://meta.discourse.org/t/setting-up-https-support-with-lets-encrypt/40709
  #### Manually reissue the cert
  #### Manually issue new cert
  ./launcher enter app
  ./launcher enter app
  sv stop nginx
  sv stop nginx
  /usr/sbin/nginx -c /etc/nginx/letsencrypt.conf
  cd /shared/letsencrypt
  LE_WORKING_DIR=/shared/letsencrypt DEBUG=1 /shared/letsencrypt/acme.sh --issue -d example.com -k 4096 -w /var/www/discourse/public
  LE_WORKING_DIR=/shared/ssl /shared/letsencrypt/acme.sh --issue -d forum.funkfeuer.at -d oldforum.funkfeuer.at --webroot /var/www/discourse/public/
  LE_WORKING_DIR=/shared/letsencrypt /shared/letsencrypt/acme.sh --installcert -d example.com --fullchainpath /shared/ssl/example.com.cer --keypath /shared/ssl/example.com.key --reloadcmd "sv reload nginx"
  # restart "inner" nginx from container
  /usr/sbin/nginx -c /etc/nginx/letsencrypt.conf -s stop
sv start nginx
exit
# restart "outer" nginx from vm
  systemctl restart nginx

Aktuelle Version vom 14. November 2021, 10:54 Uhr

(initial credits @kaefert for documentation) (credits to @lcnittl for ldap fix 2+3)

Hallo Leute!

Ich dokumentiere hier mal was zum Upgrade dieser Discourse Instanz (mit angepasstem LDAP Plugin) notwendig ist.

Dieser Beitrag ist auch im Forum hinterlegt: https://forum.funkfeuer.at/t/discourse-upgrade/229

Achtung: SSH Zugang wird benötigt! Upgrade ohne nachträgliche Anpassung mittels SSH Zugang hinterlässt das LDAP Plugin funktionsunfähig!

Evtl. will man vor einem Discourse Upgrade prüfen, ob das FunkFeuer Wiki gerade „schnell“ funktioniert oder lange (mehr als 2-3 Sekunden) ladet um einen Artikel anzuzeigen oder eine Suche durchzuführen.

Da das Wiki am gleichen Server rennt wie das Forum, kann man daran "erkennen", ob der Server gerade „ausgelastet“ ist oder nicht.

Hintergrund: falls zu wenig Ressourcen zur Verfügung stehen, kann das Upgrade (wegen Zeitüberschreitungen bei der Installation) fehl schlagen.

FunkFeuer Forum - Discourse Upgrade

1. Unter https://forum.funkfeuer.at/admin/backups ein Discourse-Daten-Backup erstellen und runterladen.

(Download bricht im aktuellen Firefox Browser manchmal ab, da einfach auf einen anderen Browser ausweichen.)

2. Mit einem Administrator/Moderator (jeder sollte eigentlich SSH Zugang haben) abklären ob es ein aktuelles Systembackup gibt:

Wünschenswert wäre eine verlässliche Möglichkeit Backups sicher auf FunkFeuer Infrastruktur abzulegen.

Derzeit scheint es diese Möglichkeit noch nicht zu geben.

3. Ein System-Upgrade durchführen:

sudo apt update
apt list --upgradable
sudo apt upgrade

(ggf. bei kernel-upgrade danach die VM neu starten: sudo reboot)

4. https://forum.funkfeuer.at/admin/upgrade aufrufen und upgrade durchklicken.

4.1. Falls das Forum nicht geladen wird, kann das Problem am Theme liegen. Versuche den Safe-Mode.

4.2. Mittels Safe-Mode dann in der Administration / Anpassen beim Default-Theme die beiden Theme-Komponenten Slick und Tiles entfernen und nach dem erfolgreichen Upgrade wieder hinzufügen.

4.3. Es könnte auch sein, dass eine Meldung kommt, dass das Upgrade per CLI gemacht werden muss:

sudo su
cd /var/discourse
git pull
./launcher rebuild app

5. Versuche am Forum mit LDAP einzuloggen, falls das fehlschlägt, obwohl Login-Details sicher korrekt eingegeben wurden, müssen folgende zwei Anpassungen angewendet werden:

5.1. LDAP fix 1 einspielen, damit das Plugin den OpenLDAP von Funkfeuer versteht:

https://github.com/vchrizz/omniauth-ldap/commit/346d5c27e1dacb0fa6aeedf1f65e29bd9f1bb524

Dazu per ssh einloggen, und mittels folgenden Befehlen in die Discourse Docker Instanz wechseln:

sudo su
cd /var/discourse
./launcher enter app

Dort den oben verlinkten Git-Commit die zwei grün markierten Zeilen in diese Datei einpflegen:

/var/www/discourse/plugins/discourse-ldap-auth/gems/2.7.2/gems/omniauth-ldap-1.0.5/lib/omniauth/strategies/ldap.rb

5.2. LDAP fix 2 einspielen, damit über LDAP authentifizierte User automatisch der Gruppe zugeordnet werden, die auf Funkfeuer-intern und Sub-Kategorien zugreifen kann:

https://github.com/kaefert/discourse-ldap-auth/commit/b112b83640e7769daeb25043c9d12db8b011b29b

Code so anpassen:

       match[:name] = match[:name] || auth_info[:name]
       return LDAPUser.new(match).auth_result
     when 'auto'
       auth_info[:groups] = [] unless auth_info.key?(:groups)
       auth_info[:groups] |= ['redeemer-user','vertrauensstufe_2']
       ldap_user = LDAPUser.new(auth_info)
       return ldap_user.auth_result
     else
       return fail_auth('Invalid option for ldap_user_create_mode setting.')

Auf dem selben weg wie 5.1. diesmal in die Datei einfplegen:

/var/www/discourse/plugins/discourse-ldap-auth/plugin.rb

5.3 LDAP fix 3

class LDAPUser
  attr_reader :name, :email, :username, :user

  def initialize (auth_info)
    @name = auth_info[:name]
    @email = auth_info[:email]
    @username = auth_info[:nickname]
    @user = SiteSetting.ldap_lookup_users_by == 'username' ? User.find_by_username(@username) : User.find_by_email(@email)
    create_user() unless self.account_exists?
    assign_user_groups(auth_info[:groups]) unless auth_info[:groups].nil?
  end

  def auth_result
    result = Auth::Result.new
    result.name = @name
    result.username = @username
    result.email = @email
    result.user = @user
    result.omit_username = true
    result.email_valid = true
    return result
  end

  def account_exists?
    return !@user.nil?
  end

  private
  def create_user
    @user = User.create!(name: self.name, email: self.email, username: self.username)
    @user.activate
  end
  private
  def assign_user_groups(user_groups)
    user_groups.each do |group_name|
      group = Group.find_by(name: group_name)
      @user.groups |= [group] unless group.nil?
    end
  end
end


Auf dem selben weg wie 5.2. diesmal in die Datei einfplegen:

/var/www/discourse/plugins/discourse-ldap-auth/lib/ldap_user.rb

5.4. LDAP Anpassungen aktiv bringen durch Restart von Discourse:

(evtl. mit logout zuerst aus dem container wieder ausloggen)

docker restart app

6. Prüfen ob beide (Discourse und mailserver) Docker Container wieder laufen:

docker ps

sollte in etwa so aussehen: (sonst im Zweifelsfall die VM neu starten, dauert nur wenige Minuten, die Container starten dann beide)

vchrizz@forum:~$ docker ps
CONTAINER ID        IMAGE                            COMMAND                  CREATED             STATUS              PORTS                                                                                                                                    NAMES
72670824e10a        local_discourse/app              "/sbin/boot"             3 weeks ago         Up 8 minutes                                                                                                                                                 app
5b64315e0a1e        tvial/docker-mailserver:latest   "/bin/sh -c 'supervi…"   6 weeks ago         Up 8 minutes        0.0.0.0:25->25/tcp, 110/tcp, 0.0.0.0:143->143/tcp, 0.0.0.0:587->587/tcp, 0.0.0.0:993->993/tcp, 465/tcp, 0.0.0.0:995->995/tcp, 4190/tcp   mail

Sollte es dennoch Probleme mit SSL geben: https://meta.discourse.org/t/setting-up-https-support-with-lets-encrypt/40709

#### Manually issue new cert
./launcher enter app
sv stop nginx
cd /shared/letsencrypt
LE_WORKING_DIR=/shared/ssl /shared/letsencrypt/acme.sh --issue -d forum.funkfeuer.at -d oldforum.funkfeuer.at --webroot /var/www/discourse/public/
# restart "inner" nginx from container
sv start nginx
exit
# restart "outer" nginx from vm
systemctl restart nginx