SSD Nodes Learn RAM 8GB — $66/ปี
คู่มือ Matt Connorโดย Matt Connor · อัปเดตเมื่อ 2026-08-01

วิธีติดตั้ง FreshRSS บน Ubuntu VPS ด้วย Apache และ MariaDB

คู่มือติดตั้ง FreshRSS บน Ubuntu 24.04 ด้วย Apache, PHP 8.3 และ MariaDB ครอบคลุมการตั้งค่า Virtual Host การทำ Cron Job เพื่ออัปเดตฟีด และการแก้ปัญหา API บนมือถือ

สิ่งที่คุณกำลังสร้าง

โปรแกรมอ่าน RSS แบบโฮสต์เอง (self-hosted) คือโปรแกรมอ่านฟีดที่ทำงานบนเซิร์ฟเวอร์ที่คุณเป็นเจ้าของ เพื่อป้องกันไม่ให้บุคคลอื่นปิดการใช้งานหรือเปลี่ยนแปลงเนื้อหาที่คุณเห็น คู่มือนี้จะแนะนำการติดตั้ง FreshRSS บน Ubuntu 24.04 VPS โดยใช้ Apache เป็นเว็บเซิร์ฟเวอร์หน้าบ้าน, PHP เป็นส่วนประมวลผล, MariaDB สำหรับจัดเก็บข้อมูล และ cron job หนึ่งรายการสำหรับดึงบทความใหม่ RSS (Really Simple Syndication) คือรูปแบบไฟล์ที่เว็บไซต์เผยแพร่เพื่อให้ซอฟต์แวร์สามารถอ่านบทความได้ FreshRSS คือแอปพลิเคชัน PHP ที่ทำหน้าที่รวบรวมไฟล์เหล่านั้น จัดเก็บบทความ และแสดงผลผ่านอินเทอร์เฟซเว็บ รวมถึงมี API (Application Programming Interface) สำหรับเชื่อมต่อกับแอปพลิเคชันบนโทรศัพท์มือถือ

ขั้นตอนการติดตั้งมีขนาดเล็ก: แตกไฟล์ release, สร้างฐานข้อมูล, เขียนไฟล์ virtual host และรันตัวติดตั้งผ่านบรรทัดคำสั่ง งานส่วนใหญ่ที่ระบุไว้ด้านล่างคือขั้นตอนที่มักเกิดข้อผิดพลาดภายหลัง ได้แก่ การตั้งค่าการรีเฟรชฟีด, การจัดการเครื่องหมายทับ (slashes) ที่ถูกเข้ารหัสสำหรับ API บนมือถือ และการกำหนดสิทธิ์ความเป็นเจ้าของไฟล์

FreshRSS 1.29.1 เป็นรุ่นล่าสุด ณ เดือนกรกฎาคม 2026 และต้องการ PHP 8.1 หรือใหม่กว่า Ubuntu 24.04 มาพร้อมกับ PHP 8.3 ดังนั้นแพ็กเกจมาตรฐานของระบบปฏิบัติการจึงเพียงพอต่อการใช้งาน และคุณไม่จำเป็นต้องใช้ repository ของ PHP จากภายนอก

เริ่มต้นจาก LAMP stack ที่ใช้งานได้

FreshRSS เป็นแอปพลิเคชัน PHP ทั่วไป จึงจำเป็นต้องมีพื้นฐานเดียวกันกับแอปพลิเคชันอื่น หากคุณยังไม่ได้สร้างพื้นฐานดังกล่าว ให้ทำตาม การตั้งค่า LAMP stack สำหรับ Ubuntu 24.04 ก่อนแล้วจึงกลับมาที่นี่ สรุปโดยย่อคือ:

sudo apt update
sudo apt install -y apache2 mariadb-server php libapache2-mod-php
sudo systemctl enable --now apache2 mariadb

systemctl status apache2 ควรรายงานผลเป็น active (running) หาก Apache ไม่สามารถเริ่มทำงานได้ สาเหตุทั่วไปคือมีกระบวนการอื่นใช้งานพอร์ต 80 อยู่แล้ว และ sudo ss -ltnp | grep :80 จะระบุชื่อกระบวนการนั้นให้ทราบ

ส่วนขยาย PHP ที่ FreshRSS จำเป็นต้องใช้

