Chatwoot Installation

Ghost108

Benutzer
Mitglied seit
27. Jun 2015
Beiträge
1.248
Punkte für Reaktionen
70
Punkte
68
Hallo zusammen,

auf die Empfehlung eines Users hier im Forum, wollte ich mir gerne mal Chatwoot anschauen:
https://www.chatwoot.com

Hier ist eine self hosted Variante möglich.
Dokumentation für die Docker Installation befindet sich hier:
https://www.chatwoot.com/docs/self-hosted/deployment/docker

Allerdings wüsste ich jetzt nicht, wie ich mit Hilfe dieser Anleitung auf meiner Synology Docker GUI die Installation damit ausführen kann.
Könnt Ihr mich hierbei bitte unterstützen?
Danke !! :)
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.519
Punkte für Reaktionen
404
Punkte
103

Ghost108

Benutzer
Mitglied seit
27. Jun 2015
Beiträge
1.248
Punkte für Reaktionen
70
Punkte
68
Installiere auch gerne über die andere Variante. Nur da müsste mir jemand erklären wie. habe ich so noch nie gemacht :/
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.519
Punkte für Reaktionen
404
Punkte
103
Dann begib dich mal auf die Shell und führe die Befehle von Punkt 2 - 6 aus der Anleitung aus. Schritt 3 willst Du vermutlich lieber über einen richtigen Editor wie VisualStudio Code, Sublimetext, Notepad++ oder ähnlich von Deinem Rechner aus machen statt mit Nano.

Generell würde ich dir empfehlen dir im Docker-Share ein Unterverzeichnis einzurichten und dann die beiden "wget" Befehle dort auszuführen, damit du dann bequem über \\nas-ip\docker\Dein_Unterverzeichnis mit Windows/MacOS die beiden Dateien editieren kannst.

habe ich so noch nie gemacht :/
Dann wird es höchste Zeit...

Bei folgendem Ablauf kann ich dich unterstützen:
Machen -> scheitern -> verwendete Befehle + Konfiguration + Fehlermeldung mit uns teilen -> Hilfe erhalten

Meine Rolle in dem Ablauf wäre dann Hilfe geben bei "Hilfe erhalten". Den Rest musst Du selber machen.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Ulfhednir

Ghost108

Benutzer
Mitglied seit
27. Jun 2015
Beiträge
1.248
Punkte für Reaktionen
70
Punkte
68
Okay, das ist nett !
Was ich bis jetzt gemacht habe:

- In meinem Ordner "docker" einen Unterordner "templates" angelegt
- via SSH auf die Syno > in den Ordner templates navigiert und die beiden wget Befehle ausgeführt. Beide Dateien sind im Ordner vorhanden

Nun soll ich die Dateien anpassen - und hier bin ich unsicher.

Habe bereits die Frontend_URL angepasst von
FRONTEND_URL=http://0.0.0.0:3000
auf
FRONTEND_URL=http://192.168.178.250:6308

und
DEFAULT_LOCALE=en
auf
DEFAULT_LOCALE=de
 
Zuletzt bearbeitet:

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.519
Punkte für Reaktionen
404
Punkte
103

Ghost108

Benutzer
Mitglied seit
27. Jun 2015
Beiträge
1.248
Punkte für Reaktionen
70
Punkte
68
Guten Morgen !

habe jetzt den Befehl erfolgreich ausgeführt:
docker-compose run --rm rails bundle exec rails db:chatwoot_prepare

Container wurden erstellt.
Anschließend noch diesen Befehl abgeschickt:

docker-compose up -d

In der Doku steht nun:
6) Your Chatwoot installation should be accessible with http://{your_ip_address}:3000

Wenn ich http://192.168.178.250:3000 aufrufe passiert nichts.
(Habe Port 3000 belassen, nicht wie in Post 5 geändert)


Container:
Bildschirmfoto 2021-09-22 um 08.04.17.png
 
Zuletzt bearbeitet:

Ulfhednir

