콘텐츠로 이동

CMS 서버 설치

사이트에 CMS 서버를 세우는 순서입니다. 전문 지식 없이 따라 할 수 있게 썼습니다 — 설치 파일이 준비 상태를 스스로 점검하고, 필요한 것은 직접 설치합니다.

시작하기 전에 — 받은 것을 한곳에 모읍니다

섹션 제목: “시작하기 전에 — 받은 것을 한곳에 모읍니다”

Windows PC 의 C:\treet 에 받으신 것을 전부 넣어 두세요. 폴더가 없으면 만드시면 됩니다.

받으시는 꾸러미는 이렇게 생겼습니다 — 폴더째 통째로 옮기세요.

C:\treet\
읽어주세요.md ← 🔴 **먼저 읽으세요.** 이 현장의 값이 적혀 있습니다
목록.md ← 들어 있는 파일과 sha256
TreeT_코드서명_공개인증서.cer ← 🔴 키오스크마다 **설치 전에** 등록합니다
check-install.ps1 ← 설치가 제대로 됐는지 재는 스크립트
설치파일\ ← 키오스크용 설치 파일들(+ 안드로이드 APK)
CMS\treet-cms-offline-<판>.tar.gz ← CMS 설치 패키지
매뉴얼\ ← 이 문서의 오프라인 사본
키오스크셋팅\ ← 키오스크 PC 최적화 스크립트

여기에 하나를 더 받아 같이 두세요 — 저희가 드리지 않습니다:

ubuntu-26.04.x-live-server-amd64.iso ← 가상 머신에 깔 Ubuntu (ubuntu.com 에서 받습니다)

처음이시면 이 지도를 한 번 보고 시작하세요. 위에서 아래로 한 번만 가면 끝납니다.

무엇을얼마나누가 합니까
준비받은 것을 C:\treet 에 모으기 (바로 위)5분사람
0가상 머신 만들고 Ubuntu 설치30~60분사람
0-e🔴 디스크 넓히기 — Ubuntu 가 절반만 씁니다1분사람
1설치 패키지를 VM 안으로5~10분사람
2sudo bash install.sh 실행1분사람
3준비 상태 점검자동설치 파일
4질문 세 개에 답1분사람
5관리자 비밀번호 받아 적기1분사람
6실제로 뜨는지 확인자동(몇 분)설치 파일
7백업 켜기 — 설치가 자동으로 · 확인만1분설치 파일
7-b이 PC 에 Watchdog 깔기 — CMS VM 이 멈추면 다시 켭니다5분사람
8원격 접속 준비필요할 때사람
9인터넷 주소·인증서 + 관리자 입구20분사람(토큰·브라우저 승인) + 스크립트

0. 가상 머신을 만듭니다 (Hyper-V)

섹션 제목: “0. 가상 머신을 만듭니다 (Hyper-V)”

CMS 는 Ubuntu 가상 머신 안에서 돕니다. Windows PC 라면 먼저 그 VM 을 만듭니다.

0-a. Hyper-V 를 켜고 외부 스위치를 만듭니다

섹션 제목: “0-a. Hyper-V 를 켜고 외부 스위치를 만듭니다”

제어판 → 프로그램 → Windows 기능 켜기/끄기 에서 Hyper-V 를 체크하고 재부팅합니다.

재부팅한 뒤 VM 보다 먼저 외부 스위치를 만듭니다. 키오스크들이 이 VM 에 붙으려면 VM 이 이 PC 의 실제 랜카드에 연결돼 있어야 합니다.

화면으로: Hyper-V 관리자 → 가상 스위치 관리자 → 새 가상 네트워크 스위치 → 외부 → 이름 TreeT-External → 이 PC 가 실제로 쓰는 랜카드를 고릅니다. ⚠️ 화면으로 만들었다면, 만든 뒤 아래 명령의 ③ DNS 확인·채우기를 꼭 따로 하세요(고정 IP 면 DNS 가 빠집니다).

명령으로(관리자 PowerShell) — 빠진 DNS 까지 한 번에 처리합니다:

