업데이트로 사이트가 오프라인 상태가 됐어요. 언제 복구될까요?

어제 https://creativecommunity.us의 Discourse를 업그레이드하려고 시도했습니다. 업그레이드에 실패하여 사이트가 오프라인 상태가 되었습니다. 현재 다음과 같은 메시지가 표시됩니다:

"오ops

이 토론 포럼을 구동하는 소프트웨어에서 예상치 못한 문제가 발생했습니다. 불편을 드려 죄송합니다.

오에 대한 자세한 정보는 로그에 기록되었으며 자동 알림이 생성되었습니다. 확인해 보겠습니다.

추가 조치는 필요하지 않습니다. 그러나 오류 상태가 지속되면 오류를 재현하는 단계를 포함한 추가 세부 정보를 사이트의 피드백 카테고리에 토론 주제를 게시하여 제공할 수 있습니다."

이 메시지는 "확인해 보겠습니다"라고 되어 있습니다. 보통 얼마나 걸리나요?

감사합니다 ~

이 메시지는 사용자에게 표시됩니다. 여기의 'we’는 'you’를 가리키는 것 같습니다. 따라서 관리자로서 단순히 기다리는 것만으로는 문제를 해결할 수 없습니다. :cry:

재구성을 시도해 볼 수 있습니다. 오류가 계속되면, meta에 상세한 오류를 붙여넣고 도움을 요청하세요. :slightly_smiling_face:

안녕하세요, @Scott-CC :slight_smile:

Linca가 말했듯이, 두 번째 재빌드(rebuild)가 문제를 해결하는 데 도움이 될 수 있습니다. :crossed_fingers:

다만 ‘oops’ 페이지가 표시되는 경우, 어딘가에서 충돌이 발생했다면 /logs에서 더 자세한 정보를 확인할 수 있습니다.

안전 모드(Safe mode)를 시도해 보는 것도 좋습니다. 이를 통해 문제의 원인이 될 수 있는 플러그인이나 테마 구성 요소를 좁혀서 해당 요소를 비활성화한 상태에서 정확한 문제를 파악할 수 있습니다.

감사합니다!

한번 해볼게요. 감사합니다!

불행히도 안전 모드로 돌아가도 동일한 오류 메시지가 나타났습니다. 다음 단계에 대한 제안이 있을까요?

저는 Discourse에 대해 완전히 초보입니다(친구를 도와주는 중이므로) 모든 도움이 큰 감사의 대상입니다.

다음 단계는 다음과 같습니다:

이것도 작동하지 않으면, 예를 들어 다음 방법으로 로그를 확인할 수 있습니다:

docker exec app ls -l /shared/log/rails/
docker exec -it app tail -f /shared/log/rails/production.log

감사합니다. 이 분야에 대해 완전 초보라 죄송합니다만, 로그에 접근하려면 호스트에 로그인해야 하는 건 맞죠? (Digital Ocean)

그리고 "docker exec app"이 뭔지 전혀 모르겠습니다. 죄송합니다.

사이트에서 /logs 경로가 작동하지 않는 경우에만 해당됩니다(관리자로 로그인되어 있어야 합니다).

/logs 경로로 이동하면 하얀 화면만 보입니다 :frowning:

사이트에 어떤 플러그인이 설치되어 있는지 공유해 주실 수 있을까요? 알려진 문제가 있는 플러그인을 찾아낼 수 있을지도 모릅니다.

로그나 안전 모드에서 추가적인 세부 정보를 얻지 못하는 한, 무언가를 해결해 보려고 재빌드(rebuild)를 시도해 보겠습니다. 안전 모드가 도움이 되지 않는다면, 비공식 플러그인이 원인이 되는 경우가 많으므로 app.yml에서 모든 비공식 플러그인을 제거한 후(그리고 재빌드) 진행해 볼 수도 있습니다.

또한, 로그인 요구 사항이 일반 안전 모드 경로에 장애를 주고 있을 수 있으므로, 관리자 로그인 안전 모드 경로를 사용할 수도 있습니다. 사이트 주소에 /u/admin-login을 추가한 후 관리자 이메일을 입력하고 안전 모드 옵션을 체크하면, 현재 발생 중인 문제를 우회할 수 있는 로그인 링크가 전송됩니다. 가능성은 낮지만, 시도해 볼 만한 방법입니다. :slight_smile:

불행히도 관리자 로그인이 되지 않았습니다.

호스팅 업체인 Digital Ocean의 백엔드에는 접근할 수 있지만, 터미널 기반의 Ubuntu 환경이라 거기서 뭘 해야 할지 전혀 감이 잡히지 않습니다.

친구를 도와주고 있는데, 어떤 플러그인이 설치되어 있는지 친구도 잘 모릅니다. 기억을 더듬어 보면 플러그인이 많지는 않았던 것 같습니다. 채팅 플러그인과 다른 것 한두 개 정도였던 것 같아요.

도움 주셔서 감사합니다.

수정: 과거에 사용자의 사이트를 관리했던 것 같습니다. 이제 다시 구축하고 있습니다. 또한 PostgreSQL 15 업데이트도 필요했는데, 이 작업도 함께 수행했습니다.

cd /var/discourse
./launcher rebuild app

이렇게 하면 해결될 것입니다. 약 10분 정도 걸립니다. 그래도 해결되지 않으면 디스크가 가득 차 있는지 또는 스왑 공간이 필요한지 확인해 보세요.

df -h
free -h

스왑 공간을 추가해야 할 가능성이 있습니다.

그마저 실패하면 문제를 돈으로 해결해야 합니다. 저에게 연락 주시면 다시 정상 작동하도록 복구해 드리겠습니다.

정말 위기에서 구해주셨어요! 감사합니다!!

OP와 동일한 문제를 겪고 있습니다. UI를 통해 업그레이드를 시도했는데 실패했고, 이로 인해 사이트가 오프라인 상태가 되었습니다.

