3.6 KiB
lxc_manager_node
This has been tested on clean install of ubuntu 16.04 64bit.
install
Update you system to the newest packages and reboot. You may need to do this several times:
sudo apt-get update && sudo apt-get upgrade -y && sudo reboot
Once there are no more updates, add the virt
user:
sudo adduser virt
Make the password something strong, and remember it.
Now you can install the packages we need:
sudo add-apt-repository ppa:ubuntu-lxc/stable
sudo add-apt-repository ppa:ubuntu-lxc/cgmanager-stable
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install git nodejs npm lxc btrfs-tools lxctl lxc-templates uidmap libpam-cgfs
may need this
https://discuss.linuxcontainers.org/t/failed-creating-cgroups/272/10 looking more into it.
remap nodejs
to node
:
sudo ln -s /usr/bin/nodejs /usr/bin/node
And install the node packages:
sudo npm install -g forever
give the virt
user network access:
echo "virt veth lxcbr0 1024" | sudo tee -a /etc/lxc/lxc-usernet
lets set up the config file for the virt
user, first switch users:
su virt
The lines below will add the proper config file:
mkdir -p ~/.config/lxc
echo "lxc.id_map = u 0 `grep -oP "^$USER:\K\d+" /etc/subuid` `grep -oP "^$USER:\d+:\K\d+" /etc/subuid`" > ~/.config/lxc/default.conf
echo "lxc.id_map = g 0 `grep -oP "^$USER:\K\d+" /etc/subgid` `grep -oP "^$USER:\d+:\K\d+" /etc/subgid`" >> ~/.config/lxc/default.conf
echo "lxc.network.type = veth" >> ~/.config/lxc/default.conf
echo "lxc.network.link = lxcbr0" >> ~/.config/lxc/default.conf
Clone the repo and set it up:
git clone https://github.com/wmantly/lxc_manager_node.git
cd lxc_manager_node
npm install
Its safer at this point to reboot the system, exit
back to the privlaged user and reboot
SSH or log dercily into the virt
user!!! this will not work if you use su to get into the user!
Now you can can create a test container:
lxc-create -t download -n test-ubuntu -- -d ubuntu -r trusty -a amd64
start and attach the container to make sure everthing is ok:
lxc-start -n test-ubuntu -d
lxc-attach -n test-ubuntu
If everything worked you can stop and delete the container
lxc-stop -n test-ubuntu
lxc-destroy -n test-ubuntu
Open resty config file
server {
listen 80;
location / {
resolver 10.0.3.1; # use LXC dns
set $target '';
access_by_lua '
function mysplit(inputstr, sep)
-- http://stackoverflow.com/a/7615129/3140931
if sep == nil then
sep = "%s"
end
local t={} ; i=0
for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
t[i] = str
i = i + 1
end
return t,i
end
host, hostLen = mysplit(ngx.var.host, ".")
if hostLen == 1 then
ngx.var.target = host[0]..":15000"
elseif hostLen == 6 then
ngx.var.target = host[1]..":"..host[0]
elseif hostLen == 5 then
ngx.var.target = host[0]..":15000"
else
return ngx.exit(599)
end
';
proxy_pass http://$target;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
auto start
crontab
@reboot /usr/local/bin/forever start -a -o /home/virt/lxc_manager_node/server.out.log -e /home/virt/lxc_manager_node/server.err.log /home/virt/lxc_manager_node/bin/www
##rc.local
sudo cgm create all virt
sudo cgm chown all virt $(id -u virt) $(id -g virt)