Terminal window
# ① 랜카드 이름 확인 — 키오스크와 같은 망에 연결된 것(보통 '이더넷')
Get-NetAdapter -Physical | Format-Table Name, InterfaceDescription, Status, LinkSpeed
# ② 위 목록의 Name 을 넣습니다
$Switch = "TreeT-External"
$Nic = "이더넷"
# 만들기 전에 지금 설정을 기억해 둡니다 — 고정 IP 이면 스위치를 만들 때 DNS 만 사라집니다
$Static = (Get-NetIPInterface -InterfaceAlias $Nic -AddressFamily IPv4).Dhcp -eq "Disabled"
$Dns = (Get-DnsClientServerAddress -InterfaceAlias $Nic -AddressFamily IPv4).ServerAddresses
"고정 IP: $Static · 지금 DNS: $($Dns -join ', ')"
# 스위치 만들기 — 이미 있으면 건너뜁니다 (⚠️ 몇 초 네트워크가 끊깁니다)
if (-not (Get-VMSwitch -Name $Switch -ErrorAction SilentlyContinue)) {
New-VMSwitch -Name $Switch -NetAdapterName $Nic -AllowManagementOS $true | Out-Null
}
# ③ DNS 확인·채우기 — 새 어댑터에 DNS 가 비어 있으면 채웁니다
# 고정 IP 면 DNS 가 따라오지 않고, 자동 IP 여도 바로 못 받아오는 경우가 있습니다.
# 그래서 고정/자동과 상관없이 **비어 있으면** 채웁니다.
$vEth = "vEthernet ($Switch)"
for ($i = 0; $i -lt 10 -and -not (Get-DnsClientServerAddress -InterfaceAlias $vEth -AddressFamily IPv4).ServerAddresses; $i++) { Start-Sleep 2 }
if (-not (Get-DnsClientServerAddress -InterfaceAlias $vEth -AddressFamily IPv4).ServerAddresses) {
if (-not $Dns) {
# 원래도 DNS 가 비어 있었다면 공유기(게이트웨이)와 공용 DNS 를 넣습니다
$Gw = (Get-NetIPConfiguration -InterfaceAlias $vEth).IPv4DefaultGateway.NextHop
$Dns = @($Gw, "8.8.8.8") | Where-Object { $_ }
}
Set-DnsClientServerAddress -InterfaceAlias $vEth -ServerAddresses $Dns
Clear-DnsClientCache
}
# ④ 확인 — 둘 다 나와야 합니다
Get-VMSwitch $Switch | Format-Table Name, SwitchType, NetAdapterInterfaceDescription
Get-DnsClientServerAddress -InterfaceAlias $vEth -AddressFamily IPv4 | Format-Table InterfaceAlias, ServerAddresses
Resolve-DnsName ubuntu.com -Type A | Select-Object -First 1 Name, IPAddress

Hyper-V 관리자 → 새로 만들기 → 가상 머신.

항목값왜 이 값인가
세대2세대UEFI 부팅. Ubuntu 26.04 는 2세대가 기본입니다
메모리6 GB (동적 메모리 끄기)실측은 유휴 214 MB 지만, 설치·DB 임포트와 영상 변환에 여유가 필요합니다
프로세서4 코어영상 변환이 CPU 를 씁니다 — 여기 투자하는 것이 가장 체감됩니다
하드 디스크120 GB · 동적 확장프로그램은 작지만(약 200 MB) 미디어와 이미지가 쌓입니다. 동적이라 처음부터 120 GB 를 먹지 않습니다
네트워크TreeT-External(0-a 에서 만든 외부 스위치)키오스크들이 이 VM 에 붙어야 합니다
보안 부팅 템플릿Microsoft UEFI 인증 기관기본값(Windows)으로 두면 Ubuntu 가 부팅하지 않습니다

0-c. 설치 이미지를 붙이고 켭니다

섹션 제목: “0-c. 설치 이미지를 붙이고 켭니다”

🔵 위 명령으로 만들었다면 이미 붙어 있고 켜져 있습니다 — 0-d 로 넘어가세요.

마법사로 만들었다면: 받아 둔 ubuntu-26.04.x-live-server-amd64.iso 를 VM 설정의 SCSI 컨트롤러 → DVD 드라이브에 붙이고 시작합니다.

기본값으로 넘어가도 되지만, 두 곳만 신경 씁니다 — 고정 IP(+DNS) 와 OpenSSH.

① 네트워크 — VM 에 고정 IP 를 줍니다

키오스크들이 이 주소로 CMS 에 붙고, CMS 설치 때 인증서에도 이 주소가 들어갑니다. 바뀌면 키오스크가 끊기므로 고정 IP 로 둡니다.

