Discourse 如何更改默认端口

网站 discourse 1059 views 37 replies
#1 ·

本菜鸡之前自己也建了一个 Discourse 论坛,但是由于 Discourse 本身官网要求强制 Docker 部署,而且容器内部自带 Nginx,而且绑定了 80 和 443 端口,导致如果我想要在同一台机器上部署其他网站或者同时运行

恰好在论坛看见站长 @anonymous_coward_old 发的技术细节,于是本菜鸡很好奇这个方法是如何实现的:
undefined

ぜーんぶ弾けなーい!

❤️
1
#2 ·

其实就是想知道反代是怎么实现的啦~
困扰挺久的其实 😇

ぜーんぶ弾けなーい!

#3 ·

你 ping 的那个账号是公用的匿名账号

@anonymous_coward

🤤️❤️
2
admin #4 ·

Change the container definition

This is where we change how Discourse actually gets set up. We don’t want the container listening on ports - instead, we’ll tell it to listen on a special file.

You need to edit /var/discourse/containers/app.yml to disable ssl and add template to create nginx sock. It should look like this:

# base templates used; can cut down to include less functionality per container templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  # - "templates/web.ssl.template.yml" # remove - https will be handled by outer nginx
  # - "templates/web.letsencrypt.ssl.template.yml" # remove -- https will be handled by outer nginx
  - "templates/web.ratelimited.template.yml"
  - "templates/web.socketed.template.yml"  # <-- Added

Be sure to remove or comment out the exposed ports by putting a # in front.

# which ports to expose?
# expose: comment out entire section by putting a # in front of each line
# - "80:80"   # http
# - "443:443" # https

Now you can

/var/discourse/launcher rebuild app

to rebuild Discourse to make its data available to the socket.

容器里头的 nginx 监听在 unix socket,共享到容器外,用你喜欢的反代代理即可,如 caddy:

    reverse_proxy unix//var/discourse/shared/app/nginx.http.sock
❤️
2
#5 ·
I
IO

谢谢佬 by the way 想知道你服务器是哪里买的

ぜーんぶ弾けなーい!

admin #6 ·
Soyo34325 Soyo34325

这个全方位好,除了 CN net

€13.68/m 8C16G+512G, unlimited BW, dedicated CPU


这个香港的有时候网络好

https://hosthatch.com/

$15/m 4C16G(1 dedicated CPU+3 shared CPU), ~4T BW

👍️❤️
2
#7 ·
I
IO

感谢分享 我用了某杂牌(狗云) 🫠
有机会换过来

ぜーんぶ弾けなーい!

admin #8 ·
Soyo34325 Soyo34325

杂牌厂不能用(尤其是国人商家、one man)
Hetzner Netcup(Anexia) Vultr DO Linode AWS/Lightsail Oracle(如果你的信用卡能注册的上) Azure/GCP(如果你有钱) 正规大厂随便用(这些我都用过)

#9 ·
I
IO