FreshRSS กำหนดให้ libxml, cURL, JSON, PDO_MySQL, PCRE และ ctype เป็นส่วนขยายที่จำเป็น นอกจากนี้ยังต้องการ mbstring, iconv, Zlib และ ZipArchive รวมถึง GMP หากใช้งานบนระบบ 32 บิต สำหรับ Ubuntu ส่วนขยายเหล่านี้จะมาในรูปแบบแพ็กเกจของระบบปฏิบัติการ:

sudo apt install -y php-curl php-mbstring php-xml php-zip php-mysql php-intl php-gmp
sudo systemctl restart apache2

ตรวจสอบว่า PHP ได้โหลดส่วนขยายใดไปแล้วบ้างด้วย php -m หากส่วนขยายใดขาดหายไป ตัวติดตั้งจะไม่หยุดทำงานทันที แต่จะไปหยุดที่หน้าจอตรวจสอบความพร้อมใช้งานพร้อมแสดงแถบสีแดงระบุชื่อส่วนขยายที่ขาด ซึ่งอาจทำให้เกิดความสับสนในการแก้ไขปัญหา ดังนั้นควรตรวจสอบให้เรียบร้อยตั้งแต่ตอนนี้ การรีสตาร์ท Apache เป็นสิ่งสำคัญเนื่องจาก libapache2-mod-php จะเก็บ PHP ไว้ภายในกระบวนการทำงานของ Apache ทำให้ส่วนขยายที่ติดตั้งใหม่ไม่ปรากฏให้เว็บเซิร์ฟเวอร์เห็นจนกว่าจะทำการรีสตาร์ทใหม่

ดาวน์โหลดรุ่นที่เผยแพร่

ติดตั้ง FreshRSS ไว้นอกไดเรกทอรีรากของเว็บ (web root) ตามค่าเริ่มต้น แล้วกำหนดค่า Apache ให้ชี้ไปยังตำแหน่งดังกล่าว การแยกไดเรกทอรีของแอปพลิเคชันออกจากไดเรกทอรีรากของเอกสาร (document root) จะช่วยให้เข้าถึงได้เฉพาะโฟลเดอร์ public ผ่านทาง HTTP เท่านั้น

cd /tmp
curl -fsSLO https://github.com/FreshRSS/FreshRSS/archive/refs/tags/1.29.1.tar.gz
tar xzf 1.29.1.tar.gz
sudo mv FreshRSS-1.29.1 /srv/freshrss

จากนั้นเป็นการตั้งค่าสิทธิ์การเข้าถึง ซึ่งเอกสารประกอบของ FreshRSS กำหนดไว้อย่างเคร่งครัดว่า: ผู้ใช้งานเว็บเซิร์ฟเวอร์ต้องเป็นเจ้าของโครงสร้างไฟล์ทั้งหมด กลุ่มผู้ใช้งานต้องสามารถอ่านไฟล์ทุกไฟล์ได้ และกลุ่มผู้ใช้งานต้องสามารถเขียนข้อมูลลงใน ./data/ ได้

sudo chown -R www-data:www-data /srv/freshrss
sudo chmod -R g+r /srv/freshrss
sudo chmod -R g+w /srv/freshrss/data

หากข้ามขั้นตอนนี้ไป ตัวติดตั้งจะล้มเหลวในขณะเขียนไฟล์การกำหนดค่า เนื่องจาก PHP ทำงานในฐานะ www-data และ www-data ไม่สามารถเขียนข้อมูลลงในไดเรกทอรีที่ root เป็นเจ้าของได้

การสร้างฐานข้อมูล

FreshRSS รองรับ SQLite, MariaDB, MySQL และ PostgreSQL โดย SQLite ไม่จำเป็นต้องมีการตั้งค่าเพิ่มเติมและเพียงพอสำหรับการใช้งานคนเดียวที่มีฟีดจำนวนไม่กี่ร้อยรายการ ส่วน MariaDB เป็นตัวเลือกที่ดีกว่าเมื่อมีผู้ใช้งานหลายคนร่วมกันในอินสแตนซ์เดียว เนื่องจากจะไม่มีปัญหาการแย่งชิงการล็อกไฟล์ (file lock) ระหว่างการเขียนข้อมูลพร้อมกันจากงานดึงข้อมูล (refresh job) และอินเทอร์เฟซบนเว็บ

sudo mariadb -e "CREATE DATABASE freshrss CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
sudo mariadb -e "CREATE USER 'freshrss'@'localhost' IDENTIFIED BY 'ReplaceThisPassword';"
sudo mariadb -e "GRANT ALL PRIVILEGES ON freshrss.* TO 'freshrss'@'localhost';"
sudo mariadb -e "FLUSH PRIVILEGES;"