먼저 주소를 정합니다 — 호스트 PC 와 같은 대역에서 안 쓰는 주소, 그리고 공유기가 자동으로 나눠 주는 범위(DHCP) 밖이어야 합니다. 호스트에서 ipconfig 로 대역과 공유기(기본 게이트웨이)를 확인하세요.

예값
호스트 PC192.168.0.4
공유기(게이트웨이)192.168.0.1
이 VM 에 줄 주소192.168.0.10 (현장에 맞게)

설치 화면에서 — Network configuration → eth0 → Edit IPv4 → Manual:

칸값
Subnet192.168.0.0/24
Address192.168.0.10
Gateway192.168.0.1
Name servers192.168.0.1, 8.8.8.8
Search domains비워 둡니다

설치를 이미 끝냈다면 — VM 안에서 설정합니다. 랜카드 이름(보통 eth0)을 먼저 확인하세요.

Terminal window
ip -br link
Terminal window
sudo tee /etc/netplan/60-treet-static.yaml > /dev/null <<'EOF'
network:
version: 2
ethernets:
eth0:
dhcp4: false
addresses: [192.168.0.10/24]
routes:
- to: default
via: 192.168.0.1
nameservers:
addresses: [192.168.0.1, 8.8.8.8]
EOF
sudo chmod 600 /etc/netplan/60-treet-static.yaml
sudo netplan try

🔵 netplan try 는 적용한 뒤 120초 안에 Enter 를 누르지 않으면 원래대로 되돌립니다 — 잘못 넣어 연결이 끊겨도 안전합니다. Enter 를 누른 뒤 확인합니다:

Terminal window
ip -4 addr show eth0 | grep inet
resolvectl query ubuntu.com

② Install OpenSSH server 를 체크하세요

VM 화면에서 직접 타이핑하는 것보다, 다른 PC 에서 접속해 작업하는 편이 훨씬 편합니다. 설치 패키지를 옮길 때도 씁니다.

설치가 끝나면 재부팅하고, 로그인해서 아래로 정한 고정 IP 가 붙었는지 확인합니다.

Terminal window
ip -4 addr show | grep inet

0-e. 🔴 설치 직후 반드시 — 디스크 넓히기

섹션 제목: “0-e. 🔴 설치 직후 반드시 — 디스크 넓히기”

Ubuntu 설치 관리자는 디스크를 절반만 씁니다. 120 GB 를 줘도 실제로 쓰는 자리는 약 58 GB 입니다.

Terminal window
sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
df -h /

df -h / 가 100 GB 이상을 보이면 됐습니다.

여기까지 되면 아래 1번으로 갑니다.

1. 설치 패키지를 VM 안으로 옮깁니다

섹션 제목: “1. 설치 패키지를 VM 안으로 옮깁니다”

꾸러미의 CMS\treet-cms-offline-<판>.tar.gz 파일 하나를 VM 안으로 옮기고, 거기서 풉니다. VM 안에서 둘 자리는 고정된 로컬 경로입니다. 예: /home/사용자/

옮겼으면 VM 안에서 풉니다.

Terminal window
cd ~
tar xzf treet-cms-offline-*.tar.gz
cd treet-cms-offline

폴더 안에서 아래를 실행합니다.

Terminal window
sudo bash install.sh

sudo 로 실행하는 이유는, 준비가 안 된 항목(예: Docker)을 설치 파일이 직접 설치하기 때문입니다.

3. 설치 파일이 먼저 점검합니다 (읽고 지나가세요)

섹션 제목: “3. 설치 파일이 먼저 점검합니다 (읽고 지나가세요)”

🔵 여기서 하실 일은 없습니다. 설치 파일이 알아서 봅니다 — 아래는 무엇을 보는지 알려 드리는 것이고, 막혔을 때 돌아와 찾으시라고 적어 둔 것입니다.

부족한 것이 있으면 무엇을 어떻게 해야 하는지 화면에 알려줍니다.

