Add Docker container, update readme and fix indentations

This commit is contained in:
ronivay
2017-08-30 15:10:28 +03:00
parent 4d37ca1edf
commit 2cd984d9db
4 changed files with 334 additions and 238 deletions

View File

@@ -4,6 +4,8 @@
This tool will will install and update [Xen Orchestra](https://xen-orchestra.com/#!/) automatically. xo-server and xo-web components are built from sources.
There's also an option to build/pull docker image to get things up and running quickly.
## Instructions
Clone this repository and run xo-install.sh script as root
@@ -12,13 +14,15 @@ Clone this repository and run xo-install.sh script as root
./install-xo.sh
```
Tool makes some checks and offers options to update/install Xen-Orchestra or deploy a container.
Tool has been tested to work with following distros:
- CentOS 7
- Debian 8
- Ubuntu 16.05
CentOS was tested without SELinux. You need to deal with labels yourself if you want to use it.
CentOS was tested without SELinux. You need to deal with labels and permissions yourself if you want to use it.
## Notes

43
docker/Dockerfile Normal file
View File

@@ -0,0 +1,43 @@
FROM centos:latest
MAINTAINER Roni Väyrynen <roni@vayrynen.info>
# Install set of dependencies to support running Xen-Orchestra
# Node v6
RUN curl -s -L https://rpm.nodesource.com/setup_6.x | bash -
# yarn for installing node packages
RUN curl -s -o /etc/yum.repos.d/yarn.repo https://dl.yarnpkg.com/rpm/yarn.repo
RUN yum -y install yarn
# epel-release for various packages not available from base repo
RUN yum -y install epel-release
# build dependencies, git for fetchin source and redis server for storing ata
RUN yum -y install gcc gcc-c++ make openssl-devel redis libpng-devel python git
# monit to keep an eye on processes
RUN yum -y install monit
ADD monit-services /etc/monit.d/services
# Fetch Xen-Orchestra sources from git stable branch
RUN git clone -b stable http://github.com/vatesfr/xo-server /etc/xo-server
RUN git clone -b stable http://github.com/vatesfr/xo-web /etc/xo-web
# Run build tasks against sources
RUN cd /etc/xo-server && yarn
RUN cd /etc/xo-web && yarn
# Fix path for xo-web content in xo-server configuration
RUN sed -i "s/#'\/': '\/path\/to\/xo-web\/dist\//'\/': '..\/xo-web\/dist\//" /etc/xo-server/sample.config.yaml
# Move edited config sample to place
RUN mv /etc/xo-server/sample.config.yaml /etc/xo-server/.xo-server.yaml
# Install forever for starting/stopping Xen-Orchestra
RUN npm install forever -g
WORKDIR /etc/xo-server
CMD ["/usr/bin/monit"]

10
docker/monit-services Normal file
View File

@@ -0,0 +1,10 @@
set init
check process xo-server with pidfile /var/run/xo-server.pid
start program = "/usr/bin/forever start --pidFile /var/run/xo-server.pid --sourceDir /etc/xo-server bin/xo-server"
stop program = "/usr/bin/forever stop /etc/xo-server/bin/xo-server"
check process redis with pidfile /var/run/redis/redis.pid
start program = "/usr/bin/redis-server /etc/redis.conf --daemonize yes"
stop program = "/usr/bin/redis-cli shutdown"

View File

@@ -6,7 +6,7 @@
PORT="80"
INSTALLDIR="/etc/xo"
BRANCH="stable"
LOGFILE=$(dirname $0)/xo-install.log
LOGFILE="$(dirname $0)/xo-install.log"
## Modify to your need ##
@@ -65,13 +65,14 @@ function InstallDependenciesCentOS {
}
function InstallDependenciesDebian {
# Install necessary dependencies for XO build
set -e
# Install necessary dependencies for XO build
echo
echo -n "Running apt-get update..."
apt-get update >/dev/null 2>$LOGFILE
apt-get update >/dev/null 2>$LOGFLE
echo "done"
# Install apt-transport-https and ca-certificates because of yarn https repo url
@@ -168,16 +169,15 @@ function InstallXO {
echo "xo-server and xo-web build quite a while. Grab a cup of coffee and lay back"
echo
echo -n "Running xo-server install..."
cd $INSTALLDIR/xo-builds/xo-server-$TIME && yarn >/dev/null 2>$LOGFILE && yarn run build >/dev/null 2>$LOGFILE
cd $INSTALLDIR/xo-builds/xo-server-$TIME && yarn >/dev/null 2>$LOGFILE
echo "done"
echo -n "Running xo-web install..."
cd $INSTALLDIR/xo-builds/xo-web-$TIME && yarn >/dev/null 2>$LOGFILE && yarn run build >/dev/null 2>$LOGFILE
cd $INSTALLDIR/xo-builds/xo-web-$TIME && yarn >/dev/null 2>$LOGFILE
echo "done"
echo
echo "Fixing binary path in systemd service configuration and symlinking to /etc/systemd/system/xo-server.service"
sed -i "s#ExecStart=.*#ExecStart=$INSTALLDIR\/xo-server\/bin\/xo-server#" $INSTALLDIR/xo-builds/xo-server-$TIME/xo-server.service
echo
echo "Adding WorkingDirectory parameter to systemd service configuration"
sed -i "/ExecStart=.*/a WorkingDirectory=/etc/xo/xo-server" $INSTALLDIR/xo-builds/xo-server-$TIME/xo-server.service
@@ -197,7 +197,9 @@ function InstallXO {
fi
fi
ln -sfn $INSTALLDIR/xo-builds/xo-server-$TIME/xo-server.service /etc/systemd/system/xo-server.service
echo
echo "Symlinking systemd service configuration"
ln -sfn $INSTALLDIR/xo-server/xo-server.service /etc/systemd/system/xo-server.service
sleep 2
echo "Reloading systemd configuration"
echo
@@ -259,7 +261,11 @@ function InstallXO {
function UpdateXO {
if [[ $(ps aux | grep xo-server | grep -v grep) ]]; then
/bin/systemctl stop xo-server || { echo "failed to stop service, exiting..." ; exit 1; }
fi
InstallXO
# remove old builds. leave 5 latest
@@ -338,7 +344,8 @@ echo "-----------------------------------------"
echo
echo "1. Install"
echo "2. Update"
echo "3. Exit"
echo "3. Run with docker"
echo "4. Exit"
echo
read -p ": " option
@@ -376,6 +383,38 @@ read -p ": " option
exit 0
;;
3)
echo
echo "Build image locally or fetch from docker hub?"
echo "1. Build"
echo "2. Pull"
read -p ": " container
case $container in
1)
echo
docker build -t xen-orchestra $(dirname $0)/docker/image/.
echo
echo
echo "Image built. Run container:"
echo "docker run -itd -p 80:80 xen-orchestra"
echo
echo "If you want to persist xen-orchestra and redis data, use volume flags like:"
echo "docker run -itd -p 80:80 -v /path/to/data/xo-server:/var/lib/xo-server -v /path/to/data/redis:/var/lib/redis xen-orchestra"
;;
2)
echo
docker pull ronivay/xen-orchestra
echo
echo
echo "Image built. Run container:"
echo "docker run -itd -p 80:80 ronivay/xen-orchestra"
echo
echo "If you want to persist xen-orchestra and redis data, use volume flags like:"
echo "docker run -itd -p 80:80 -v /path/to/data/xo-server:/var/lib/xo-server -v /path/to/data/redis:/var/lib/redis ronivay/xen-orchestra"
;;
esac
;;
4)
exit 0
;;
*)