我原先用的是 Digital Ocean 学生包里面的
但是后来考虑到需要长期维护 学生包的钱只能用一年所以想迁移
现在既然这样考虑去办一张 visa 卡了
其实我昨天买了雨云的香港 CN2 优化机器 但是被恶心了(封了 587 端口 邮箱服务器没法用

ぜーんぶ弾けなーい!

#10 ·
I
IO
shared_user:

Hetzner

感觉反代服务器是不是可以“飘一点” 😈

ぜーんぶ弾けなーい!

admin #11 ·
Soyo34325 Soyo34325

如果业务不重要可以。不靠谱的反代机器会:

  • 降低 uptime
  • 有数据泄露的风险(man in the middle)
#12 ·
I
IO

感谢提醒,不过我还想再问一下人在国内你的支付方法是什么:

  • 信用卡
  • palpay
    大学生怎么办卡 🫠

ぜーんぶ弾けなーい!

admin #13 ·
Soyo34325 Soyo34325

去 BOC 陕西省分行办理“长城跨境通”借记卡(debit card)(Mastercard)

#14 ·
I
IO

All right. Thanks a lot.

ぜーんぶ弾けなーい!

#15 ·
Soyo34325 Soyo34325

不要用国内的外币借记卡,要不停手动购汇,很麻烦,而且外汇管制很恼人

建议是:有条件就去香港开个户,拿 hsbc 的 master card 扣张卡

没条件可以去广发银行办一个 American Express Lucky 借记卡,这张卡是人民币卡,所有境内外交易(对在大陆也可以用)全部以人民币记账。而且如果你在广发没有其他卡的话,本卡可开一类账户。

❤️
3
#16 ·
uika_winwing uika_winwing

确实有想去香港开一张卡的想法 国内的各种外汇卡让我很迷 🫠
不知道香港开卡有没有什么要求 准备明年寒假去一趟香港 顺便办一张电话卡

ぜーんぶ弾けなーい!

#17 ·
uika_winwing uika_winwing

对了老哥,借记卡、信用卡、储蓄卡这三种卡有啥关系和区别吗

ぜーんぶ弾けなーい!

#18 ·
Soyo34325 Soyo34325

为什么是 老哥 🥺😢 紫砂了 :hugging_face_pleading_face:

wave_gif❤️
4
#19 ·
uika_winwing uika_winwing

小哥哥 小姐姐 🥹
教教小弟弟 好么 😖

ぜーんぶ弾けなーい!

🐈️❤️
2
#20 ·
I
IO

🚪友 想問問本站的簽名或者説小尾巴是什麼插件或者主題組件 很喜歡

ぜーんぶ弾けなーい!

wave_gif❤️
2
#21 ·
Soyo34325 Soyo34325

我平时用工行星座校园卡(信用卡但 0 额度)。是要像 Juicy 说的手动购买外汇。不过我同时在借记卡做美元理财,要用的时候转到信用卡里(由于 0 额度)。

注:如果你也想在境内做(愚蠢的)借记卡汇信用卡。注意把卡开在同银行同地区,否则汇款收费。

#22 ·
hoist hoist

我看了下感觉 BOC 比较适合我(虽然还是要买汇 因为我本身没有工行的卡 办 BOC 的话直接可以用国内的一类借记卡买汇

ぜーんぶ弾けなーい!

#23 ·
Soyo34325 Soyo34325

BOC 莫奈卡

中信和万事达出了一个人民币/美元双币卡,境内扣人民币,境外扣美元。这个卡的好处是可以存人民币,可以直接开一类户,master card 使用范围更广;坏处是不像广发 amex 自动货转,要购汇,然后就是中信的拒付率有点高、而且这个卡新出的,连中信自己的 atm 都不认、

❤️
1
#24 ·
uika_winwing uika_winwing

莫奈卡不是要满足:

  • 中行存满 20w
  • 购入 2w 汇
  • 有 world 卡及以上
    就想一个人办 不想和爸妈说🤪
    感觉就办那种普通的借记 visa 或者 master 卡应该比较容易?

ぜーんぶ弾けなーい!

#25 ·
Soyo34325 Soyo34325

不清楚,不知道还有没有线上申请渠道,没有的话就到营业厅问一下

#26 ·
uika_winwing uika_winwing

准备等开学直接去线下分行去真实一下🥰
或者用银联卡买 paypal?
感觉支付宝用久了这种东西反而用不习惯了

ぜーんぶ弾けなーい!

#27 ·
Soyo34325 Soyo34325

paypal 收手续费挺高的,一般就希望保护隐私/防盗刷的时候用一下 b

🐈️❤️
2
admin #28 ·
Soyo34325 Soyo34325
shared_user:

去 BOC 陕西省分行办理“长城跨境通”借记卡(debit card)(Mastercard)

谁都可以办 没有要求(我已有 BOC RMB 借记卡)
不是 credit card,不用填紧急联系人

🥰️❤️
2
#29 ·
I
IO

老哥我想问一下关于 Cloudflare Tunnel 相关事项:
Discourse 中的反代是通过 Unix 嵌套字实现的 那么我在 Tunnel 的 config 是不是应该这样写:

tunnel: <tunnel-id>
credentials-file: /root/.cloudflared/<tunnel-id>.json

ingress:
  - hostname: tunnel.aicnal.tech
    service: unix:/var/discourse/shared/standalone/nginx.http.sock
  - service: http_status:404

ぜーんぶ弾けなーい!

admin #30 ·
Soyo34325 Soyo34325
tunnel: abcdefg
credentials-file: /abcdefg.json
ingress:
  - service: unix:/var/discourse/shared/app/nginx.http.sock

admin #31 ·
Soyo34325 Soyo34325
可樂不是真樂,post:20, topic:13063, full:true, username:Aicnal:

🚪友 想問問本站的簽名或者説小尾巴是什麼插件或者主題組件 很喜歡

see:

system:

添加了 old-school 个性签名功能,可在个人资料里设置。(使用 Discourse Signatures - plugin - Discourse Meta )

#32 ·
I
IO

想问问能不能分享一下 Caddy 反代源站的配置 之前用 Nginx 成功了 Caddy 死活用不了 :sob_smiling_face_with_tear:

ぜーんぶ弾けなーい!

admin #33 ·
Soyo34325 Soyo34325

cat /etc/caddy/Caddyfile

proxy.xjtu.app:443 {
tls /etc/caddy/ssl/xjtu.app.cer /etc/caddy/ssl/xjtu.app.key
 #reverse_proxy * https://xjtu.app {  
# or:
 reverse_proxy * https://44.44.44.44 {
    transport http {
      tls_server_name  xjtu.app
    }
   }


}



❤️
1
#34 ·
I
IO

这个好像是 docker 容器通过 unix 映射到宿主机的 caddy 配置文件
我源站搞定了 现在想通过一台线路较好的机器进行反代

example.com {
    reverse_proxy / https://source-server-domain/ {
        header_up Host {http.request.host}
        header_up X-Real-IP {http.request.remote}
        header_up X-Forwarded-For {http.request.remote}
        header_up X-Forwarded-Proto {http.request.scheme}
    }
}