점검 항목문제가 있으면
운영체제Ubuntu 26.04 LTS 가 아니면 알려줍니다(진행은 됩니다)
이름 해석(DNS)안 되면 원인까지 알려줍니다 — 아래 참고
인터넷 연결폐쇄망이면 정상입니다(Docker 가 이미 있어야 합니다)
Docker없으면 자동으로 설치합니다
시계시각이 크게 틀리면 알려줍니다
디스크 · 메모리부족하면 막습니다
포트이미 쓰는 프로그램이 있으면 막습니다
파일 권한지켜지지 않는 곳이면 알려줍니다(진행은 됩니다) — 아래 참고

점검을 통과하면 아래 세 가지만 묻습니다. 나머지는 알아서 설정됩니다.

① 이 사이트의 이름

1) 이 사이트의 이름 (영문 소문자·숫자·하이픈).
추천: kjr7zbs ← 지금 사용 가능한 이름입니다
>

추천된 이름을 그대로 쓰셔도 됩니다(엔터). 이 이름은 기기와 주고받는 신호를 구분하는 데 쓰입니다.

② 이 CMS 에 접속할 주소

2) 이 CMS 에 접속할 주소입니다 — 재생기가 이 주소로 붙습니다.
여러 개면 쉼표로 나열하세요. [192.168.0.5]
>

대괄호 안은 이 PC 의 주소를 자동으로 찾은 값입니다. 맞으면 엔터만 치세요.

③ 바깥 망에서 들어오는 주소

3) 바깥 망에서 이 CMS 로 들어오는 주소가 있으면 적으세요 — 공유기 포워딩 주소(여러 개면 쉼표).
이름으로 붙는 것이 먼저입니다. 이름이 안 풀리는 망(폐쇄망 · 이중 NAT 바깥)에서 쓰는 IP 만 적으세요. 없으면 엔터.
>

대부분은 엔터(비움)입니다. 공유기를 두 번 거치는 구성처럼, 바깥 망의 기기나 중계 장치가 공유기의 포워딩 주소(IP) 로 이 CMS 에 붙어야 할 때만 그 주소를 적습니다. 적은 주소는 CMS 인증서에 들어갑니다. 설치 뒤에 바꿔야 하면 다시 설치하지 않고 관리 화면에서 바꿉니다 — 담당자에게 문의하세요.

5. 관리자 비밀번호를 받아 적습니다

섹션 제목: “5. 관리자 비밀번호를 받아 적습니다”

설치가 끝나면 관리자 초기 비밀번호가 한 번 표시됩니다.

6. 설치가 스스로 확인합니다 (읽고 지나가세요)

섹션 제목: “6. 설치가 스스로 확인합니다 (읽고 지나가세요)”

🔵 마지막에 점검 한 화면이 나옵니다 — 이 기계를 맞춘 넷(시간대를 사이트 시각으로 · 도커가 부팅 때 자동으로 켜지게 · Hyper-V 면 KVP 데몬 · 백업 예약)의 결과와 CMS 상태 주소 · 다음 예약 시각 · 이 기계의 주소입니다. ⚠️ 가 붙은 줄은 그 줄이 보여 주는 명령을 그대로 실행하세요(못 했어도 설치는 성공입니다).

마지막으로 설치 파일이 실제로 화면이 뜨는지 확인합니다. 컨테이너가 떠 있어도 화면이 안 나오는 경우가 있어서, “명령이 끝났다” 가 아니라 “실제로 응답한다” 를 봅니다.

설치 검증 (실제로 응답하는지 — 최초 설치는 DB 초기화로 몇 분 걸립니다)...
✓ 컨테이너 web 동작
✓ 컨테이너 laravel 동작
✓ 컨테이너 db 동작
✓ 컨테이너 guacd 동작 (원격제어)
✓ 컨테이너 guacamole 동작 (원격제어)
✓ CMS 응답 확인 (HTTP 200)

여기까지 나오면 브라우저에서 http://<이 PC 주소>:8080 으로 접속할 수 있습니다.

🔵 설치가 이 일을 스스로 합니다 — 매일 03:40(사이트 시각) · 14일 보관 · 설치 폴더의 backup/. 아래는 켜졌는지 확인하거나 저장 위치를 바꿀 때 씁니다(다시 깔아도 됩니다).

Terminal window
sudo bash docker/install-backup-timer.sh

매일 새벽에 설정·인증서·데이터베이스를 한 묶음으로 백업하고 14일간 보관합니다.

한 번은 손으로 돌려 실제로 파일이 생기는지 확인하세요.

Terminal window
sudo systemctl start treetweb-backup-site.service
ls -la backup/

