คู่มือติดตั้งบน Ubuntu ทีละขั้น
คู่มือนี้ติดตั้งวิทยุออนไลน์บนเซิร์ฟเวอร์ Ubuntu หนึ่งเครื่อง ตั้งแต่เครื่องเปล่าจนสถานีแรกออกอากาศ เขียนสำหรับผู้เริ่มต้น ทุกขั้นมีคำสั่งที่ต้องพิมพ์ สิ่งที่ควรเห็น และสิ่งที่ต้องทำถ้าไม่สำเร็จ
ใช้กับโปรแกรมอ่านหน้าจอผ่าน SSH ได้ ไม่มีขั้นไหนต้องใช้เมาส์ สี หรือรูปภาพ ข้อความทุกอย่างจากเซิร์ฟเวอร์เป็นตัวอักษรธรรมดา บรรทัดละหนึ่งเรื่อง
หลังขั้นที่ 6 คู่มือเดียวกันนี้อยู่บนเซิร์ฟเวอร์เป็นไฟล์ข้อความธรรมดา:
less /opt/radio/INSTALL-UBUNTU.th.txt
ในเว็บแอปคือหน้าช่วยเหลือ "คู่มือติดตั้งบน Ubuntu ทีละขั้น" (/help/install-ubuntu)
รายละเอียดทางเทคนิคอยู่ในคู่มือการติดตั้ง และงานประจำวันอยู่ในคู่มือดูแลระบบ
วิธีอ่านคู่มือนี้
- คำสั่งอยู่บรรทัดของตัวเองเสมอ คัดลอกทั้งบรรทัด วางในหน้าต่าง SSH แล้วกด Enter
- บรรทัดที่ขึ้นต้นด้วย
#เป็นคำอธิบาย ไม่ต้องพิมพ์ - คำที่เป็นตัวพิมพ์ใหญ่ เช่น
YOUR-SERVER-IPคือค่าที่ต้องเปลี่ยนเป็นของคุณเอง - "ควรเห็น" บอกว่าเซิร์ฟเวอร์ควรตอบอะไร
- "ถ้าไม่สำเร็จ" บอกว่าต้องทำอะไรต่อ
- คำสั่งขึ้นต้นด้วย
sudoคือสั่งในฐานะผู้ดูแลระบบ (root) ครั้งแรกจะถามรหัสผ่านของคุณ ตอนพิมพ์รหัสผ่านจะไม่มีอะไรแสดงบนจอ เป็นเรื่องปกติ - ถ้าเข้าระบบเป็นผู้ใช้
rootไม่ต้องพิมพ์sudo - ผลลัพธ์ที่ยาว อ่านทีละหน้าได้ง่ายกว่า: เติม
| lessท้ายคำสั่ง ในlessกด Space เพื่อไปหน้าถัดไป กด/เพื่อค้นหา และกดqเพื่อออก
สารบัญ
- สิ่งที่ต้องเตรียม
- เลือกวิธีที่ผู้ใช้เข้าถึงแพลตฟอร์ม
- เตรียม DNS (เฉพาะแบบโดเมน)
- เชื่อมต่อเซิร์ฟเวอร์ด้วย SSH
- อัปเดต Ubuntu
- ติดตั้งแพ็กเกจ
- ตั้งค่าด้วย sudo radio-setup
- ตั้งค่าครั้งแรกในเว็บ
- เข้าสู่ระบบ
- ตรวจครั้งแรก
- ตั้งค่าอีเมล (SMTP) หลังติดตั้ง
- ไฟร์วอลล์และ security group ของผู้ให้บริการคลาวด์
- การสำรองข้อมูล
- อัปเดตเป็นเวอร์ชันใหม่
- เปลี่ยนจาก IP เป็นโดเมนภายหลัง
- ย้ายการติดตั้งรุ่นเก่า
- ถอนการติดตั้ง
- แก้ปัญหา
- บันทึกการทำงาน (log) อยู่ที่ไหน
- ขอความช่วยเหลือ
- ภาคผนวก: ติดตั้งโดยไม่มีอินเทอร์เน็ต
- ภาคผนวก: ตัวเลือกทั้งหมดของ radio-setup
1. สิ่งที่ต้องเตรียม
1.1 เซิร์ฟเวอร์
เซิร์ฟเวอร์เสมือน (VPS) จากผู้ให้บริการคลาวด์ หรือเครื่องของคุณเอง ต้องเป็น Ubuntu Server 22.04 LTS หรือ 24.04 LTS แบบ 64 บิต (amd64 หรือ arm64) ใช้เครื่องใหม่ที่ว่าง: ต้องไม่มีโปรแกรมอื่นใช้พอร์ต 80 และ 443
เลือกขนาดตามจำนวนสถานี ตัวติดตั้งจะแนะนำโปรไฟล์ขนาดที่เหมาะกับเครื่องของคุณ
| โปรไฟล์ | CPU | หน่วยความจำ | ดิสก์ | สถานี |
|---|---|---|---|---|
| small | 2 vCPU | 4 GB | 40 GB ขึ้นไป | ไม่เกิน 5 |
| medium | 4 vCPU | 8 GB | 80 GB ขึ้นไป | ไม่เกิน 15 |
| large | 8 vCPU | 16 GB | 160 GB ขึ้นไป | ไม่เกิน 40 |
ดิสก์ใช้เก็บระบบ อิมเมจของ Docker (ประมาณ 3 GB) คลังเสียง ไฟล์บันทึกรายการ และข้อมูลสำรองในเครื่อง ตัวติดตั้งจะหยุดถ้าพื้นที่ว่างน้อยกว่า 10 GB และเตือนถ้าน้อยกว่า 30 GB
ผู้ฟังต้องใช้แบนด์วิดท์ขาออก: จำนวนผู้ฟังคูณบิตเรต เช่น ผู้ฟัง 500 คนที่ 128 kbps ต้องใช้ประมาณ 64 Mbit/s
1.2 พอร์ต
พอร์ตเหล่านี้ต้องเข้าถึงได้จากอินเทอร์เน็ต (หรือจากเครือข่ายภายในในโหมด HTTP ธรรมดา)
| พอร์ต | โปรโตคอล | ใช้ทำอะไร |
|---|---|---|
| 22 | TCP | SSH สำหรับคุณ ถ้าทำได้ ให้เปิดเฉพาะจาก IP ของคุณเอง |
| 80 | TCP | เว็บไซต์ และการขอใบรับรองจาก Let's Encrypt |
| 443 | TCP | เว็บไซต์แบบ HTTPS และสตรีมเสียง |
| 443 | UDP | HTTP/3 (เร็วขึ้นบนมือถือ ไม่บังคับ) |
| 8100 ถึง 8119 | TCP | ดีเจออกอากาศสดด้วย BUTT หรือ OBS สถานีละหนึ่งพอร์ต (โปรไฟล์ small) โปรไฟล์ medium: 8100 ถึง 8139 โปรไฟล์ large: 8100 ถึง 8199 |
| 10100 ถึง 10119 | UDP | รับสัญญาณถ่ายทอดต่อที่ส่งเข้ามาทาง SRT (ไม่บังคับ เปิดเมื่อสถานีใช้) |
ห้ามเปิดพอร์ต 3000, 5432, 6432 และ 8000 เด็ดขาด เป็นพอร์ตภายใน
1.3 ที่อยู่: โดเมนหรือ IP คงที่
ผู้ใช้เปิดแพลตฟอร์มด้วยชื่อโดเมน เช่น radio.example.th หรือด้วยหมายเลข IP ของเซิร์ฟเวอร์
โดเมนดีที่สุด: ใช้ได้ทุกความสามารถ
หมายเลข IP ต้องเป็นแบบคงที่ (static)
เซิร์ฟเวอร์คลาวด์ส่วนใหญ่มี IP สาธารณะคงที่ ถ้าเป็นเครื่องที่บ้านหรือในสำนักงาน ให้ถามผู้ดูแลเครือข่าย
ส่วนที่ 2 อธิบายวิธีเลือก
1.4 อีเมล
ต้องมีอีเมลของคุณเอง ใช้เป็นบัญชีผู้ดูแลระบบ และ Let's Encrypt จะส่งแจ้งเตือนเรื่องใบรับรองมาที่อีเมลนี้
1.5 ไม่บังคับ: เซิร์ฟเวอร์อีเมล (SMTP)
แพลตฟอร์มให้ผู้ใช้เข้าสู่ระบบด้วยรหัส 6 หลักที่ส่งทางอีเมล ไม่มีรหัสผ่าน การส่งอีเมลเหล่านี้ต้องมีบัญชี SMTP จากผู้ให้บริการอีเมลของคุณ เช่น Google Workspace, Microsoft 365, Amazon SES หรือบริการแบบเดียวกัน
ติดตั้งโดยไม่มี SMTP ได้ อีเมลทุกฉบับ รวมทั้งรหัสเข้าสู่ระบบ จะถูกเขียนเป็นไฟล์บนเซิร์ฟเวอร์แทนการส่ง อ่านได้ด้วยคำสั่งนี้:
sudo radioctl outbox
ใช้แบบนี้ได้ในช่วงแรก แต่ควรตั้ง SMTP (ส่วนที่ 11) ก่อนให้คนอื่นเข้าสู่ระบบ
1.6 บนคอมพิวเตอร์ของคุณ
- โปรแกรม SSH Windows 10 และ 11 มีมาให้แล้ว (Windows Terminal หรือ PowerShell) macOS มี Terminal
- โปรแกรมอ่านหน้าจอถ้าคุณใช้: NVDA, JAWS หรือ Narrator บน Windows, VoiceOver บน macOS
- สำหรับทดสอบดีเจ: BUTT (Broadcast Using This Tool) ดาวน์โหลดฟรีที่ https://danielnoethen.de/butt/
2. เลือกวิธีที่ผู้ใช้เข้าถึงแพลตฟอร์ม
ตัวตั้งค่าจะถามข้อนี้ มีให้เลือกสามแบบ
- โดเมน (
domainแนะนำ):https://radio.example.thต้องมีโดเมนที่ชี้มาที่เซิร์ฟเวอร์ - IP แบบ HTTPS (
ip-https):https://203.0.113.10ไม่ต้องมีโดเมน Let's Encrypt ออกใบรับรองให้หมายเลข IP ถ้าเป็น IP ส่วนตัว (เช่น 192.168.x.x) เซิร์ฟเวอร์จะออกใบรับรองเอง และเบราว์เซอร์จะเตือน - IP แบบ HTTP ธรรมดา (
ip-http):http://192.168.1.20สำหรับเครือข่ายภายในเท่านั้น ไม่มีการเข้ารหัส
ความสามารถที่ใช้ได้ในแต่ละแบบ:
| ความสามารถ | โดเมน | IP แบบ HTTPS | IP แบบ HTTP ธรรมดา |
|---|---|---|---|
| เว็บไซต์ ฟังสถานี หน้าผู้ดูแล | ได้ | ได้ | ได้ |
| ดีเจด้วย BUTT หรือ OBS | ได้ | ได้ | ได้ |
| การเชื่อมต่อแบบเข้ารหัส | ได้ | ได้ | ไม่ได้ |
| ไมโครโฟนในเว็บดีเจ (ห้องจัดรายการ) | ได้ | ได้ | ไม่ได้ |
| แขกรับเชิญทางไกล (โทรผ่านเบราว์เซอร์) | ได้ | ได้ | ไม่ได้ |
| การแจ้งเตือนแบบพุช | ได้ | ได้ เฉพาะ IP สาธารณะ | ไม่ได้ |
| พาสคีย์ (เข้าสู่ระบบด้วยลายนิ้วมือหรือ PIN) | ได้ | ไม่ได้ | ไม่ได้ |
| โดเมนย่อยของสถานี (station.radio.example.th) | ได้ | ไม่ได้ | ไม่ได้ |
| ข้อความจาก LINE และ Telegram | ได้ | อาจถูกปฏิเสธ | ไม่ได้ |
| เครื่องเล่นที่ฝังในเว็บไซต์อื่น | ได้ | ได้ เฉพาะ IP สาธารณะ | ไม่ได้ |
เปลี่ยนแบบภายหลังได้โดยข้อมูลไม่หาย (ส่วนที่ 15)
3. เตรียม DNS (เฉพาะแบบโดเมน)
ถ้าใช้แบบ IP ข้ามส่วนนี้ได้
DNS บอกทั้งโลกว่าโดเมนของคุณเป็นของหมายเลข IP ไหน แก้ไขได้ที่ที่คุณซื้อโดเมน หรือที่บริการ DNS ของคุณ (เช่น Cloudflare)
ขั้นที่ 3.1: หาหมายเลข IP สาธารณะของเซิร์ฟเวอร์
ดูได้จากแผงควบคุมของผู้ให้บริการคลาวด์ หรือถามเซิร์ฟเวอร์เองหลังเชื่อมต่อในส่วนที่ 4:
curl -4 -s https://api.ipify.org; echo
ควรเห็น: หนึ่งบรรทัดที่เป็นหมายเลข IP เช่น 203.0.113.10
ขั้นที่ 3.2: สร้างระเบียน A
ในบริการ DNS ของคุณ เพิ่มระเบียน:
| ช่อง | ค่า |
|---|---|
| Type (ประเภท) | A |
| Name (ชื่อ) | radio (สำหรับ radio.example.th) หรือ @ สำหรับตัวโดเมนเอง |
| Value หรือ Target (ค่า) | หมายเลข IP ของเซิร์ฟเวอร์ |
| TTL | ค่าเริ่มต้น หรือ 300 วินาที |
ถ้าเซิร์ฟเวอร์มี IPv6 ด้วย ให้เพิ่มระเบียน AAAA ชื่อเดียวกัน ถ้าใช้ Cloudflare ช่วงแรกให้ตั้งระเบียนเป็น "DNS only" (ไม่ผ่านพร็อกซี)
ถ้าต้องการให้เปิดได้ทั้งแบบมีและไม่มี www (เช่น example.th และ www.example.th) ให้เพิ่มระเบียน A ชื่อ www ชี้ไปที่ IP เดียวกันด้วย
ระบบออกใบรับรอง HTTPS ให้ทั้งสองชื่อและต่ออายุเอง และส่งต่อชื่อที่มี www ไปที่อยู่หลัก (หรือกลับกัน ถ้าที่อยู่หลักมี www) ไม่ต้องตั้งค่าอื่นเพิ่ม
ขั้นที่ 3.3: ไม่บังคับ ระเบียน wildcard สำหรับโดเมนย่อยของสถานี
ทุกสถานีมีที่อยู่แบบ radio.example.th/s/ชื่อสถานี เสมอ
ถ้าต้องการ ชื่อสถานี.radio.example.th ด้วย ให้เพิ่มระเบียน A อีกหนึ่งรายการ:
| ช่อง | ค่า |
|---|---|
| Type (ประเภท) | A |
| Name (ชื่อ) | *.radio (สำหรับ *.radio.example.th) |
| Value (ค่า) | หมายเลข IP ของเซิร์ฟเวอร์ |
ขั้นที่ 3.4: ตรวจว่า DNS ใช้ได้
รอสักครู่ แล้วรันคำสั่งใดคำสั่งหนึ่งต่อไปนี้บนเซิร์ฟเวอร์ (หรือบนคอมพิวเตอร์ของคุณ)
getent hosts radio.example.th
ควรเห็น: หนึ่งบรรทัดที่ขึ้นต้นด้วยหมายเลข IP ของเซิร์ฟเวอร์
host radio.example.th
ควรเห็น: radio.example.th has address 203.0.113.10
dig +short radio.example.th
ควรเห็น: หมายเลข IP อย่างเดียว
ตรวจระเบียน wildcard ด้วยชื่อใดก็ได้ใต้โดเมนนั้น:
getent hosts test.radio.example.th
ถ้าไม่สำเร็จ: ไม่มีผลลัพธ์แปลว่ายังไม่มีระเบียน การเปลี่ยนแปลงอาจใช้เวลาถึงหนึ่งชั่วโมง บางครั้งนานกว่านั้น ตรวจการสะกดชื่อในบริการ DNS
คำสั่ง host และ dig อยู่ในแพ็กเกจ bind9-dnsutils: sudo apt install -y bind9-dnsutils
ติดตั้งต่อก่อน DNS พร้อมก็ได้ ตัวตั้งค่าจะเตือน และใบรับรองจะออกเมื่อ DNS ชี้มาที่เซิร์ฟเวอร์แล้ว
4. เชื่อมต่อเซิร์ฟเวอร์ด้วย SSH
ผู้ให้บริการจะให้ชื่อผู้ใช้ (มักเป็น ubuntu หรือ root) หมายเลข IP และรหัสผ่านหรือไฟล์กุญแจ (key)
4.1 Windows: Windows Terminal หรือ PowerShell
- กดปุ่ม Windows พิมพ์
terminalแล้วกด Enter (Windows รุ่นเก่า พิมพ์powershell) - พิมพ์คำสั่งนี้ โดยใส่ชื่อผู้ใช้และหมายเลข IP ของคุณ แล้วกด Enter:
ssh ubuntu@YOUR-SERVER-IP
ถ้าผู้ให้บริการให้ไฟล์กุญแจ:
ssh -i C:\Users\YOU\Downloads\server-key.pem ubuntu@YOUR-SERVER-IP
- ครั้งแรกจะถามว่า "Are you sure you want to continue connecting (yes/no/[fingerprint])?" พิมพ์
yesแล้วกด Enter - พิมพ์รหัสผ่านถ้าถาม ระหว่างพิมพ์จะไม่มีอะไรแสดง
ควรเห็น: ข้อความต้อนรับจาก Ubuntu แล้วตามด้วยบรรทัดพร้อมรับคำสั่งที่ลงท้ายด้วย $ (หรือ # ถ้าเป็น root)
ถ้าไม่สำเร็จ:
- "Connection timed out": หมายเลข IP ผิด หรือพอร์ต 22 ถูกปิดในไฟร์วอลล์ของผู้ให้บริการ (ส่วนที่ 12)
- "Permission denied": ชื่อผู้ใช้ รหัสผ่าน หรือกุญแจไม่ถูกต้อง
เคล็ดลับสำหรับ NVDA ใน Windows Terminal:
- NVDA อ่านข้อความใหม่ให้อัตโนมัติ ถ้าไม่อ่าน ให้ตรวจว่าเปิด "รายงานการเปลี่ยนแปลงของเนื้อหาแบบไดนามิก" (Report dynamic content changes) ไว้ (เมนู NVDA, การตั้งค่า, การตั้งค่า, การนำเสนอวัตถุ)
- อ่านจอทีละบรรทัดด้วยเคอร์เซอร์ทบทวน: แบบเดสก์ท็อป Numpad 7 (บรรทัดก่อนหน้า) Numpad 8 (บรรทัดปัจจุบัน) Numpad 9 (บรรทัดถัดไป) แบบแล็ปท็อป: NVDA+ลูกศรขึ้น, NVDA+Shift+จุด, NVDA+ลูกศรลง
- วางคำสั่งที่คัดลอกไว้ด้วย Ctrl+V (หรือ Ctrl+Shift+V)
- ถ้าต้องการเก็บผลลัพธ์ที่ยาว ให้บันทึกลงไฟล์แล้วอ่านด้วย less:
sudo radioctl doctor > ~/doctor.txt 2>&1แล้วless ~/doctor.txt - JAWS: ใช้เทอร์มินัลเดียวกันได้ ใช้เคอร์เซอร์ JAWS หรือ Insert+ลูกศรขึ้น เพื่ออ่านบรรทัดปัจจุบัน
4.2 Windows: PuTTY
- เปิด PuTTY โฟกัสอยู่ที่ช่อง "Host Name (or IP address)" พิมพ์หมายเลข IP
- พอร์ตคงไว้ที่ 22 ประเภทการเชื่อมต่อ SSH กด Enter (ปุ่ม Open)
- ครั้งแรกจะมีคำเตือนด้านความปลอดภัยเรื่องกุญแจของเครื่อง เลือก "Accept"
- ที่ "login as:" พิมพ์ชื่อผู้ใช้แล้วกด Enter จากนั้นพิมพ์รหัสผ่าน
วางข้อความใน PuTTY ด้วย Shift+Insert (หรือคลิกขวา) NVDA อ่าน PuTTY ด้วยเคอร์เซอร์ทบทวนแบบเดียวกับข้อ 4.1 ผู้ใช้โปรแกรมอ่านหน้าจอหลายคนพบว่า Windows Terminal ใช้ง่ายกว่า
4.3 macOS: Terminal
- กด Command+Space พิมพ์
terminalแล้วกด Return - พิมพ์
ssh ubuntu@YOUR-SERVER-IPแล้วกด Return ครั้งแรกตอบyes
ถ้าใช้ VoiceOver ให้เข้าไปโต้ตอบกับข้อความในเทอร์มินัล (VO+Shift+ลูกศรลง) แล้วอ่านทีละบรรทัดด้วย VO+ลูกศรขึ้น และ VO+ลูกศรลง วางข้อความด้วย Command+V
4.4 ไม่บังคับ: เข้าระบบด้วยกุญแจแทนรหัสผ่าน
บนคอมพิวเตอร์ของคุณ (Windows Terminal, PowerShell หรือ Terminal ของ macOS):
ssh-keygen -t ed25519
กด Enter สามครั้งเพื่อใช้ค่าเริ่มต้น แล้วคัดลอกกุญแจไปที่เซิร์ฟเวอร์ บน macOS:
ssh-copy-id ubuntu@YOUR-SERVER-IP
บน Windows PowerShell:
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh ubuntu@YOUR-SERVER-IP "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
ควรเห็น: ครั้งต่อไปที่สั่ง ssh ubuntu@YOUR-SERVER-IP จะไม่ถามรหัสผ่าน
5. อัปเดต Ubuntu
ขั้นที่ 5.1: ตรวจรุ่นของ Ubuntu
grep PRETTY_NAME /etc/os-release
ควรเห็น: PRETTY_NAME="Ubuntu 24.04.1 LTS" หรือ Ubuntu 22.04...
ถ้าไม่สำเร็จ: รุ่นอื่นหรือระบบอื่นยังไม่ได้ทดสอบ ให้ใช้ Ubuntu 22.04 หรือ 24.04
ขั้นที่ 5.2: ติดตั้งอัปเดต
sudo apt update
ควรเห็น: หลายบรรทัดที่ขึ้นต้นด้วย "Hit" หรือ "Get" ท้ายสุดคือ "Reading package lists... Done" และจำนวนแพ็กเกจที่อัปเกรดได้
sudo apt upgrade -y
ควรเห็น: รายการแพ็กเกจที่กำลังติดตั้ง อาจใช้เวลาหลายนาที ถ้ามีคำถามเต็มจอเรื่องการเริ่มบริการใหม่ ให้กด Enter เพื่อใช้ค่าเริ่มต้น
ขั้นที่ 5.3: รีสตาร์ตถ้า Ubuntu ต้องการ
ls /var/run/reboot-required
ถ้าคำตอบเป็นชื่อไฟล์ (ไม่ใช่ "No such file or directory") ให้รีสตาร์ต:
sudo reboot
การเชื่อมต่อ SSH จะหลุด รอหนึ่งนาทีแล้วเชื่อมต่อใหม่ (ส่วนที่ 4)
ขั้นที่ 5.4: ตรวจนาฬิกาและขนาดของเครื่อง
timedatectl
ควรเห็น: บรรทัด "System clock synchronized: yes"
ถ้าเป็น no: sudo timedatectl set-ntp true
ไม่บังคับ ตั้งเขตเวลาประเทศไทย:
sudo timedatectl set-timezone Asia/Bangkok
ตรวจ CPU หน่วยความจำ และดิสก์:
nproc
free -h
df -h /
ควรเห็น: nproc บอกจำนวนคอร์ ใน free -h บรรทัด "Mem:" ตัวเลขแรกคือหน่วยความจำทั้งหมด ใน df -h / คอลัมน์ "Avail" คือพื้นที่ว่าง
ถ้าเครื่องมีหน่วยความจำน้อยกว่า 4 GB ให้เพิ่ม swap ก่อนทำต่อ (ดูสร้างอิมเมจไม่สำเร็จเพราะหน่วยความจำไม่พอ)
6. ติดตั้งแพ็กเกจ
แพ็กเกจคือไฟล์ radio_1.2.4_all.deb จากหน้า Release ของวิทยุออนไลน์
ที่อยู่ของหน้า Release ได้จากผู้ให้บริการวิทยุออนไลน์ของคุณ เช่น https://github.com/OWNER/REPO/releases
ในคำสั่งด้านล่าง ให้เปลี่ยน OWNER/REPO เป็นที่เก็บนั้น และเปลี่ยน 1.2.4 เป็นเวอร์ชันที่จะติดตั้ง
ขั้นที่ 6.1: ดาวน์โหลดแพ็กเกจและไฟล์ตรวจสอบ
cd ~
curl -fLO https://github.com/OWNER/REPO/releases/download/v1.2.4/radio_1.2.4_all.deb
curl -fLO https://github.com/OWNER/REPO/releases/download/v1.2.4/SHA256SUMS
ควรเห็น: บรรทัดแสดงความคืบหน้าของแต่ละไฟล์ และไม่มีข้อผิดพลาด
ตรวจด้วย ls -l: ต้องเห็น radio_1.2.4_all.deb (ไม่ถึง 1 MB) และ SHA256SUMS
ถ้าไม่สำเร็จ: "404" แปลว่าที่อยู่หรือเวอร์ชันผิด ให้คัดลอกลิงก์จากหน้า Release
ขั้นที่ 6.2: ตรวจไฟล์ที่ดาวน์โหลด
sha256sum -c SHA256SUMS --ignore-missing
ควรเห็น: radio_1.2.4_all.deb: OK
ถ้าไม่สำเร็จ: "FAILED" แปลว่าไฟล์เสียหายหรือไม่ใช่ไฟล์จริง ลบทิ้ง (rm radio_1.2.4_all.deb) แล้วดาวน์โหลดใหม่ ห้ามติดตั้งไฟล์ที่ไม่ผ่านการตรวจนี้
ขั้นที่ 6.3: ติดตั้ง
sudo apt install -y ./radio_1.2.4_all.deb
./ ด้านหน้าสำคัญ: บอก apt ให้ใช้ไฟล์ในโฟลเดอร์นี้
apt จะติดตั้งสิ่งที่แพ็กเกจต้องใช้จาก Ubuntu ด้วย: curl, openssl, iproute2 และเครื่องมือไฟร์วอลล์ ufw
ควรเห็น ท้ายสุด:
วิทยุออนไลน์ 1.2.4: ติดตั้งไฟล์ใน /opt/radio แล้ว ยังไม่มีบริการใดเริ่มทำงาน
ขั้นต่อไป: ตั้งค่าและเริ่มระบบด้วยคำสั่ง
sudo radio-setup
ข้อความเดียวกันแสดงเป็นภาษาอังกฤษด้วย การติดตั้งแพ็กเกจใช้เวลาประมาณ 10 วินาที และยังไม่เริ่มอะไรเลย
บรรทัด "Download is performed unsandboxed as root" เป็นเพียงข้อสังเกต ไม่ต้องสนใจ
ถ้าไม่สำเร็จ:
- "Unable to locate package": ลืมพิมพ์
./ - "is a git checkout" หรือ "เป็นสำเนา git":
/opt/radioมีสำเนา git ของซอร์สโค้ด ย้ายออกก่อน:sudo mv /opt/radio /opt/radio.old
ขั้นที่ 6.4: ตรวจการติดตั้ง
cat /opt/radio/VERSION
radioctl help | head -n 3
ควรเห็น: 1.2.4 แล้วตามด้วยบรรทัดแรก ๆ ของคำอธิบาย radioctl
แพ็กเกจติดตั้ง:
- โฟลเดอร์
/opt/radio(แม่แบบไฟล์ตั้งค่า ไฟล์ Docker Compose สคริปต์ คู่มือ และซอร์สโค้ด) - คำสั่ง
radio-setup(ตั้งค่า)radioctl(ดูแลระบบ) และradio(คำสั่งผู้ดูแลระบบ) - คู่มือนี้เป็นไฟล์ข้อความธรรมดา:
/opt/radio/INSTALL-UBUNTU.th.txtและ/opt/radio/INSTALL-UBUNTU.en.txt
อ่านบนเซิร์ฟเวอร์ได้ทุกเมื่อ:
less /opt/radio/INSTALL-UBUNTU.th.txt
6.5 วิธีอื่นในการได้ไฟล์
ทั้งสามวิธีได้ไฟล์ใน /opt/radio เหมือนกันทุกประการ
เลือกใช้วิธีเดียว
ตัวติดตั้งบรรทัดเดียว ดาวน์โหลดไฟล์รุ่นแล้วเริ่มตั้งค่าทันที:
curl -fsSL https://github.com/OWNER/REPO/releases/latest/download/install.sh | sudo bash
ไฟล์รุ่น radio-1.2.4.tar.gz แตกไฟล์เอง:
sudo mkdir -p /opt/radio
sudo tar xzf radio-1.2.4.tar.gz -C /opt/radio --strip-components=1
sudo bash /opt/radio/scripts/install.sh
ถ้าไม่ใช้แพ็กเกจ ให้ใช้ sudo bash /opt/radio/scripts/install.sh ทุกที่ที่คู่มือนี้เขียนว่า sudo radio-setup หลังรันครั้งแรกจะมีคำสั่ง radio-setup, radioctl และ radio ให้ใช้เช่นกัน
ถ้าใช้แพ็กเกจ apt จะอัปเดตไฟล์ให้ (ส่วนที่ 14) จึงแนะนำให้ใช้แพ็กเกจ
7. ตั้งค่าด้วย sudo radio-setup
sudo radio-setup
ตัวตั้งค่าจะถามทีละคำถาม
แต่ละคำถามแสดงค่าเริ่มต้นในวงเล็บ เช่น "(ค่าเริ่มต้น: small)"
กด Enter อย่างเดียวเพื่อใช้ค่าเริ่มต้น
คำถามแบบใช่หรือไม่ ตอบ y หรือ n
ถ้าต้องการเก็บสำเนาทุกอย่างที่แสดง ให้รันแบบนี้แทน:
sudo radio-setup 2>&1 | tee ~/radio-setup.log
คำถาม: ภาษา
"เลือกภาษา / Choose a language: พิมพ์ 1 สำหรับภาษาไทย, type 2 for English, then press Enter."
พิมพ์ 1 สำหรับภาษาไทย หรือ 2 สำหรับภาษาอังกฤษ
ส่วนที่ 1/8: ตรวจเครื่องเซิร์ฟเวอร์
ไม่มีคำถาม รายงานระบบปฏิบัติการ CPU หน่วยความจำ พื้นที่ว่าง และนาฬิกา
ถ้าไม่สำเร็จ:
- "พื้นที่ว่างน้อยกว่า 10 GB": ขยายดิสก์ก่อน
- "ต้องรันด้วยสิทธิ์ root": ลืมพิมพ์
sudo
ส่วนที่ 2/8: ขนาดของระบบ
"เครื่องนี้เหมาะกับโปรไฟล์ small พิมพ์ small, medium หรือ large (ค่าเริ่มต้น: small)" กด Enter เพื่อยอมรับ เลือกโปรไฟล์ใหญ่ขึ้นเฉพาะบนเครื่องที่ใหญ่ขึ้น ถ้าเลือกใหญ่เกินเครื่อง จะถามให้ยืนยัน
ส่วนที่ 3/8: Docker
ไม่มีคำถาม ถ้ายังไม่มี Docker จะติดตั้ง Docker Engine และ Docker Compose จากคลังของ Docker เอง ถ้าติดต่อคลังนั้นไม่ได้ จะใช้แพ็กเกจของ Ubuntu (docker.io และ docker-compose-v2) แทน ถ้ามี Docker อยู่แล้ว (ของ Docker หรือของ Ubuntu) จะใช้ตัวที่มี ขั้นนี้ใช้เวลาหนึ่งถึงสามนาที
ส่วนที่ 4/8: ที่อยู่ของแพลตฟอร์ม
"เลือกวิธีเข้าถึงแพลตฟอร์ม:" ตามด้วยสามตัวเลือก
พิมพ์ 1 (โดเมน) 2 (IP แบบ HTTPS) หรือ 3 (IP แบบ HTTP ธรรมดา) ค่าเริ่มต้นคือ 1 ดูส่วนที่ 2
ถ้าเลือก 1 โดเมน:
- "โดเมนของแพลตฟอร์ม เช่น radio.example.th": พิมพ์โดเมนของคุณ
- "ใช้โดเมนย่อยของสถานีหรือไม่": ตอบ
yเฉพาะเมื่อสร้างระเบียน wildcard ในขั้นที่ 3.3 แล้ว ค่าเริ่มต้น: ไม่ใช้ - "โดเมนแยกสำหรับสตรีมเสียง (ไม่บังคับ...)": กด Enter สตรีมจะอยู่ที่
https://โดเมนของคุณ/stream/ชื่อสถานี - จากนั้นตรวจ DNS "DNS ของ radio.example.th ชี้มาที่เครื่องนี้" แปลว่าเรียบร้อย ถ้า DNS ยังไม่พร้อม จะถามว่า "ติดตั้งต่อหรือไม่" พิมพ์
yแล้วแก้ DNS ภายหลัง
ถ้าเลือก 2 หรือ 3 หมายเลข IP:
- "หมายเลข IP ที่ผู้ใช้จะพิมพ์ในเบราว์เซอร์ (ค่าเริ่มต้น: ...)": เสนอหมายเลขที่ตรวจพบ กด Enter หรือพิมพ์หมายเลขที่ถูกต้อง
- ถ้าเลือก 2 และเป็น IP สาธารณะ จะอธิบายเรื่องใบรับรอง Let's Encrypt สำหรับ IP (อายุประมาณ 6 วัน ต่ออายุเอง พอร์ต 80 และ 443 ต้องเปิดไว้ตลอด)
- ถ้าเลือก 3 จะเตือนว่า HTTP ธรรมดาไม่เข้ารหัส แล้วถามว่า "ใช้ HTTP ธรรมดาต่อไปหรือไม่" พิมพ์
y
คำถามสุดท้ายของส่วนนี้ มีในทุกแบบ: "ชื่อเครื่องหรือ IP ที่ดีเจใช้เชื่อมต่อ BUTT หรือ OBS (ค่าเริ่มต้น: ...)": กด Enter
ส่วนที่ 5/8: อีเมล
- "อีเมลผู้ดูแลระบบ": พิมพ์อีเมลของคุณ ใช้ในหน้าตั้งค่าบนเว็บและกับ Let's Encrypt
- "เซิร์ฟเวอร์อีเมลสำหรับส่งรหัสเข้าสู่ระบบ รูปแบบ smtp://ผู้ใช้:รหัสผ่าน@โฮสต์:587 (เว้นว่างได้...)": กด Enter เพื่อข้าม หรือพิมพ์ที่อยู่ SMTP ของคุณ ตัวอย่าง:
smtp://radio%40example.th:MyPassword@smtp.example.th:587ถ้าชื่อผู้ใช้มี@ให้เขียนเป็น%40ส่วนที่ 11 อธิบายเรื่องนี้
ส่วนที่ 6/8: การสำรองข้อมูล
- "โฟลเดอร์เก็บข้อมูลสำรองบนเครื่องนี้ (ค่าเริ่มต้น: /var/backups/radio)": กด Enter
- "สำรองข้อมูลไปที่ S3 ด้วยหรือไม่": ตอบ
nไปก่อน หรือyถ้ามีบักเก็ต S3 (Amazon S3, Cloudflare R2, Wasabi, MinIO) แล้วจะถาม:- ที่อยู่คลัง เช่น
s3:https://s3.ap-southeast-1.amazonaws.com/my-bucket/radio - Access key ID
- Secret access key (ระหว่างพิมพ์จะไม่แสดง)
- Region เช่น
ap-southeast-1
- ที่อยู่คลัง เช่น
เพิ่ม S3 ภายหลังได้ (ส่วนที่ 13)
ส่วนที่ 7/8: เขียนไฟล์ตั้งค่า
ไม่มีคำถาม สร้างรหัสผ่านและรหัสลับทั้งหมด แล้วเขียนลง /opt/radio/.env
ไฟล์นี้อ่านได้เฉพาะ root
จากนั้นแสดงบรรทัดสรุป: ที่อยู่ ที่อยู่สตรีม และพอร์ตดีเจ
ส่วนที่ 8/8: เตรียมอิมเมจและเริ่มระบบ
ไม่มีคำถาม เตรียมอิมเมจของโปรแกรมแล้วเริ่มทุกบริการ:
- ถ้ารุ่นนี้มีอิมเมจที่เผยแพร่ไว้ จะดาวน์โหลด (ประมาณ 1 GB)
- ถ้าไม่มี เซิร์ฟเวอร์จะสร้างอิมเมจเองจากซอร์สโค้ดใน
/opt/radioข้อความจะแสดงขั้นตอนการสร้าง
จากนั้น "กำลังรอให้ทุกบริการพร้อม (ไม่เกิน 5 นาที)" และ "เรียบร้อย: ทุกบริการทำงานแล้ว"
ท้ายสุด "ขั้นต่อไป:" บอกที่อยู่ของหน้าตั้งค่าบนเว็บ เช่น:
2. เปิด http://192.168.1.20/install ทันที แล้วสร้างผู้ดูแลระบบด้วยอีเมล admin@example.th
ถ้าไม่สำเร็จ:
- "พอร์ต 80 มีโปรแกรมอื่นใช้อยู่": ดูพอร์ต 80 หรือ 443 มีโปรแกรมอื่นใช้อยู่
- "สร้างอิมเมจไม่สำเร็จ": มักเป็นเพราะหน่วยความจำไม่พอ ดูสร้างอิมเมจไม่สำเร็จเพราะหน่วยความจำไม่พอ แล้วรัน
sudo radio-setupอีกครั้ง - "บางบริการยังไม่พร้อม": รัน
sudo radioctl doctorและsudo radioctl logs
รัน sudo radio-setup ซ้ำได้เสมอโดยปลอดภัย รหัสผ่านและข้อมูลทั้งหมดยังอยู่ และคำตอบเดิมจะเป็นค่าเริ่มต้น
ระหว่างติดตั้งเกิดอะไรขึ้น และใช้เวลาเท่าไร
| ขั้นตอน | เวลา |
|---|---|
| ติดตั้งแพ็กเกจ (ขั้นที่ 6.3) | ประมาณ 10 วินาที |
| ติดตั้ง Docker ถ้ายังไม่มี | 1 ถึง 3 นาที |
| ดาวน์โหลดอิมเมจที่เผยแพร่ไว้ | 2 ถึง 10 นาที ขึ้นกับความเร็วอินเทอร์เน็ต |
| สร้างอิมเมจบนเซิร์ฟเวอร์ครั้งแรก เครื่องเล็ก (2 vCPU) | ประมาณ 5 ถึง 15 นาที |
| สร้างใหม่หลังแก้ไขเล็กน้อย (มีแคช) | ประมาณ 1 ถึง 3 นาที |
| เริ่มบริการและตรวจสุขภาพ | ประมาณ 1 นาที |
วัดบนเครื่องทดสอบ 2 vCPU 8 GB, Ubuntu 24.04, โหมด HTTP ธรรมดา, สร้างอิมเมจบนเครื่อง:
sudo radio-setupทั้งหมดใช้เวลา 2 นาที 25 วินาที (ชั้นพื้นฐานมีในแคชแล้ว)- การสร้างอิมเมจทั้งหมดโดยไม่มีแคชใช้เวลา 3 นาที บนอินเทอร์เน็ตความเร็วสูง
ถ้าอินเทอร์เน็ตช้ากว่า หรือเครื่องมีหน่วยความจำ 4 GB จะใช้เวลานานกว่า: เผื่อไว้ถึง 15 นาที
การสร้างอิมเมจต้องมีหน่วยความจำอย่างน้อย 4 GB หรือหน่วยความจำ 2 GB กับ swap 2 GB
แบบไม่ถามคำถาม
ใส่คำตอบทั้งหมดเป็นตัวเลือกได้ ตัวอย่าง:
sudo radio-setup --yes --lang th --mode domain --domain radio.example.th --email admin@example.th
sudo radio-setup --yes --lang th --mode ip-https --ip 203.0.113.10 --email admin@example.th
sudo radio-setup --yes --lang th --mode ip-http --ip 192.168.1.20 --email admin@example.th
sudo radio-setup --help แสดงตัวเลือกทั้งหมด ภาคผนวก อธิบายแต่ละตัว
8. ตั้งค่าครั้งแรกในเว็บ
ทำทันที: ก่อนจะมีผู้ดูแลระบบ ใครก็ตามที่เปิดหน้านี้ได้ก่อนจะสร้างผู้ดูแลได้
ขั้นที่ 8.1: เปิดหน้าตั้งค่า
ในเบราว์เซอร์ เปิดที่อยู่ที่ตัวตั้งค่าแสดง ซึ่งลงท้ายด้วย /install:
- โดเมน:
https://radio.example.th/install - IP แบบ HTTPS:
https://203.0.113.10/install - IP แบบ HTTP ธรรมดา:
http://192.168.1.20/install(เติม:พอร์ตถ้าเลือกพอร์ต HTTP อื่น)
ควรเห็น: หน้าชื่อ "ติดตั้งแพลตฟอร์มวิทยุ"
ถ้าไม่สำเร็จ:
- เปิดหน้าไม่ได้: ไฟร์วอลล์หรือ security group ของคลาวด์ปิดพอร์ต 80 หรือ 443 (ส่วนที่ 12) บนเซิร์ฟเวอร์ คำสั่ง
curl -sI http://localhost/install | head -n 1ควรตอบบรรทัดที่ขึ้นต้นด้วยHTTP/1.1: 200 ก่อนตั้งค่าในเว็บ 303 หลังตั้งค่าแล้ว หรือ 308 (เปลี่ยนไปใช้ HTTPS) ในโหมด HTTPS ถ้าไม่มีคำตอบเลย แปลว่าแพลตฟอร์มไม่ได้ทำงาน:sudo radioctl status - เตือนเรื่องใบรับรองในแบบโดเมน: DNS ยังไม่ชี้มาที่เซิร์ฟเวอร์ หรือพอร์ต 80 และ 443 ปิดอยู่ รอสักครู่ แล้วตรวจด้วย
sudo radioctl doctor - เตือนเรื่องใบรับรองเมื่อใช้ IP ส่วนตัว: เป็นเรื่องปกติ Caddy ออกใบรับรองเอง ให้ดำเนินการต่อ หรือติดตั้งใบรับรองหลักของ Caddy (คู่มือการติดตั้ง)
- หน้าเปลี่ยนไปหน้าแรก: แพลตฟอร์มตั้งค่าไปแล้ว ให้เข้าสู่ระบบแทน (ส่วนที่ 9)
ขั้นที่ 8.2: อ่านผลการตรวจระบบ
ส่วนแรก หัวข้อ "ตรวจความพร้อมของระบบ" เป็นตาราง: ส่วนประกอบ สถานะ รายละเอียด PostgreSQL, โครงสร้างฐานข้อมูล (migration), Storage และ FFmpeg ต้อง "ผ่าน" คำเตือนเหล่านี้เป็นเรื่องปกติหลังเพิ่งเริ่มระบบ:
- "ระบบออกอากาศ (worker และ Liquidsoap)": "ยังไม่มี worker รายงานสถานะ" จะเริ่มภายในหนึ่งนาที
- "อีเมล (SMTP)": "ยังไม่ได้ตั้ง" เมื่อข้าม SMTP
- "ที่อยู่สาธารณะ": หมายเหตุเรื่อง http ที่ไม่เข้ารหัส ในโหมด HTTP ธรรมดา
ขั้นที่ 8.3: กรอกแบบฟอร์ม
ส่วนที่สอง หัวข้อ "สร้างผู้ดูแลระบบ" ถ้าใช้โปรแกรมอ่านหน้าจอ กระโดดไปด้วยปุ่มหัวข้อ (H ในโหมดเรียกดูของ NVDA และ JAWS)
| ช่อง | กรอกอะไร |
|---|---|
| ชื่อแพลตฟอร์ม | ชื่อที่ผู้ใช้เห็นทุกหน้า ค่าเริ่มต้น: วิทยุออนไลน์ เปลี่ยนภายหลังได้ที่หน้าภาพรวมของผู้ดูแลระบบ |
| ชื่อที่แสดงของผู้ดูแล | ชื่อของคุณ |
| อีเมลผู้ดูแล | อีเมลของคุณ ใช้เข้าสู่ระบบ |
กลุ่ม "สถานีแรก (ไม่บังคับ)" กรอกครบทั้งสามช่อง หรือไม่กรอกเลย:
| ช่อง | กรอกอะไร |
|---|---|
| ชื่อองค์กร | องค์กรของคุณ เช่น "เซนต์ เทคโนโลยี" |
| ชื่อสถานี | ชื่อสถานี เช่น "SAINT FM" |
| ชื่อย่อสถานีในลิงก์ | ตัวอักษรภาษาอังกฤษพิมพ์เล็ก ตัวเลข และขีดกลาง 2 ถึง 41 ตัว เช่น saint-fm เป็นส่วนหนึ่งของที่อยู่สถานีและสตรีม ลงท้ายด้วย -low หรือ -phone ไม่ได้ |
กดปุ่ม "ติดตั้ง"
ควรเห็น: คุณเข้าสู่ระบบแล้ว และหน้า "ศูนย์ควบคุมแพลตฟอร์ม" เปิดขึ้นพร้อมข้อความ "ติดตั้งเสร็จแล้ว ยินดีต้อนรับสู่ศูนย์ควบคุมแพลตฟอร์ม"
ถ้าไม่สำเร็จ: สรุปข้อผิดพลาดด้านบนแบบฟอร์มบอกแต่ละปัญหา พร้อมลิงก์ไปที่ช่องนั้น แก้แล้วกด "ติดตั้ง" อีกครั้ง
อีกวิธีในการสร้างผู้ดูแลระบบ บนเซิร์ฟเวอร์:
sudo radio create-admin you@example.th
9. เข้าสู่ระบบ
- เปิดที่อยู่ของแพลตฟอร์ม แล้วเลือก "เข้าสู่ระบบ" (ที่อยู่
/login) - พิมพ์อีเมล แล้วกดปุ่มเพื่อขอรหัส
- หน้าเว็บบอกว่า "เราส่งรหัส 6 หลักไปที่ ... แล้ว รหัสใช้ได้ 15 นาที"
- พิมพ์รหัสจากอีเมลแล้วยืนยัน
ถ้าไม่มี SMTP ให้อ่านรหัสบนเซิร์ฟเวอร์:
sudo radioctl outbox
ควรเห็น: อีเมล 5 ฉบับล่าสุด ฉบับละ 1–3 บรรทัดสั้น ๆ คือ เวลา ผู้รับ และหัวเรื่อง ถ้ามีรหัสจะมีบรรทัด "รหัส: 482913 (ทีละตัว: 4 8 2 9 1 3)" และบรรทัด "ลิงก์เข้าสู่ระบบ" บรรทัดสุดท้ายบอกว่าคัดลอกรหัสล่าสุดไว้ในคลิปบอร์ดแล้ว กลับไปที่ช่อง "รหัส 6 หลัก" ในเบราว์เซอร์แล้วกด Ctrl+V ได้เลย ไม่ต้องอ่านรหัสจากหน้าจอเทอร์มินัล
sudo radioctl outbox 1แสดงเฉพาะฉบับล่าสุดsudo radioctl outbox admin@example.thแสดงเฉพาะอีเมลถึงที่อยู่นี้sudo radioctl outbox --fullแสดงข้อความเต็มของแต่ละฉบับsudo radioctl outbox --no-copyไม่คัดลอก
การคัดลอกเข้าคลิปบอร์ด (outbox และ login-link):
- ต่อเซิร์ฟเวอร์ด้วย SSH จาก Windows: ใช้ Windows Terminal (มีใน Windows 11 และติดตั้งจาก Microsoft Store ได้ใน Windows 10) แล้วพิมพ์
ssh ชื่อผู้ใช้@ที่อยู่เซิร์ฟเวอร์ข้อความจะเข้าคลิปบอร์ดของ Windows - PuTTY ไม่รองรับ การคัดลอกแบบนี้ ถ้าใช้ PuTTY ให้ใช้รหัสแบบทีละตัวในบรรทัด "ทีละตัว" แทน หรือเปลี่ยนไปใช้ Windows Terminal
- ใช้หน้าจอบนเครื่องเซิร์ฟเวอร์เอง (Ubuntu Desktop): ติดตั้งเครื่องมือคลิปบอร์ดก่อน
sudo apt install wl-clipboard xclip - โปรแกรมไม่สามารถตรวจได้ว่าการคัดลอกผ่านเทอร์มินัลสำเร็จหรือไม่ ถ้ากด Ctrl+V แล้วไม่มีอะไร แปลว่าโปรแกรมเทอร์มินัลไม่รองรับ
ถ้าไม่สำเร็จ: "No such service" หรือไม่มีอะไรเลย แปลว่าแพลตฟอร์มไม่ได้ทำงาน ตรวจด้วย sudo radioctl status
10. ตรวจครั้งแรก
ขั้นที่ 10.1: สถานะ
sudo radioctl status
ควรเห็น เป็นส่วน ๆ:
- "== บริการ": แต่ละบริการ เช่น
app: running, Up 5 minutes (healthy)บริการมี app, backup, caddy, db, engine-net, icecast และ worker - "== การใช้ทรัพยากร (ตอนนี้)": CPU และหน่วยความจำของแต่ละคอนเทนเนอร์
- "== สถานี": เช่น "สถานีที่เปิดอยู่ 1 จาก 5 ที่โปรไฟล์ small รองรับ"
- "== การสำรองข้อมูลล่าสุด", "== เวอร์ชัน", ที่อยู่ และพื้นที่ว่างบนดิสก์
ขั้นที่ 10.2: ตรวจปัญหา (doctor)
sudo radioctl doctor
ตรวจไฟล์ตั้งค่า บริการ ดิสก์ นาฬิกา DNS ใบรับรอง พอร์ตดีเจฐานข้อมูล และการสำรองข้อมูล แต่ละปัญหาแสดงเป็น "ปัญหา:" และบรรทัด "วิธีแก้:" พร้อมคำสั่งที่ต้องรัน ควรเห็น ท้ายสุด: "เรียบร้อย: ไม่พบปัญหา"
หลังติดตั้งใหม่ มักรายงานว่า "ยังไม่เคยสำรองข้อมูล" ให้สำรองครั้งแรก:
sudo radioctl backup
ควรเห็น: "เรียบร้อย: สำรองข้อมูลเสร็จ" แล้วรัน doctor อีกครั้ง
บรรทัด "หมายเหตุ: ยังไม่ได้ตั้งเซิร์ฟเวอร์อีเมล" เป็นแค่หมายเหตุ ไม่ใช่ปัญหา
ขั้นที่ 10.3: ฟังสตรีม
ที่อยู่สตรีมคือที่อยู่ของแพลตฟอร์ม ตามด้วย /stream/ แล้วตามด้วยชื่อย่อสถานี
เช่น https://radio.example.th/stream/saint-fm หรือ http://192.168.1.20/stream/saint-fm
บนเซิร์ฟเวอร์:
curl -s -o /dev/null --max-time 5 -w '%{http_code} %{size_download}\n' http://localhost/stream/saint-fm
ในโหมด HTTPS ใช้ที่อยู่แบบ HTTPS และเติมพอร์ตถ้าไม่ใช่ 80
ควรเห็น: 200 ตามด้วยจำนวนไบต์ที่มากกว่า 0
curl หยุดหลัง 5 วินาที ซึ่งเป็นเรื่องปกติของสตรีม
บนคอมพิวเตอร์ของคุณ: เปิดที่อยู่สตรีมในเบราว์เซอร์ หรือใน VLC (Ctrl+N "Open network stream" วางที่อยู่ แล้ว Enter) สถานีใหม่ยังไม่มีเพลง: จะได้ยินเสียงสัญญาณรอหรือความเงียบ จนกว่าจะอัปโหลดเพลงในหน้าผู้ดูแลสถานี (คู่มือผู้ดูแลสถานี)
ขั้นที่ 10.4: ทดสอบดีเจด้วย BUTT
- ในเว็บแอป เปิดหน้าผู้ดูแลสถานี: "จัดการสถานี" แล้ว "การออกอากาศสด"
- กด "สร้างข้อมูลเข้าออกอากาศ" จดที่อยู่เซิร์ฟเวอร์ พอร์ต ชื่อผู้ใช้ และรหัสผ่าน (รหัสผ่านแสดงครั้งเดียว)
- ใน BUTT: Settings แท็บ Main ใต้ Server กด ADD เลือก Type: Icecast ใส่ Address และ Port จากข้อ 2 Password จากข้อ 2 Icecast mountpoint:
liveIcecast user: ชื่อผู้ใช้ แล้วกด ADD - แท็บ Audio: codec MP3, bitrate 128k, sample rate 44100, stereo
- ปิดหน้าตั้งค่า แล้วกด Play (ปุ่มแรก)
ควรเห็น: BUTT บอกว่าเชื่อมต่อแล้ว และสตรีมจากขั้นที่ 10.3 เล่นเสียงของคุณภายในไม่กี่วินาที กด Stop เพื่อจบ
พอร์ตดีเจของสถานีแรกคือพอร์ตแรกของช่วง (ค่าเริ่มต้น 8100) ตรวจจากคอมพิวเตอร์ของคุณว่าพอร์ตเปิด ใน PowerShell:
Test-NetConnection YOUR-SERVER-IP -Port 8100
ควรเห็น: "TcpTestSucceeded : True" บน macOS หรือ Linux: nc -vz YOUR-SERVER-IP 8100
ถ้าไม่สำเร็จ: ดูดีเจเชื่อมต่อไม่ได้ รายละเอียดทั้งหมดอยู่ในคู่มือดีเจ
11. ตั้งค่าอีเมล (SMTP) หลังติดตั้ง
ต้องมีข้อมูลจากผู้ให้บริการอีเมล: ชื่อเซิร์ฟเวอร์ พอร์ต (ปกติ 587) ชื่อผู้ใช้ และรหัสผ่าน ผู้ให้บริการหลายรายให้ใช้ "รหัสผ่านสำหรับแอป" (app password) แทนรหัสผ่านปกติ (บัญชี Google และ Microsoft ที่เปิดการยืนยันสองขั้น)
| ผู้ให้บริการ | เซิร์ฟเวอร์ | พอร์ต |
|---|---|---|
| Google Workspace หรือ Gmail | smtp.gmail.com | 587 |
| Microsoft 365 | smtp.office365.com | 587 |
| Amazon SES (สิงคโปร์) | email-smtp.ap-southeast-1.amazonaws.com | 587 |
เขียนเป็นที่อยู่เดียว: smtp://USER:PASSWORD@SERVER:587
อักขระในชื่อผู้ใช้หรือรหัสผ่านต้องเข้ารหัส: @ เป็น %40, : เป็น %3A, / เป็น %2F, # เป็น %23, ช่องว่างเป็น %20
ตัวอย่าง: ผู้ใช้ radio@example.th รหัสผ่าน Pa:ss จะได้ smtp://radio%40example.th:Pa%3Ass@smtp.example.th:587
ขั้นที่ 11.1: ตั้งด้วย radio-setup
วิธีที่ง่ายที่สุดคือรันตัวตั้งค่าอีกครั้งพร้อมค่าใหม่ ค่าอื่นทั้งหมดคงเดิม:
sudo radio-setup --yes --smtp-url 'smtp://radio%40example.th:APP-PASSWORD@smtp.example.th:587'
ต้องมีเครื่องหมายคำพูดเดี่ยวครอบที่อยู่ ควรเห็น: ส่วนต่าง ๆ เหมือนครั้งก่อน และจบด้วย "เรียบร้อย: ทุกบริการทำงานแล้ว"
อีกวิธี: แก้ /opt/radio/.env ด้วยโปรแกรมแก้ไขข้อความ (sudo nano /opt/radio/.env) แก้บรรทัด SMTP_URL= และ MAIL_FROM= บันทึก แล้วรัน sudo radioctl up
MAIL_FROM คือผู้ส่ง เช่น MAIL_FROM='Online Radio <no-reply@example.th>' ผู้ให้บริการหลายรายรับเฉพาะที่อยู่ผู้ส่งที่เป็นโดเมนของคุณเอง
ขั้นที่ 11.2: ทดสอบ
ออกจากระบบ แล้วเข้าสู่ระบบใหม่ (ส่วนที่ 9) รหัสควรมาถึงทางอีเมลภายในหนึ่งนาที ตรวจโฟลเดอร์สแปมด้วย
ถ้าไม่สำเร็จ: ดูอีเมลไม่มาถึง
ขั้นที่ 11.3: Gmail, Microsoft 365 และบัญชีที่เปิดการยืนยันหลายขั้น
บัญชีที่เปิดการยืนยันหลายขั้น (2-Step Verification) ไม่รับรหัสผ่านปกติ จากโปรแกรมอื่นเลย ไม่ว่าจะตั้งค่าอย่างไร นี่เป็นนโยบายของ Google และ Microsoft ตั้งในหน้าเว็บ ผู้ดูแลระบบ › อีเมล เลือกวิธีใดวิธีหนึ่ง:
วิธีที่แนะนำ: เชื่อมบัญชีอีเมลแบบง่าย (มีเมื่อแพลตฟอร์มมีแอปกลางของวิทยุออนไลน์ ดู docs/mail-oauth-apps.th.md)
- Microsoft (Outlook, Hotmail, Microsoft 365):
- กด เชื่อมบัญชี Microsoft
- หน้าจอแสดงรหัสสั้น ๆ เช่น ABCD-EFGH (มีปุ่มคัดลอก และอ่านทีละตัวให้)
- เปิด microsoft.com/devicelogin ใส่รหัส เข้าสู่ระบบด้วยบัญชีที่จะใช้ส่ง ยืนยันสองขั้นตามปกติ แล้วกด Accept
- กลับมาที่หน้าเดิม ภายในไม่กี่วินาทีจะได้ยินว่า "เชื่อมบัญชี ... แล้ว และส่งอีเมลทดสอบไปที่ ... สำเร็จ"
- Google (Gmail, Google Workspace):
- กด เชื่อมบัญชี Google แล้วกดลิงก์ เข้าสู่ระบบด้วย Google
- เข้าสู่ระบบและกดอนุญาต
- เบราว์เซอร์ขึ้นว่าเปิดหน้าไม่ได้ ซึ่งเป็นเรื่องปกติ กด Alt+D แล้ว Ctrl+C กลับมาวางในช่อง แล้วกด เชื่อมต่อ ทดสอบ และบันทึก
ไม่ต้องรู้ชื่อเซิร์ฟเวอร์ พอร์ต หรือรหัสผ่านใด ๆ และแพลตฟอร์มไม่เห็นรหัสผ่านของบัญชี
วิธีที่ 1: รหัสผ่านสำหรับแอป (Gmail ส่วนตัว)
- เปิด https://myaccount.google.com/apppasswords ด้วยบัญชี Gmail ที่จะใช้ส่ง (ถ้าไม่มีหน้านี้ ให้เปิดการยืนยันแบบ 2 ขั้นตอนก่อน)
- ตั้งชื่อ เช่น วิทยุออนไลน์ แล้วกดสร้าง Google แสดงรหัส 16 ตัวอักษร เป็นกลุ่มละ 4 ตัว
- ในหน้า ผู้ดูแลระบบ › อีเมล เลือก Gmail ชื่อผู้ใช้ใส่อีเมล Gmail เต็ม รหัสผ่านวางรหัส 16 ตัวนั้น (มีช่องว่างก็ได้ ระบบตัดให้) แล้วกด ทดสอบและบันทึก
- ถ้าระบบขอยืนยันตัวตนก่อนบันทึก ยืนยันแล้วกด ทำรายการต่อ ได้เลย ไม่ต้องพิมพ์รหัสผ่านซ้ำ
- ถ้าใส่รหัสผ่านปกติของ Gmail หน้านั้นจะเตือนทันทีว่ารหัสผ่านสำหรับแอปต้องมี 16 ตัวอักษร
- เปลี่ยนรหัสผ่าน Google เมื่อไร รหัสผ่านสำหรับแอปเดิมจะใช้ไม่ได้ ต้องสร้างใหม่
วิธีที่ 2: เข้าสู่ระบบด้วยบัญชี Google หรือ Microsoft (OAuth ไม่ใช้รหัสผ่าน)
ใช้เมื่อไม่มีเมนูรหัสผ่านสำหรับแอป (ผู้ดูแล Google Workspace ปิดไว้) หรือใช้ Microsoft 365 (Microsoft กำลังเลิกรับรหัสผ่านสำหรับ SMTP: ปิดเป็นค่าเริ่มต้นตั้งแต่ปลายเดือนธันวาคม 2026 และจะประกาศวันเลิกถาวรในครึ่งหลังของปี 2027)
- ในหน้า ผู้ดูแลระบบ › อีเมล ส่วน "เข้าสู่ระบบด้วยบัญชี Google หรือ Microsoft" คัดลอก ที่อยู่สำหรับส่งกลับ (Redirect URI) ไว้ (มีปุ่มคัดลอก)
- Google: เปิด https://console.cloud.google.com สร้างโปรเจกต์ แล้วไปที่ APIs & Services
- OAuth consent screen: เลือก External กรอกชื่อแอปและอีเมล แล้วกด Publish app (ถ้าค้างไว้ที่ Testing การอนุญาตหมดอายุทุก 7 วัน)
- Credentials › Create credentials › OAuth client ID › ชนิด Web application › Authorized redirect URIs วางที่อยู่จากข้อ 1 › Create
- คัดลอก Client ID และ Client secret
- Microsoft: เปิด https://entra.microsoft.com › App registrations › New registration
- Redirect URI เลือก Web แล้ววางที่อยู่จากข้อ 1
- Certificates & secrets › New client secret › คัดลอกค่า (Value)
- API permissions › Add a permission › APIs my organization uses › Office 365 Exchange Online › Delegated › SMTP.Send แล้วกด Grant admin consent
- ผู้ดูแล Microsoft 365 ต้องเปิด Authenticated SMTP ให้กล่องจดหมายที่ใช้ส่ง
- กลับมาที่หน้า ผู้ดูแลระบบ › อีเมล เลือกผู้ให้บริการ ใส่อีเมลของบัญชีที่ใช้ส่ง Client ID และ Client secret แล้วกด ไปหน้าเข้าสู่ระบบของผู้ให้บริการ
- กดลิงก์ เข้าสู่ระบบด้วย Google (หรือ Microsoft) เข้าสู่ระบบด้วยบัญชีนั้น แล้วกดอนุญาต
- Google อาจขึ้นว่า "Google hasn't verified this app" เพราะเป็นแอปของคุณเอง กด Advanced แล้ว Go to ... (unsafe)
- ถ้าแพลตฟอร์มมีชื่อโดเมนแบบ HTTPS เบราว์เซอร์จะกลับมาที่แพลตฟอร์มเอง ระบบส่งอีเมลทดสอบและบันทึกให้
- ถ้าแพลตฟอร์มใช้ที่อยู่ IP (ยังไม่มีโดเมน) เบราว์เซอร์จะขึ้นว่าเปิดหน้า localhost ไม่ได้ ซึ่งเป็นเรื่องปกติ กด Alt+D แล้ว Ctrl+C เพื่อคัดลอกที่อยู่ กลับไปแท็บของแพลตฟอร์ม วางในช่อง "วางที่อยู่ของหน้าที่เปิดไม่ได้" แล้วกด เชื่อมต่อ ทดสอบ และบันทึก ภายใน 20 นาที
ควรเห็น: "เชื่อมบัญชี ... แล้ว และส่งอีเมลทดสอบไปที่ ... สำเร็จ" และหัวข้อสถานะบอกว่าใช้บัญชีที่เชื่อมไว้ (OAuth ไม่ใช้รหัสผ่าน)
ถ้าภายหลังมีคนยกเลิกการอนุญาต อีเมลจะส่งไม่ออก (เก็บไว้ให้อ่านด้วย sudo radioctl outbox) และหน้านั้นบอกให้กด เชื่อมต่อใหม่
วิธีที่ 3: บริการส่งอีเมล (ใช้ API key แทนรหัสผ่าน)
เช่น Brevo (มีแบบฟรีวันละ 300 ฉบับ), SendGrid, Mailgun, Resend เลือกชื่อบริการในรายการผู้ให้บริการ แล้วทำตามคำแนะนำใต้ "สิ่งที่ต้องเตรียมของแต่ละผู้ให้บริการ" ต้องยืนยันอีเมลผู้ส่งหรือโดเมนกับบริการนั้นก่อน
12. ไฟร์วอลล์และ security group ของผู้ให้บริการคลาวด์
มีไฟร์วอลล์ได้สองชั้น: ของผู้ให้บริการคลาวด์ (security group) และ ufw บนเซิร์ฟเวอร์ ทั้งสองต้องอนุญาตพอร์ตในข้อ 1.2
12.1 ufw บนเซิร์ฟเวอร์
แพ็กเกจติดตั้ง ufw ให้แล้ว แต่ยังปิดอยู่จนกว่าคุณจะเปิด อนุญาต SSH ก่อน มิฉะนั้นจะเข้าเครื่องไม่ได้:
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 443/udp
sudo ufw allow 8100:8119/tcp
sudo ufw allow 10100:10119/udp
sudo ufw enable
โปรไฟล์ medium ใช้ 8100:8139/tcp โปรไฟล์ large ใช้ 8100:8199/tcp
sudo ufw enable จะถามว่า "Command may disrupt existing ssh connections. Proceed with operation (y|n)?" พิมพ์ y
ตรวจ:
sudo ufw status verbose
ควรเห็น: "Status: active" และหนึ่งบรรทัดต่อหนึ่งกฎ
ถ้า ufw เปิดอยู่แล้วตอนรัน sudo radio-setup ตัวตั้งค่าจะเพิ่มกฎเหล่านี้ให้เอง
ควรรู้: Docker เปิดพอร์ตของคอนเทนเนอร์ (80, 443 และพอร์ตดีเจ) เองโดยไม่ผ่าน ufw ufw ยังป้องกันพอร์ตอื่นทั้งหมด เช่น SSH ส่วนฐานข้อมูลและพอร์ตภายในอื่น ๆ Docker ไม่เปิดออกนอกเครื่องเลย
12.2 ไฟร์วอลล์ของผู้ให้บริการคลาวด์
ในแผงควบคุมของผู้ให้บริการ หาไฟร์วอลล์ของเซิร์ฟเวอร์ ชื่อเรียกต่างกัน: "Security group" (Amazon Web Services, Alibaba Cloud, Huawei Cloud) "Firewall rules" (Google Cloud) "Network security group" (Microsoft Azure) หรือ "Cloud Firewall" (DigitalOcean) เพิ่มกฎขาเข้า:
| โปรโตคอล | พอร์ต | ต้นทาง |
|---|---|---|
| TCP | 22 | IP ของคุณเอง (หรือทุกที่) |
| TCP | 80 | ทุกที่ (0.0.0.0/0 และ ::/0) |
| TCP | 443 | ทุกที่ |
| UDP | 443 | ทุกที่ |
| TCP | 8100 ถึง 8119 | ทุกที่ หรือเฉพาะ IP ของดีเจ |
| UDP | 10100 ถึง 10119 | ทุกที่ หรือเฉพาะ IP ของฝั่งส่ง (เมื่อใช้ SRT) |
ขาออก: อนุญาตทั้งหมด (ค่าเริ่มต้น)
13. การสำรองข้อมูล
แพลตฟอร์มสำรองข้อมูลเองทุกวันเวลา 03:30 (เวลากรุงเทพฯ)
ข้อมูลสำรองมีฐานข้อมูล ไฟล์เสียงและไฟล์บันทึกรายการทั้งหมด และไฟล์ตั้งค่า
ข้อมูลสำรองเข้ารหัสด้วยรหัส RESTIC_PASSWORD จาก /opt/radio/.env
เก็บไว้: รายวัน 7 ชุด รายสัปดาห์ 4 ชุด และรายเดือน 6 ชุด
ขั้นที่ 13.1: เก็บสำเนาไฟล์ตั้งค่าไว้นอกเซิร์ฟเวอร์
ถ้าไม่มี RESTIC_PASSWORD จะไม่มีใครอ่านข้อมูลสำรองได้ แม้แต่ตัวคุณเอง
คัดลอก .env มาที่คอมพิวเตอร์ของคุณหนึ่งครั้ง และทุกครั้งที่มีการเปลี่ยนแปลง
บนเซิร์ฟเวอร์:
sudo cp /opt/radio/.env ~/radio-env.txt
sudo chown "$USER" ~/radio-env.txt
บนคอมพิวเตอร์ของคุณ (เปิดหน้าต่างเทอร์มินัลใหม่ ไม่ใช่หน้าต่าง SSH):
scp ubuntu@YOUR-SERVER-IP:radio-env.txt .
แล้วลบสำเนาบนเซิร์ฟเวอร์: rm ~/radio-env.txt
เก็บไฟล์ไว้ในที่ปลอดภัย เช่น โปรแกรมจัดการรหัสผ่าน ไฟล์นี้มีรหัสผ่านทั้งหมดของแพลตฟอร์ม
ขั้นที่ 13.2: สำรองตอนนี้และตรวจ
sudo radioctl backup
sudo radioctl backup list
sudo radioctl backup status
sudo radioctl backup check
ควรเห็น: "เรียบร้อย: สำรองข้อมูลเสร็จ" รายการข้อมูลสำรองพร้อมเวลา ผลการสำรองครั้งล่าสุด และ "no errors were found" จากการตรวจ
ขั้นที่ 13.3: เพิ่ม S3
สำเนานอกเซิร์ฟเวอร์ยังอยู่แม้เซิร์ฟเวอร์เสียหาย สร้างบักเก็ตและ access key ที่ผู้ให้บริการ S3 แล้ว:
sudo radio-setup --yes --s3-repository 's3:https://s3.ap-southeast-1.amazonaws.com/my-bucket/radio' --s3-access-key 'AKIA...' --s3-secret-key 'SECRET' --s3-region ap-southeast-1
sudo radioctl backup
sudo radioctl backup list s3
ควรเห็น: รายการใน S3 มีข้อมูลสำรองชุดใหม่
ขั้นที่ 13.4: ทดสอบกู้คืน
การกู้คืนจะแทนที่ข้อมูลทั้งหมดด้วยข้อมูลสำรอง ให้ทดสอบบนเครื่องสำรอง ห้ามทดสอบบนเครื่องที่ใช้งานจริง:
- ติดตั้งเครื่องสำรองแบบเดียวกัน (ส่วนที่ 5 ถึง 7) ด้วยโหมดเดียวกัน
- คัดลอกค่า
RESTIC_PASSWORDและบรรทัดBACKUP_S3_...จาก.envที่เก็บไว้ ใส่ใน/opt/radio/.envของเครื่องสำรอง แล้วรันsudo radioctl up - รัน
sudo radioctl restore --from s3จะแสดงรายการข้อมูลสำรองและให้พิมพ์คำว่าrestore - เมื่อถามว่า "ข้อมูลสำรองมาจากการติดตั้งอื่น ใช้รหัสลับ ... จากข้อมูลสำรองหรือไม่" ตอบ
y - ควรเห็น: "เรียบร้อย: กู้คืนเสร็จ ระบบทำงานแล้ว" เข้าสู่ระบบ เปิดสถานี และเล่นสตรีม
คู่มือดูแลระบบ อธิบายค่าตั้งของการสำรองข้อมูลทุกตัว
14. อัปเดตเป็นเวอร์ชันใหม่
ขั้นที่ 14.1: ดาวน์โหลดแพ็กเกจใหม่
cd ~
curl -fLO https://github.com/OWNER/REPO/releases/download/v1.2.4/radio_1.2.4_all.deb
curl -fLO https://github.com/OWNER/REPO/releases/download/v1.2.4/SHA256SUMS
sha256sum -c SHA256SUMS --ignore-missing
ควรเห็น: radio_1.2.4_all.deb: OK
ขั้นที่ 14.2: ติดตั้ง
sudo apt install -y ./radio_1.2.4_all.deb
ควรเห็น:
วิทยุออนไลน์ 1.2.4: ติดตั้งไฟล์โปรแกรมใน /opt/radio แล้ว
ไฟล์ตั้งค่า /opt/radio/.env และข้อมูลทั้งหมดยังอยู่ครบ ไม่มีอะไรถูกเปลี่ยน
ระบบยังทำงานด้วยเวอร์ชัน 1.2.3 เปลี่ยนเป็น 1.2.4 ด้วยคำสั่ง:
sudo radioctl update
แพลตฟอร์มยังทำงานด้วยเวอร์ชันเดิมจนกว่าจะทำขั้นถัดไป
ขั้นที่ 14.3: อัปเดตระบบที่กำลังทำงาน
เลือกช่วงเวลาที่มีผู้ฟังน้อย: แต่ละสถานีจะเริ่มใหม่สองสามวินาที
sudo radioctl update
คำสั่งนี้:
- สำรองข้อมูลก่อน
- ดาวน์โหลดอิมเมจใหม่ (หรือสร้างบนเซิร์ฟเวอร์)
- เริ่มเว็บแอปเวอร์ชันใหม่และรอจนพร้อม (ปรับฐานข้อมูลให้)
- เริ่มเอนจินออกอากาศใหม่ทีละตัว ผู้ฟังได้ยินเสียงสัญญาณรอสองสามวินาที
ควรเห็น ท้ายสุด: "เรียบร้อย: อัปเดตเป็น 1.2.4 แล้ว (ย้อนกลับได้ด้วย radioctl rollback)"
ตรวจด้วย sudo radioctl status และ sudo radioctl doctor
ขั้นที่ 14.4: ย้อนกลับ (rollback)
sudo radioctl rollback
กลับไปใช้เวอร์ชันที่ทำงานก่อนหน้า
การย้อนกลับไม่ย้อนการเปลี่ยนแปลงฐานข้อมูล ถ้าเวอร์ชันเก่าใช้กับฐานข้อมูลที่ปรับแล้วไม่ได้ ให้กู้คืนข้อมูลสำรองที่การอัปเดตทำไว้ก่อน (sudo radioctl backup list แสดงรายการ แล้ว sudo radioctl restore SNAPSHOT-ID)
ถ้าต้องการไฟล์โปรแกรมเวอร์ชันเก่าด้วย: sudo apt install --allow-downgrades ./radio_1.2.3_all.deb
15. เปลี่ยนจาก IP เป็นโดเมนภายหลัง
โหมด (โดเมน, IP แบบ HTTPS, HTTP ธรรมดา) เป็นค่าตั้งของเซิร์ฟเวอร์
- สร้างระเบียน DNS (ส่วนที่ 3) แล้วรอจน
getent hosts radio.example.thแสดง IP ของเซิร์ฟเวอร์ - เปิดพอร์ต 80 และ 443 (ส่วนที่ 12)
- รันตัวตั้งค่าด้วยโหมดใหม่ ข้อมูล บัญชี และสถานีทั้งหมดยังอยู่:
sudo radio-setup --mode domain --domain radio.example.th
- เปิด
https://radio.example.thแล้วเข้าสู่ระบบ
ควรเห็น: ตัวตั้งค่าจบด้วย "เรียบร้อย: ทุกบริการทำงานแล้ว" และที่อยู่ใหม่ใช้ HTTPS ได้ภายในหนึ่งนาที
ชื่อโดเมนในแพลตฟอร์มเปลี่ยนได้ในเว็บแอป: การจัดการแพลตฟอร์ม แล้ว "โดเมนและที่อยู่" ที่นั่นเปลี่ยนที่อยู่หลัก ที่อยู่สตรีม และโดเมนย่อยของสถานี และเพิ่มโดเมนของสถานีเองได้ Caddy ขอใบรับรองให้เอง คู่มือผู้ดูแลระบบ อธิบายหน้านั้น
16. ย้ายการติดตั้งรุ่นเก่า
การติดตั้งก่อนเวอร์ชัน 1.0.0 อาจอยู่ในโฟลเดอร์อื่น เช่น /opt/saint-radio และวอลุ่มของ Docker ตั้งชื่อตามโฟลเดอร์นั้น (saint-radio_db-data)
radioctl ตรวจพบเรื่องนี้และหยุดพร้อมข้อความ แทนที่จะเริ่มแพลตฟอร์มเปล่า
ย้ายการติดตั้งแบบนี้หนึ่งครั้ง ก่อนติดตั้งแพ็กเกจ:
- แตกไฟล์รุ่นใหม่ทับโฟลเดอร์เดิม:
sudo tar xzf radio-1.2.4.tar.gz -C /opt/saint-radio --strip-components=1 - ดูแผนก่อน ยังไม่เปลี่ยนอะไร:
sudo bash /opt/saint-radio/scripts/radioctl migrate-name --dry-run - ย้าย:
sudo bash /opt/saint-radio/scripts/radioctl migrate-name - ติดตั้งแพ็กเกจตามส่วนที่ 6 แพ็กเกจจะดูแลไฟล์ใน
/opt/radioต่อ และเก็บ.envไว้ - ตรวจ:
sudo radioctl statusและsudo radioctl doctor
ข้อ 3 จะสำรองข้อมูล คัดลอกวอลุ่มทุกตัวเป็น radio_* ย้ายโฟลเดอร์ไปที่ /opt/radio และเปรียบเทียบจำนวนสถานี ผู้ใช้ และไฟล์เสียงก่อนและหลัง สถานีจะหยุดออกอากาศสองสามนาที
วอลุ่มเดิมไม่ถูกแก้ไข เมื่อทุกอย่างทำงานดีแล้ว ลบด้วยคำสั่ง docker volume rm ที่แสดงให้
ถ้าโฟลเดอร์เดิมเป็นสำเนา git ให้ย้ายโฟลเดอร์ .git ออกก่อนข้อ 4: sudo mv /opt/radio/.git /root/radio-git
17. ถอนการติดตั้ง
ขั้นที่ 17.1: ถอนโปรแกรม
sudo apt remove radio
คำสั่งนี้หยุดแพลตฟอร์ม (docker compose down) และลบไฟล์โปรแกรม
แต่เก็บไฟล์ตั้งค่า /opt/radio/.env วอลุ่มของ Docker (ฐานข้อมูล ไฟล์เสียง ใบรับรอง) และข้อมูลสำรองไว้
ท้ายสุดจะแสดงรายการสิ่งที่เก็บไว้ และคำสั่งสำหรับลบจริง
ติดตั้งกลับภายหลัง: sudo apt install ./radio_1.2.4_all.deb แล้ว sudo radioctl up
ขั้นที่ 17.2: ลบทุกอย่างอย่างถาวร
ย้อนกลับไม่ได้ ถ้าอาจต้องใช้ข้อมูลอีก ให้แน่ใจว่ามีข้อมูลสำรองที่อ่านได้ (ส่วนที่ 13)
sudo docker volume ls --filter label=com.docker.compose.project=radio
คำสั่งนี้แสดงรายการวอลุ่ม เช่น radio_db-data ลบวอลุ่ม แล้วลบข้อมูลสำรอง โฟลเดอร์ และแพ็กเกจ:
sudo docker volume rm $(sudo docker volume ls -q --filter label=com.docker.compose.project=radio)
sudo rm -rf /var/backups/radio
sudo rm -rf /opt/radio
sudo apt purge radio
apt purge อย่างเดียวไม่ลบวอลุ่มหรือข้อมูลสำรองเด็ดขาด และจะเก็บ /opt/radio/.env ไว้ตราบที่ยังมีวอลุ่มหรือข้อมูลสำรองอยู่ เพราะถ้าไม่มีไฟล์นี้จะอ่านข้อมูลสำรองไม่ได้
ลบอิมเมจของโปรแกรมได้ด้วย: sudo docker image ls แสดงรายการ (local/radio-app และอื่น ๆ) และ sudo docker image prune -a ลบอิมเมจทุกตัวที่ไม่มีคอนเทนเนอร์ใช้
Docker เองยังติดตั้งอยู่ ถ้าต้องการลบด้วย: sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin (หรือถ้าเป็นแพ็กเกจของ Ubuntu: sudo apt purge docker.io docker-compose-v2)
18. แก้ปัญหา
เริ่มด้วยคำสั่งนี้เสมอ:
sudo radioctl doctor
| ปัญหา | ทำอย่างไร |
|---|---|
a: unbound variable ตอนเลือกวิธีเข้าถึงแพลตฟอร์ม |
ข้อบกพร่องของเวอร์ชัน 1.0.0 แก้แล้วใน 1.0.1: ติดตั้งแพ็กเกจใหม่ sudo apt install ./radio_1.2.4_all.deb แล้วรัน sudo radio-setup อีกครั้ง (หรือใช้ 1.0.0 แบบไม่ถามคำถาม เช่น sudo radio-setup --mode ip-http --ip IP-ของเครื่อง --yes) |
| ตัวตั้งค่าบอกว่าพอร์ต 80 หรือ 443 มีโปรแกรมอื่นใช้ | พอร์ต 80 หรือ 443 มีโปรแกรมอื่นใช้อยู่ |
| เตือนเรื่องใบรับรองในแบบโดเมน | DNS ไม่ได้ชี้มาที่เซิร์ฟเวอร์ |
| ไม่ได้ใบรับรองใหม่ | ขีดจำกัดของ Let's Encrypt |
| อีเมลเข้าสู่ระบบไม่มาถึง | อีเมลไม่มาถึง |
| Docker ไม่เริ่มทำงาน | Docker ไม่เริ่มทำงาน |
| สร้างอิมเมจแล้วหยุดกลางคัน หรือเครื่องค้าง | สร้างอิมเมจไม่สำเร็จเพราะหน่วยความจำไม่พอ |
| สถานีเงียบ | สถานีไม่มีเสียง |
| BUTT เชื่อมต่อไม่ได้ | ดีเจเชื่อมต่อไม่ได้ |
| เปิดหน้าตั้งค่าไม่ได้ | ส่วนที่ 12 (ไฟร์วอลล์) แล้วขั้นที่ 8.1 |
| ลืมที่อยู่ของแพลตฟอร์ม | grep -E '^(BASE_URL|PUBLIC_MODE)=' /opt/radio/.env |
พอร์ต 80 หรือ 443 มีโปรแกรมอื่นใช้อยู่
หาโปรแกรมที่ใช้พอร์ต:
sudo ss -ltnp 'sport = :80'
sudo ss -ltnp 'sport = :443'
ควรเห็น: บรรทัดที่มีชื่อโปรแกรมใน users:(("ชื่อ",...)) มักเป็น apache2 หรือ nginx ถ้าเครื่องนี้ไม่มีเว็บไซต์อื่น ให้หยุดและปิดไว้:
sudo systemctl disable --now apache2
sudo systemctl disable --now nginx
แล้วรัน sudo radio-setup อีกครั้ง
ถ้าต้องเก็บเว็บไซต์อื่นไว้ ให้ใช้พอร์ตอื่น: sudo radio-setup --http-port 8080 --https-port 8443 ที่อยู่จะมีพอร์ตต่อท้าย และ Let's Encrypt จะออกใบรับรองไม่ได้ (ต้องใช้พอร์ต 80 และ 443)
DNS ไม่ได้ชี้มาที่เซิร์ฟเวอร์
getent hosts radio.example.th
curl -4 -s https://api.ipify.org; echo
หมายเลขทั้งสองต้องตรงกัน ถ้าไม่ตรง แก้ระเบียน A (ส่วนที่ 3) แล้วรอ Caddy จะลองใหม่เอง ดูได้ด้วย sudo radioctl logs caddy --follow (กด Ctrl+C เพื่อหยุด)
ขีดจำกัดของ Let's Encrypt
Let's Encrypt จำกัดจำนวนใบรับรองที่ขอได้:
- ล้มเหลวได้ไม่เกิน 5 ครั้งต่อชื่อโดเมนต่อชั่วโมง
- ไม่เกิน 50 ใบต่อโดเมนที่จดทะเบียนต่อสัปดาห์
- ใบรับรองชุดชื่อเดิมซ้ำได้ไม่เกิน 5 ใบต่อสัปดาห์
บันทึกของ Caddy จะมีคำว่า "rateLimited" หรือ "too many" ดูได้ด้วย:
sudo radioctl logs caddy | grep -i -E 'rate|too many|error'
ทำอย่างไร: แก้สาเหตุก่อน (DNS พอร์ตปิด) แล้วรอหนึ่งชั่วโมง (หรือหนึ่งสัปดาห์สำหรับขีดจำกัดรายสัปดาห์)
อย่าลบวอลุ่มของ Docker หรือติดตั้งใหม่ซ้ำ ๆ: ใบรับรองเก็บอยู่ในวอลุ่ม radio_caddy-data การเริ่มจากศูนย์จะขอใบใหม่ทุกครั้ง
อีเมลไม่มาถึง
เข้าสู่ระบบให้ได้ก่อน (เลือกวิธีใดวิธีหนึ่ง):
- อ่านรหัสที่ส่งไม่ออกบนเซิร์ฟเวอร์:
sudo radioctl outbox(เก็บทั้งกรณีที่ยังไม่ได้ตั้งเซิร์ฟเวอร์อีเมล และกรณีที่เซิร์ฟเวอร์อีเมลส่งไม่สำเร็จ) - สร้างลิงก์เข้าสู่ระบบใช้ครั้งเดียว:
sudo radioctl login-link admin@example.thลิงก์ถูกคัดลอกเข้าคลิปบอร์ดให้ (ดูเงื่อนไขในส่วนที่ 9) วางในช่องที่อยู่ของเบราว์เซอร์แล้วกด Enter ภายใน 15 นาที - ถ้าตั้งไว้ล่วงหน้า: ในหน้าเข้าสู่ระบบเลือก "เข้าสู่ระบบด้วยวิธีอื่น" แล้วใช้แอปยืนยันตัวตน รหัสกู้คืน หรือรับรหัสทาง LINE / Telegram
แก้การส่งอีเมล:
- เข้าสู่ระบบแล้วไปที่ ผู้ดูแลระบบ › อีเมล เลือกผู้ให้บริการ (Gmail, Microsoft 365, Zoho, Amazon SES หรืออื่น ๆ) กรอกชื่อผู้ใช้และรหัสผ่าน แล้วกด ส่งอีเมลทดสอบอย่างเดียว
- ถ้าไม่สำเร็จ หน้านั้นบอกสาเหตุเป็นภาษาไทย เช่น รหัสผ่านผิด ต้องใช้รหัสผ่านสำหรับแอป พอร์ตถูกปิด หรือการเข้ารหัสไม่ตรงกับพอร์ต
- Gmail และบัญชีที่เปิดการยืนยันหลายขั้นไม่รับรหัสผ่านปกติ: ใช้รหัสผ่านสำหรับแอป เข้าสู่ระบบด้วยบัญชี Google หรือ Microsoft (OAuth) หรือบริการส่งอีเมล ดูขั้นที่ 11.3
- "Connection timeout": ผู้ให้บริการคลาวด์บางรายปิดพอร์ตส่งอีเมลขาออก ใช้พอร์ต 587 แบบ STARTTLS หรือ 465 แบบ TLS หรือขอให้ผู้ให้บริการเปิด
- ส่งสำเร็จแล้วกด ทดสอบและบันทึก การตั้งค่าในหน้านี้ใช้แทน
SMTP_URLในไฟล์.env - ตรวจภาพรวมด้วย
sudo radioctl doctor(มีหัวข้อ "อีเมล") - อีเมลไปอยู่ในสแปม: ตั้งผู้ส่งเป็นที่อยู่ในโดเมนของคุณเอง และเพิ่มระเบียน SPF และ DKIM ที่ผู้ให้บริการอีเมลกำหนด
ทีมงานของสถานีที่ไม่ได้รับอีเมล: ผู้ดูแลสถานีกด ลิงก์เข้าสู่ระบบ ในหน้าทีมงาน แล้วส่งลิงก์ให้ทางช่องทางที่ไว้ใจได้
ตั้งรหัสผ่านจาก command line
ใช้กับบัญชีใดก็ได้ รวมบัญชีผู้ดูแลระบบ:
sudo radioctl password admin@example.th
ควรเห็น: PASSWORD: abcd-efgh-jkmn-pqrs พร้อมวันหมดอายุ รหัสนี้แสดงครั้งเดียว ใช้ได้ 7 วัน เข้าสู่ระบบที่ "เข้าสู่ระบบด้วยรหัสผ่าน" แล้วระบบให้ตั้งรหัสผ่านของตัวเองทันทีก่อนทำอย่างอื่น เจ้าของบัญชีได้รับอีเมลแจ้ง (ไม่มีรหัสในอีเมล) และบันทึกไว้ในบันทึกการใช้งาน
sudo radioctl password อีเมล --link: ลิงก์ใช้ครั้งเดียว (60 นาที ปรับด้วย--minutes) ที่เข้าสู่ระบบแล้วพาไปหน้าตั้งรหัสผ่านทันทีsudo radioctl password อีเมล --remove: ลบรหัสผ่าน- ถ้าเห็นว่าบัญชีเป็นทีมงานที่ยังไม่มีแอปยืนยันตัวตนหรือพาสคีย์: นโยบายแพลตฟอร์ม (เปิดเป็นค่าเริ่มต้น) ไม่ให้ทีมงานใช้รหัสผ่านโดยไม่มีขั้นที่ 2 ให้ใช้
sudo radioctl login-link อีเมลเข้าสู่ระบบ ตั้งแอปยืนยันตัวตนที่/account/securityแล้วสั่งคำสั่งนี้อีกครั้ง
Docker ไม่เริ่มทำงาน
sudo systemctl status docker --no-pager
sudo journalctl -u docker --no-pager -n 50
หาบรรทัดแรกที่มีคำว่า "error" หรือ "failed"
- ไฟล์
/etc/docker/daemon.jsonเขียนผิด: ตรวจด้วยsudo python3 -m json.tool /etc/docker/daemon.jsonถ้าไม่ต้องใช้ ย้ายออก:sudo mv /etc/docker/daemon.json /root/daemon.json.bak - แล้ว:
sudo systemctl restart docker - ถ้าเป็น LXC container ของ Proxmox ต้องเปิดตัวเลือก nesting=1 และ keyctl=1 ของ container
- การรีสตาร์ตเครื่องมักช่วยได้:
sudo reboot
สร้างอิมเมจไม่สำเร็จเพราะหน่วยความจำไม่พอ
การสร้างอิมเมจต้องใช้หน่วยความจำประมาณ 4 GB ถ้าน้อยกว่านั้น การสร้างจะหยุดพร้อมคำว่า "Killed" หรือ "exit code: 137" หรือเครื่องหยุดตอบสนอง เพิ่ม swap 4 GB (ไฟล์หน่วยความจำบนดิสก์):
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
ตรวจด้วย free -h: บรรทัด "Swap:" แสดง 4.0Gi
แล้วรัน sudo radio-setup อีกครั้ง
ถ้า fallocate ไม่สำเร็จ ให้ใช้ sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 แทนบรรทัดแรก
สถานีไม่มีเสียง
- สถานีใหม่ยังไม่มีเพลง อัปโหลดไฟล์เสียงและสร้างเพลย์ลิสต์ในหน้าผู้ดูแลสถานี (คู่มือผู้ดูแลสถานี)
- ตรวจเอนจิน:
sudo radioctl logs worker | tail -n 50 - ตรวจบริการ:
sudo radioctl statusworker ต้องเป็น "healthy" - เริ่มเอนจินใหม่:
sudo radioctl restart workerระหว่างนั้นผู้ฟังได้ยินเสียงสัญญาณรอ
ดีเจเชื่อมต่อไม่ได้
- พอร์ตต้องเปิด: ใน ufw (ข้อ 12.1) และในไฟร์วอลล์ของคลาวด์ (ข้อ 12.2) ทดสอบตามขั้นที่ 10.4
- ใช้พอร์ตของสถานีนั้น mount
liveชื่อผู้ใช้ และรหัสผ่านจากหน้า "การออกอากาศสด" ตัวพิมพ์เล็กพิมพ์ใหญ่ต้องตรงกัน - สถานีอาจรับดีเจเฉพาะในช่วงรายการสดตามผัง หน้า "การออกอากาศสด" จะบอกไว้
sudo radioctl doctorรายงานพอร์ตดีเจที่ไม่ได้เปิด- ผู้ดูแลสถานีดูการเชื่อมต่อที่ถูกปฏิเสธแต่ละครั้งได้ที่ รายงาน เหตุการณ์การออกอากาศ พร้อมเหตุผล
19. บันทึกการทำงาน (log) อยู่ที่ไหน
| อะไร | คำสั่ง |
|---|---|
| ทุกบริการ 200 บรรทัดล่าสุด | sudo radioctl logs |
| บริการเดียว | sudo radioctl logs app (หรือ worker, icecast, db, caddy, backup) |
| ดูต่อเนื่อง | sudo radioctl logs worker --follow หยุดด้วย Ctrl+C |
| บันทึกลงไฟล์ | sudo radioctl logs app > ~/app-log.txt 2>&1 |
| การติดตั้งแพ็กเกจ | /var/log/apt/term.log |
| ตัว Docker เอง | sudo journalctl -u docker --no-pager -n 100 |
| ข้อความของตัวตั้งค่า | แสดงบนจออย่างเดียว เก็บไว้ได้ด้วย sudo radio-setup 2>&1 | tee ~/radio-setup.log |
Docker เก็บไม่เกิน 3 ไฟล์ ไฟล์ละ 10 MB ต่อบริการ บรรทัดเก่าจะหายไปเอง
20. ขอความช่วยเหลือ
รวบรวมข้อมูลนี้ก่อน:
sudo radioctl version > ~/radio-help.txt 2>&1
sudo radioctl status >> ~/radio-help.txt 2>&1
sudo radioctl doctor >> ~/radio-help.txt 2>&1
อ่านด้วย less ~/radio-help.txt
ห้ามส่ง /opt/radio/.env ให้ใครเด็ดขาด ไฟล์นี้มีรหัสผ่านทั้งหมด
จากนั้น:
- อ่านคู่มือดูแลระบบ และคู่มือการติดตั้ง ในเว็บแอปอยู่ที่เมนูช่วยเหลือ (
/help) - ติดต่อผู้ให้บริการวิทยุออนไลน์ของคุณ (บริษัท เซนต์ เทคโนโลยี จำกัด) พร้อมไฟล์
radio-help.txtและข้อความที่เห็นแบบตรงตัว
21. ภาคผนวก: ติดตั้งโดยไม่มีอินเทอร์เน็ต
แต่ละรุ่นมีไฟล์ radio-images-1.2.4-amd64.tar.gz (และ -arm64 สำหรับเซิร์ฟเวอร์ ARM) ด้วย
ไฟล์นี้มีอิมเมจของโปรแกรมทุกตัวในรุ่นนั้น รวมทั้ง PostgreSQL และ Caddy
เซิร์ฟเวอร์ต้องติดตั้ง Docker ไว้แล้ว
- คัดลอกแพ็กเกจและไฟล์อิมเมจไปที่เซิร์ฟเวอร์ (เช่น ด้วย
scpหรือ USB) sudo apt install ./radio_1.2.4_all.deb(apt ต้องติดตั้งแพ็กเกจที่ต้องใช้ ถ้าเครื่องไม่มีอินเทอร์เน็ตเลย ให้ติดตั้ง curl, openssl และ iproute2 จากสื่อติดตั้ง Ubuntu ก่อน)sudo radio-setup --offline ~/radio-images-1.2.4-amd64.tar.gz
ควรเห็น: "กำลังโหลดอิมเมจจาก ..." และต่อมา "เรียบร้อย: ใช้อิมเมจที่มีในเครื่อง (ไม่ดาวน์โหลด)"
การอัปเดตทำแบบเดียวกัน: sudo radioctl update --offline ~/radio-images-1.2.4-amd64.tar.gz
22. ภาคผนวก: ตัวเลือกทั้งหมดของ radio-setup
sudo radio-setup --help แสดงรายการนี้บนเซิร์ฟเวอร์ (ภาษาอังกฤษ)
| ตัวเลือก | ความหมาย | ค่าเริ่มต้น |
|---|---|---|
--lang th หรือ en |
ภาษาของคำถาม | ถาม |
--yes |
ไม่ถาม: ใช้ค่าเริ่มต้นและค่าที่ให้มา | ปิด |
--mode domain, ip-https หรือ ip-http |
วิธีที่ผู้ใช้เข้าถึงแพลตฟอร์ม (ส่วนที่ 2) | ถาม ถ้าไม่ถามคือ domain |
--domain NAME |
โดเมนของแพลตฟอร์ม | ไม่มี |
--wildcard, --no-wildcard |
โดเมนย่อยของสถานี | ไม่ใช้ |
--stream-domain NAME |
โดเมนแยกสำหรับสตรีม | ไม่มี |
--ip ADDRESS |
หมายเลข IP ในแบบ IP | ตรวจหาให้ |
--ip-tls letsencrypt หรือ internal |
ใบรับรองในโหมด ip-https | letsencrypt เมื่อเป็น IP สาธารณะ |
--domain-tls public หรือ internal |
ใบรับรองจาก Let's Encrypt หรือของ Caddy เอง | public |
--dj-host NAME |
ชื่อเครื่องที่ดีเจเชื่อมต่อ | โดเมนหรือ IP |
--email ADDRESS |
อีเมลผู้ดูแล ใช้กับ Let's Encrypt ด้วย | ถาม |
--smtp-url URL |
เซิร์ฟเวอร์อีเมลสำหรับรหัสเข้าสู่ระบบ | ไม่มี |
--skip-dns-check |
ไม่ตรวจ DNS | ปิด |
--profile small, medium หรือ large |
โปรไฟล์ขนาด | ตามขนาดเครื่อง |
--backup-dir DIR |
โฟลเดอร์ข้อมูลสำรองในเครื่อง | /var/backups/radio |
--s3-repository, --s3-access-key, --s3-secret-key, --s3-region |
สำรองข้อมูลไป S3 | ไม่มี |
--version TAG |
เวอร์ชันอิมเมจที่ใช้ | เวอร์ชันของแพ็กเกจ |
--image-prefix PREFIX |
ที่มาของอิมเมจ เช่น ghcr.io/OWNER | ของรุ่นนั้น |
--build |
สร้างอิมเมจบนเซิร์ฟเวอร์ | เมื่อไม่มีที่มาของอิมเมจ |
--offline [FILE] |
ไม่ดาวน์โหลด โหลดอิมเมจจาก FILE | ปิด |
--http-port N, --https-port N |
พอร์ตเว็บอื่น | 80, 443 |
--dj-port-start N |
พอร์ตดีเจแรก | 8100 |
--docker-source docker หรือ ubuntu |
ที่มาของ Docker ถ้ายังไม่มี | docker |
--no-docker-install |
ไม่ติดตั้งหรือตั้งค่า Docker | ปิด |
--no-start |
เตรียมอย่างเดียว ไม่เริ่มอะไร | ปิด |
--dry-run |
ตรวจเครื่องและเขียนไฟล์ตั้งค่าอย่างเดียว | ปิด |