diff --git a/Dockerfile b/Dockerfile index c0452f12b36c04489229a5a11a5bb2f02e8974c7..a443b2c27cd9ac455885f9e50b792a7adb1bbe8f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,4 @@ + FROM centos:7 ENV LC_ALL en_US.utf8 diff --git a/Dockerfile.vnet_router0 b/Dockerfile.vnet_router0 deleted file mode 120000 index b2e9ee37fc55ed4077ddc9895c5bdcd5f3d0741c..0000000000000000000000000000000000000000 --- a/Dockerfile.vnet_router0 +++ /dev/null @@ -1 +0,0 @@ -router-container/Dockerfile \ No newline at end of file diff --git a/Dockerfile.centos.base b/Dockerfiles.d/Dockerfile.centos.base similarity index 80% rename from Dockerfile.centos.base rename to Dockerfiles.d/Dockerfile.centos.base index 824d419f1c8e0c11269f97d67cbc640e1237ff7a..85260aabf7e6dcb514a0beaab9d4a9d61a89f146 100644 --- a/Dockerfile.centos.base +++ b/Dockerfiles.d/Dockerfile.centos.base @@ -1,5 +1,5 @@ -#use: docker build -f Dockerfile.centos.base -t fodpy3_base . +#use (from main dir): docker build -f ./Dockerfiles.d/Dockerfile.centos.base -t fodpy3_base . && docker build -f ./Dockerfiles.d/Dockerfile.centos.step2 -t fodpy3 . FROM centos:7 diff --git a/Dockerfile.centos.step2 b/Dockerfiles.d/Dockerfile.centos.step2 similarity index 78% rename from Dockerfile.centos.step2 rename to Dockerfiles.d/Dockerfile.centos.step2 index 247653110cdb408d84641385aa7d438fbf327c24..23095bedd27e2ab460a3fc57f246b30f322fe8d4 100644 --- a/Dockerfile.centos.step2 +++ b/Dockerfiles.d/Dockerfile.centos.step2 @@ -1,5 +1,5 @@ -#use: cd /root/FOD && docker build -f Dockerfile.centos.base -t fodpy3_base . ; cd /root/FOD && docker build -f Dockerfile.centos.step2 -t fodpy3 . +#use (from main dir): docker build -f ./Dockerfiles.d/Dockerfile.centos.base -t fodpy3_base . && docker build -f ./Dockerfiles.d/Dockerfile.centos.step2 -t fodpy3 . #FROM centos:7 FROM fodpy3_base diff --git a/Dockerfiles.d/Dockerfile.centos.supervisord.base b/Dockerfiles.d/Dockerfile.centos.supervisord.base new file mode 100644 index 0000000000000000000000000000000000000000..04bc300d5c83a239a2ccc64297bffb6e450b6cad --- /dev/null +++ b/Dockerfiles.d/Dockerfile.centos.supervisord.base @@ -0,0 +1,36 @@ + +#use (from main dir): docker build -f ./Dockerfiles.d/Dockerfile.centos.supervisord.base -t fodpy3_base . && docker build -f ./Dockerfiles.d/Dockerfile.centos.supervisord.step2 -t fodpy3 . + +## + +#docker_label: fodpy3_base +#dockerbuild_sticky: 0 + +FROM centos:7 + +## + +ENV LC_ALL en_US.utf8 + +RUN yum -y install procps + +RUN mkdir -p /var/log/fod /srv +#COPY . /srv/flowspy +COPY install-centos.sh requirements.txt /srv/flowspy/ + +RUN (cd /srv/flowspy; ./install-centos.sh --basesw;) + +# echo "To set environment to English, run: export LC_ALL=en_US" +# echo "To activate virualenv: source /srv/venv/bin/activate" +# echo "To create a user run: cd /srv/flowspy; ./manage.py createsuperuser" +# echo "To start flowspy server: cd /srv/flowspy; ./manage.py runserver 0.0.0.0:8000" +# echo "To start celeryd: cd /srv/flowspy; ./manage.py celeryd" + +RUN yum install -y supervisor +RUN yum install -y net-utils lsof w3m links lynx curl wget + +#EXPOSE 8000 + +#CMD [ "/srv/flowspy/runfod.sh" ] +CMD [ "sleep" "10000000" ] + diff --git a/Dockerfiles.d/Dockerfile.centos.supervisord.step2 b/Dockerfiles.d/Dockerfile.centos.supervisord.step2 new file mode 100644 index 0000000000000000000000000000000000000000..4c0a5aa1f7d4aee33d2db0a6f14727d30a279218 --- /dev/null +++ b/Dockerfiles.d/Dockerfile.centos.supervisord.step2 @@ -0,0 +1,44 @@ + +#use (from main dir): docker build -f ./Dockerfiles.d/Dockerfile.centos.supervisord.base -t fodpy3_base . && docker build -f ./Dockerfiles.d/Dockerfile.centos.supervisord.step2 -t fodpy3 . + +## + +#docker_label: fodpy3 + +## + +#FROM centos:7 + +FROM fodpy3_base +#dockerbase_dockerfile: Dockerfile.centos.supervisord.base + +## + +ENV LC_ALL en_US.utf8 + +#RUN yum -y install procps + +RUN mkdir -p /var/log/fod /srv +COPY . /srv/flowspy + +RUN useradd -m fod +#RUN chown -R fod: /srv/flowspy + +RUN (cd /srv/flowspy; ./install-centos.sh --fodproper;) + +RUN chown -R fod: /srv/flowspy + +# echo "To set environment to English, run: export LC_ALL=en_US" +# echo "To activate virualenv: source /srv/venv/bin/activate" +# echo "To create a user run: cd /srv/flowspy; ./manage.py createsuperuser" +# echo "To start flowspy server: cd /srv/flowspy; ./manage.py runserver 0.0.0.0:8000" +# echo "To start celeryd: cd /srv/flowspy; ./manage.py celeryd" + +EXPOSE 8000 + +RUN yum -y install supervisor +COPY supervisord.conf /etc/supervisord.conf + +#CMD ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf" +CMD [ "/srv/flowspy/runfod-supervisord.sh" ] + diff --git a/Dockerfile.debian b/Dockerfiles.d/Dockerfile.debian similarity index 100% rename from Dockerfile.debian rename to Dockerfiles.d/Dockerfile.debian diff --git a/Dockerfile.debian.base b/Dockerfiles.d/Dockerfile.debian.supervisord.base similarity index 59% rename from Dockerfile.debian.base rename to Dockerfiles.d/Dockerfile.debian.supervisord.base index ddc2bef9f9cfc9211745b007c1241a415d62fbdc..de33469a83bf81f9c62afa603dc1760447df7d99 100644 --- a/Dockerfile.debian.base +++ b/Dockerfiles.d/Dockerfile.debian.supervisord.base @@ -1,3 +1,8 @@ + +#use (from main dir): docker build -f ./Dockerfiles.d/Dockerfile.debian.supervisor.base -t fodpy3_base . && docker build -f ./Dockerfiles.d/Dockerfile.debian.supervisor.step2 -t fodpy3 . + +#docker_label: fodpy3_base-debian + FROM debian:buster ENV LC_ALL en_US.utf8 @@ -17,6 +22,10 @@ RUN apt-get -qqy install patch #RUN (cd /srv/flowspy; ./install-debian.sh;) RUN (cd /srv/flowspy; ./install-debian.sh --basesw;) +RUN apt-get -qqy install supervisor +#RUN apt-get -qqy install net-utils lsof w3m links lynx curl wget +RUN apt-get -qqy install lsof w3m links lynx curl wget + #EXPOSE 8000 #CMD [ "/srv/flowspy/runfod.sh" ] diff --git a/Dockerfile.debian.step2 b/Dockerfiles.d/Dockerfile.debian.supervisord.step2 similarity index 59% rename from Dockerfile.debian.step2 rename to Dockerfiles.d/Dockerfile.debian.supervisord.step2 index fd038da1e71aefa1bbda7ab85bdba58596cb5bba..529c9356394f5c180de4044e40f174a2158b5afe 100644 --- a/Dockerfile.debian.step2 +++ b/Dockerfiles.d/Dockerfile.debian.supervisord.step2 @@ -1,5 +1,9 @@ + +#use (from main dir): docker build -f ./Dockerfiles.d/Dockerfile.debian.supervisor.base -t fodpy3_base . && docker build -f ./Dockerfiles.d/Dockerfile.debian.supervisor.step2 -t fodpy3 . + #FROM debian:buster FROM fodpy3-debian_base +#dockerbase_dockerfile: Dockerfile.debian.supervisord.base ENV LC_ALL en_US.utf8 @@ -22,5 +26,9 @@ EXPOSE 8000 WORKDIR /srv/flowspy -CMD [ "/srv/flowspy/runfod.sh" ] +RUN apt-get -qqy install supervisor +COPY supervisord.conf /etc/supervisord.conf + +#CMD ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf" +CMD [ "/srv/flowspy/runfod-supervisord.sh" ] diff --git a/Dockerfiles.d/Dockerfile.vnet_router0 b/Dockerfiles.d/Dockerfile.vnet_router0 new file mode 120000 index 0000000000000000000000000000000000000000..0fc5d609a4b088f0232a686ea240a800d2ed64c0 --- /dev/null +++ b/Dockerfiles.d/Dockerfile.vnet_router0 @@ -0,0 +1 @@ +../router-container/Dockerfile \ No newline at end of file diff --git a/Dockerfile.vnet_router0a b/Dockerfiles.d/Dockerfile.vnet_router0a similarity index 95% rename from Dockerfile.vnet_router0a rename to Dockerfiles.d/Dockerfile.vnet_router0a index 77a2d9432ad5a65dd58d2571d228fdf3e842d6f8..74f8ee75b0abb05a3f98e0c97c7734eeb5fcf562 100644 --- a/Dockerfile.vnet_router0a +++ b/Dockerfiles.d/Dockerfile.vnet_router0a @@ -4,7 +4,7 @@ # instructions: # 1. build container, e.g., by: -#> docker build -f Dockerfile.vnet_router0a -t vnet0a . +#> docker build -f ./Dockerfiles.d/Dockerfile.vnet_router0a -t vnet0a . # run from main dir #> docker run -t -i vnet0a diff --git a/Dockerfile.vnet_router1 b/Dockerfiles.d/Dockerfile.vnet_router1 similarity index 97% rename from Dockerfile.vnet_router1 rename to Dockerfiles.d/Dockerfile.vnet_router1 index 1971d94f64422c47bfe5fb3214b4cf24ea3a23ad..3d112b56087d76ea10112cbbc8b9cbf8ecd1bcd6 100644 --- a/Dockerfile.vnet_router1 +++ b/Dockerfiles.d/Dockerfile.vnet_router1 @@ -4,7 +4,7 @@ # instructions: # 1. build container, e.g., by: -#> docker build -f Dockerfile.vnet_router1 -t vnet . +#> docker build -f ./Dockerfiles.d/Dockerfile.vnet_router1 -t vnet . # run from main dir # 2. before running container make sure openvswitch module is loaded in kernel (modprobe openvswitch) and run container with --privileged (needed for openvswitch inside container) #> modprobe openvswitch diff --git a/Dockerfile.vnet_router2 b/Dockerfiles.d/Dockerfile.vnet_router2 similarity index 97% rename from Dockerfile.vnet_router2 rename to Dockerfiles.d/Dockerfile.vnet_router2 index a2233124d22a10a8c5f6331879b76690b374d73a..cd9ecd21be022f36f414a4e9f951ba86d9836d7d 100644 --- a/Dockerfile.vnet_router2 +++ b/Dockerfiles.d/Dockerfile.vnet_router2 @@ -4,7 +4,7 @@ # instructions: # 1. build container, e.g., by: -#> docker build -f Dockerfile.vnet_router2 -t vnet2 . +#> docker build -f ./Dockerfiles.d/Dockerfile.vnet_router2 -t vnet2 . # run from main dir # 2. before running container make sure openvswitch module is loaded in kernel (modprobe openvswitch) and run container with --privileged (needed for openvswitch inside container) #> modprobe openvswitch diff --git a/doc/installation/v1.7/docker.md b/doc/installation/v1.7/docker.md index cbe81083dd9cfc5036db4c820aaae118ae26063a..5419a79c369044dc2baac542ddcf3789809bda19 100644 --- a/doc/installation/v1.7/docker.md +++ b/doc/installation/v1.7/docker.md @@ -106,6 +106,8 @@ without an actual effect on any network, but FoD functionality of controlling ru similar to router-container/Dockerfile but will use netconfd (DEBIAN package) instead of CESNET's netopeer NETCONF server +./Dockerfiles.d/Dockerfile.vnet_router0a : + ### NETCONF test server docker container extended to virtual DDoS test network Based on an instance of the NETCONF test server docker container @@ -117,8 +119,8 @@ SNMPd and a Perl SNMPd statistic collector script Yields a more complete simulation of a router for FoD. -Dockerfile.vnet_router1 : -Dockerfile.vnet_router2 : similar to Dockerfile.vnet_router1, but will use netconfd (DEBIAN package) instead of CESNET's netopeer NETCONF server +./Dockerfiles.d/Dockerfile.vnet_router1 : +./Dockerfiles.d/Dockerfile.vnet_router2 : similar to Dockerfile.vnet_router1, but will use netconfd (DEBIAN package) instead of CESNET's netopeer NETCONF server (instructions how to build and run inside the Dockerfiles) diff --git a/install-debian.sh b/install-debian.sh index 831c62399e8724eed54977407aead46dc2fda0b3..2d573227127d4bfe36569fa9acc5a2d42324b651 100755 --- a/install-debian.sh +++ b/install-debian.sh @@ -4,22 +4,71 @@ # with Celery, Redis, and sqlite. # +fod_dir="/srv/flowspy" +venv_dir="/srv/venv" + install_basesw=1 install_fodproper=1 -if [ $# -ge 1 -a "$1" = "--both" ]; then - shift 1 - install_basesw=1 - install_fodproper=1 -elif [ $# -ge 1 -a "$1" = "--basesw" ]; then - shift 1 - install_basesw=1 - install_fodproper=0 -elif [ $# -ge 1 -a "$1" = "--fodproper" ]; then - shift 1 - install_basesw=0 - install_fodproper=1 + +# + +while [ $# -gt 0 ]; do + + if [ $# -ge 1 -a "$1" = "--here" ]; then + shift 1 + fod_dir="$PWD" + venv_dir="$PWD/venv" + elif [ $# -ge 1 -a "$1" = "--base_dir" ]; then + shift 1 + base_dir="$1" + shift 1 + fod_dir="$base_dir/flowspy" + venv_dir="$base_dir/venv" + elif [ $# -ge 1 -a "$1" = "--fod_dir" ]; then + shift 1 + fod_dir="$1" + shift 1 + elif [ $# -ge 1 -a "$1" = "--venv_dir" ]; then + shift 1 + venv_dir="$1" + shift 1 + elif [ $# -ge 1 -a "$1" = "--both" ]; then + shift 1 + install_basesw=1 + install_fodproper=1 + elif [ $# -ge 1 -a "$1" = "--basesw" ]; then + shift 1 + install_basesw=1 + install_fodproper=0 + elif [ $# -ge 1 -a "$1" = "--fodproper" ]; then + shift 1 + install_basesw=0 + install_fodproper=1 + else + break + fi + +done + +## + +venv_dir_base="$(dirname "$venv_dir")" + +static_dir="$fod_dir/static" + +inst_dir="$(dirname "$0")" + +mkdir -p "$fod_dir" || exit + +if [ "$(stat -Lc "%i" "$inst_dir/" "$fod_dir/" | sort -n -k 1 -u | wc -l)" = "1" ]; then + inst_dir_is_fod_dir=1 +else + inst_dir_is_fod_dir=0 fi +echo "$0: inst_dir=$inst_dir fod_dir=$fod_dir => inst_dir_is_fod_dir=$inst_dir_is_fod_dir venv_dir=$venv_dir static_dir=$static_dir" 1>&2 +#exit + ## if [ "$install_basesw" = 1 ]; then @@ -42,54 +91,93 @@ if [ "$install_fodproper" = 0 ]; then echo "Setup partial python environment for FoD" - mkdir -p /srv - pyvenv /srv/venv - source /srv/venv/bin/activate + #mkdir -p /srv + mkdir -p "$venv_dir_base" + if [ -x pyvenv ]; then + #pyvenv /srv/venv + pyvenv "$venv_dir" + else + #virtualenv /srv/venv + virtualenv "$venv_dir" + fi + ln -sf "$venv_dir" "$fod_dir/venv" + + #source /srv/venv/bin/activate + source "$venv_dir/bin/activate" + pip install wheel pip install -r requirements.txt else echo "Setup python environment for FoD" - mkdir -p /var/log/fod /srv - pyvenv /srv/venv + #mkdir -p /var/log/fod /srv + mkdir -p /var/log/fod "$venv_dir_base" + if [ -x pyvenv ]; then + #pyvenv /srv/venv + pyvenv "$venv_dir" + else + #virtualenv /srv/venv + virtualenv "$venv_dir" + fi + ln -sf "$venv_dir" "$fod_dir/venv" ( set +e - source /srv/venv/bin/activate - mkdir -p /srv/flowspy/ - - # Select source dir and copy FoD into /srv/flowspy/ - if [ "`basename "$0"`" = install-centos.sh ]; then - # this script is in the source directory - cp -f -r "`dirname $0`"/* /srv/flowspy/ - elif [ -e /vagrant ]; then - # vagrant's copy in /vagrant/ - cp -f -r /vagrant/* /srv/flowspy/ - elif [ -e ./install-centos.sh ]; then - # current directory is with the sourcecode - cp -f -r ./* /srv/flowspy/ - else - echo "Could not find FoD src directory tried `dirname $0`, /vagrant/, ./" - exit 1 - fi + #source /srv/venv/bin/activate + source "$venv_dir/bin/activate" + #mkdir -p /srv/flowspy/ + mkdir -p "$fod_dir" + + if [ "$inst_dir_is_fod_dir" = 0 ]; then + + # Select source dir and copy FoD into /srv/flowspy/ + if [ "`basename "$0"`" = install-debian.sh ]; then + # this script is in the source directory + #cp -f -r "`dirname $0`"/* /srv/flowspy/ + cp -f -r "$inst_dir"/* "$fod_dir" + elif [ -e /vagrant ]; then + # vagrant's copy in /vagrant/ + #cp -f -r /vagrant/* /srv/flowspy/ + cp -f -r /vagrant/* "$fod_dir" + elif [ -e ./install-centos.sh ]; then + # current directory is with the sourcecode + #cp -f -r ./* /srv/flowspy/ + cp -f -r ./* "$fod_dir" + else + echo "Could not find FoD src directory tried `dirname $0`, /vagrant/, ./" + exit 1 + fi + + fi + + find "$fod_dir/" -not -user fod -exec chown -v fod: {} \; set -e - cd /srv/flowspy/ + #cd /srv/flowspy/ + cd "$fod_dir" ( cd flowspy cp -f settings.py.dist settings.py patch settings.py < settings.py.patch + + sed -i "s#/srv/flowspy#$fod_dir#" "settings.py" ) pip install -r requirements.txt touch flowspy/settings_local.py #./manage.py syncdb --noinput - mkdir -p /srv/flowspy/static/ + #mkdir -p /srv/flowspy/static/ + mkdir -p "$static_dir" ./manage.py collectstatic --noinput ./manage.py migrate ./manage.py loaddata initial_data + + mkdir -p "$fod_dir/log" "$fod_dir/logs" + chown -R fod: "$fod_dir/log" "$fod_dir/logs" + + sed -i "s#/srv/flowspy#$fod_dir#" "$fod_dir/supervisord.conf" ) set +e diff --git a/runfod-supervisord.sh b/runfod-supervisord.sh new file mode 100755 index 0000000000000000000000000000000000000000..e7dab72a5640d2a3e2b3ca243edbb5ff35776e6a --- /dev/null +++ b/runfod-supervisord.sh @@ -0,0 +1,125 @@ +#!/bin/bash + +export LC_ALL="C" # this will unfortunatelly break ./manage.py createsuperuser as locale string is literally used to derive encoding + +## + +#fod_dir="/srv/flowspy" +#venv_dir="/srv/venv" + +fod_dir="$(dirname "$0")" +venv_dir="$fod_dir/venv" + +echo "$0: ini fod_dir=$fod_dir venv_dir=$venv_dir" 1>&2 + +# + +while [ $# -gt 0 ]; do + + if [ $# -ge 1 -a "$1" = "--here" ]; then + shift 1 + fod_dir="$PWD" + venv_dir="$PWD/venv" + elif [ $# -ge 1 -a "$1" = "--base_dir" ]; then + shift 1 + base_dir="$1" + shift 1 + fod_dir="$base_dir/flowspy" + venv_dir="$base_dir/venv" + elif [ $# -ge 1 -a "$1" = "--fod_dir" ]; then + shift 1 + fod_dir="$1" + shift 1 + elif [ $# -ge 1 -a "$1" = "--venv_dir" ]; then + shift 1 + venv_dir="$1" + shift 1 + else + break + fi + +done + +## + +#. /srv/venv/bin/activate +. "$venv_dir/bin/activate" + +#if [ ! -e /srv/flowspy/pythonenv ]; then +if [ ! -e "$fod_dir/pythonenv" ]; then + #cat > /srv/flowspy/pythonenv <<EOF + cat > "$fod_dir/pythonenv" <<EOF +#!/bin/bash +. "$venv_dir/bin/activate" +exec "\$@" +EOF + #chmod +x /srv/flowspy/pythonenv + chmod +x "$fod_dir/pythonenv" +fi + +## + +cd "$(dirname "$0")" + +#if [ ! -x ./fodcli_db_is_mysql ] || ./fodcli_db_is_mysql; then +# echo "Starting DB services FoD might be depending on (depending on its config): mysql" 1>&2 +# systemctl start mysql.service +#fi + +# hook to initiallize (without any user interaction admin user and its peer data) +[ -x "$fod_dir/fodcli_insert_basic_data.sh" ] && "$fod_dir/fodcli_insert_basic_data.sh" + +#echo "starting redis" 1>&2 +#/usr/bin/redis-server & + +#echo "Starting FoD celeryd in background" 1>&2 +#celery worker -A flowspy -B --concurrency=2 --detach -l debug -f celery.log + +#echo "Starting FoD gunicorn in foreground" 1>&2 +#exec ./manage.py runserver 0.0.0.0:8000 +#exec ./manage.py runserver 0.0.0.0:8000 --nothreading +#exec gunicorn -w 1 --limit-request-fields 10000 --worker-class gevent --timeout 30 +#exec gunicorn -b 0.0.0.0:8000 flowspy.wsgi -w 1 --limit-request-fields 10000 --timeout 30 +#exec gunicorn -b 0.0.0.0:8000 flowspy.wsgi -w 1 +#exec gunicorn -b 0.0.0.0:8000 flowspy.wsgi -w 1 -k gevent --limit-request-fields 10000 --timeout 30 #--preload +#exec gunicorn -b 0.0.0.0:8000 flowspy.wsgi -w 1 -k gevent --limit-request-fields 10000 --timeout 30 + +## + +if ! which supervisord; then + echo "supervisor not installed, trying to do this" 1>&2 + if [ -f /etc/debian_version ]; then + apt-get install -qqy supervisor + else + yum install -y supervisor + fi +fi + +#useradd -m fod +( + set -x + #source /srv/venv/bin/activate + source "$venv_dir/bin/activate" + #cd /srv/flowspy && ./manage.py collectstatic --noinput + cd "$fod_dir" && ./manage.py collectstatic --noinput +) + +# needed for redis +sysctl vm.overcommit_memory=1 + +# supervisord.conf +cp -f supervisord.conf /etc + + +mkdir -p /var/run/fod /var/log/fod +chown -R fod /var/run/fod /var/log/fod +mkdir -p log/fod +mkdir -p logs +#chown fod /srv/flowspy /srv/flowspy/log /srv/flowspy/logs /srv/flowspy/log/* /srv/flowspy/logs/* /srv/flowspy/debug.log /srv/flowspy/example-data +chown fod "$fod_dir" "$fod_dir/log" "$fod_dir/logs" "$fod_dir/log/"* "$fod_dir/logs/"* "$fod_dir/debug.log" "$fod_dir/example-data" + +## + +mkdir -p /var/run/supervisor +exec /usr/bin/supervisord -n -c /etc/supervisord.conf + diff --git a/runfod.sh b/runfod.sh index 2516d34e6034e71ce6193de6f7ffcab9d9101dba..06724f96e52cdecff2b710b2a406b10df562f1df 100755 --- a/runfod.sh +++ b/runfod.sh @@ -1,15 +1,60 @@ #!/bin/bash export LC_ALL="C" # this will unfortunatelly break ./manage.py createsuperuser as locale string is literally used to derive encoding -. /srv/venv/bin/activate -if [ ! -e /srv/flowspy/pythonenv ]; then - cat > /srv/flowspy/pythonenv <<EOF +## + +#fod_dir="/srv/flowspy" +#venv_dir="/srv/venv" + +fod_dir="$(dirname "$0")" +venv_dir="$fod_dir/venv" + +echo "$0: ini fod_dir=$fod_dir venv_dir=$venv_dir" 1>&2 + +# + +while [ $# -gt 0 ]; do + + if [ $# -ge 1 -a "$1" = "--here" ]; then + shift 1 + fod_dir="$PWD" + venv_dir="$PWD/venv" + elif [ $# -ge 1 -a "$1" = "--base_dir" ]; then + shift 1 + base_dir="$1" + shift 1 + fod_dir="$base_dir/flowspy" + venv_dir="$base_dir/venv" + elif [ $# -ge 1 -a "$1" = "--fod_dir" ]; then + shift 1 + fod_dir="$1" + shift 1 + elif [ $# -ge 1 -a "$1" = "--venv_dir" ]; then + shift 1 + venv_dir="$1" + shift 1 + else + break + fi + +done + +## + +#. /srv/venv/bin/activate +. "$venv_dir/bin/activate" + +#if [ ! -e /srv/flowspy/pythonenv ]; then +if [ ! -e "$fod_dir/pythonenv" ]; then + #cat > /srv/flowspy/pythonenv <<EOF + cat > "$fod_dir/pythonenv" <<EOF #!/bin/bash -. /srv/venv/bin/activate +. "$venv_dir/bin/activate" exec "\$@" EOF - chmod +x /srv/flowspy/pythonenv + #chmod +x /srv/flowspy/pythonenv + chmod +x "$fod_dir/pythonenv" fi ## @@ -22,7 +67,7 @@ cd "$(dirname "$0")" #fi # hook to initiallize (without any user interaction admin user and its peer data) -[ -x ./fodcli_insert_basic_data.sh ] && ./fodcli_insert_basic_data.sh +[ -x "$fod_dir/fodcli_insert_basic_data.sh" ] && "$fod_dir/fodcli_insert_basic_data.sh" mkdir -p /var/run/fod diff --git a/supervisord.conf b/supervisord.conf new file mode 100644 index 0000000000000000000000000000000000000000..538daafc5f71189539f3baa011ca8664488a5273 --- /dev/null +++ b/supervisord.conf @@ -0,0 +1,143 @@ +; Sample supervisor config file. + +[unix_http_server] +file=/var/run/supervisor/supervisor.sock ; (the path to the socket file) +;chmod=0700 ; sockef file mode (default 0700) +;chown=nobody:nogroup ; socket file uid:gid owner +;username=user ; (default is no username (open server)) +;password=123 ; (default is no password (open server)) + +;[inet_http_server] ; inet (TCP) server disabled by default +;port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for all iface) +;username=user ; (default is no username (open server)) +;password=123 ; (default is no password (open server)) + +[supervisord] +logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log) +logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB) +logfile_backups=10 ; (num of main logfile rotation backups;default 10) +loglevel=info ; (log level;default info; others: debug,warn,trace) +pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid) +nodaemon=false ; (start in foreground if true;default false) +minfds=1024 ; (min. avail startup file descriptors;default 1024) +minprocs=200 ; (min. avail process descriptors;default 200) +;umask=022 ; (process file creation umask;default 022) +;user=chrism ; (default is current user, required if root) +;identifier=supervisor ; (supervisord identifier, default is 'supervisor') +;directory=/tmp ; (default is not to cd during start) +;nocleanup=true ; (don't clean up tempfiles at start;default false) +;childlogdir=/tmp ; ('AUTO' child log dir, default $TEMP) +;environment=KEY=value ; (key value pairs to add to environment) +;strip_ansi=false ; (strip ansi escape codes in logs; def. false) + +; the below section must remain in the config file for RPC +; (supervisorctl/web interface) to work, additional interfaces may be +; added by defining them in separate rpcinterface: sections +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface + +[supervisorctl] +serverurl=unix:///var/run/supervisor/supervisor.sock ; use a unix:// URL for a unix socket +;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket +;username=chris ; should be same as http_username if set +;password=123 ; should be same as http_password if set +;prompt=mysupervisor ; cmd line prompt (default "supervisor") +;history_file=~/.sc_history ; use readline history if available + +; The below sample program section shows all possible program subsection values, +; create one or more 'real' program: sections to be able to control them under +; supervisor. + +[program:celeryd] +#command=celery worker -A flowspy -B --concurrency=2 -l debug -f celery.log +#command=celery worker -A flowspy -B --concurrency=2 -l debug -f log/celery.log +command=celery worker -A flowspy -B --concurrency=2 -l debug -f logs/celery.log +directory=/srv/flowspy +user=fod + + +[program:gunicorn] +command=gunicorn -b 0.0.0.0:8000 flowspy.wsgi -w 1 -k gevent --limit-request-fields 10000 --timeout 30 +directory=/srv/flowspy +user=fod + + +[program:redis] +command=/usr/bin/redis-server ; the program (relative uses PATH, can take args) +;process_name=%(program_name)s ; process_name expr (default %(program_name)s) +;numprocs=1 ; number of processes copies to start (def 1) +;directory=/tmp ; directory to cwd to before exec (def no cwd) +;umask=022 ; umask for process (default None) +;priority=999 ; the relative start priority (default 999) +;autostart=true ; start at supervisord start (default: true) +;autorestart=true ; retstart at unexpected quit (default: true) +;startsecs=10 ; number of secs prog must stay running (def. 1) +;startretries=3 ; max # of serial start failures (default 3) +;exitcodes=0,2 ; 'expected' exit codes for process (default 0,2) +;stopsignal=QUIT ; signal used to kill process (default TERM) +;stopwaitsecs=10 ; max num secs to wait b4 SIGKILL (default 10) +;user=chrism ; setuid to this UNIX account to run the program +;redirect_stderr=true ; redirect proc stderr to stdout (default false) +;stdout_logfile=/a/path ; stdout log path, NONE for none; default AUTO +;stdout_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB) +;stdout_logfile_backups=10 ; # of stdout logfile backups (default 10) +;stdout_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0) +;stdout_events_enabled=false ; emit events on stdout writes (default false) +;stderr_logfile=/a/path ; stderr log path, NONE for none; default AUTO +;stderr_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB) +;stderr_logfile_backups=10 ; # of stderr logfile backups (default 10) +;stderr_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0) +;stderr_events_enabled=false ; emit events on stderr writes (default false) +;environment=A=1,B=2 ; process environment additions (def no adds) +;serverurl=AUTO ; override serverurl computation (childutils) + +; The below sample eventlistener section shows all possible +; eventlistener subsection values, create one or more 'real' +; eventlistener: sections to be able to handle event notifications +; sent by supervisor. + +;[eventlistener:theeventlistenername] +;command=/bin/eventlistener ; the program (relative uses PATH, can take args) +;process_name=%(program_name)s ; process_name expr (default %(program_name)s) +;numprocs=1 ; number of processes copies to start (def 1) +;events=EVENT ; event notif. types to subscribe to (req'd) +;buffer_size=10 ; event buffer queue size (default 10) +;directory=/tmp ; directory to cwd to before exec (def no cwd) +;umask=022 ; umask for process (default None) +;priority=-1 ; the relative start priority (default -1) +;autostart=true ; start at supervisord start (default: true) +;autorestart=unexpected ; restart at unexpected quit (default: unexpected) +;startsecs=10 ; number of secs prog must stay running (def. 1) +;startretries=3 ; max # of serial start failures (default 3) +;exitcodes=0,2 ; 'expected' exit codes for process (default 0,2) +;stopsignal=QUIT ; signal used to kill process (default TERM) +;stopwaitsecs=10 ; max num secs to wait b4 SIGKILL (default 10) +;user=chrism ; setuid to this UNIX account to run the program +;redirect_stderr=true ; redirect proc stderr to stdout (default false) +;stdout_logfile=/a/path ; stdout log path, NONE for none; default AUTO +;stdout_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB) +;stdout_logfile_backups=10 ; # of stdout logfile backups (default 10) +;stdout_events_enabled=false ; emit events on stdout writes (default false) +;stderr_logfile=/a/path ; stderr log path, NONE for none; default AUTO +;stderr_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB) +;stderr_logfile_backups ; # of stderr logfile backups (default 10) +;stderr_events_enabled=false ; emit events on stderr writes (default false) +;environment=A=1,B=2 ; process environment additions +;serverurl=AUTO ; override serverurl computation (childutils) + +; The below sample group section shows all possible group values, +; create one or more 'real' group: sections to create "heterogeneous" +; process groups. + +;[group:thegroupname] +;programs=progname1,progname2 ; each refers to 'x' in [program:x] definitions +;priority=999 ; the relative start priority (default 999) + +; The [include] section can just contain the "files" setting. This +; setting can list multiple files (separated by whitespace or +; newlines). It can also contain wildcards. The filenames are +; interpreted as relative to this file. Included files *cannot* +; include files themselves. + +[include] +files = supervisord.d/*.ini