ให้ใช้ utf8mb4 แทนที่จะใช้ utf8 เนื่องจากฟีดมักมีอีโมจิและอักขระที่ไม่ใช่ภาษาละติน ซึ่งการเข้ารหัส utf8 แบบ 3 ไบต์แบบเดิมจะทำให้ชื่อบทความถูกตัดทอนเมื่อพบอักขระแบบ 4 ไบต์ตัวแรก

Apache virtual host

ไดเรกทอรีสาธารณะคือ p/ ไม่ใช่ส่วนบนสุดของโครงสร้างไฟล์ ข้อมูลอื่นทั้งหมด รวมถึงไฟล์การตั้งค่าที่เก็บรหัสผ่านฐานข้อมูลของคุณ จะถูกวางไว้เหนือ document root ซึ่ง Apache จะไม่เปิดเผยข้อมูลเหล่านี้ออกมา

<VirtualHost *:80>
	ServerName rss.example.com
	DocumentRoot /srv/freshrss/p/

	<Directory /srv/freshrss/p>
		AllowOverride AuthConfig FileInfo Indexes Limit
		Require all granted
	</Directory>

	ErrorLog ${APACHE_LOG_DIR}/freshrss_error.log
	CustomLog ${APACHE_LOG_DIR}/freshrss_access.log combined

	AllowEncodedSlashes On
</VirtualHost>

บันทึกไฟล์ดังกล่าวเป็น /etc/apache2/sites-available/freshrss.conf และเปิดใช้งานด้วยคำสั่ง:

sudo a2enmod rewrite
sudo a2ensite freshrss
sudo a2dissite 000-default
sudo apache2ctl configtest
sudo systemctl reload apache2

configtest ควรแสดงผลลัพธ์เป็น Syntax OK ส่วน AllowEncodedSlashes On ดูเหมือนจะเป็นทางเลือกแต่ในความเป็นจริงนั้นจำเป็นต้องมี เนื่องจาก Google Reader API ส่งตัวระบุฟีดที่มี %2F หากไม่มีคำสั่งนี้ Apache จะปฏิเสธการเชื่อมต่อ ส่งผลให้แอปพลิเคชันบนมือถือไม่สามารถซิงค์ข้อมูลได้ ในขณะที่หน้าเว็บยังคงทำงานได้ตามปกติ

เพิ่ม HTTPS ก่อนเข้าสู่ระบบ

คุณกำลังจะพิมพ์รหัสผ่านลงในเว็บไซต์นี้ ดังนั้นควรติดตั้งใบรับรอง (certificate) ก่อนเป็นอันดับแรก ให้ชี้ A record มาที่เซิร์ฟเวอร์ จากนั้นทำตาม ขั้นตอนการตั้งค่า Certbot สำหรับ Apache บน Ubuntu และรันคำสั่ง sudo certbot --apache -d rss.example.com ตัว Certbot จะเขียนไฟล์ virtual host ใหม่สำหรับพอร์ต 443 และเพิ่มการเปลี่ยนเส้นทาง (redirect) ให้โดยอัตโนมัติ ตรวจสอบความถูกต้องด้วยคำสั่ง curl -I https://rss.example.com/ ซึ่งควรจะส่งค่ากลับมาเป็น 200 หรือการเปลี่ยนเส้นทางไปยังหน้าเข้าสู่ระบบ

การเรียกใช้งานตัวติดตั้งผ่านบรรทัดคำสั่ง

FreshRSS มีตัวติดตั้งผ่านเว็บเบราว์เซอร์ แต่การใช้งานผ่านบรรทัดคำสั่งสามารถทำซ้ำได้และช่วยบันทึกรายละเอียดสิ่งที่คุณเลือกไว้ได้อย่างแม่นยำ

sudo -u www-data php /srv/freshrss/cli/do-install.php \
  --default-user admin --auth-type form --environment production \
  --base-url https://rss.example.com --language en --api-enabled \
  --db-type mysql --db-host localhost --db-user freshrss \
  --db-password 'ReplaceThisPassword' --db-base freshrss
sudo -u www-data php /srv/freshrss/cli/create-user.php \
  --user admin --password 'a-long-passphrase' --api-password 'a-different-passphrase'