7-b. 이 PC 에 Watchdog 을 깝니다 — CMS 가 멈추면 다시 켭니다

섹션 제목: “7-b. 이 PC 에 Watchdog 을 깝니다 — CMS 가 멈추면 다시 켭니다”

CMS 는 이 PC 의 가상 머신 안에서 돕니다. 그 VM 이 멈추면 현장의 화면 관리가 통째로 끊기는데, VM 은 스스로 그걸 알릴 수 없습니다. 그래서 바깥(이 윈도 PC)에서 Watchdog 이 지킵니다.

  1. 재생기 PC 와 같은 방법으로 Watchdog 을 깝니다 — 현장 배포 의 Watchdog 설치를 보세요. 설치 중에 CMS 주소를 물으면 이 VM 의 주소(예: http://192.168.0.5:8080)를 넣습니다.

  2. 따로 할 일은 없습니다. Watchdog 이 켜지면 CMS 주소와 같은 IP 의 VM 을 스스로 찾아 감시에 넣습니다.

  3. ⚠️ 단, VM 안에 Hyper-V 연동 도구가 돌아야 Watchdog 이 그 VM 의 IP 를 봅니다(설치가 자동으로 깝니다 — 인터넷이 있어야 합니다). 이 윈도 PC(관리자 PowerShell)에서 확인합니다:

    Terminal window
    Get-VMNetworkAdapter -VMName treet-cms | Select-Object -ExpandProperty IPAddresses

    VM 주소(예: 192.168.0.5)가 안 나오고 비어 있으면, VM 안에서 연동 도구를 깔고 켭니다(인터넷이 필요합니다):

    Terminal window
    sudo apt install -y linux-cloud-tools-$(uname -r)
    sudo udevadm trigger --subsystem-match=misc --action=add
    sudo systemctl restart hv-kvp-daemon

    다시 위 명령으로 주소가 보이면 됩니다. 10분 안에 CMS 로그에 “이 PC 의 Hyper-V VM ‘treet-cms’ 을(를) CMS 로 알아보고 감시에 넣었습니다” 가 남습니다.

    🔵 Watchdog 은 이 상태를 스스로 알려 줍니다 — VM 이 켜져 있는데 IP 가 안 보이면 CMS 로그의 감시 줄에 ”… IP 가 Hyper-V 에 안 보입니다: VM 안에 hv-kvp-daemon … 이 돌아야 하고 …” 가 남습니다. 그 줄을 보면 위 세 줄을 실행하세요.

🔵 이미 Watchdog 이 깔린 PC 면 새로 깔지 않습니다 — 재생기와 CMS 가 한 PC 에 있는 현장이 그렇습니다. 그 Watchdog 이 CMS 도 같이 지킵니다.

켜 두면 이렇게 됩니다:

이런 일이 생기면Watchdog 이
VM 이 꺼지거나 일시정지됨다시 켭니다(3분 간격으로 봅니다)
CMS 가 3분 넘게 응답이 없음CMS 로그에 남기고, 살아나면 “몇 시~몇 시 (N분) 응답이 없었다” 를 한 줄 남깁니다
VM 은 켜져 있는데 CMS 만 응답이 없음보고만 합니다 — VM 안의 프로그램은 Watchdog 이 건드리지 못합니다

8. 원격으로 붙는 방법 (둘은 다른 이야기입니다)

섹션 제목: “8. 원격으로 붙는 방법 (둘은 다른 이야기입니다)”

자주 헷갈리는 자리라 갈라 적습니다.

8-a. 이 CMS PC 에 붙으려면 — SSH 입니다

섹션 제목: “8-a. 이 CMS PC 에 붙으려면 — SSH 입니다”

설치 파일이 깔아 주지 않습니다. Ubuntu 를 설치할 때 Install OpenSSH server 를 체크한 것이 그 역할입니다(0-d 참고).

안 하셨다면 지금 깔면 됩니다.

Terminal window
sudo apt install -y openssh-server
systemctl status ssh

붙지 않으면 아래를 차례로 봅니다.

확인명령 · 자리
SSH 가 도는가systemctl status ssh
이 PC 의 주소ip -4 addr show | grep inet
🔴 VM 이 외부 스위치인가Hyper-V 관리자 → VM 설정 → 네트워크 어댑터. 내부/개인용이면 밖에서 못 붙습니다
방화벽sudo ufw status (기본은 꺼져 있습니다)

8-b. 기기 화면을 보려면 — 원격제어 기능입니다

섹션 제목: “8-b. 기기 화면을 보려면 — 원격제어 기능입니다”

CMS 관리 화면에서 키오스크 화면을 브라우저로 들여다보는 기능입니다. 설치하면 바로 켜져 있습니다 — 따로 하실 일이 없습니다.

🔴 기기마다 UltraVNC 를 깔아야 합니다

섹션 제목: “🔴 기기마다 UltraVNC 를 깔아야 합니다”

CMS 쪽은 준비돼 있지만, 보여 줄 화면을 내보내는 쪽은 기기에 있습니다. 키오스크 PC 마다 VNC 서버(UltraVNC) 를 설치·실행해 두세요.

기기에서값
VNC 서버UltraVNC (설치 후 자동 시작되게)
포트5900 (기본값 그대로)
비밀번호정하지 않아도 됩니다 — 단추를 누를 때마다 그 PC 의 Watchdog 이 일회용으로 겁니다(CMS 2026.9.725 · Watchdog 2026.9.153 부터)

CMS 쪽은 대부분 비워 두면 됩니다(기기가 보고한 IP · 5900). 주소나 포트가 다를 때만 관리 화면의 기기관리 → 기기 페이지 → 기본 정보 고치기 → “원격접속” 칸에 주소[:포트] 를 적습니다 — 비밀번호는 적지 않습니다.

9. 인터넷 주소와 인증서 — 두 입구를 함께 세웁니다

섹션 제목: “9. 인터넷 주소와 인증서 — 두 입구를 함께 세웁니다”

사이트에는 입구가 둘 있습니다. 기본 구성은 둘 다입니다.

주소누가 씁니까어떻게 들어옵니까
https://<사이트>.treetsites.com:8443기기 · 큰 영상 업로드 · 평소 관리공유기 → CMS 로 곧장(공개 인증서)
https://admin-<사이트>.treetsites.com관리자만 — 공유기 포트가 막혔을 때의 비상 입구Cloudflare 터널

VM 에서:

Terminal window
sudo ./cert-check.sh # 공개 인증서인지 · 만료까지 며칠인지
sudo ./install-tunnel.sh --check # 터널 서비스 · 밖에서의 응답

그리고 Windows 브라우저에서 두 주소를 직접 엽니다 — 둘 다 자물쇠 아이콘이 떠야 하고 경고 화면이 나오면 안 됩니다. 🔵 사이트 안 네트워크에서 첫 번째 주소가 안 열리면 공유기가 자기 공인 IP 로 되돌아오는 접속(헤어핀)을 막는 경우입니다 — 휴대폰 데이터로 확인하거나, 관리자 입구를 쓰세요.

시간 서버 — CMS 가 기기에 시간을 내줍니다

섹션 제목: “시간 서버 — CMS 가 기기에 시간을 내줍니다”

CMS 를 설치하면 시간 서버(NTP) 가 함께 뜹니다. 끄는 스위치는 없습니다 — 기기가 시간 동기를 켜는 순간 받을 수 있어야 하기 때문입니다. 같은 내부망의 기기가 UDP 123 번으로 이 CMS 에서 시간을 받아 갑니다. 인터넷 쪽 시간 서버에 닿지 못하는 폐쇄망이어도, 기기끼리는 이 CMS 시계에 맞춰집니다.

할 일왜
CMS VM 의 방화벽을 켰다면 내부망에서 들어오는 UDP 123 을 엽니다막히면 기기가 시간을 못 받습니다
공유기에서 바깥으로는 열지 않습니다공개된 시간 서버는 공격에 악용됩니다
CMS VM 에 다른 시간 서버 프로그램(chrony · ntpd)을 따로 깔지 않습니다123 번을 서로 쓰려 해 CMS 의 시간 서버가 뜨지 못합니다 — 설치 전 점검이 그런 경우 막고 알려 줍니다. 우분투 기본 시간 맞춤(timesyncd)은 괜찮습니다

CMS 자신의 시계는 VM 이 맞춥니다(Hyper-V 통합 서비스의 시간 동기화 · 우분투 기본 시간 맞춤).

여기까지 오셨으면 아래가 모두 되어 있어야 합니다. 하나라도 안 되면 그 번호로 돌아가세요.

확인어떻게안 되면
관리 화면이 열린다브라우저에서 http://<이 PC 주소>:80806번
관리자로 로그인된다5번에서 받아 적은 비밀번호로5번
백업이 켜져 있다systemctl list-timers | grep treetweb7번
백업 파일이 실제로 생긴다ls -la backup/7번
사이트 주소가 경고 없이 열린다https://<사이트>.treetsites.com:84439번
관리자 입구가 열린다https://admin-<사이트>.treetsites.com9-d

설치는 CMS 를 세우는 것까지입니다. 화면에 콘텐츠가 나오려면 세 가지가 더 필요합니다.

  1. 재생기(TreeTview) 를 키오스크 PC 에 설치하고, 그 PC 에서 F8 로 이 CMS 주소를 넣습니다. 🔴 설치만으로는 안 붙습니다 — 재생기는 개발 기본값(127.0.0.1)을 들고 나옵니다. 주소를 넣으면 그때 스스로 등록되어 기기 목록에 나타납니다(기기 인증서도 자동으로 발급받습니다). → 현장 배포 ⚠️ 넣은 뒤 재생기 로그의 [사이트설정] 확인 줄을 눈으로 보세요. 목록에 뜨는 것만으로는 부족합니다 — 이 확인을 건너뛰면 뒤에서 원인을 못 찾습니다.
  2. 콘텐츠를 올리고 편성합니다 — 어떤 화면에 무엇을 언제 틀지 정합니다.
  3. 기기마다 UltraVNC 를 깝니다 — 원격제어는 CMS 쪽이 이미 켜져 있고, 보여 줄 화면을 내보내는 쪽만 기기에 있으면 됩니다(8-b).

쓰는 방법은 관리 화면 문서에 있습니다 — 기기 등록·편성·원격제어가 화면 순서대로 적혀 있습니다.

운영으로 넘길 때 — 업데이트 채널을 stable 로

섹션 제목: “운영으로 넘길 때 — 업데이트 채널을 stable 로”

설치를 막 마친 CMS 는 아직 운영 전(개발 단계) 으로 봅니다. 이때는 개발 판(시험 중인 앱·CMS 판)도 받습니다. 기기를 다 붙이고 편성까지 마쳐 모든 설정이 끝나면 운영으로 넘깁니다 — 그때부터는 시험을 마치고 정식으로 내보낸 판(stable)만 받습니다.

  1. 설치 폴더의 .env 를 엽니다: sudo nano .env
  2. #TREET_UPDATE_CHANNEL=stable 줄의 맨 앞 # 을 지웁니다. 그 줄이 없으면 맨 끝에 TREET_UPDATE_CHANNEL=stable 을 새로 적습니다.
  3. 저장하고 CMS 를 다시 올립니다: sudo docker compose up -d
TREET_UPDATE_CHANNEL이 CMS 는
(비어 있음 — 기본)운영 전. 개발 판도 받습니다
stable운영 중. 승격된(stable) 판만 받습니다 — 앱 업데이트 목록 · CMS 업데이트 꾸러미 · 손으로 올리는 설치본 모두

처음 설치와 같은 방법입니다 — 새 꾸러미를 받아 그 안에서 install.sh 를 다시 돌립니다. 따로 업데이트 절차가 있는 것이 아닙니다.

Terminal window
# VM 안에서, 새 꾸러미를 푼 폴더에서
sudo bash install.sh

무엇이 바뀌었는지는 꾸러미의 읽어주세요.md 와 판 번호로 확인합니다. 올린 뒤에는 위 “다 됐는지 확인하기” 의 넷을 다시 봅니다 — 특히 관리 화면이 열리는지.

같은 사이트를 다시 세우는 경우에는 백업 파일이 먼저 있어야 합니다.

Terminal window
bash docker/restore-site.sh <백업파일> # 설정·인증서를 제자리에
sudo bash install.sh # 설치
bash docker/restore-site.sh <백업파일> --db-only # 데이터 넣기
Terminal window
docker compose logs --tail 50 web laravel # 최근 로그(예약 작업까지: laravel-scheduler media-worker 를 덧붙입니다)
docker compose ps # 무엇이 떠 있는지
sudo bash docker/preflight.sh # 준비 상태 다시 점검