反代之后

HTTP/1.1 308 Permanent Redirect
Connection: close
Location: https://
Server: Caddy
Date: Sat, 24 Aug 2024 04:25:06 GMT
Content-Length: 0

ぜーんぶ弾けなーい!

#35 ·
I
IO

有没有遇到过 308 的情况 我感觉我配置是没有问题的 当时访问代理站点后没有内容返回
源站:https://direct.know-cnu.wiki
代理:https://know-cnu.wiki
:sob_smiling_face_with_tear:

ぜーんぶ弾けなーい!

#36 ·
Soyo34325 Soyo34325

弄了一天了 最终用 Nginx 解决了 贴一下

location ^~ / {
    proxy_pass https://direct.know-cnu.wiki; 
    proxy_set_header Host direct.know-cnu.wiki;
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header REMOTE-HOST $remote_addr; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection "upgrade"; 
    proxy_set_header X-Forwarded-Proto $scheme; 
    proxy_http_version 1.1; 
    add_header X-Cache $upstream_cache_status; 
    add_header Cache-Control no-cache; 
    proxy_ssl_server_name on; 
}

感觉遇到这种问题还挺常见的 在配置 CloudFlare 代理的相关域名的时候经常出现
image

ぜーんぶ弾けなーい!

❤️
1
#37 ·
I
IO

想在容器更新的时候自定义一个 502 页面(之前看到门的源站有类似的功能
但是我没有成功实现

direct.know-cnu.wiki {
    reverse_proxy unix//var/discourse/shared/standalone/nginx.http.sock {
        header_up Host {host}
        header_up X-Real-IP {remote}
        header_up X-Forwarded-For {remote}
        header_up X-Forwarded-Proto {scheme}
    }

    handle_errors {
        @502 {
            expression {http.error.status_code} == 502
        }
        file_server {
            root /etc/caddy
        }
    }

    route /502.html {
        root * /etc/caddy
        file_server
    }

    header {
        Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
    }
}

我看着寻思也妹问题啊,自定义的 502 页面在 caddy 文件夹内

ぜーんぶ弾けなーい!

#38 ·
Soyo34325 Soyo34325
可樂不是真樂,post:37, topic:13063, username:Aicnal:
handle_errors {
        @502 {
            expression {http.error.status_code} == 502
        }
        file_server {
            root /etc/caddy
        }
    }

    route /502.html {
        root * /etc/caddy
        file_server
    }

曹 忘记 rewrite 了

ぜーんぶ弾けなーい!