ให้เรียกใช้งานทั้งสองคำสั่งในฐานะ www-data การเรียกใช้งานในฐานะ root จะทำให้ไฟล์การตั้งค่าที่สร้างขึ้นมี root เป็นเจ้าของ ซึ่งจะส่งผลให้เว็บอินเทอร์เฟซไม่สามารถบันทึกการตั้งค่าใดๆ ได้ในภายหลัง การตั้งค่า --environment production ก็มีความสำคัญเช่นกัน เนื่องจากโหมดการพัฒนาจะแสดงข้อความแจ้งเตือนของ PHP ลงบนหน้าเว็บ

โหลด https://rss.example.com/ และเข้าสู่ระบบในฐานะ admin

เหตุใดฟีดจึงไม่รีเฟรชด้วยตัวเอง

ไม่มีกระบวนการใดดึงข้อมูลฟีดของคุณจนกว่าคุณจะกำหนดค่าไว้ FreshRSS จะรีเฟรชข้อมูลเฉพาะในขณะที่เปิดเบราว์เซอร์ค้างไว้เท่านั้น ซึ่งหมายความว่าหากคุณเข้าใช้งานวันละสองครั้ง คุณจะเห็นบทความที่ไม่อัปเดตนานถึงสิบสองชั่วโมง วิธีแก้ไขคือการใช้สคริปต์ที่มาพร้อมกับโปรเจกต์นี้คือ app/actualize_script.php โดยเรียกใช้งานผ่าน cron

sudo crontab -u www-data -e

เพิ่มบรรทัดนี้ลงไป:

*/20 * * * * php /srv/freshrss/app/actualize_script.php > /tmp/FreshRSS.log 2>&1

ช่วงเวลา 20 นาทีเป็นค่าที่เหมาะสมที่สุด เนื่องจากสคริปต์จะปฏิเสธการรีเฟรชฟีดใดๆ ที่มีความถี่มากกว่าหนึ่งครั้งต่อ 20 นาที ดังนั้นการตั้งเวลาที่ถี่กว่านี้จะทำให้สิ้นเปลือง CPU โดยเปล่าประโยชน์ ให้ลองรันคำสั่งด้วยตนเองหนึ่งครั้งก่อน:

sudo -u www-data php /srv/freshrss/app/actualize_script.php

หากการทำงานปกติ ผลลัพธ์จะแสดงชื่อฟีดแต่ละรายการที่ดึงข้อมูลมาได้และจบการทำงานโดยไม่มีข้อผิดพลาดจาก PHP หากไม่มีข้อความใดแสดงขึ้นมาเลย แสดงว่าผู้ใช้งาน cron ไม่ถูกต้อง และหากพบข้อผิดพลาดด้านสิทธิ์การเข้าถึงที่ data/ แสดงว่าขั้นตอน chmod -R g+w ถูกข้ามไป

เพิ่มฟีดรายการแรกของคุณ

ใช้ปุ่มบวกที่มุมซ้ายบนของอินเทอร์เฟซ วางที่อยู่เว็บไซต์ลงไป แล้ว FreshRSS จะค้นหาลิงก์ฟีดให้คุณโดยอัตโนมัติ เว็บไซต์ส่วนใหญ่ยังคงเผยแพร่ฟีดแม้ว่าจะไม่ได้ประกาศไว้ ซึ่งมักจะอยู่ที่ /feed, /rss หรือ /atom.xml หมวดหมู่ทำหน้าที่เป็นโฟลเดอร์ และการย้ายฟีดระหว่างหมวดหมู่สามารถทำได้โดยการลากและวาง

หากคุณย้ายมาจากโปรแกรมอ่านฟีดอื่น ให้ส่งออกไฟล์ OPML จากที่นั่น แล้วนำเข้ามาที่หน้าการจัดการการสมัครสมาชิก OPML (outline processor markup language) เป็นรูปแบบมาตรฐานสำหรับรายการฟีด และโปรแกรมอ่านฟีดทุกตัวที่น่าใช้งานล้วนรองรับรูปแบบนี้ การนำเข้าข้อมูลจำนวนมากจะทำให้การรีเฟรชครั้งแรกทำงานช้า เนื่องจากระบบต้องดึงข้อมูลทุกฟีดพร้อมกัน ดังนั้นโปรดให้เวลาการทำงานของ cron ครั้งแรกก่อนที่จะประเมินความเร็วของระบบ

อ่านผ่านโทรศัพท์ของคุณ

FreshRSS รองรับ Google Reader API ซึ่งแอป RSS ส่วนใหญ่สามารถใช้งานได้ โดยมีเงื่อนไข 2 ประการที่ต้องเป็นจริง ประการแรก ในการตั้งค่าการยืนยันตัวตน ต้องเปิดใช้งาน "Allow API access" ซึ่งธง --api-enabled ด้านบนได้ตั้งค่าไว้ให้แล้ว ประการที่สอง ในโปรไฟล์ของคุณ ช่องรหัสผ่าน API จะต้องมีค่ากำหนดไว้ ซึ่งรหัสผ่านนี้จะแยกจากรหัสผ่านสำหรับเข้าสู่ระบบโดยเจตนา เนื่องจากโทรศัพท์เป็นอุปกรณ์ที่สูญหายได้ง่ายกว่า

ไปที่ https://rss.example.com/api/ และเลือก "Check full server configuration" หากการตั้งค่าทำงานถูกต้อง ระบบจะแสดงผลเป็น PASS หากเกิดข้อผิดพลาด มักมีสาเหตุมาจากการขาดบรรทัด AllowEncodedSlashes On ในแอปพลิเคชัน ให้ระบุที่อยู่เซิร์ฟเวอร์เป็น https://rss.example.com/api/greader.php ระบุชื่อผู้ใช้เป็นผู้ใช้ FreshRSS ของคุณ และระบุรหัสผ่าน API เป็นรหัสผ่านที่ตั้งไว้

ทางเลือกอื่นแทน Docker

หากคุณไม่ต้องการดูแล PHP และ Apache ด้วยตนเอง ทางโครงการได้เผยแพร่ image อย่างเป็นทางการของ freshrss/freshrss ไว้ให้ และคุณสามารถใช้ไฟล์ compose เพียงไฟล์เดียวเพื่อเรียกใช้งานแอปพลิเคชันพร้อมกับฐานข้อมูลได้ ข้อแลกเปลี่ยนคือสิ่งที่เป็นปกติทั่วไป: มีส่วนประกอบที่ต้องดูแลบนโฮสต์น้อยลง แต่จะมีเลเยอร์เพิ่มขึ้นอีกหนึ่งชั้นที่ต้องตรวจสอบเมื่อเกิดปัญหา และยังคงจำเป็นต้องมี reverse proxy สำหรับ TLS (transport layer security) หากวิธีนี้เหมาะสมกับคุณมากกว่า ข้อมูลพื้นฐานของ Docker Compose สำหรับ VPS จะครอบคลุมถึงรูปแบบไฟล์ดังกล่าว และบรรทัดคำสั่ง cron จะเปลี่ยนเป็น docker exec --user www-data freshrss php ./app/actualize_script.php

การสำรองข้อมูลและการอัปเกรด

สถานะของคุณถูกเก็บไว้ในสองส่วน ได้แก่ ฐานข้อมูล และ /srv/freshrss/data/ ให้ทำการดัมพ์ฐานข้อมูลด้วย sudo mysqldump freshrss > freshrss.sql คัดลอกไฟล์ส่วนที่สอง และเก็บข้อมูลทั้งสองส่วนไว้ในตำแหน่งอื่นที่ไม่ใช่เซิร์ฟเวอร์นี้ นอกจากนี้ รายการสมาชิกของคุณควรได้รับการส่งออกเป็น OPML เป็นระยะ เนื่องจากไฟล์ดังกล่าวสามารถใช้สร้างการตั้งค่าการอ่านของคุณใหม่บนซอฟต์แวร์ RSS ใดก็ได้

การอัปเกรดทำได้โดยการแตกไฟล์รุ่นใหม่ทับลงในไดเรกทอรีเดิมและรันคำสั่งกำหนดความเป็นเจ้าของอีกครั้ง FreshRSS จะดำเนินการย้ายข้อมูลฐานข้อมูลโดยอัตโนมัติเมื่อมีการโหลดหน้าเว็บในครั้งถัดไป โปรดสำรองข้อมูลก่อนเสมอ เนื่องจากการย้ายข้อมูลที่ล้มเหลวบนฐานข้อมูลที่คุณไม่สามารถกู้คืนได้จะทำให้เกิดสถานะที่ไม่สามารถแก้ไขได้ โปรแกรมอ่าน RSS เป็นบริการที่มีความเสี่ยงต่ำและเป็นตัวเลือกเริ่มต้นที่ดีหากคุณกำลังศึกษา รายการสิ่งที่ควรโฮสต์ด้วยตนเอง

FAQ

เหตุใดฟีดของฉันจึงอัปเดตเฉพาะตอนที่เปิด FreshRSS เท่านั้น?

เนื่องจากไม่มีตัวกำหนดตารางเวลา (scheduler) จนกว่าคุณจะสร้างขึ้นมา FreshRSS จะรีเฟรชฟีดในขณะที่เซสชันเบราว์เซอร์เปิดอยู่ และจะไม่ทำงานเมื่อปิดแท็บนั้นไป ให้เพิ่มบรรทัด cron ที่เรียก app/actualize_script.php ในฐานะผู้ใช้ www-data จากนั้นรันสคริปต์ด้วยตนเองหนึ่งครั้งและอ่านผลลัพธ์ที่ได้ โดยปกติแล้วความเงียบหมายความว่า cron กำลังรันด้วยผู้ใช้ที่ไม่ถูกต้อง ทำให้ PHP ไม่สามารถเขียนข้อมูลลงใน data/ ได้

แอปมือถือของฉันเชื่อมต่อไม่ได้ แต่เว็บไซต์ใช้งานได้ เป็นเพราะอะไร?

Google Reader API ใส่เครื่องหมายทับที่เข้ารหัส (%2F) ไว้ภายในพาธของคำขอ ซึ่ง Apache จะปฏิเสธคำขอดังกล่าวโดยค่าเริ่มต้น ให้เพิ่ม AllowEncodedSlashes On ไว้ภายใน virtual host แล้วโหลด Apache ใหม่ ยืนยันการแก้ไขโดยเปิด https://rss.example.com/api/ และรัน "Check full server configuration" ซึ่งควรรายงานผลเป็น PASS นอกจากนี้ ให้ตรวจสอบว่ามีการตั้งรหัสผ่าน API ในโปรไฟล์ของคุณแล้ว เนื่องจากรหัสผ่านนี้แยกจากรหัสผ่านสำหรับเข้าสู่ระบบ

ฉันควรใช้ SQLite หรือ MariaDB?

ใช้ SQLite สำหรับผู้ใช้คนเดียว เนื่องจากไม่ต้องติดตั้งอะไรเพิ่มเติมและไม่ต้องจัดการรหัสผ่าน ใช้ MariaDB เมื่อมีผู้ใช้งานมากกว่าหนึ่งคนในอินสแตนซ์ หรือเมื่อคุณมีฟีดมากกว่าสองสามร้อยรายการ เนื่องจากงานรีเฟรชและอินเทอร์เฟซเว็บจะเขียนข้อมูลพร้อมกัน ทำให้การล็อกไฟล์เดียวกลายเป็นข้อจำกัด การย้ายฐานข้อมูลระหว่างสองตัวเลือกนี้ในภายหลังสามารถทำได้ผ่านคำสั่ง export และ import ดังนั้นนี่จึงไม่ใช่การตัดสินใจที่ถาวร

ตัวติดตั้งล้มเหลวเมื่อเขียนการกำหนดค่า เกิดอะไรขึ้น?

PHP รันในฐานะ www-data ภายใต้ Apache และผู้ใช้นั้นไม่สามารถเขียนข้อมูลลงในไดเรกทอรีที่เป็นของ root ได้ ให้รัน sudo chown -R www-data:www-data /srv/freshrss และ sudo chmod -R g+w /srv/freshrss/data อีกครั้ง จากนั้นเริ่มตัวติดตั้งใหม่อีกครั้ง หากคุณรันตัวติดตั้งผ่านบรรทัดคำสั่งในฐานะ root ไปแล้ว ให้ลบไฟล์ที่สร้างขึ้นภายใต้ data/ ก่อนที่จะลองใหม่ เนื่องจากความเป็นเจ้าของไฟล์เหล่านั้นคือปัญหาที่แท้จริง

โปรแกรมอ่าน RSS แบบโฮสต์เองต้องการทรัพยากรเซิร์ฟเวอร์มากแค่ไหน?

ต้องการเพียงเล็กน้อยเท่านั้น ฟีดจำนวนไม่กี่ร้อยรายการบนแผนบริการขนาดเล็กสามารถทำงานได้อย่างราบรื่น เนื่องจากภาระงานจะเป็นเพียงการดึงข้อมูล HTTP สั้นๆ ทุกยี่สิบนาที และฐานข้อมูลจะมีขนาดเล็กหากมีการล้างบทความเก่าออก พื้นที่ดิสก์จะเพิ่มขึ้นตามระยะเวลาการเก็บรักษาข้อมูล ดังนั้นควรตั้งค่านโยบายการล้างบทความในการตั้งค่าการจัดเก็บถาวร แทนที่จะเก็บทุกอย่างไว้ตลอดไป

#freshrss#rss#self-hosting#php#apache