터미널(AWS)을 통해 업데이트를 시도해 보고 있지만, /launcher rebuild app 명령이 약 30분 정도 진행되다가 멈추고 더 이상 진행되지 않습니다.

하룻밤 내내 실행해 두었지만, 결과는 없었습니다. 오히려 인스턴스가 잠기는 것 같아서 AWS 콘솔을 통해 재시작해야 다시 접속할 수 있었습니다.

재빌드에 공간이 부족해서 그런가 생각했지만, EBS 용량을 두 배로 늘려도 도움이 되지 않았습니다.

여기까지 진행됩니다:

요약
Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.8.0-1031-aws x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Thu Jul 10 14:26:49 UTC 2025

  System load:  0.13               Processes:             111
  Usage of /:   56.9% of 47.39GB   Users logged in:       0
  Memory usage: 24%                IPv4 address for enX0: 172.31.60.182
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

173 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status


Last login: Thu Jul 10 12:14:09 2025 from 18.206.107.28
ubuntu@ip-172-31-60-182:~$ cd /var/discourse/
ubuntu@ip-172-31-60-182:/var/discourse$ launcher stop app
launcher: command not found
ubuntu@ip-172-31-60-182:/var/discourse$ /launcher stop app
-bash: /launcher: No such file or directory
ubuntu@ip-172-31-60-182:/var/discourse$ ./launcher stop app
Cannot connect to the docker daemon - verify it is running and you have access
ubuntu@ip-172-31-60-182:/var/discourse$ docker status
docker: 'status' is not a docker command.
See 'docker --help'
ubuntu@ip-172-31-60-182:/var/discourse$ ./launcher update app
Cannot connect to the docker daemon - verify it is running and you have access
ubuntu@ip-172-31-60-182:/var/discourse$ ./launcher rebuild app
Cannot connect to the docker daemon - verify it is running and you have access
ubuntu@ip-172-31-60-182:/var/discourse$ docker version
Client: Docker Engine - Community
 Version:           27.1.2
 API version:       1.46
 Go version:        go1.21.13
 Git commit:        d01f264
 Built:             Mon Aug 12 11:50:54 2024
 OS/Arch:           linux/amd64
 Context:           default
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.46/version": dial unix /var/run/docker.sock: connect: permission denied
ubuntu@ip-172-31-60-182:/var/discourse$ sudo docker version
Client: Docker Engine - Community
 Version:           27.1.2
 API version:       1.46
 Go version:        go1.21.13
 Git commit:        d01f264
 Built:             Mon Aug 12 11:50:54 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          27.1.2
  API version:      1.46 (minimum version 1.24)
  Go version:       go1.21.13
  Git commit:       f9522e5
  Built:            Mon Aug 12 11:50:54 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.7.20
  GitCommit:        8fc6bcff51318944179630522a095cc9dbf9f353
 runc:
  Version:          1.1.13
  GitCommit:        v1.1.13-0-g58aa920
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
ubuntu@ip-172-31-60-182:/var/discourse$ sudo su -
root@ip-172-31-60-182:~# cd /var/discourse
root@ip-172-31-60-182:/var/discourse# ./launcher update app
x86_64 arch detected.
Usage: launcher COMMAND CONFIG [--skip-prereqs] [--docker-args STRING]
Commands:
    start:       Start/initialize a container
    stop:        Stop a running container
    restart:     Restart a container
    destroy:     Stop and remove a container
    enter:       Open a shell to run commands inside the container
    logs:        View the Docker logs for a container
    bootstrap:   Bootstrap a container for the config based on a template
    run:         Run the given command with the config in the context of the last bootstrapped image
    rebuild:     Rebuild a container (destroy old, bootstrap, start new)
    cleanup:     Remove all containers that have stopped for > 24 hours
    start-cmd:   Generate docker command used to start container

Options:
    --skip-prereqs             Don't check launcher prerequisites
    --docker-args              Extra arguments to pass when running docker
    --skip-mac-address         Don't assign a mac address
    --run-image                Override the image used for running the container