Benutzer
Sehr erfahren
Mitglied seit
26. Aug 2013
Beiträge
3.475
Punkte für Reaktionen
1.087
Punkte
194
Ich habe noch keine Zeit für die Installation gefunden. Was hier allerdings sofort ins Auge springt: Der Base-Container ist gestoppt.
Das scheint mir nicht ganz richtig zu sein. Was steht denn im Log des Containers?

base: &base
image: chatwoot/chatwoot:latest
env_file: .env ## Change this file for customized env variables
volumes:
- /data/storage:/app/storage

Hier wäre die .env (anhand der env.example( und der Volumepfad in jedem Fall anzupassen.
 

Ulfhednir

Benutzer
Sehr erfahren
Mitglied seit
26. Aug 2013
Beiträge
3.475
Punkte für Reaktionen
1.087
Punkte
194
Also ich bin ein Schritt weiter gekommen. Es gab einen kleinen Fallstrick.
Der Port der Postgres wurde bereits verwendet und musste entsprechend umgebogen werden.

mxzgE8N.png
 

Ulfhednir

Benutzer
Sehr erfahren
Mitglied seit
26. Aug 2013
Beiträge
3.475
Punkte für Reaktionen
1.087
Punkte
194
Die Integration auf der Homepage ist übrigens auch sehr einfach. Wenngleich das Wordpress-Plugin noch nicht fertig ist, so kann man trotzdem mit einem kleinen JavaScript (Copy & Paste) den Chat gangbar machen. Auf meiner Beta-Page läuft das jetzt ebenfalls. Bleibt die Sache mit der Facebook- und im Step 2 die Chatbot (RASA)-Integration.
 

Ghost108

Benutzer
Mitglied seit
27. Jun 2015
Beiträge
1.248
Punkte für Reaktionen
70
Punkte
68
Gibt es eine Möglichkeit, das du mir den fertigen docker zur Verfügung stellen kannst ? Habe es nach 5 Anläufen frustriert aufgegeben :(
 

Ulfhednir

Benutzer
Sehr erfahren
Mitglied seit
26. Aug 2013
Beiträge
3.475
Punkte für Reaktionen
1.087
Punkte
194
@Ghost108 ich denke nicht, dass ich dir "meinen" Container bereitstellen kann oder wollte. Ich kann dir allerdings noch einen wertvollen Tipp mitgeben:
Nachdem ich gerade Chatwoot reinstallieren wollte, funktionierte meine Installation nicht.

Lösung zu Fallstrick 2: Firewall checken bzw. temporär deaktivieren! Bei Erstellung der Postgres-Datenbank hat diese jedenfalls dazwischengefunkt.
 

Ghost108

Benutzer
Mitglied seit
27. Jun 2015
Beiträge
1.248
Punkte für Reaktionen
70
Punkte
68
nach langer Zeit, versuche ich mich noch mal an diesem Thema. Komme aber leider nicht wirklich weiter, als vorher - im Gegenteil.
Was habe ich bislang gemacht:

unter /volume1/docker/ folgende Ordner angelegt:

- chatwoot
- redis
- postgres

über die shell bin ich in den Ordner chatwoot gegangen

cd /volume1/docker/chatwoot

hier nun folgende Befehle abgesetzt:

wget -O .env https://raw.githubusercontent.com/chatwoot/chatwoot/develop/.env.example
wget -O docker-compose.yaml https://raw.githubusercontent.com/chatwoot/chatwoot/develop/docker-compose.production.yaml

Beide Datei habe ich wie folgt bearbeitetn (bin mir unsicher, ob alles so richtig ist):

.env
Code:
# Used to verify the integrity of signed cookies. so ensure a secure value is set
SECRET_KEY_BASE=691574fa3454833faf252e5bf5d3a57a

# Replace with the URL you are planning to use for your app
FRONTEND_URL=http://192.168.108.251:3000
# To use a dedicated URL for help center pages
# HELPCENTER_URL=http://0.0.0.0:3000

# If the variable is set, all non-authenticated pages would fallback to the default locale.
# Whenever a new account is created, the default language will be DEFAULT_LOCALE instead of en
DEFAULT_LOCALE=de

# If you plan to use CDN for your assets, set Asset CDN Host
ASSET_CDN_HOST=

# Force all access to the app over SSL, default is set to false
FORCE_SSL=false

# This lets you control new sign ups on your chatwoot installation
# true : default option, allows sign ups
# false : disables all the end points related to sign ups
# api_only: disables the UI for signup, but you can create sign ups via the account apis
ENABLE_ACCOUNT_SIGNUP=false

# Redis config
REDIS_URL=redis://redis:6379
# If you are using docker-compose, set this variable's value to be any string,
# which will be the password for the redis service running inside the docker-compose
# to make it secure
REDIS_PASSWORD=MeinRedisPasswort
# Redis Sentinel can be used by passing list of sentinel host and ports e,g. sentinel_host1:port1,sentinel_host2:port2
#REDIS_SENTINELS=
# Redis sentinel master name is required when using sentinel, default value is "mymaster".
# You can find list of master using "SENTINEL masters" command
#REDIS_SENTINEL_MASTER_NAME=

# Redis premium breakage in heroku fix
# enable the following configuration
# ref: https://github.com/chatwoot/chatwoot/issues/2420
# REDIS_OPENSSL_VERIFY_MODE=none

# Postgres Database config variables
# You can leave POSTGRES_DATABASE blank. The default name of
# the database in the production environment is chatwoot_production
POSTGRES_DATABASE=chatwoot
POSTGRES_HOST=postgres
POSTGRES_USERNAME=postgres
POSTGRES_PASSWORD=MeinDBpasswort
RAILS_ENV=development
RAILS_MAX_THREADS=5

# The email from which all outgoing emails are sent
# could user either  `email@yourdomain.com` or `BrandName <email@yourdomain.com>`
MAILER_SENDER_EMAIL="Chatwoot <accounts@chatwoot.com>"

#SMTP domain key is set up for HELO checking
SMTP_DOMAIN=chatwoot.com
# the default value is set "mailhog" and is used by docker-compose for development environments,
# Set the value as "localhost" or your SMTP address in other environments
SMTP_ADDRESS=mailhog
SMTP_PORT=1025
SMTP_USERNAME=
SMTP_PASSWORD=
# plain,login,cram_md5
SMTP_AUTHENTICATION=
SMTP_ENABLE_STARTTLS_AUTO=true
# Can be: 'none', 'peer', 'client_once', 'fail_if_no_peer_cert', see http://api.rubyonrails.org/classes/ActionMailer/Base.html
SMTP_OPENSSL_VERIFY_MODE=peer
# Comment out the following environment variables if required by your SMTP server
# SMTP_TLS=
# SMTP_SSL=

# Mail Incoming
# This is the domain set for the reply emails when conversation continuity is enabled
MAILER_INBOUND_EMAIL_DOMAIN=
# Set this to appropriate ingress channel with regards to incoming emails
# Possible values are :
# relay for Exim, Postfix, Qmail
# mailgun for Mailgun
# mandrill for Mandrill
# postmark for Postmark
# sendgrid for Sendgrid
RAILS_INBOUND_EMAIL_SERVICE=
# Use one of the following based on the email ingress service
# Ref: https://edgeguides.rubyonrails.org/action_mailbox_basics.html
RAILS_INBOUND_EMAIL_PASSWORD=
MAILGUN_INGRESS_SIGNING_KEY=
MANDRILL_INGRESS_API_KEY=

# Storage
ACTIVE_STORAGE_SERVICE=local

# Amazon S3
# documentation: https://www.chatwoot.com/docs/configuring-s3-bucket-as-cloud-storage
S3_BUCKET_NAME=
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_REGION=

# Log settings
# Disable if you want to write logs to a file
RAILS_LOG_TO_STDOUT=true
LOG_LEVEL=info
LOG_SIZE=500

### This environment variables are only required if you are setting up social media channels

# Facebook
# documentation: https://www.chatwoot.com/docs/facebook-setup
FB_VERIFY_TOKEN=
FB_APP_SECRET=
FB_APP_ID=

# https://developers.facebook.com/docs/messenger-platform/instagram/get-started#app-dashboard
IG_VERIFY_TOKEN=

# Twitter
# documentation: https://www.chatwoot.com/docs/twitter-app-setup
TWITTER_APP_ID=
TWITTER_CONSUMER_KEY=
TWITTER_CONSUMER_SECRET=
TWITTER_ENVIRONMENT=

#slack integration
SLACK_CLIENT_ID=
SLACK_CLIENT_SECRET=

### Change this env variable only if you are using a custom build mobile app
## Mobile app env variables
IOS_APP_ID=L7YLMN4634.com.chatwoot.app
ANDROID_BUNDLE_ID=com.chatwoot.app

# https://developers.google.com/android/guides/client-auth (use keytool to print the fingerprint in the first section)
ANDROID_SHA256_CERT_FINGERPRINT=AC:73:8E:DE:EB:56:EA:CC:10:87:02:A7:65:37:7B:38:D4:5D:D4:53:F8:3B:FB:D3:C6:28:64:1D:AA:08:1E:D8

### Smart App Banner
# https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariWebContent/PromotingAppswithAppBanners/PromotingAppswithAppBanners.html
# You can find your app-id in https://itunesconnect.apple.com
#IOS_APP_IDENTIFIER=1495796682

## Push Notification
## generate a new key value here : https://d3v.one/vapid-key-generator/
# VAPID_PUBLIC_KEY=
# VAPID_PRIVATE_KEY=
#
# for mobile apps
# FCM_SERVER_KEY=

## Bot Customizations
USE_INBOX_AVATAR_FOR_BOT=true

### APM and Error Monitoring configurations
## Elastic APM
## https://www.elastic.co/guide/en/apm/agent/ruby/current/getting-started-rails.html
# ELASTIC_APM_SERVER_URL=
# ELASTIC_APM_SECRET_TOKEN=

## Sentry
# SENTRY_DSN=

## Scout
## https://scoutapm.com/docs/ruby/configuration
# SCOUT_KEY=YOURKEY
# SCOUT_NAME=YOURAPPNAME (Production)
# SCOUT_MONITOR=true

## NewRelic
# https://docs.newrelic.com/docs/agents/ruby-agent/configuration/ruby-agent-configuration/
# NEW_RELIC_LICENSE_KEY=
# Set this to true to allow newrelic apm to send logs.
# This is turned off by default.
# NEW_RELIC_APPLICATION_LOGGING_ENABLED=

## Datadog
## https://github.com/DataDog/dd-trace-rb/blob/master/docs/GettingStarted.md#environment-variables
# DD_TRACE_AGENT_URL=

## IP look up configuration
## ref https://github.com/alexreisner/geocoder/blob/master/README_API_GUIDE.md
## works only on accounts with ip look up feature enabled
# IP_LOOKUP_SERVICE=geoip2
# maxmindb api key to use geoip2 service
# IP_LOOKUP_API_KEY=

## Rack Attack configuration
## To prevent and throttle abusive requests
# ENABLE_RACK_ATTACK=true

## Running chatwoot as an API only server
## setting this value to true will disable the frontend dashboard endpoints
# CW_API_ONLY_SERVER=false

## Development Only Config
# if you want to use letter_opener for local emails
# LETTER_OPENER=true
# meant to be used in github codespaces
# WEBPACKER_DEV_SERVER_PUBLIC=

# If you want to use official mobile app,
# the notifications would be relayed via a Chatwoot server
ENABLE_PUSH_RELAY_SERVER=true

# Stripe API key
STRIPE_SECRET_KEY=
STRIPE_WEBHOOK_SECRET=

# Set to true if you want to upload files to cloud storage using the signed url
# Make sure to follow https://edgeguides.rubyonrails.org/active_storage_overview.html#cross-origin-resource-sharing-cors-configuration on the cloud storage after setting this to true.
DIRECT_UPLOADS_ENABLED=


docker-compose.yaml
Code:
version: '3'

services:
  base: &base
    image: chatwoot/chatwoot:latest
    env_file: .env
    volumes:
      - /volume1/docker/chatwoot:/app/storage

  rails:
    <<: *base
    depends_on:
      - postgres
      - redis
    ports:
      - '127.0.0.1:3000:3000'
    environment:
      - NODE_ENV=production
      - RAILS_ENV=production
      - INSTALLATION_ENV=docker
    entrypoint: docker/entrypoints/rails.sh
    command: ['bundle', 'exec', 'rails', 's', '-p', '3000', '-b', '0.0.0.0']

  sidekiq:
    <<: *base
    depends_on:
      - postgres
      - redis
    environment:
      - NODE_ENV=production
      - RAILS_ENV=production
      - INSTALLATION_ENV=docker
    command: ['bundle', 'exec', 'sidekiq', '-C', 'config/sidekiq.yml']

  postgres:
    image: postgres:12
    restart: always
    ports:
      - '127.0.0.1:5432:5432'
    volumes:
      - /volume1/docker/postgres:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=chatwoot
      - POSTGRES_USER=postgres
      # Please provide your own password.
      - POSTGRES_PASSWORD=MeinDBpasswort

  redis:
    image: redis:alpine
    restart: always
    command: ["sh", "-c", "redis-server --requirepass \"$REDIS_PASSWORD\""]
    env_file: .env
    volumes:
      - /volume1/docker/redis:/data
    ports:
      - '127.0.0.1:6379:6379'


Nun folgenden Befehl abgesetzt:
Code:
docker-compose run --rm rails bundle exec rails db:chatwoot_prepare


Logs wie folgt:

Code:
docker-compose run --rm rails bundle exec rails db:chatwoot_prepare
Creating network "chatwoot_default" with the default driver
Pulling postgres (postgres:12)...
12: Pulling from library/postgres
bd159e379b3b: Pull complete
b955aac8d5e0: Pull complete
922fe4565b9a: Pull complete
c39aa91943e9: Pull complete
59e6d12f4c90: Pull complete
d058e68b8750: Pull complete
03549096a058: Pull complete
c941aeed5670: Pull complete
55b1f4e6ce74: Pull complete
54237d54def2: Pull complete
e20e1932d3bf: Pull complete
1fff46cc246f: Pull complete
bd0628841034: Pull complete
Digest: sha256:9bb9989581be2b92756d795435a3c032fa701603bbf34490bf724d6ab65bd240
Status: Downloaded newer image for postgres:12
Pulling redis (redis:alpine)...
alpine: Pulling from library/redis
213ec9aee27d: Pull complete
fb541f77610a: Pull complete
dc2e3041aaa5: Pull complete
aadae582a31f: Pull complete
996b5def1876: Pull complete
bed3be2507e6: Pull complete
Digest: sha256:cbb77cfe5c69b1d5aba8750d428624b7fe2cbe0d7761838e81f3caa82b852e0f
Status: Downloaded newer image for redis:alpine
Pulling rails (chatwoot/chatwoot:latest)...
latest: Pulling from chatwoot/chatwoot
213ec9aee27d: Already exists
883dc0fd21f8: Pull complete
3e76ce379c47: Pull complete
5d2270009fd0: Pull complete
80a903e6c173: Pull complete
bcbb2d4b5499: Pull complete
4b09ca950317: Pull complete
076dbf665bc2: Pull complete
9c94fc96cdb3: Pull complete
4f4fb700ef54: Pull complete
Digest: sha256:ca454903ab9cd42be37a9eb204ceea0e170dfcae6eac32ca4f94b399e323e653
Status: Downloaded newer image for chatwoot/chatwoot:latest
Creating chatwoot_postgres_1 ...
Creating chatwoot_postgres_1 ... error
WARNING: Host is already in use by another container

ERROR: for chatwoot_postgres_1  Cannot start service postgres: driver failed programming external connectivity on endpoint chatwoot_postgres_1 (619900c82c14abf6f1c76bc12f34ddd984639a58cae4fead001f57e9d707Creating chatwoot_redis_1    ... done

ERROR: for postgres  Cannot start service postgres: driver failed programming external connectivity on endpoint chatwoot_postgres_1 (619900c82c14abf6f1c76bc12f34ddd984639a58cae4fead001f57e9d707ab7e): Error starting userland proxy: listen tcp4 127.0.0.1:5432: bind: address already in use
ERROR: Encountered errors while bringing up the project.

Und hier häng ich nun und komme nicht weiter :(
Kann jemand bitte unterstützen? Vielen Dank!
 

Ghost108

Benutzer
Mitglied seit
27. Jun 2015
Beiträge
1.248
Punkte für Reaktionen
70
Punkte
68
Gegenfrage: Warum matrix?
Bin noch offen und kenne beide System nicht.

maxtrix gibt es auch als Docker Lösung?
Kostenfrei und self hosted?
iPhone App?

Mir gehts es darum, dass ich ein self hosted Chat System habe, wo mir Besucher meiner Webseite "privat" schreiben können.
Quasi einen Live Chat - aber nur zwischen Besucher A und mir, oder Besucher B und mir, ....
 

Ulfhednir

Benutzer
Sehr erfahren
Mitglied seit
26. Aug 2013
Beiträge
3.475
Punkte für Reaktionen
1.087
Punkte
194
Nur einmal als Zwischenfrage warum nicht gleich matrix?
Die ursprüngliche Empfehlung kam von mir und begründet sich in erster Linie mit kommerziellen Background den Ghost108 betreibt.
Chatwoot lässt sich mit Hilfe eines fertigen JavaScripts schnell und einfach in bestehende Webseiten integrieren. Dazu existieren Schnittstellen zu Chatbots (Rasa, Dialogflow) mit dem du automatisierte Chatflows erstellen kannst, aber auch Schnittstellen zu Facebook. Rasa verfolgt hier eher das Omni-Channel-Prinzip.

Matrix ist derzeit eher das Mittel der Wahl für die interne Adhoc-Kommunikation. Klar kannst du Matrix ebenfalls aufbohren und verschiedene Frontends (Element & Co.) raufsetzen - aber die Integration und Anpassung bei Matrix ist schon etwas komplexer.
Chatwoot ist out of the box für Kundenanfragen besser geeignet.

maxtrix gibt es auch als Docker Lösung?
Kostenfrei und self hosted?
iPhone App?
Gibt es, davon rate ich aber aufgrund obiger Beschreibung prinzipiell ab.

P.S.: Ich habe beides bereits installiert und durchgetestet.
 

Ghost108

Benutzer
Mitglied seit
27. Jun 2015
Beiträge
1.248
Punkte für Reaktionen
70
Punkte
68
danke für die detaillierte Antwort :)
Dann würde ich gerne wieder zu meinem Post 1 zurückkommen.
Kannst du hierbei helfen ? :)
 

Ulfhednir

Benutzer
Sehr erfahren
Mitglied seit
26. Aug 2013
Beiträge
3.475
Punkte für Reaktionen
1.087
Punkte
194
Creating chatwoot_postgres_1 ...
Creating chatwoot_postgres_1 ... error
WARNING: Host is already in use by another container

Ich würde mal behaupten, dass der Port 5432 bereits von einem anderen Container (auch Postgres!?) belegt ist.
 

Ghost108

Benutzer
Mitglied seit
27. Jun 2015
Beiträge
1.248
Punkte für Reaktionen
70
Punkte
68
Der Witz ist:
es existieren keine Container - das ist eine jüngfreuliche virtuelle DSM
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.519
Punkte für Reaktionen
404
Punkte
103
Mir ist nicht ganz klar was die .env Datei noch tun soll, wenn alle Werte fest in die compose-Datei eingetragen werden.
Eigentlich ist es dafür gedacht, dass Variablen als Key=Value herausgezogen werden können und dann die Variablen über ${Key} in die compose-Datei gerendert werden. Da die Compose-Datei nur noch hart verdrahtete Werte hat, wird imho nichts von der .env genutzt.


Führ dock mal sudo docker-compose config aus und schau mal mit welcher Konfiguration der Container-Zoo wirklich deployed wird.

Ist dir klar was die Port mappings 127.0.0.1:{hostport}:{containerport} bewirken? Wenn es dir klar ist und es so gewollt ist: gut. Wenn es unklar ist, dann würde ich entweder keine ip angeben, oder die IP eines Interfaces deines NAS über das die Kommunikation reinkommen wird.

Update: Ich habe mich bzgl. der Variablen aus der .env geirrt. Sie werden doch verwendet. Der erste Paragraf ist also falsch und sollte ignoriert werden..
 
Zuletzt bearbeitet:


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat