วิธีติดตั้ง Mealie จัดการสูตรอาหารบน VPS ด้วย Docker
ติดตั้ง Mealie บน VPS ด้วย Docker Compose เพื่อเก็บสูตรอาหารจากลิงก์เว็บโดยตรง พร้อมระบบวางแผนมื้ออาหาร รายการซื้อของ และการตั้งค่า Nginx กับ TLS อย่างละเอียดในที่เดียว
หน้าที่ของโปรแกรมจัดการสูตรอาหารแบบ self-hosted
โปรแกรมจัดการสูตรอาหารแบบ self-hosted จะเก็บสูตรอาหารของคุณไว้ในฐานข้อมูลบนเซิร์ฟเวอร์ที่คุณเป็นเจ้าของ โดย Mealie เป็นตัวเลือกที่ครัวเรือนส่วนใหญ่นิยมใช้ คุณเพียงแค่วางที่อยู่ของหน้าเว็บสูตรอาหารลงไป แล้ว Mealie จะอ่านส่วนผสม ขั้นตอน ปริมาณที่ได้ และเวลาที่ใช้ในการปรุงออกมา จากนั้นจะตัดเนื้อหาที่ไม่เกี่ยวข้องและโฆษณาออกไป สิ่งที่เหลืออยู่ในคอลเลกชันของคุณจึงมีเพียงแค่ข้อมูลอาหารเท่านั้น
ส่วนประกอบอื่นของแอปพลิเคชันมีขนาดเล็ก ประกอบด้วยตารางวางแผนมื้ออาหารรายสัปดาห์ที่คุณสามารถลากสูตรอาหารไปใส่ได้ และรายการซื้อของที่สร้างขึ้นจากแผนดังกล่าว ผู้ที่ทำอาหารแต่ละคนสามารถมีบัญชีเข้าใช้งานของตนเองได้ ทั้งหมดนี้ทำงานอยู่ใน container เดียว และจะอยู่ในสถานะว่างระหว่างรอการเรียกใช้งาน ดังนั้น VPS ขนาดเล็กก็สามารถรองรับการทำงานได้โดยไม่ส่งผลกระทบต่อทรัพยากรระบบ
คู่มือนี้ใช้ Docker Compose หากคำว่า services: และ volumes: เป็นเรื่องใหม่สำหรับคุณ โปรดอ่าน วิธีการประกอบไฟล์ Docker Compose ก่อน เนื่องจากเนื้อหาทั้งหมดด้านล่างนี้ประกอบด้วยไฟล์ compose หนึ่งไฟล์และคำสั่งสี่คำสั่ง
การติดตั้ง Mealie ด้วย Docker Compose
Mealie เผยแพร่ image ของตนบน GitHub container registry ณ เดือนกรกฎาคม 2026 tag รุ่นเสถียรปัจจุบันคือ v3.22.0 ให้ระบุเวอร์ชันที่แน่นอนแทนการใช้ latest เพราะการใช้ latest อาจทำให้คุณต้องเผชิญกับการย้ายฐานข้อมูล (database migration) โดยไม่ทันตั้งตัวในวันที่คุณไม่ได้เตรียมพร้อม docker compose pull
sudo mkdir -p /srv/mealie
cd /srv/mealie
sudo nano docker-compose.ymlservices:
mealie:
image: ghcr.io/mealie-recipes/mealie:v3.22.0
container_name: mealie
restart: always
ports:
- "127.0.0.1:9925:9000"
deploy:
resources:
limits:
memory: 1000M
volumes:
- mealie-data:/app/data/
environment:
ALLOW_SIGNUP: "false"
PUID: 1000
PGID: 1000
TZ: Europe/Amsterdam
BASE_URL: https://recipes.example.com
volumes:
mealie-data:มีสองบรรทัดที่คุณควรตรวจสอบก่อนเริ่มใช้งาน
พอร์ตถูกระบุไว้เป็น 127.0.0.1:9925:9000 ไม่ใช่ 9925:9000 โดยตัว container จะฟังที่พอร์ต 9000 จากภายใน และ host จะแมปพอร์ต 9925 เข้าไป การผูกการแมปนี้ไว้กับ loopback address จะช่วยให้ Nginx สามารถเข้าถึง Mealie ได้ แต่เครือข่ายภายนอกจะไม่สามารถเข้าถึงได้โดยตรง Docker จะเขียนกฎของตัวเองลงใน packet filter ดังนั้นการใช้ 9925:9000 แบบปกติจะทำให้พอร์ตนั้นเข้าถึงได้จากภายนอกเสมอ แม้ว่า firewall ของคุณจะระบุว่าปิดพอร์ตไว้แล้วก็ตาม คุณควรทำความเข้าใจพฤติกรรมนี้ไว้: ดูที่ เหตุใดพอร์ตที่เผยแพร่ผ่าน Docker จึงไม่สนใจ ufw
BASE_URL ต้องเป็นที่อยู่สาธารณะที่ถูกต้องที่คุณจะใช้งานจริง โดยระบุ scheme ให้ครบถ้วนและไม่ต้องใส่เครื่องหมาย slash ปิดท้าย Mealie จะใช้ค่านี้ในการสร้างลิงก์รีเซ็ตรหัสผ่านและลิงก์คำเชิญ หากคุณตั้งค่าเป็น http://localhost:9925 ลิงก์คำเชิญที่คุณส่งให้ผู้อื่นจะใช้งานได้เฉพาะบนตัวเซิร์ฟเวอร์เองเท่านั้น
เริ่มการทำงานและตรวจสอบการบูตครั้งแรก
sudo docker compose up -d
sudo docker compose logs -f mealieการเริ่มทำงานครั้งแรกจะสร้างฐานข้อมูล SQLite และดำเนินการ migration ซึ่งใช้เวลาเพียงไม่กี่วินาที เมื่อ log นิ่งและไม่มีการแสดงบรรทัดการ migration แล้ว ให้ตรวจสอบแอปพลิเคชันในเครื่อง
curl -I http://127.0.0.1:9925ค่า 200 OK หมายความว่าแอปพลิเคชันทำงานได้ตามปกติ ส่วน Connection refused หมายความว่า container ไม่ได้ทำงานอยู่: ให้รันคำสั่ง sudo docker compose ps เพื่ออ่าน exit code หาก container หยุดทำงานด้วยรหัส 137 แสดงว่าถูกสั่งยุติการทำงานเนื่องจากใช้หน่วยความจำเกินขีดจำกัด 1000M ซึ่งมักเกิดขึ้นกับแผนบริการขนาดเล็กที่สุด
การเข้าสู่ระบบครั้งแรกและการปิดการสมัครสมาชิกแบบเปิด
บัญชีเริ่มต้นคือ changeme@example.com พร้อมรหัสผ่าน MyPassword ให้เข้าสู่ระบบด้วยข้อมูลดังกล่าวแล้วเปลี่ยนทั้งสองอย่างทันที เนื่องจากข้อมูลคู่นี้ถูกระบุไว้ในเอกสารประกอบ จึงเป็นเป้าหมายที่สแกนเนอร์ทุกตัวตรวจสอบ
การตั้งค่า ALLOW_SIGNUP: "false" ในไฟล์ compose นั้นมีเจตนาเฉพาะ หากเปิดการสมัครสมาชิกไว้ ใครก็ตามที่พบที่อยู่เว็บของคุณจะสามารถสร้างบัญชีในกล่องสูตรอาหารของคุณได้ เมื่อปิดการตั้งค่านี้ คุณจะสามารถเพิ่มผู้ใช้งานจากส่วนผู้ดูแลระบบ ซึ่งจะสร้างลิงก์คำเชิญให้คุณส่งต่อด้วยตนเอง ลิงก์ดังกล่าวสร้างขึ้นจาก BASE_URL ซึ่งเป็นเหตุผลว่าทำไมค่านี้จึงมีความสำคัญ หากคุณใช้งานหลายแอปบนเซิร์ฟเวอร์เดียวกันและต้องการใช้รหัสผ่านเดียวสำหรับทุกแอป Mealie สามารถส่งต่อการเข้าสู่ระบบไปยังผู้ให้บริการยืนยันตัวตนภายนอกได้ เช่น Authentik instance ที่โฮสต์ด้วยตนเอง
Mealie จัดกลุ่มผู้ใช้ไว้ในครัวเรือนเดียวกัน ทุกคนในครัวเรือนจะใช้คอลเลกชันสูตรอาหาร แผนมื้ออาหาร และรายการซื้อของร่วมกัน ซึ่งเป็นสิ่งที่ครอบครัวต้องการ ส่วนครัวเรือนที่แยกจากกันบนเซิร์ฟเวอร์เดียวกันจะเก็บคอลเลกชันแยกกัน ซึ่งเป็นสิ่งที่ผู้เช่าร่วมต้องการในกรณีที่ไม่มีใครตกลงเรื่องการใส่ปลากะตักในอาหารได้
ตัวนำเข้าข้อมูล ซึ่งเป็นเหตุผลหลักในการใช้งาน
เปิดคอลเลกชันสูตรอาหาร เลือกสร้างสูตรอาหารจาก URL แล้ววางลิงก์ Mealie จะดึงข้อมูลหน้าเว็บและค้นหาข้อมูลสูตรอาหารที่มีโครงสร้าง ซึ่งเป็นบล็อกข้อมูลที่เครื่องอ่านได้ที่เว็บไซต์สูตรอาหารส่วนใหญ่ฝังไว้สำหรับเครื่องมือค้นหา เมื่อมีบล็อกข้อมูลดังกล่าว การนำเข้าจะทำได้อย่างสะอาดและรวดเร็ว
คุณยังสามารถนำเข้าจากรูปภาพหรือข้อความธรรมดาที่คุณคัดลอกมาวางได้ ซึ่งครอบคลุมถึงการถ่ายภาพหน้ากระดาษจากตำราอาหาร ข้อมูลเหล่านี้จะผ่านกระบวนการที่ช้ากว่าและจำเป็นต้องตรวจสอบในภายหลัง เนื่องจากเศษส่วนที่เขียนด้วยลายมืออาจอ่านผิดได้ง่าย
การนำเข้าแบบกลุ่มสามารถทำได้จากหน้าจอเดียวกัน โดยวางรายการที่อยู่ URL ลงไปทีละบรรทัด แล้ว Mealie จะดำเนินการประมวลผลในเบื้องหลัง คุณสามารถย้ายบุ๊กมาร์กจำนวน 200 รายการได้ในการทำงานเพียงครั้งเดียว
แผนมื้ออาหารและรายการซื้อของ
เครื่องมือวางแผนมื้ออาหารทำหน้าที่เป็นปฏิทิน คุณสามารถลากสูตรอาหารไปวางในวันที่ต้องการเพื่อกำหนดแผนได้ จากนั้นรายการซื้อของจะรวบรวมวัตถุดิบจากสูตรอาหารที่วางแผนไว้ทั้งหมดมาไว้ในรายการเดียว และรวมรายการที่ซ้ำกันเข้าด้วยกัน ตัวอย่างเช่น หากมีสองสูตรอาหารที่ต้องใช้หอมหัวใหญ่ รายการจะแสดงเพียงบรรทัดเดียวแทนที่จะแสดงสองบรรทัด
รายการนี้เป็นหน้าเว็บที่อัปเดตแบบเรียลไทม์บนโทรศัพท์ของคุณขณะอยู่ที่ร้านค้า เนื่องจากเซิร์ฟเวอร์ของคุณเป็นผู้จัดเก็บข้อมูล ทุกคนในบ้านจึงเห็นรายการเดียวกันในเวลาเดียวกัน และเมื่อคนหนึ่งทำเครื่องหมายว่าซื้อนมแล้ว รายการนั้นจะถูกลบออกจากหน้าจอของคนอื่นโดยอัตโนมัติ
วาง nginx และ TLS ไว้หน้า Mealie
Mealie ทำงานผ่าน HTTP ปกติและไม่มีระบบจัดการใบรับรองในตัว คุณต้องทำ TLS termination ที่ nginx ซึ่งวางอยู่ด้านหน้า ก่อนอื่นให้ชี้ DNS A record มาที่เซิร์ฟเวอร์ของคุณ เนื่องจากขั้นตอนการออกใบรับรองจำเป็นต้องตรวจสอบชื่อโดเมนนั้น
sudo apt update && sudo apt install -y nginx
sudo nano /etc/nginx/sites-available/mealieserver {
listen 80;
server_name recipes.example.com;
client_max_body_size 64M;
location / {
proxy_pass http://127.0.0.1:9925;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}sudo ln -s /etc/nginx/sites-available/mealie /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginxการรัน nginx -t เพื่อตรวจสอบ syntax is ok และ test is successful คือขั้นตอนสำคัญ ให้ทำการ reload หลังจากผ่านการตรวจสอบแล้วเท่านั้น เพราะหาก reload ในขณะที่ config มีข้อผิดพลาด ระบบจะยังคงใช้ config เดิมที่ทำงานอยู่ และทำให้คุณไม่ทราบว่ามีข้อผิดพลาดจนกว่าจะมีการ restart ครั้งถัดไป
client_max_body_size 64M ต้องถูกเพิ่มเข้าไปเนื่องจากค่าเริ่มต้นของ nginx คือ 1 MB การอัปโหลดรูปภาพสูตรอาหารหรือการกู้คืนข้อมูลสำรองผ่านเบราว์เซอร์จะส่งข้อมูลที่มีขนาดใหญ่กว่านั้น หากไม่มีบรรทัดนี้ คุณจะได้รับข้อผิดพลาด 413 Request Entity Too Large จาก nginx ไม่ใช่จาก Mealie ซึ่งจะทำให้ log ของแอปพลิเคชันไม่แสดงข้อมูลใดๆ เลย
จากนั้นให้ดำเนินการออกใบรับรอง ขั้นตอนดังกล่าวและตัวตั้งเวลาต่ออายุใบรับรองได้อธิบายไว้ใน การออกใบรับรอง Let's Encrypt สำหรับ nginx ด้วย certbot
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d recipes.example.comCertbot จะเขียนทับ server block เพื่อให้ฟังที่พอร์ต 443 และเพิ่มการ redirect จากพอร์ต 80 ให้โหลดเว็บไซต์ผ่าน https:// และตรวจสอบว่าเบราว์เซอร์ยอมรับใบรับรอง หาก Mealie โหลดขึ้นมาได้แต่ลิงก์ภายในแอปส่งคุณไปยัง http:// แสดงว่า BASE_URL ยังคงระบุค่าเป็น http ซึ่งจำเป็นต้องแก้ไขให้ถูกต้อง จากนั้นใช้ sudo docker compose up -d เพื่อสร้าง container ใหม่ด้วยค่าที่ถูกต้อง
การให้บริการ Mealie ภายใต้ subpath เช่น example.com/recipes ไม่สามารถทำได้ เนื่องจาก frontend ไม่รองรับการให้บริการจาก subpath ให้ใช้ subdomain แทน
การสำรองข้อมูลและการกู้คืนข้อมูลที่แท้จริง
ข้อมูลทั้งหมดของ Mealie จะถูกเก็บไว้ใน /app/data/ ภายในคอนเทนเนอร์ ซึ่งก็คือโวลุ่ม mealie-data หากคุณคัดลอกโวลุ่มนั้น คุณก็จะได้ทั้งสูตรอาหาร รูปภาพ และฐานข้อมูลไปพร้อมกัน
sudo docker volume ls
sudo docker compose stop mealie
sudo docker run --rm -v mealie_mealie-data:/data -v "$PWD":/backup \
alpine tar czf /backup/mealie-data.tgz -C /data .
sudo docker compose start mealieชื่อของโวลุ่มจะมีชื่อโปรเจกต์นำหน้าอยู่ ซึ่งชื่อโปรเจกต์ก็คือชื่อไดเรกทอรีที่เก็บไฟล์ compose ไว้ จาก /srv/mealie โวลุ่มจะมีชื่อเป็น mealie_mealie-data นี่คือเหตุผลว่าทำไมคำสั่งแรกถึงเป็น docker volume ls: ให้ใช้ชื่อที่แสดงผลออกมา ไม่ใช่ชื่อที่ระบุในคู่มือนี้ การหยุดการทำงานของคอนเทนเนอร์ก่อนเป็นเรื่องสำคัญ เพราะ SQLite มักจะมีการเขียนข้อมูลอยู่ตลอดเวลา การคัดลอกขณะที่ระบบกำลังทำงานอาจทำให้ไฟล์ที่กู้คืนมาอ่านไม่ได้
Mealie ยังมีหน้าสำรองข้อมูลของตัวเองในส่วนผู้ดูแลระบบ ซึ่งจะเขียนไฟล์เก็บถาวรแบบพกพาที่บรรจุฐานข้อมูลในรูปแบบ JSON ไว้คู่กับรูปภาพของคุณ ให้ใช้วิธีนี้สำหรับการย้ายข้อมูลระหว่างเซิร์ฟเวอร์ เนื่องจากสามารถรองรับการเปลี่ยนแปลงเวอร์ชันได้ดีกว่าการคัดลอกไฟล์ดิบ การกู้คืนข้อมูลด้วยวิธีนี้เป็นการลบข้อมูลเดิมทิ้งโดยเจตนา โดยระบบจะลบฐานข้อมูลปัจจุบันก่อนที่จะโหลดไฟล์เก็บถาวร และไม่สามารถย้อนกลับได้ ระบบจะทำการออกจากระบบ (log out) ให้คุณโดยอัตโนมัติเมื่อการทำงานเสร็จสิ้น
การคัดลอกไฟล์ไว้บนเซิร์ฟเวอร์เดิมไม่ถือเป็นการสำรองข้อมูล ให้ส่งไฟล์เก็บถาวรไปยังที่อื่นตามกำหนดเวลา ซึ่งเป็นสิ่งที่ การสำรองข้อมูลนอกเซิร์ฟเวอร์แบบเข้ารหัสด้วย restic มีไว้เพื่อการนี้
การอัปเดต Mealie
cd /srv/mealie
sudo nano docker-compose.yml
sudo docker compose pull
sudo docker compose up -d
sudo docker compose logs -f mealieปรับเวอร์ชันที่ระบุไว้ในไฟล์ จากนั้นทำการ pull และสร้างคอนเทนเนอร์ใหม่ ระบบจะดำเนินการ migration ในการเริ่มทำงานครั้งแรกของอิมเมจใหม่ ให้สำรองข้อมูล volume ก่อนการเปลี่ยนเวอร์ชันหลักเสมอ เนื่องจากหากการ migration ล้มเหลวกลางคัน จะทำให้ฐานข้อมูลอยู่ในสถานะที่อิมเมจเวอร์ชันก่อนหน้าไม่สามารถเปิดใช้งานได้ โปรดอ่านบันทึกประจำรุ่น (release notes) สำหรับทุกเวอร์ชันที่อยู่ระหว่างเวอร์ชันปัจจุบันของคุณกับเวอร์ชันใหม่ที่จะอัปเดต
เมื่อการนำเข้าข้อมูลล้มเหลว
เว็บไซต์บางแห่งไม่ได้เผยแพร่ข้อมูลสูตรอาหารในรูปแบบที่มีโครงสร้าง ทำให้ Mealie นำเข้าได้เพียงชื่อเรื่องโดยไม่มีรายการวัตถุดิบ ซึ่งเป็นข้อจำกัดที่ไม่สามารถแก้ไขได้ด้วยการตั้งค่า คุณจำเป็นต้องคัดลอกข้อความสูตรอาหารลงไปเองด้วยตนเอง
ความล้มเหลวในกรณีอื่นเกิดจากระบบป้องกันบอทที่อยู่หน้าเว็บไซต์สูตรอาหาร ซึ่งจะตอบกลับ Mealie ด้วยหน้าท้าทาย (challenge page) แทนที่จะเป็นเนื้อหาสูตรอาหาร โดยปกติ Mealie จะจำลองการทำงานเสมือนเบราว์เซอร์และสลับ User Agent เพื่อลดปัญหานี้อยู่แล้ว หากเว็บไซต์ยังคงปฏิเสธการเข้าถึง ทางเลือกที่ระบุไว้ในเอกสารคือการส่งตัวดึงข้อมูล (scraper) ผ่าน Proxy ที่มีชื่อเสียงของ IP ดีกว่า หรือเรียกใช้งาน FlareSolverr เพื่อแก้ปัญหาหน้าท้าทายผ่านเบราว์เซอร์จริง ทั้งสองวิธีนี้เป็นทางเลือกเสริมและสามารถตั้งค่าได้ผ่าน environment variables บนคอนเทนเนอร์
หากการนำเข้าล้มเหลวเนื่องจากเซิร์ฟเวอร์ของคุณไม่สามารถเข้าถึงเว็บไซต์ได้เลย นั่นถือเป็นปัญหาที่ต่างออกไป ให้ทดสอบการเชื่อมต่อจากเครื่องของคุณด้วย curl -I https://the-site.example/recipe และตรวจสอบบรรทัดสถานะก่อนที่จะสรุปว่าเป็นความผิดพลาดของตัวดึงข้อมูล
ตำแหน่งของแอปพลิเคชันนี้
Mealie เป็นแอปพลิเคชันสำหรับการ self-host ที่เหมาะสมสำหรับผู้เริ่มต้นใช้งานในครัวเรือน เนื่องจากสมาชิกในบ้านสามารถใช้งานได้ทันทีโดยไม่ต้องร้องขอ แอปพลิเคชันนี้มีลักษณะการทำงานคล้ายกับการ จัดการคลังรูปภาพด้วยตนเองโดยใช้ Immich แม้ว่าจะใช้ทรัพยากรน้อยกว่ามาก และถือเป็นส่วนหนึ่งในรายการ สิ่งที่น่าทำ self-host ในปีนี้ คุณสามารถรันทั้งสองแอปพลิเคชันบนเซิร์ฟเวอร์ขนาดเล็กเครื่องเดียวกันได้ Immich ไม่ใช่ตัวเลือกเดียวสำหรับงานดังกล่าว หากคุณยังตัดสินใจไม่ได้ การศึกษา ความต้องการหน่วยความจำและคำสั่งสำรองข้อมูลของ PhotoPrism และ Immich มีความแตกต่างกันมากพอที่จะคุ้มค่าต่อการอ่านก่อนที่คุณจะจัดสรรพื้นที่ดิสก์ที่เหลือให้แอปพลิเคชันเหล่านั้น
FAQ
ทำไมการนำเข้า URL สูตรอาหารจึงล้มเหลว?
มีสาเหตุหลัก 2 ประการ ประการแรกคือหน้าเว็บนั้นไม่ได้เผยแพร่ข้อมูลสูตรอาหารในรูปแบบโครงสร้าง (structured data) ทำให้ตัวดึงข้อมูล (scraper) ไม่พบข้อมูลใดๆ ส่งผลให้คุณได้เพียงชื่อเมนูโดยไม่มีรายการวัตถุดิบ ประการที่สองคือระบบป้องกันบอทของเว็บไซต์นั้นส่งหน้าท้าทาย (challenge page) กลับมาแทนที่จะเป็นเนื้อหาสูตรอาหาร สำหรับกรณีที่สอง คุณสามารถตั้งค่าให้ Mealie เชื่อมต่อผ่าน proxy ที่มีชื่อเสียงของ IP ดีกว่า หรือใช้ FlareSolverr ที่คุณโฮสต์เองเพื่อแก้โจทย์ในเบราว์เซอร์จริง โปรดตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์ของคุณสามารถเข้าถึงหน้าเว็บนั้นได้จริงด้วย curl -I ก่อนที่จะทำการเปลี่ยนแปลงใดๆ
ฉันจำเป็นต้องใช้ PostgreSQL หรือ SQLite ก็เพียงพอแล้ว?
SQLite เพียงพอสำหรับการใช้งานในครัวเรือนและเป็นค่าเริ่มต้นของระบบ ให้ย้ายไปใช้ PostgreSQL เมื่อไดเรกทอรีข้อมูลของคุณอยู่บน network attached storage เนื่องจาก SQLite บน network filesystem มักทำให้เกิดข้อผิดพลาด database locked และอาจทำให้ไฟล์เสียหายได้ การกู้คืนข้อมูลใน PostgreSQL จำเป็นต้องให้ผู้ใช้ฐานข้อมูลมีสิทธิ์ระดับ superuser เนื่องจากกระบวนการกู้คืนจะลบข้อมูลทั้งหมดก่อนที่จะโหลดไฟล์สำรอง
ฉันสามารถรัน Mealie โดยไม่มีชื่อโดเมนได้หรือไม่?
ได้ หากใช้งานภายในเครือข่ายของคุณเอง ให้ตั้งค่า BASE_URL เป็นที่อยู่ที่คุณจะพิมพ์ใช้งานจริง เช่น http://192.168.1.20:9925 และไม่ต้องใช้ nginx ลิงก์สำหรับคำเชิญและการรีเซ็ตรหัสผ่านจะถูกสร้างขึ้นจาก BASE_URL ดังนั้นหากค่านี้ไม่ถูกต้อง ลิงก์ที่สร้างขึ้นจะไม่มีใครสามารถเปิดใช้งานได้ ห้ามเปิดเผยบริการนี้สู่สาธารณะผ่าน HTTP ธรรมดา เพราะข้อมูลการเข้าสู่ระบบจะถูกส่งแบบไม่เข้ารหัส
ฉันจะสร้างบัญชีผู้ใช้ให้สมาชิกในครอบครัวได้อย่างไร?
คงค่า ALLOW_SIGNUP ไว้ที่ "false" แล้วเพิ่มผู้ใช้จากหน้าผู้ดูแลระบบ (admin area) ซึ่งจะสร้างลิงก์คำเชิญให้คุณส่งต่อให้พวกเขา จัดกลุ่มทุกคนที่ใช้ครัวร่วมกันให้อยู่ใน household เดียวกันเพื่อให้พวกเขาสามารถแชร์สูตรอาหาร แผนการรับประทานอาหาร และรายการซื้อของร่วมกันได้ การแยก household บนเซิร์ฟเวอร์เดียวกันจะทำให้คอลเลกชันข้อมูลแยกออกจากกัน
จะเกิดอะไรขึ้นกับสูตรอาหารของฉันหากฉันหยุดใช้งาน Mealie?
ข้อมูลของคุณยังคงอยู่ ระบบสำรองข้อมูลของผู้ดูแลระบบจะเขียนข้อมูลของคุณออกมาเป็นรูปแบบ JSON และ Mealie ยังสามารถส่งออกสูตรอาหารเป็นไฟล์ markdown ธรรมดา ซึ่งสามารถอ่านได้ด้วยโปรแกรมแก้ไขข้อความทั่วไปโดยไม่ต้องใช้ซอฟต์แวร์ใดๆ เพิ่มเติม ควรทำการส่งออกข้อมูลเก็บไว้ก่อนที่คุณจะจำเป็นต้องใช้งานจริง และตรวจสอบให้แน่ใจว่าคุณสามารถเปิดไฟล์เหล่านั้นได้ตามปกติ