root@ip-172-31-60-182:/var/discourse# ./launcher run app
x86_64 arch detected.
Unable to find image 'local_discourse/app:latest' locally
docker: Error response from daemon: pull access denied for local_discourse/app, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
See 'docker run --help'.
root@ip-172-31-60-182:/var/discourse# sudo ./launcher run app
x86_64 arch detected.
Unable to find image 'local_discourse/app:latest' locally
docker: Error response from daemon: pull access denied for local_discourse/app, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
See 'docker run --help'.
root@ip-172-31-60-182:/var/discourse# ./launcher rebuild app
x86_64 arch detected.
Ensuring launcher is up to date
Launcher is up-to-date
2.0.20250710-0019: Pulling from discourse/base
Digest: sha256:9f9e69653b83259d951b2bc63393a9200a6a260db0a0b55bf85ab567f596c9a3
Status: Image is up to date for discourse/base:2.0.20250710-0019
docker.io/discourse/base:2.0.20250710-0019
/usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups.rb
/usr/local/bin/pups --stdin
I, [2025-07-10T14:34:06.749840 #1]  INFO -- : Reading from stdin
I, [2025-07-10T14:34:06.783263 #1]  INFO -- : File > /etc/service/postgres/run  chmod: +x  chown: 
I, [2025-07-10T14:34:06.787190 #1]  INFO -- : File > /etc/service/postgres/log/run  chmod: +x  chown: 
I, [2025-07-10T14:34:06.794555 #1]  INFO -- : File > /etc/runit/3.d/99-postgres  chmod: +x  chown: 
I, [2025-07-10T14:34:06.800229 #1]  INFO -- : File > /root/install_postgres  chmod: +x  chown: 
I, [2025-07-10T14:34:06.804200 #1]  INFO -- : File > /root/upgrade_postgres  chmod: +x  chown: 
I, [2025-07-10T14:34:06.808529 #1]  INFO -- : Replacing data_directory = '/var/lib/postgresql/15/main' with data_directory = '/shared/postgres_data' in /etc/postgresql/15/main/postgresql.conf
I, [2025-07-10T14:34:06.816873 #1]  INFO -- : Replacing (?-mix:#?listen_addresses *=.*) with listen_addresses = '*' in /etc/postgresql/15/main/postgresql.conf
I, [2025-07-10T14:34:06.817572 #1]  INFO -- : Replacing (?-mix:#?synchronous_commit *=.*) with synchronous_commit = $db_synchronous_commit in /etc/postgresql/15/main/postgresql.conf
I, [2025-07-10T14:34:06.821784 #1]  INFO -- : Replacing (?-mix:#?shared_buffers *=.*) with shared_buffers = $db_shared_buffers in /etc/postgresql/15/main/postgresql.conf
I, [2025-07-10T14:34:06.822781 #1]  INFO -- : Replacing (?-mix:#?work_mem *=.*) with work_mem = $db_work_mem in /etc/postgresql/15/main/postgresql.conf
I, [2025-07-10T14:34:06.824081 #1]  INFO -- : Replacing (?-mix:#?default_text_search_config *=.*) with default_text_search_config = '$db_default_text_search_config' in /etc/postgresql/15/main/postgresql.conf
I, [2025-07-10T14:34:06.825023 #1]  INFO -- : Replacing (?-mix:#?checkpoint_segments *=.*) with checkpoint_segments = $db_checkpoint_segments in /etc/postgresql/15/main/postgresql.conf
I, [2025-07-10T14:34:06.826225 #1]  INFO -- : Replacing (?-mix:#?logging_collector *=.*) with logging_collector = $db_logging_collector in /etc/postgresql/15/main/postgresql.conf
I, [2025-07-10T14:34:06.827143 #1]  INFO -- : Replacing (?-mix:#?log_min_duration_statement *=.*) with log_min_duration_statement = $db_log_min_duration_statement in /etc/postgresql/15/main/postgresql.conf
I, [2025-07-10T14:34:06.829174 #1]  INFO -- : Replacing (?-mix:^#local +replication +postgres +peer$) with local replication postgres  peer in /etc/postgresql/15/main/pg_hba.conf
I, [2025-07-10T14:34:06.831036 #1]  INFO -- : Replacing (?-mix:^host.*all.*all.*127.*$) with host all all 0.0.0.0/0 md5 in /etc/postgresql/15/main/pg_hba.conf
I, [2025-07-10T14:34:06.831299 #1]  INFO -- : Replacing (?-mix:^host.*all.*all.*::1\/128.*$) with host all all ::/0 md5 in /etc/postgresql/15/main/pg_hba.conf
I, [2025-07-10T14:34:06.832342 #1]  INFO -- : > if [ -f /root/install_postgres ]; then
  /root/install_postgres && rm -f /root/install_postgres
elif [ -e /shared/postgres_run/.s.PGSQL.5432 ]; then
  socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1
fi

2025/07/10 14:34:09 socat[33] E connect(, AF=1 "/shared/postgres_run/.s.PGSQL.5432", 36): Connection refused
I, [2025-07-10T14:34:09.325619 #1]  INFO -- : Generating locales (this might take a while)...
  en_US.UTF-8... done
Generation complete.

I, [2025-07-10T14:34:09.326466 #1]  INFO -- : > HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/15/bin/postmaster -D /etc/postgresql/15/main
I, [2025-07-10T14:34:09.336782 #1]  INFO -- : File > /usr/local/bin/create_db  chmod: +x  chown: 
I, [2025-07-10T14:34:09.356777 #1]  INFO -- : File > /var/lib/postgresql/take-database-backup  chmod: +x  chown: postgres:postgres
I, [2025-07-10T14:34:09.369678 #1]  INFO -- : File > /var/spool/cron/crontabs/postgres  chmod:   chown: 
I, [2025-07-10T14:34:09.370276 #1]  INFO -- : > sleep 5
2025-07-10 14:34:09.616 UTC [38] LOG:  starting PostgreSQL 15.13 (Debian 15.13-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
2025-07-10 14:34:09.618 UTC [38] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2025-07-10 14:34:09.618 UTC [38] LOG:  listening on IPv6 address "::", port 5432
2025-07-10 14:34:09.624 UTC [38] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2025-07-10 14:34:09.651 UTC [49] LOG:  database system was interrupted; last known up at 2025-07-10 12:26:43 UTC
2025-07-10 14:34:09.723 UTC [49] LOG:  database system was not properly shut down; automatic recovery in progress
2025-07-10 14:34:09.732 UTC [49] LOG:  redo starts at B/E8A9AB18
2025-07-10 14:34:09.732 UTC [49] LOG:  invalid record length at B/E8A9AC00: wanted 24, got 0
2025-07-10 14:34:09.732 UTC [49] LOG:  redo done at B/E8A9ABC8 system usage: CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s
2025-07-10 14:34:09.741 UTC [47] LOG:  checkpoint starting: end-of-recovery immediate wait
2025-07-10 14:34:09.758 UTC [47] LOG:  checkpoint complete: wrote 3 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.005 s, sync=0.002 s, total=0.020 s; sync files=2, longest=0.001 s, average=0.001 s; distance=0 kB, estimate=0 kB
2025-07-10 14:34:09.780 UTC [38] LOG:  database system is ready to accept connections
I, [2025-07-10T14:34:14.374060 #1]  INFO -- : 
I, [2025-07-10T14:34:14.374950 #1]  INFO -- : > /usr/local/bin/create_db
2025-07-10 14:34:14.556 UTC [56] postgres@postgres ERROR:  database "discourse" already exists
2025-07-10 14:34:14.556 UTC [56] postgres@postgres STATEMENT:  CREATE DATABASE discourse;
createdb: error: database creation failed: ERROR:  database "discourse" already exists
2025-07-10 14:34:14.653 UTC [59] postgres@discourse ERROR:  role "discourse" already exists
2025-07-10 14:34:14.653 UTC [59] postgres@discourse STATEMENT:  create user discourse;
ERROR:  role "discourse" already exists
NOTICE:  extension "hstore" already exists, skipping
NOTICE:  extension "pg_trgm" already exists, skipping
NOTICE:  extension "vector" already exists, skipping
NOTICE:  version "0.8.0" of extension "vector" is already installed
NOTICE:  extension "hstore" already exists, skipping
NOTICE:  extension "pg_trgm" already exists, skipping
NOTICE:  extension "vector" already exists, skipping
NOTICE:  version "0.8.0" of extension "vector" is already installed
I, [2025-07-10T14:34:15.375245 #1]  INFO -- : GRANT
ALTER SCHEMA
CREATE EXTENSION
CREATE EXTENSION
CREATE EXTENSION
ALTER EXTENSION
CREATE EXTENSION
CREATE EXTENSION
CREATE EXTENSION
ALTER EXTENSION
UPDATE 0

I, [2025-07-10T14:34:15.375613 #1]  INFO -- : > echo postgres installed!
I, [2025-07-10T14:34:15.380090 #1]  INFO -- : postgres installed!

I, [2025-07-10T14:34:15.384491 #1]  INFO -- : File > /etc/service/redis/run  chmod: +x  chown: 
I, [2025-07-10T14:34:15.388524 #1]  INFO -- : File > /etc/service/redis/log/run  chmod: +x  chown: 
I, [2025-07-10T14:34:15.392347 #1]  INFO -- : File > /etc/runit/3.d/10-redis  chmod: +x  chown: 
I, [2025-07-10T14:34:15.394875 #1]  INFO -- : Replacing daemonize yes with  in /etc/redis/redis.conf
I, [2025-07-10T14:34:15.400010 #1]  INFO -- : Replacing (?-mix:^pidfile.*$) with  in /etc/redis/redis.conf
I, [2025-07-10T14:34:15.400706 #1]  INFO -- : > install -d -m 0755 -o redis -g redis /shared/redis_data
I, [2025-07-10T14:34:15.407363 #1]  INFO -- : 
I, [2025-07-10T14:34:15.407683 #1]  INFO -- : Replacing (?-mix:^logfile.*$) with logfile "" in /etc/redis/redis.conf
I, [2025-07-10T14:34:15.408567 #1]  INFO -- : Replacing (?-mix:^bind .*$) with  in /etc/redis/redis.conf
I, [2025-07-10T14:34:15.409953 #1]  INFO -- : Replacing (?-mix:^dir .*$) with dir /shared/redis_data in /etc/redis/redis.conf
I, [2025-07-10T14:34:15.411380 #1]  INFO -- : Replacing (?-mix:^protected-mode yes) with protected-mode no in /etc/redis/redis.conf
I, [2025-07-10T14:34:15.412629 #1]  INFO -- : Replacing # io-threads 4 with io-threads $redis_io_threads in /etc/redis/redis.conf
I, [2025-07-10T14:34:15.413828 #1]  INFO -- : > echo redis installed
I, [2025-07-10T14:34:15.415894 #1]  INFO -- : redis installed

I, [2025-07-10T14:34:15.416407 #1]  INFO -- : > cat /etc/redis/redis.conf | grep logfile
I, [2025-07-10T14:34:15.422899 #1]  INFO -- : logfile ""

I, [2025-07-10T14:34:15.423444 #1]  INFO -- : > exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf
I, [2025-07-10T14:34:15.426194 #1]  INFO -- : > sleep 10
105:C 10 Jul 2025 14:34:15.460 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
105:C 10 Jul 2025 14:34:15.460 # Redis version=7.0.15, bits=64, commit=00000000, modified=0, pid=105, just started
105:C 10 Jul 2025 14:34:15.460 # Configuration loaded
105:M 10 Jul 2025 14:34:15.460 * monotonic clock: POSIX clock_gettime
105:M 10 Jul 2025 14:34:15.464 * Running mode=standalone, port=6379.
105:M 10 Jul 2025 14:34:15.465 # Server initialized
105:M 10 Jul 2025 14:34:15.465 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
105:M 10 Jul 2025 14:34:15.465 # WARNING Your system is configured to use the 'xen' clocksource which might lead to degraded performance. Check the result of the [slow-clocksource] system check: run 'redis-server --check-system' to check if the system's clocksource isn't degrading performance.
105:M 10 Jul 2025 14:34:15.471 * Loading RDB produced by version 7.0.15
105:M 10 Jul 2025 14:34:15.471 * RDB age 7659 seconds
105:M 10 Jul 2025 14:34:15.471 * RDB memory usage when created 7.58 Mb
105:M 10 Jul 2025 14:34:15.505 * Done loading RDB, keys loaded: 1240, keys expired: 18.
105:M 10 Jul 2025 14:34:15.505 * DB loaded from disk: 0.036 seconds
105:M 10 Jul 2025 14:34:15.505 * Ready to accept connections
I, [2025-07-10T14:34:25.428346 #1]  INFO -- : 
I, [2025-07-10T14:34:25.428571 #1]  INFO -- : > thpoff echo "thpoff is installed!"
I, [2025-07-10T14:34:25.433266 #1]  INFO -- : thpoff is installed!

I, [2025-07-10T14:34:25.434051 #1]  INFO -- : > /usr/local/bin/ruby -e 'if ENV["DISCOURSE_SMTP_ADDRESS"] == "smtp.example.com"; puts "Aborting! Mail is not configured!"; exit 1; end'
I, [2025-07-10T14:34:25.623161 #1]  INFO -- : 
I, [2025-07-10T14:34:25.623817 #1]  INFO -- : > /usr/local/bin/ruby -e 'if ENV["DISCOURSE_HOSTNAME"] == "discourse.example.com"; puts "Aborting! Domain is not configured!"; exit 1; end'
I, [2025-07-10T14:34:25.707792 #1]  INFO -- : 
I, [2025-07-10T14:34:25.708514 #1]  INFO -- : > /usr/local/bin/ruby -e 'if (ENV["DISCOURSE_CDN_URL"] || "")[0..1] == "//"; puts "Aborting! CDN must have a protocol specified. Once fixed you should rebake your posts now to correct all posts."; exit 1; end'
I, [2025-07-10T14:34:25.792429 #1]  INFO -- : 
I, [2025-07-10T14:34:25.793174 #1]  INFO -- : > rm -f /etc/cron.d/anacron
I, [2025-07-10T14:34:25.798896 #1]  INFO -- : 
I, [2025-07-10T14:34:25.801342 #1]  INFO -- : File > /etc/cron.d/anacron  chmod:   chown: 
I, [2025-07-10T14:34:25.808492 #1]  INFO -- : File > /etc/runit/1.d/copy-env  chmod: +x  chown: 
I, [2025-07-10T14:34:25.812525 #1]  INFO -- : File > /etc/service/unicorn/run  chmod: +x  chown: 
I, [2025-07-10T14:34:25.816576 #1]  INFO -- : File > /etc/service/nginx/run  chmod: +x  chown: 
I, [2025-07-10T14:34:25.820635 #1]  INFO -- : File > /etc/runit/3.d/01-nginx  chmod: +x  chown: 
I, [2025-07-10T14:34:25.824561 #1]  INFO -- : File > /etc/runit/3.d/02-unicorn  chmod: +x  chown: 
I, [2025-07-10T14:34:25.825004 #1]  INFO -- : Replacing # postgres with if [ -f /root/install_postgres ]; then
  /root/install_postgres
  rm /root/install_postgres
fi
sv start postgres || exit 1
 in /etc/service/unicorn/run
I, [2025-07-10T14:34:25.826554 #1]  INFO -- : > cd /var/www/discourse && sudo -H -E -u discourse git clean -f
I, [2025-07-10T14:34:26.964358 #1]  INFO -- : 
I, [2025-07-10T14:34:26.964998 #1]  INFO -- : > cd /var/www/discourse && sudo -H -E -u discourse bash -c '
  set -o errexit
  if [ $(git rev-parse --is-shallow-repository) == "true" ]; then
      git remote set-branches --add origin main
      git remote set-branches origin tests-passed
      git fetch --depth 1 origin tests-passed
  else
      git fetch --tags --prune-tags --prune --force origin
  fi
'
From https://github.com/discourse/discourse
 - [deleted]             (none)     -> origin/0-a-reactions
 - [deleted]             (none)     -> origin/dev/gravatar-toggle-setting
 - [deleted]             (none)     -> origin/dev/load-admin-bundles-for-staff-only
 - [deleted]             (none)     -> origin/fix-composer-dmenu-tablets
 - [deleted]             (none)     -> origin/fix-readonly-take-2
 - [deleted]             (none)     -> origin/fix/mt/upload-optimization
   63df79592..2e11eb20b  main                   -> origin/main
 + 37e2eed7b...e8ef2f73b dev-floatkit-autocomplete-d-editor -> origin/dev-floatkit-autocomplete-d-editor  (forced update)
   a42149b9f..5f1148cc8  dev-lock-alias         -> origin/dev-lock-alias
 * [new branch]          dev/remove-automatic-backups-enabled -> origin/dev/remove-automatic-backups-enabled
 * [new branch]          edit-category-description-layout-fix -> origin/edit-category-description-layout-fix
   4ebd596a2..75d289b97  feature/composer-toolbar-heading-list -> origin/feature/composer-toolbar-heading-list
   44fb1a213..f07b9cbab  feature/theme-site-settings -> origin/feature/theme-site-settings
   7faaab65c..6043ede0a  load-post-draft-from-reply-btn -> origin/load-post-draft-from-reply-btn
 + dcaa1a5cf...cae266b62 loic-upgrade-rails-8.0 -> origin/loic-upgrade-rails-8.0  (forced update)
   b1e0591e3..e8ef2f73b  sandbox/dev-xp-1       -> origin/sandbox/dev-xp-1
   876dbe662..530fbe111  sandbox/dev-xp-2       -> origin/sandbox/dev-xp-2
   daabd040e..75d289b97  sandbox/member-xp-4    -> origin/sandbox/member-xp-4
 * [new branch]          send-email-when-signing-up-via-external-auth -> origin/send-email-when-signing-up-via-external-auth
 * [new branch]          skipped-address-filter -> origin/skipped-address-filter
   f70640f77..a83bd0f67  stable                 -> origin/stable
   6e03440b0..2e11eb20b  tests-passed           -> origin/tests-passed
 * [new branch]          translations-from-crowdin-main -> origin/translations-from-crowdin-main
 * [new branch]          translations-from-crowdin-stable -> origin/translations-from-crowdin-stable
I, [2025-07-10T14:34:28.010715 #1]  INFO -- : 
I, [2025-07-10T14:34:28.011023 #1]  INFO -- : > cd /var/www/discourse && sudo -H -E -u discourse bash -c '
  set -o errexit
  if [[ $(git symbolic-ref --short HEAD) == tests-passed ]] ; then
      git pull
  else
      git -c advice.detachedHead=false checkout tests-passed
  fi
'
Switched to a new branch 'tests-passed'
I, [2025-07-10T14:34:40.617744 #1]  INFO -- : branch 'tests-passed' set up to track 'origin/tests-passed'.

I, [2025-07-10T14:34:40.618255 #1]  INFO -- : > cd /var/www/discourse && sudo -H -E -u discourse git config user.discourse-version tests-passed
I, [2025-07-10T14:34:40.629799 #1]  INFO -- : 
I, [2025-07-10T14:34:40.630226 #1]  INFO -- : > cd /var/www/discourse && mkdir -p tmp
I, [2025-07-10T14:34:40.633195 #1]  INFO -- : 
I, [2025-07-10T14:34:40.633585 #1]  INFO -- : > cd /var/www/discourse && chown discourse:www-data tmp
I, [2025-07-10T14:34:40.636417 #1]  INFO -- : 
I, [2025-07-10T14:34:40.636731 #1]  INFO -- : > cd /var/www/discourse && mkdir -p tmp/pids
I, [2025-07-10T14:34:40.639770 #1]  INFO -- : 
I, [2025-07-10T14:34:40.640244 #1]  INFO -- : > cd /var/www/discourse && mkdir -p tmp/sockets
I, [2025-07-10T14:34:40.643048 #1]  INFO -- : 
I, [2025-07-10T14:34:40.643395 #1]  INFO -- : > cd /var/www/discourse && touch tmp/.gitkeep
I, [2025-07-10T14:34:40.648782 #1]  INFO -- : 
I, [2025-07-10T14:34:40.649284 #1]  INFO -- : > cd /var/www/discourse && mkdir -p                    /shared/log/rails
I, [2025-07-10T14:34:40.653705 #1]  INFO -- : 
I, [2025-07-10T14:34:40.654203 #1]  INFO -- : > cd /var/www/discourse && bash -c "touch -a           /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log"
I, [2025-07-10T14:34:40.660408 #1]  INFO -- : 
I, [2025-07-10T14:34:40.660856 #1]  INFO -- : > cd /var/www/discourse && bash -c "ln    -s           /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log /var/www/discourse/log"
I, [2025-07-10T14:34:40.669796 #1]  INFO -- : 
I, [2025-07-10T14:34:40.670284 #1]  INFO -- : > cd /var/www/discourse && bash -c "mkdir -p           /shared/{uploads,backups}"
I, [2025-07-10T14:34:40.674466 #1]  INFO -- : 
I, [2025-07-10T14:34:40.674928 #1]  INFO -- : > cd /var/www/discourse && bash -c "ln    -s           /shared/{uploads,backups} /var/www/discourse/public"
I, [2025-07-10T14:34:40.680307 #1]  INFO -- : 
I, [2025-07-10T14:34:40.680774 #1]  INFO -- : > cd /var/www/discourse && bash -c "mkdir -p           /shared/tmp/{backups,restores}"
I, [2025-07-10T14:34:40.686442 #1]  INFO -- : 
I, [2025-07-10T14:34:40.686862 #1]  INFO -- : > cd /var/www/discourse && bash -c "ln    -s           /shared/tmp/{backups,restores} /var/www/discourse/tmp"
I, [2025-07-10T14:34:40.691052 #1]  INFO -- : 
I, [2025-07-10T14:34:40.691529 #1]  INFO -- : > cd /var/www/discourse && chown -R discourse:www-data /shared/log/rails /shared/uploads /shared/backups /shared/tmp
I, [2025-07-10T14:34:40.943384 #1]  INFO -- : 
I, [2025-07-10T14:34:40.943501 #1]  INFO -- : > cd /var/www/discourse && [ ! -d public/plugins ] || find public/plugins/ -maxdepth 1 -xtype l -delete
I, [2025-07-10T14:34:40.946212 #1]  INFO -- : 
I, [2025-07-10T14:34:40.946735 #1]  INFO -- : Replacing # redis with if [ ! -d /shared/redis_data ]; then
  install -d -m 0755 -o redis -g redis /shared/redis_data
fi
sv start redis || exit 1 in /etc/service/unicorn/run
I, [2025-07-10T14:34:40.947772 #1]  INFO -- : > cd /var/www/discourse/plugins && git clone https://github.com/discourse/docker_manager.git
Cloning into 'docker_manager'...
I, [2025-07-10T14:34:41.920020 #1]  INFO -- : 
I, [2025-07-10T14:34:41.920542 #1]  INFO -- : > cd /var/www/discourse/plugins && git clone https://github.com/discourse/discourse-yearly-review
Cloning into 'discourse-yearly-review'...
I, [2025-07-10T14:34:42.189827 #1]  INFO -- : 
I, [2025-07-10T14:34:42.190570 #1]  INFO -- : > cd /var/www/discourse/plugins && git clone https://github.com/discourse/discourse-cakeday
Cloning into 'discourse-cakeday'...
I, [2025-07-10T14:34:42.489411 #1]  INFO -- : 
I, [2025-07-10T14:34:42.489888 #1]  INFO -- : > cd /var/www/discourse/plugins && git clone https://github.com/angusmcleod/discourse-ratings.git
Cloning into 'discourse-ratings'...
I, [2025-07-10T14:34:42.792033 #1]  INFO -- : 
I, [2025-07-10T14:34:42.792683 #1]  INFO -- : > cd /var/www/discourse/plugins && git clone https://github.com/discourse/discourse-calendar
Cloning into 'discourse-calendar'...
I, [2025-07-10T14:34:43.546091 #1]  INFO -- : 
I, [2025-07-10T14:34:43.547502 #1]  INFO -- : > cp /var/www/discourse/config/nginx.sample.conf /etc/nginx/conf.d/discourse.conf
I, [2025-07-10T14:34:43.561409 #1]  INFO -- : 
I, [2025-07-10T14:34:43.561632 #1]  INFO -- : > rm /etc/nginx/sites-enabled/default
I, [2025-07-10T14:34:43.566037 #1]  INFO -- : 
I, [2025-07-10T14:34:43.566244 #1]  INFO -- : > mkdir -p /var/nginx/cache
I, [2025-07-10T14:34:43.568477 #1]  INFO -- : 
I, [2025-07-10T14:34:43.569068 #1]  INFO -- : > grep -q 'outlets/before-server' /etc/nginx/conf.d/discourse.conf || ( >&2 echo 'The "before-server" Nginx outlet is missing. This version of discourse_docker is not compatible with the chosen Discourse version.' ; exit 1 )
I, [2025-07-10T14:34:43.571902 #1]  INFO -- : 
I, [2025-07-10T14:34:43.572250 #1]  INFO -- : > grep -q 'outlets/server' /etc/nginx/conf.d/discourse.conf || ( >&2 echo 'The "server" Nginx outlet is missing. This version of discourse_docker is not compatible with the chosen Discourse version.' ; exit 1 )
I, [2025-07-10T14:34:43.575152 #1]  INFO -- : 
I, [2025-07-10T14:34:43.575592 #1]  INFO -- : > grep -q 'outlets/discourse' /etc/nginx/conf.d/discourse.conf || ( >&2 echo 'The "discourse" Nginx outlet is missing. This version of discourse_docker is not compatible with the chosen Discourse version.' ; exit 1 )
I, [2025-07-10T14:34:43.578518 #1]  INFO -- : 
I, [2025-07-10T14:34:43.578955 #1]  INFO -- : > mkdir -p /etc/nginx/conf.d/outlets/before-server
I, [2025-07-10T14:34:43.581226 #1]  INFO -- : 
I, [2025-07-10T14:34:43.581753 #1]  INFO -- : > touch /etc/nginx/conf.d/outlets/before-server/20-redirect-http-to-https.conf
I, [2025-07-10T14:34:43.583621 #1]  INFO -- : 
I, [2025-07-10T14:34:43.583900 #1]  INFO -- : > touch /etc/nginx/conf.d/outlets/before-server/30-ratelimited.conf
I, [2025-07-10T14:34:43.586013 #1]  INFO -- : 
I, [2025-07-10T14:34:43.586181 #1]  INFO -- : > mkdir -p /etc/nginx/conf.d/outlets/server
I, [2025-07-10T14:34:43.588522 #1]  INFO -- : 
I, [2025-07-10T14:34:43.589108 #1]  INFO -- : > touch /etc/nginx/conf.d/outlets/server/10-http.conf
I, [2025-07-10T14:34:43.591027 #1]  INFO -- : 
I, [2025-07-10T14:34:43.591377 #1]  INFO -- : > touch /etc/nginx/conf.d/outlets/server/20-https.conf
I, [2025-07-10T14:34:43.593154 #1]  INFO -- : 
I, [2025-07-10T14:34:43.593653 #1]  INFO -- : > touch /etc/nginx/conf.d/outlets/server/30-offline-page.conf
I, [2025-07-10T14:34:43.595616 #1]  INFO -- : 
I, [2025-07-10T14:34:43.595991 #1]  INFO -- : > mkdir -p /etc/nginx/conf.d/outlets/discourse
I, [2025-07-10T14:34:43.598072 #1]  INFO -- : 
I, [2025-07-10T14:34:43.598471 #1]  INFO -- : > touch /etc/nginx/conf.d/outlets/discourse/20-https.conf
I, [2025-07-10T14:34:43.600421 #1]  INFO -- : 
I, [2025-07-10T14:34:43.601002 #1]  INFO -- : > touch /etc/nginx/conf.d/outlets/discourse/30-ratelimited.conf
I, [2025-07-10T14:34:43.602883 #1]  INFO -- : 
I, [2025-07-10T14:34:43.604077 #1]  INFO -- : Replacing pid /run/nginx.pid; with daemon off; in /etc/nginx/nginx.conf
I, [2025-07-10T14:34:43.606485 #1]  INFO -- : Replacing (?-mix:worker_connections.+$) with worker_connections $nginx_worker_connections; in /etc/nginx/nginx.conf
I, [2025-07-10T14:34:43.606808 #1]  INFO -- : Replacing (?-mix:client_max_body_size.+$) with client_max_body_size $upload_size; in /etc/nginx/conf.d/discourse.conf
I, [2025-07-10T14:34:43.607501 #1]  INFO -- : > sed -i 's#listen 80;##g' /etc/nginx/conf.d/discourse.conf
I, [2025-07-10T14:34:43.611686 #1]  INFO -- : 
I, [2025-07-10T14:34:43.612254 #1]  INFO -- : > if [ -f "/proc/net/if_inet6" ]; then
  echo "listen 80;\nlisten [::]:80;" > /etc/nginx/conf.d/outlets/server/10-http.conf
else
  echo "listen 80;" > /etc/nginx/conf.d/outlets/server/10-http.conf
fi
I, [2025-07-10T14:34:43.614205 #1]  INFO -- : 
I, [2025-07-10T14:34:43.614712 #1]  INFO -- : > echo "done configuring web"
I, [2025-07-10T14:34:43.616568 #1]  INFO -- : done configuring web

I, [2025-07-10T14:34:43.617121 #1]  INFO -- : > cd /var/www/discourse && gem install bundler --conservative -v $(awk '/BUNDLED WITH/ { getline; gsub(/ /,""); print $0 }' Gemfile.lock)
I, [2025-07-10T14:34:44.144672 #1]  INFO -- : 
I, [2025-07-10T14:34:44.145379 #1]  INFO -- : > cd /var/www/discourse && find /var/www/discourse ! -user discourse -exec chown discourse {} \+
I, [2025-07-10T14:34:58.288175 #1]  INFO -- : 
I, [2025-07-10T14:34:58.298580 #1]  INFO -- : > cd /var/www/discourse && if [ -f yarn.lock ]; then
  if [ -d node_modules/.pnpm ]; then
    echo "This version of Discourse uses yarn, but pnpm node_modules are preset. Cleaning up..."
    find ./node_modules ./app/assets/javascripts/*/node_modules -mindepth 1 -maxdepth 1 -exec rm -rf {} +
  fi
  su discourse -c 'yarn install --frozen-lockfile && yarn cache clean'
else
  su discourse -c 'CI=1 pnpm install --frozen-lockfile && pnpm prune'
fi
I, [2025-07-10T14:35:07.928627 #1]  INFO -- : Scope: all 16 workspace projects
Lockfile is up to date, resolution step is skipped
Already up to date

Done in 5.4s using pnpm v9.15.9
Lockfile is up to date, resolution step is skipped
Already up to date


I, [2025-07-10T14:35:07.934991 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle install --jobs $(($(nproc) - 1)) --retry 3'
I, [2025-07-10T14:35:09.407430 #1]  INFO -- : Bundle complete! 143 Gemfile dependencies, 190 gems now installed.
Gems in the groups 'test' and 'development' were not installed.
Bundled gems are installed into `./vendor/bundle`
3 installed gems you directly depend on are looking for funding.
  Run `bundle fund` for details

I, [2025-07-10T14:35:09.407945 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle clean'
I, [2025-07-10T14:35:09.843516 #1]  INFO -- : 
I, [2025-07-10T14:35:09.844596 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'find /var/www/discourse/vendor/bundle -name cache -not -path "*/gems/*" -type d -exec rm -rf {} +'
I, [2025-07-10T14:35:13.000166 #1]  INFO -- : 
I, [2025-07-10T14:35:13.000275 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'find /var/www/discourse/vendor/bundle -name tmp -type d -exec rm -rf {} +'
I, [2025-07-10T14:35:13.145199 #1]  INFO -- : 
I, [2025-07-10T14:35:13.150515 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all'
I, [2025-07-10T14:35:19.066578 #1]  INFO -- : discourse-cakeday is already at latest compatible version
discourse-calendar is already at latest compatible version
discourse-ratings is already at latest compatible version
discourse-yearly-review is already at latest compatible version
docker_manager is already at latest compatible version

I, [2025-07-10T14:35:19.068741 #1]  INFO -- : > exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf
I, [2025-07-10T14:35:19.083032 #1]  INFO -- : > sleep 10
399:C 10 Jul 2025 14:35:19.103 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
399:C 10 Jul 2025 14:35:19.103 # Redis version=7.0.15, bits=64, commit=00000000, modified=0, pid=399, just started
399:C 10 Jul 2025 14:35:19.104 # Configuration loaded
399:M 10 Jul 2025 14:35:19.105 * monotonic clock: POSIX clock_gettime
399:M 10 Jul 2025 14:35:19.105 # Warning: Could not create server TCP listening socket *:6379: bind: Address already in use
399:M 10 Jul 2025 14:35:19.105 # Failed listening on port 6379 (TCP), aborting.
I, [2025-07-10T14:35:29.088163 #1]  INFO -- : 
I, [2025-07-10T14:35:29.089838 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
I, [2025-07-10T14:35:58.643957 #1]  INFO -- : 
I, [2025-07-10T14:35:58.671217 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake assets:precompile:build'
Node.js heap_size_limit is less than 2048MB. Setting --max-old-space-size=2048 and CHEAP_SOURCE_MAPS=1
No existing build info file found.
Running full core build...
...[ConfigLoader]
...[Babel: @embroider/macros > applyPatches]
...[Babel: pretty-text > applyPatches]
...[Babel: @ember/legacy-built-in-components > applyPatches]
...[Babel: ember-source > applyPatches]
[BABEL] Note: The code generator has deoptimised the styling of /var/www/discourse/app/assets/javascripts/discourse/ember/ember-template-compiler.js as it exceeds the max of 500KB.
[BABEL] Note: The code generator has deoptimised the styling of /var/www/discourse/app/assets/javascripts/discourse/ember/ember.js as it exceeds the max of 500KB.
...[Babel: @glimmer/component > applyPatches]
...[Babel: @ember/render-modifiers > applyPatches]
...[Babel: dialog-holder > applyPatches]
...[Babel: ember-this-fallback > applyPatches]
...[Babel: ember-cached-decorator-polyfill > applyPatches]
...[Babel: float-kit > applyPatches]
...[Babel: select-kit > applyPatches]
...[@embroider/compat/app]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
2025-07-10 14:39:10.537 UTC [47] LOG:  checkpoint starting: time
2025-07-10 14:39:15.479 UTC [47] LOG:  checkpoint complete: wrote 32 buffers (0.2%); 0 WAL file(s) added, 0 removed, 0 recycled; write=4.708 s, sync=0.009 s, total=5.522 s; sync files=23, longest=0.007 s, average=0.001 s; distance=134 kB, estimate=134 kB
105:M 10 Jul 2025 14:39:16.016 * 100 changes in 300 seconds. Saving...
105:M 10 Jul 2025 14:39:16.063 * Background saving started by pid 676
676:C 10 Jul 2025 14:39:17.341 * DB saved on disk
676:C 10 Jul 2025 14:39:17.341 * Fork CoW for RDB: current 1 MB, peak 1 MB, average 0 MB
105:M 10 Jul 2025 14:39:17.368 * Background saving terminated with success
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[SourceMapConcat]
[WARN] (broccoli-terser-sourcemap) Minifying "assets/admin.js" took: 331711ms (more than 20,000ms)
...[Babel: discourse > applyPatches]
...[SourceMapConcat]
...[Babel: discourse-plugins > applyPatches]
...[SourceMapConcat]

소소한 업데이트 – 스왑 공간을 늘렸더니 업데이트가 완료되는 것 같습니다. 안타깝게도 앱이 도커에서 실행되는 것 같지만, 제 사이트는 여전히 응답이 없습니다.