在 CentOs 上安装 Discourse 论坛

近期在 CentOs 上搭建了一个 Discourse 论坛 期间遇到了很多问题 这里记录一下安装流程

邮箱配置

注意: 使用 QQ邮箱 必须用 587 端口

  • 一开始 我一直用的是 25465 这两个端口 结果无论如何都不成功
  • 后来我看到默认端口是 587 然后就用 nmap 和 telnet 检测了一下

  • Nmap的结果

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [root@sz discourse]# nmap smtp.exmail.qq.com -p 25,465,587

    Starting Nmap 6.40 ( http://nmap.org ) at 2017-05-15 15:21 CST
    Nmap scan report for smtp.exmail.qq.com (183.232.93.197)
    Host is up (0.016s latency).
    Other addresses for smtp.exmail.qq.com (not scanned): 183.232.125.184
    PORT STATE SERVICE
    25/tcp open smtp
    465/tcp open smtps
    587/tcp open submission

    Nmap done: 1 IP address (1 host up) scanned in 0.19 seconds
  • Telnet的结果

    1
    2
    3
    4
    5
    6
    7
    [root@sz discourse]# telnet smtp.exmail.qq.com 587
    Trying 183.232.125.184...
    Connected to smtp.exmail.qq.com.
    Escape character is '^]'.
    220 smtp.qq.com Esmtp QQ Mail Server
    quit
    Connection closed by foreign host.
  • 可以看出 这个端口也是邮件发送用的 具体什么协议还不知道

  • 打开 containers/app.yml
  • 配置基本信息

    1
    2
    3
    4
    5
    6
    7
    ## TODO: The SMTP mail server used to validate new accounts and send notifications
    DISCOURSE_SMTP_ADDRESS: smtp.exmail.qq.com
    DISCOURSE_SMTP_PORT: 587
    DISCOURSE_SMTP_USER_NAME: root@yumc.pw
    DISCOURSE_SMTP_PASSWORD: **********
    DISCOURSE_SMTP_ENABLE_START_TLS: true
    DISCOURSE_SMTP_AUTHENTICATION: login
  • 修改最后的 run 删除带有 notification_email 这一行开头的# 然后修改单引号内的邮箱为 DISCOURSE_SMTP_USER_NAME 所填写的值

    1
    2
    3
    4
    5
    6
    7
    ## Any custom commands to run after building
    run:
    - exec: echo "Beginning of custom commands"
    ## If you want to set the 'From' email address for your first registration, uncomment and change:
    ## After getting the first signup email, re-comment the line. It only needs to run once.
    - exec: rails r "SiteSetting.notification_email='root@yumc.pw'"
    - exec: echo "End of custom commands"

CentOs 不支持 Docker 的 d_type 的解决方案

  • 从现有硬盘中分离一块区域(分区) 或者找一个新的硬盘
  • 用 fdisk 分区 指定格式为 83
  • 格式化为 xfs mkfs.xfs -n ftype=1 /dev/sdxx 后面的 /dev/sdxx 是你的分区名称
  • 停止 Docker service docker stop
  • 直接挂载到 Docker 主目录 mount -t xfs /dev/sdxx /var/lib/docker
    • 应该是这样的 /dev/sdxx on /var/lib/docker type xfs (rw,relatime,attr2,inode64,noquota)
  • 开启 Docker service docker start

邮箱未配置的情况下 强制激活

  • 进入 discourse_docker 的目录
  • 执行 ./launcher enter app 进入 Docker 内部

    • 按照顺序 执行下列代码

      1
      2
      su postgres
      psql
    • 进入数据库之后执行下列代码

      1
      2
      \c discourse
      SELECT * FROM email_tokens;
    • 没问题的话 你会得到下列数据 找到你的邮箱对应的 token

      1
      2
      3
      4
      5
      id | user_id |     email     |              token               | confirmed | expired |         created_at         |         updated_at
      ----+---------+---------------+----------------------------------+-----------+---------+----------------------------+----------------------------
      1 | -1 | no_email | 359a9a60b656f6f272fa7e6bba724cab | f | t | 2017-05-12 03:08:55.676102 | 2017-05-12 03:08:55.676102
      2 | 1 | admin@yumc.pw | 33d1bd211e8df3easdas81e3963a21ae | t | f | 2017-05-12 05:36:44.113174 | 2017-05-12 05:36:44.113174
      (2 rows)
  • 打开链接 http://你的论坛网址/users/activate-account/你的激活Token