1
votes
Mac OSX 10.13.6
ejabberd 19.05

I used an installer to install ejabberd, and when prompted I entered the following information:

ejabberd server domain: localhost
administrator username: 7stud
administrator password: blahblah

I'm following the tutorial: How to Build One to One Chat App Using Ejabberd & Erlang from Scratch?.

If I start ejabberd by clicking on the start executable in the ejabberd-19.05/bin directory, ejabberd starts up, and a web page opens up in my browser. I can then login to the admin web interface.

But, the tutorial directs me to add the following to ejabberd.yml:

auth_method: sql
sql_type: mysql
sql_server: "localhost" 
sql_database: "chat" 
sql_username: "root" 
sql_password: "" 

(For my mysql setup the root user has no password--I just hit return when prompted for the password)

After doing that, if I stop ejabberd, then start ejabberd again, I can no longer login to the admin page.

I have two questions:

  1. Why does adding the db configuration to ejabberd.yml prevent me from logging into the admin web interface?

  2. Why is the mysql db configuration even necessary? According to the ejabberd docs: ejabberd default backend is Mnesia internal database. I'm perfectly happy to use mnesia (and not have to touch ejabberd.yml).

I completed the rest of the tutorial both with the mysql db config stuff in ejabberd.yml and without, but neither User1 nor User2 received a message sent by the other user, so for some reason my ejabberd setup is not working. I also tried configuring another mysql db by following the ejabberd database docs:

auth_method: sql
sql_type: mysql
sql_server: "localhost"
sql_database: "ejabberd"
sql_username: "ejabberd"
sql_password: "12345"

Still no luck.

I'm willing to try any other simple tutorial that uses ejabberd to relay messages if someone can recommend one.

admin web interface:

enter image description here


enter image description here


enter image description here


enter image description here


enter image description here

psi+ images:

enter image description here

enter image description here

enter image description here ejabberd.yml:

###
###'           ejabberd configuration file
###
### The parameters used in this configuration file are explained at
###
###       https://docs.ejabberd.im/admin/configuration
###
### The configuration file is written in YAML.
### *******************************************************
### *******           !!! WARNING !!!               *******
### *******     YAML IS INDENTATION SENSITIVE       *******
### ******* MAKE SURE YOU INDENT SECTIONS CORRECTLY *******
### *******************************************************
### Refer to http://en.wikipedia.org/wiki/YAML for the brief description.
### However, ejabberd treats different literals as different types:
###
### - unquoted or single-quoted strings. They are called "atoms".
###   Example: dog, 'Jupiter', '3.14159', YELLOW
###
### - numeric literals. Example: 3, -45.0, .0
###
### - quoted or folded strings.
###   Examples of quoted string: "Lizzard", "orange".
###   Example of folded string:
###   > Art thou not Romeo,
###     and a Montague?
###


language: "en"
hosts:
  - "localhost"

loglevel: 4
log_rotate_size: 10485760
log_rotate_date: ""
log_rotate_count: 1
log_rate_limit: 100

certfiles:
  - "/Applications/ejabberd-19.05/conf/server.pem"
##  - "/etc/letsencrypt/live/localhost/fullchain.pem"
##  - "/etc/letsencrypt/live/localhost/privkey.pem"

ca_file: "/Applications/ejabberd-19.05/conf/cacert.pem"

listen:
  -
    port: 5222
    ip: "::"
    module: ejabberd_c2s
    max_stanza_size: 262144
    shaper: c2s_shaper
    access: c2s
    starttls_required: true
  -
    port: 5269
    ip: "::"
    module: ejabberd_s2s_in
    max_stanza_size: 524288
  -
    port: 5443
    ip: "::"
    module: ejabberd_http
    tls: true
    request_handlers:
      "/admin": ejabberd_web_admin
      "/api": mod_http_api
      "/bosh": mod_bosh
      "/captcha": ejabberd_captcha
      "/upload": mod_http_upload
      "/ws": ejabberd_http_ws
      "/oauth": ejabberd_oauth
  -
    port: 5280
    ip: "::"
    module: ejabberd_http
    request_handlers:
      "/admin": ejabberd_web_admin
  -
    port: 1883
    ip: "::"
    module: mod_mqtt
    backlog: 1000

s2s_use_starttls: optional

acl:
  local:
    user_regexp: ""
  loopback:
    ip:
      - "127.0.0.0/8"
      - "::1/128"
      - "::FFFF:127.0.0.1/128"
  admin:
    user:
      - "7stud@localhost"

access_rules:
  local:
    - allow: local
  c2s:
    - deny: blocked
    - allow
  announce:
    - allow: admin
  configure:
    - allow: admin
  muc_create:
    - allow: local
  pubsub_createnode:
    - allow: local
  trusted_network:
    - allow: loopback

