Seal
2021 年 8 月 6 日午前 1:08
1
標準インストールドキュメント(discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub を編集して使用するポートを変更し、LetsEncrypt をコメントアウトして再構築しました。これもすべて正常に行われたようです。
しかし、最も直接的な方法で接続しようとすると:
$lynx https://127.0.0.1:44443
次のエラーが表示されます:
Alert!: Unable to make secure connection to remote host.
ポートに ping を送ることさえできません。
これは理にかなっていますか?コンテナ内にログはありますか?
—編集追加----
$ sudo ./launcher logs app
run-parts: executing /etc/runit/1.d/00-ensure-links
run-parts: executing /etc/runit/1.d/00-fix-var-logs
run-parts: executing /etc/runit/1.d/01-cleanup-web-pids
run-parts: executing /etc/runit/1.d/anacron
run-parts: executing /etc/runit/1.d/cleanup-pids
Cleaning stale PID files
run-parts: executing /etc/runit/1.d/copy-env
Started runsvdir, PID is 43
ok: run: redis: (pid 56) 0s
**chgrp: invalid group: 'syslog'**
ok: run: postgres: (pid 55) 0s
supervisor pid: 57 unicorn pid: 85
(57) Reopening logs
----さらに編集追加----
root@hestia-app:/shared/log/rails# tail -f *.log
===> production_errors.log <==
===> production.log <==
===> sidekiq.log <==
===> unicorn.stderr.log <==
I, [2021-08-06T00:56:35.859967 #85] INFO -- : master done reopening logs
I, [2021-08-06T00:56:50.911700 #142] INFO -- : worker=0 done reopening logs
I, [2021-08-06T00:56:50.911698 #152] INFO -- : worker=1 done reopening logs
I, [2021-08-06T00:56:50.935834 #162] INFO -- : worker=2 done reopening logs
I, [2021-08-06T00:56:50.941733 #233] INFO -- : worker=7 done reopening logs
I, [2021-08-06T00:56:50.945447 #203] INFO -- : worker=5 done reopening logs
I, [2021-08-06T00:56:50.947354 #172] INFO -- : worker=3 done reopening logs
I, [2021-08-06T00:56:50.949949 #187] INFO -- : worker=4 done reopening logs
I, [2021-08-06T00:56:50.953453 #213] INFO -- : worker=6 done reopening logs
===> unicorn.stdout.log <==
Sidekiq PID 131 done reopening logs...
root@hestia-app:/var/log/nginx# tail *.log
===> access.letsencrypt.log <==
===> access.log <==
===> error.letsencrypt.log <==
===> error.log <==
Seal
2021 年 8 月 6 日午前 2:24
2
Docker のエラーに違いない、だって…他の部分はすべて問題なさそうだから。
ただ、8088 ポートにマッピングされた素の Apache コンテナをインストールしただけで、lynx から問題なく動作します。
Seal
2021 年 8 月 6 日午前 3:05
3
アプリを再度起動し、ps ax を実行したところ、すべてが正常に動作しているようです。ただし、コンテナが接続を受け付けていないように見えます。
root@hestia-app:/var/www/discourse# ps ax
PID TTY STAT TIME COMMAND
1 pts/0 Ss+ 0:00 /bin/bash /sbin/boot
43 pts/0 S+ 0:00 /usr/bin/runsvdir -P /etc/service
44 ? Ss 0:00 runsv cron
45 ? Ss 0:00 runsv rsyslog
46 ? Ss 0:00 runsv redis
47 ? Ss 0:00 runsv postgres
48 ? Ss 0:00 runsv unicorn
49 ? Ss 0:00 runsv nginx
50 ? S 0:00 cron -f
51 ? Sl 0:00 rsyslogd -n
52 ? S 0:00 nginx: master process /usr/sbin/nginx
53 ? S 0:00 svlogd /var/log/redis
54 ? S 0:00 svlogd /var/log/postgres
55 ? S 0:00 /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main
56 ? Sl 0:33 /usr/bin/redis-server *:6379
57 ? S 0:04 /bin/bash config/unicorn_launcher -E production -c config/unicorn.conf.rb
64 ? S 0:00 nginx: worker process
65 ? S 0:00 nginx: worker process
66 ? S 0:00 nginx: worker process
67 ? S 0:00 nginx: worker process
68 ? S 0:00 nginx: cache manager process
79 ? Ss 0:00 postgres: 13/main: checkpointer
80 ? Ss 0:00 postgres: 13/main: background writer
81 ? Ss 0:03 postgres: 13/main: walwriter
82 ? Ss 0:00 postgres: 13/main: autovacuum launcher
83 ? Ss 0:00 postgres: 13/main: stats collector
84 ? Ss 0:00 postgres: 13/main: logical replication launcher
85 ? Sl 0:13 unicorn master -E production -c config/unicorn.conf.rb
113 ? Ss 0:01 postgres: 13/main: discourse discourse [local] idle
131 ? SNl 0:48 sidekiq 6.2.1 discourse [0 of 5 busy]
142 ? Sl 0:06 unicorn worker[0] -E production -c config/unicorn.conf.rb
152 ? Sl 0:06 unicorn worker[1] -E production -c config/unicorn.conf.rb
162 ? Sl 0:07 unicorn worker[2] -E production -c config/unicorn.conf.rb
172 ? Sl 0:06 unicorn worker[3] -E production -c config/unicorn.conf.rb
180 ? Ss 0:00 postgres: 13/main: discourse discourse [local] idle
187 ? Sl 0:07 unicorn worker[4] -E production -c config/unicorn.conf.rb
203 ? Sl 0:07 unicorn worker[5] -E production -c config/unicorn.conf.rb
213 ? Sl 0:07 unicorn worker[6] -E production -c config/unicorn.conf.rb
233 ? Sl 0:07 unicorn worker[7] -E production -c config/unicorn.conf.rb
11733 pts/1 Ss 0:00 /bin/bash --login
11748 ? S 0:00 sleep 1
11749 pts/1 R+ 0:00 ps ax
Seal
2021 年 8 月 6 日午前 4:12
4
はい、アプリにアクセスして Discord の Docker 内に Lynx をインストールしました。そちらではウェルカムページが表示されます!つまり、インストールは正常に動作しており、問題は Docker 内部からサーバー外部へのネットワークマッピングにあります。
以下が #docker ps の出力です:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6d0209e4e72 local_discourse/app "/sbin/boot" 51 minutes ago Up 51 minutes 127.0.0.1:8880->80/tcp, 127.0.0.1:4443->443/tcp app
…そして、app.yml の情報はこちらです:
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
expose:
- "127.0.0.1:8880:80" # http
- "127.0.0.1:4443:443" # https
params:
db_default_text_search_config: "pg_catalog.english"
db_shared_buffers: "2048MB"
env:
LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
LANGUAGE: en_US.UTF-8
UNICORN_WORKERS: 8
DISCOURSE_HOSTNAME: [redacted]
DISCOURSE_SMTP_ADDRESS: [redacted]
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: [redacted]
DISCOURSE_SMTP_PASSWORD: "[redacted]"
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (optional, default true)
DISCOURSE_SMTP_DOMAIN: [redacted]
DISCOURSE_NOTIFICATION_EMAIL: [redacted]
## Docker コンテナはステートレスです。すべてのデータは /shared に保存されます
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared
- volume:
host: /var/discourse/shared/standalone/log/var-log
guest: /var/log
## プラグインはここに配置します
## 詳細は https://meta.discourse.org/t/19157 を参照してください
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
## ビルド後に実行する任意のコマンド
run:
- exec: echo "Beginning of custom commands"
- exec: echo "End of custom commands"
Seal
2021 年 8 月 6 日午前 4:23
5
ああ、私がやったことがわかりました。8880:80 は問題なく動作しますが、4443:443 側のみをテストしていました。証明書エラーがあるため、動作しませんでした。仮想ホストレベルでウェブサーバーに証明書をインストールして管理する予定です。すべて動作し次第、興味のある方のために最終的な解決策を投稿します。
Seal
2021 年 8 月 6 日午後 11:39
6
環境のインストール
Hestia Control Panel(サーバー管理用)
Apache2(Web サーバー)
Docker 内の Discourse を Apache2 にリバースプロキシ
Let’sEncrypt はリバースプロキシせず、Hestia が www_root で管理
app.yml に Unix ソケットを設定し(再ビルド):
- "templates/web.socketed.template.yml"
app.yml からポートマッピングと Let’sEncrypt を削除し(再ビルド):
# - "templates/web.ssl.template.yml"
# - "templates/web.letsencrypt.ssl.template.yml"
# - "80:80" # http
# - "443:443" # https
# LETSENCRYPT_ACCOUNT_EMAIL: {your email, probably}
HestiaCP 用に以下の代替 apache2.conf テンプレートを作成してください。HestiaCP を使用していない方へ:他の apache2.conf ファイルを確認すれば、%{replace tags}% が標準的で明白であることがお分かりいただけるでしょう。最も重要な部分は %{replace tags}% をあまり使用していません。また、standalone という表記は、設定によっては socket-only になる場合があります。/var/discourse/shared/ディレクトリの内容を忘れた場合は、そこを確認してください。
{Custom Template}.stpl
<VirtualHost %ip%:%web_ssl_port%>
ServerName %domain_idn%
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / unix:/var/discourse/shared/standalone/nginx.http.sock|http://localhost/
ProxyPassReverse / unix:/var/discourse/shared/standalone/nginx.http.sock|http://localhost/
ServerAdmin %email%
Alias /vstats/ %home%/%user%/web/%domain%/stats/
Alias /error/ %home%/%user%/web/%domain%/document_errors/
CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes
CustomLog /var/log/%web_system%/domains/%domain%.log combined
ErrorLog /var/log/%web_system%/domains/%domain%.error.log
<Directory %home%/%user%/web/%domain%/stats>
AllowOverride All
</Directory>
<Directory %sdocroot%>
AllowOverride All
SSLRequireSSL
Options +Includes -Indexes +ExecCGI
</Directory>
SSLEngine on
SSLVerifyClient none
SSLCertificateFile %ssl_crt%
SSLCertificateKeyFile %ssl_key%
%ssl_ca_str%SSLCertificateChainFile %ssl_ca%
IncludeOptional %home%/%user%/conf/web/%domain%/%web_system%.ssl.conf_*
</VirtualHost>
{Custom Template}.tpl
<VirtualHost %ip%:%web_port%>
ServerName %domain_idn%
%alias_string%
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / unix:/var/discourse/shared/standalone/nginx.http.sock|http://localhost/
ProxyPassReverse / unix:/var/discourse/shared/standalone/nginx.http.sock|http://localhost/
RewriteEngine On
RewriteCond %{REQUEST_URI} !^.well-known/acme-challenge
RewriteRule ^(.*) https://%domain_idn%/$1 [R=301,L]
Alias /vstats/ %home%/%user%/web/%domain%/stats/
Alias /error/ %home%/%user%/web/%domain%/document_errors/
CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes
CustomLog /var/log/%web_system%/domains/%domain%.log combined
ErrorLog /var/log/%web_system%/domains/%domain%.error.log
<Directory %home%/%user%/web/%domain%/stats>
AllowOverride All
</Directory>
<Directory %sdocroot%>
AllowOverride All
Options +Includes -Indexes +ExecCGI
</Directory>
IncludeOptional %home%/%user%/conf/web/%domain%/%web_system%.conf_*
</VirtualHost>
Seal
2021 年 8 月 8 日午前 3:08
7
あ、上記で何か見落としていました。各ファイルにも以下が必要です:
RequestHeader set X-Forwarded-Proto https