ฉันกำลังพยายามตั้งค่าเซิร์ฟเวอร์ที่ฉันจะใช้งานหลายแอพ ส่วนใหญ่ภายใน แต่อาจเป็นโครงการโอเพ่นซอร์สเช่น Redmine พวกเขาทั้งหมดจะเป็นแอป Rails/Ruby/สคริปต์ทดสอบที่ทำงานบนเบราว์เซอร์ที่ไม่มีส่วนหัว โดยพื้นฐานแล้วฉันกำลังพยายามตั้งค่า heroku เช่นสภาพแวดล้อมภายในและต้องการแยกกระบวนการบางอย่างระหว่างกระบวนการที่ทำงานอยู่เหล่านี้

ครั้งแรกที่ฉันสะดุดกับคุก chroot แล้วเรียนรู้เกี่ยวกับ LXC LXC ดูเหมือนว่าจะให้การควบคุมที่ดีกว่าคุก chroot ธรรมดา ฉันมีฟรอนต์เอนด์ nginx และฉันต้องการเรียกใช้กระบวนการแอปเว็บเซิร์ฟเวอร์ (thin/mongrel/webrick) ในคอนเทนเนอร์แยก โดยปกติ เราเพียงแค่เริ่มกระบวนการเหล่านี้บนที่อยู่ IP ในเครื่องและมีพร็อกซี nginx ให้พวกเขา วิธีที่ดีที่สุดในการทำสิ่งนี้คืออะไร? ผู้คนตั้งค่า Bridged IP แบบคงที่สำหรับคอนเทนเนอร์และให้ nginx ชี้ไปที่มันหรือไม่ ฉันจะแน่ใจได้อย่างไรว่าเว็บเซิร์ฟเวอร์ที่ทำงานอยู่ในคอนเทนเนอร์นั้นสามารถเข้าถึงได้เฉพาะโฮสต์ภายนอก

เอกสารเกี่ยวกับ LXC ดูเหมือนจะเบาบาง คำแนะนำสำหรับบทเรียนที่ดีหรือ HOWTO จะได้รับการชื่นชมอย่างมาก สภาพแวดล้อมการปรับใช้เป้าหมายของฉันคือกล่อง Lucid 64 บิต

PS ฉันไม่ใช่กูรู linux ดังนั้นจงอ่อนโยน

answer

สมมติว่า IP ของคุณคือ 192.168.1.1 เกตเวย์ของคุณคือ 192.168.1.254 และเครือข่ายของคุณคือ 192.168.1.0/24

คุณควรสร้างอินเทอร์เฟซแบบบริดจ์บนเครื่องโฮสต์ของคุณ เช่นนี้ใน/etc/network/interfaces file

 auto lo
 iface lo inet loopback

 auto br0
 iface br0 inet static
     address 192.168.1.1
     network 192.168.1.0
     netmask 255.255.255.0
     broadcast 192.168.1.255
     gateway 192.168.1.254
     bridge_ports eth0
     bridge_stp off
     bridge_fd 3
     bridge_hello 1
     bridge_maxage 5

แล้วติดตั้ง Ubuntu พื้นฐานใน LXC:

 apt-get install lxc vlan bridge-utils python-software-properties screen
 mkdir /lxc
 debootstrap oeniric /lxc/ubuntu
 chroot ubuntu
 locale-gen en_US.UTF-8
 apt-get update
 apt-get install lxcguest ssh
 passwd
 rm /etc/mtab
 ln -s /proc/mounts /etc/mtab
 exit

สร้างไฟล์/lxc/ubuntu.configด้วยเนื้อหา

 lxc.utsname = ubuntu
 lxc.tty = 8
 lxc.rootfs = /lxc/ubuntu
 lxc.mount = /lxc/ubuntu.fstab
 lxc.network.type = veth
 lxc.network.flags = up
 lxc.network.link = br0
 lxc.network.name = eth0
 lxc.network.mtu = 1500
 lxc.network.ipv4 = 192.168.1.10/24

/lxc/ubuntu.fstabด้วย

 none /lxc/ubuntu/dev/pts devpts defaults 0 0
 none /lxc/ubuntu/proc proc defaults 0 0
 none /lxc/ubuntu/sys sysfs defaults 0 0
 none /lxc/ubuntu/run tmpfs defaults 0 0

เพิ่มใน/lxc/ubuntu/etc/rc.local

 route add default gw 192.168.1.254

แก้ไข/lxc/ubuntu/etc/resolv.contตามความต้องการของคุณ

จากนั้นคุณสามารถสร้างเครื่องของคุณด้วย

 lxc-create -f /lxc/ubuntu.config -n ubuntu

แล้วเริ่ม

 lxc-start -n ubuntu

หรือหยุด

 lxc-stop -n ubuntu

หรือทำลายในที่สุด

 lxc-destroy -n ubuntu

เครื่องเสมือนใหม่ของคุณจะมี IP 192.168.1.10 และจะสามารถเข้าถึงได้บนเครือข่าย

หากคุณไม่ต้องการให้ที่อยู่ IP ภายนอกแก่คอนเทนเนอร์หรือไม่สามารถ:

หน้าเดวิกิพีเดียใน LXCกล่าวถึงสองสายพันธุ์ประสบความสำเร็จว่าการใช้ NAT บนเครื่องโฮสต์ ฉันใช้วิธีนี้กับlibvirtและยังไม่เคยมีปัญหากับมันมาก่อน

ฉันไม่รู้ว่าภายใต้ Ubuntu เป็นอย่างไร แต่ที่นั่นอาจไม่แตกต่างกันมากนัก

หน้า Wiki อาจดูเหมือนแหล่งข้อมูลที่ดี แต่ผู้ดูแลเองบอกว่าคุณควรอ้างอิงไฟล์/usr/share/doc/lxc/README.Debianเพื่อรับข้อมูลล่าสุด