api_permissions:
  "console commands":
    from:
      - ejabberd_ctl
    who: all
    what: "*"
  "admin access":
    who:
      - access:
          - allow:
            - acl: loopback
            - acl: admin
      - oauth:
        - scope: "ejabberd:admin"
        - access:
          - allow:
            - acl: loopback
            - acl: admin
    what:
      - "*"
      - "!stop"
      - "!start"
  "public commands":
    who:
      - ip: "127.0.0.1/8"
    what:
      - "status"
      - "connected_users_number"

shaper:
  normal: 1000
  fast: 50000

shaper_rules:
  max_user_sessions: 10
  max_user_offline_messages:
    - 5000: admin
    - 100
  c2s_shaper:
    - none: admin
    - normal
  s2s_shaper: fast

max_fsm_queue: 10000

acme:
   contact: "mailto:7stud@localhost"
   ca_url: "https://acme-v01.api.letsencrypt.org"

modules:
  mod_adhoc: {}
  mod_admin_extra: {}
  mod_announce:
    access: announce
  mod_avatar: {}
  mod_blocking: {}
  mod_bosh: {}
  mod_caps: {}
  mod_carboncopy: {}
  mod_client_state: {}
  mod_configure: {}
  mod_disco: {}
  mod_fail2ban: {}
  mod_http_api: {}
  mod_http_upload:
    put_url: "https://@HOST@:5443/upload"
  mod_last: {}
  ## mod_mam:
    ## Mnesia is limited to 2GB, better to use an SQL backend
    ## For small servers SQLite is a good fit and is very easy
    ## to configure. Uncomment this when you have SQL configured:
    ## db_type: sql
    ## assume_mam_usage: true
    ## default: always
  mod_mqtt: {}
  mod_muc:
    access:
      - allow
    access_admin:
      - allow: admin
    access_create: muc_create
    access_persistent: muc_create
    default_room_options:
      allow_subscription: true  # enable MucSub
      ## mam: true
  mod_muc_admin: {}
  mod_offline:
    access_max_user_messages: max_user_offline_messages
  mod_ping: {}
  mod_privacy: {}
  mod_private: {}
  mod_proxy65:
    access: local
    max_connections: 5
  mod_pubsub:
    access_createnode: pubsub_createnode
    plugins:
      - "flat"
      - "pep"
    force_node_config:
      ## Avoid buggy clients to make their bookmarks public
      "storage:bookmarks":
        access_model: whitelist
  mod_push: {}
  mod_push_keepalive: {}
  mod_register:
    ## Only accept registration requests from the "trusted"
    ## network (see access_rules section above).
    ## Think twice before enabling registration from any
    ## address. See the Jabber SPAM Manifesto for details:
    ## https://github.com/ge0rg/jabber-spam-fighting-manifesto
    ip_access: trusted_network
  mod_roster:
    versioning: true
  mod_s2s_dialback: {}
  mod_shared_roster: {}
  mod_stream_mgmt:
    resend_on_timeout: if_offline
  mod_vcard: {}
  mod_vcard_xupdate: {}
  mod_version:
    show_os: false

### Local Variables:
### mode: yaml
### End:

  [1]: https://www.apptha.com/blog/steps-to-build-a-private-one-to-one-chat-app/
  [2]: https://docs.ejabberd.im/admin/databases/mysql/
2
I guess you can not login because your user/pass are in Mnesia and not in MySQL.Pouriya
MySQL is not necessary. But as a sysadmin or developer (who does not know Erlang) it's better. They can go to their MySQL and see their data and manage it, but not in Mnesia.Pouriya

2 Answers

3
votes

Why does adding the db configuration to ejabberd.yml prevent me from logging into the admin web interface?

As Pouriya said, you first created an account in the Mnesia database. Then you switch to a MySQL database where that account doesn't exist... so create it again, or use export2sql to export the Mnesia content to a SQL file and import it in your SQL database.

Why is the mysql db configuration even necessary? According to the ejabberd docs: ejabberd default backend is Mnesia internal database. I'm perfectly happy to use mnesia (and not have to touch ejabberd.yml).

The internal Mnesia database is enough for small servers (hundreds of concurrent users). If you have a small server, that may be enough. But if you plan to have a big server (thousands or millions of concurrent users), better to use a SQL database. It's also possible to start using Mnesia now for a few months, and switch your content and configuration to SQL once you have a lot of users.

1
votes

Do I need to configure the default Mnesia database in ebjabberd.yml? How do I do that?

Install ejabberd, change nothing in the configuration file, then Mnesia is used.

Do I actually need to be able to login to the admin web interface to get the tutorial to work?

"To work" is an ambiguous sentence, so I can't answer.

Where do I create an account? In Mysql? In Ejabberd?

In ejabberd, as you did with the first account that was stored in Mnesia.

I have two users who want to pass one message between them, namely "hi".

For two users.... just install ejabberd, register two accounts in ejabberd and that's all.