modify Docker
This commit is contained in:
parent
e6e434f525
commit
f0fadf8bba
|
@ -11,7 +11,7 @@ If you are planing to do some development you may want to consider doing it unde
|
|||
|
||||
2. Build a new image, create and start a container
|
||||
```bash
|
||||
curl -L http://git.io/orchestra-Dockerfile > /tmp/Dockerfile
|
||||
curl -L https://raw.githubusercontent.com/ribaguifi/django-orchestra/docker/scripts/containers/Dockerfile > /tmp/Dockerfile
|
||||
docker build -t orchestra /tmp/
|
||||
docker create --name orchestra -i -t -u orchestra -w /home/orchestra orchestra bash
|
||||
docker start orchestra
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
FROM debian:latest
|
||||
FROM debian:9-slim
|
||||
|
||||
RUN apt-get -y update && apt-get install -y curl sudo
|
||||
|
||||
RUN export TERM=xterm; curl -L http://git.io/orchestra-admin | bash -s install_requirements
|
||||
RUN export TERM=urxvt; curl -L http://git.io/orchestra-admin | bash -s install_requirements
|
||||
|
||||
RUN apt-get clean
|
||||
|
||||
|
|
247
scripts/containers/orchestra-admin
Normal file
247
scripts/containers/orchestra-admin
Normal file
|
@ -0,0 +1,247 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -u
|
||||
set -e
|
||||
|
||||
bold=$(tput -T ${TERM:-xterm} bold)
|
||||
normal=$(tput -T ${TERM:-xterm} sgr0)
|
||||
|
||||
|
||||
PYTHON_BIN='python3'
|
||||
|
||||
function help () {
|
||||
if [[ $# -gt 1 ]]; then
|
||||
CMD="print_${2}_help"
|
||||
$CMD
|
||||
else
|
||||
print_help
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
function print_help () {
|
||||
cat <<- EOF
|
||||
|
||||
${bold}NAME${normal}
|
||||
${bold}orchestra-admin${normal} - Orchetsra administration script
|
||||
|
||||
${bold}OPTIONS${normal}
|
||||
${bold}install_requirements${normal}
|
||||
Installs Orchestra requirements using apt-get and pip
|
||||
|
||||
${bold}startproject${normal}
|
||||
Creates a new Django-orchestra instance
|
||||
|
||||
${bold}help${normal}
|
||||
Displays this help text or related help page as argument
|
||||
for example:
|
||||
${bold}orchestra-admin help startproject${normal}
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
|
||||
show () {
|
||||
echo " ${bold}\$ ${@}${normal}"
|
||||
}
|
||||
export -f show
|
||||
|
||||
|
||||
run () {
|
||||
show "${@}"
|
||||
"${@}"
|
||||
}
|
||||
export -f run
|
||||
|
||||
|
||||
check_root () {
|
||||
[ $(whoami) != 'root' ] && { echo -e "\nErr. This should be run as root\n" >&2; exit 1; }
|
||||
}
|
||||
export -f check_root
|
||||
|
||||
|
||||
get_orchestra_dir () {
|
||||
if ! $(echo "import orchestra" | $PYTHON_BIN 2> /dev/null); then
|
||||
echo -e "\norchestra not installed.\n" >&2
|
||||
exit 1
|
||||
fi
|
||||
PATH=$(echo "import orchestra, os; print(os.path.dirname(os.path.realpath(orchestra.__file__)))" | $PYTHON_BIN)
|
||||
echo $PATH
|
||||
}
|
||||
export -f get_orchestra_dir
|
||||
|
||||
|
||||
function print_install_requirements_help () {
|
||||
cat <<- EOF
|
||||
|
||||
${bold}NAME${normal}
|
||||
${bold}orchetsra-admin install_requirements${normal} - Installs all Orchestra requirements using apt-get and pip
|
||||
|
||||
${bold}OPTIONS${normal}
|
||||
${bold}-t, --testing${normal}
|
||||
Install Orchestra normal requirements plus those needed for running functional tests
|
||||
|
||||
${bold}-h, --help${normal}
|
||||
Displays this help text
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
|
||||
function install_requirements () {
|
||||
opts=$(getopt -o h,t -l help,testing -- "$@") || exit 1
|
||||
set -- $opts
|
||||
testing=false
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
case $1 in
|
||||
-h|--help) print_deploy_help; exit 0 ;;
|
||||
-t|--testing) testing=true; shift ;;
|
||||
(--) shift; break;;
|
||||
(-*) echo "$0: Err. - unrecognized option $1" 1>&2; exit 1;;
|
||||
(*) break;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
unset OPTIND
|
||||
unset opt
|
||||
|
||||
check_root || true
|
||||
ORCHESTRA_PATH=$(get_orchestra_dir) || true
|
||||
|
||||
# Make sure locales are in place before installing postgres
|
||||
if [[ $({ perl --help > /dev/null; } 2>&1|grep 'locale failed') ]]; then
|
||||
run sed -i "s/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/" /etc/locale.gen
|
||||
run locale-gen
|
||||
update-locale LANG=en_US.UTF-8
|
||||
fi
|
||||
|
||||
# lxml: libxml2-dev, libxslt1-dev, zlib1g-dev
|
||||
APT="bind9utils \
|
||||
ca-certificates \
|
||||
gettext \
|
||||
libcrack2-dev \
|
||||
libxml2-dev \
|
||||
libxslt1-dev \
|
||||
python3 \
|
||||
python3-pip \
|
||||
python3-dev \
|
||||
ssh-client \
|
||||
wget \
|
||||
xvfb \
|
||||
zlib1g-dev"
|
||||
if $testing; then
|
||||
APT="${APT} \
|
||||
git \
|
||||
iceweasel \
|
||||
dnsutils"
|
||||
fi
|
||||
|
||||
run apt-get update
|
||||
run apt-get install -y $APT
|
||||
|
||||
# Install ca certificates before executing pip install
|
||||
if [[ ! -e /usr/local/share/ca-certificates/cacert.org ]]; then
|
||||
mkdir -p /usr/local/share/ca-certificates/cacert.org
|
||||
wget -P /usr/local/share/ca-certificates/cacert.org \
|
||||
http://www.cacert.org/certs/root.crt \
|
||||
http://www.cacert.org/certs/class3.crt
|
||||
update-ca-certificates
|
||||
fi
|
||||
|
||||
# cracklib and lxml are excluded on the requirements.txt because they need unconvinient system dependencies
|
||||
PIP="$(wget http://git.io/orchestra-requirements.txt -O - | tr '\n' ' ') \
|
||||
cracklib \
|
||||
lxml==3.3.5"
|
||||
if $testing; then
|
||||
PIP="${PIP} \
|
||||
selenium \
|
||||
xvfbwrapper \
|
||||
freezegun \
|
||||
coverage \
|
||||
flake8 \
|
||||
django-debug-toolbar==1.3.0 \
|
||||
django-nose==1.4.4 \
|
||||
sqlparse \
|
||||
pyinotify \
|
||||
PyMySQL"
|
||||
fi
|
||||
|
||||
run pip3 install $PIP
|
||||
|
||||
# Install a more recent version of wkhtmltopdf (0.12.2) (PDF page number support)
|
||||
wkhtmltox_version=$(dpkg --list | grep wkhtmltox | awk {'print $3'})
|
||||
minor=$(echo -e "$wkhtmltox_version\n0.12.2.1" | sort -V | head -n 1)
|
||||
if [[ ! $wkhtmltox_version ]] || [[ $wkhtmltox_version != 0.12.2.1 && $minor == ${wkhtmltox_version} ]]; then
|
||||
wkhtmltox=$(mktemp)
|
||||
wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.stretch_amd64.deb -O ${wkhtmltox}
|
||||
#wget http://download.gna.org/wkhtmltopdf/0.12/0.12.2.1/wkhtmltox-0.12.2.1_linux-jessie-amd64.deb -O ${wkhtmltox}
|
||||
dpkg -i ${wkhtmltox} || { echo "Installing missing dependencies for wkhtmltox..." && apt-get -f -y install; }
|
||||
fi
|
||||
}
|
||||
export -f install_requirements
|
||||
|
||||
|
||||
print_startproject_help () {
|
||||
cat <<- EOF
|
||||
|
||||
${bold}NAME${normal}
|
||||
${bold}orchestra-admin startproject${normal} - Create a new Django-Orchestra instance
|
||||
|
||||
${bold}SYNOPSIS${normal}
|
||||
Options: [ -h ]
|
||||
|
||||
${bold}OPTIONS${normal}
|
||||
${bold}-h, --help${normal}
|
||||
This help message
|
||||
|
||||
${bold}EXAMPLES${normal}
|
||||
orchestra-admin startproject controlpanel
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
|
||||
function startproject () {
|
||||
local PROJECT_NAME="$2"; shift
|
||||
|
||||
opts=$(getopt -o h -l help -- "$@") || exit 1
|
||||
set -- $opts
|
||||
|
||||
set -- $opts
|
||||
while [ $# -gt 0 ]; do
|
||||
case $1 in
|
||||
-h|--help) print_startproject_help; exit 0 ;;
|
||||
(--) shift; break;;
|
||||
(-*) echo "$0: Err. - unrecognized option $1" 1>&2; exit 1;;
|
||||
(*) break;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
unset OPTIND
|
||||
unset opt
|
||||
|
||||
[ $(whoami) == 'root' ] && { echo -e "\nYou don't want to run this as root\n" >&2; exit 1; }
|
||||
ORCHESTRA_PATH=$(get_orchestra_dir) || { echo "Error getting orchestra dir"; exit 1; }
|
||||
if [[ ! -e $PROJECT_NAME/manage.py ]]; then
|
||||
run django-admin.py startproject $PROJECT_NAME --template="${ORCHESTRA_PATH}/conf/project_template"
|
||||
# This is a workaround for this issue https://github.com/pypa/pip/issues/317
|
||||
run chmod +x $PROJECT_NAME/manage.py
|
||||
# End of workaround ###
|
||||
else
|
||||
echo "Not cloning: $PROJECT_NAME already exists."
|
||||
fi
|
||||
# Install bash autocompletition for django commands
|
||||
if [[ ! $(grep 'source $HOME/.django_bash_completion.sh' ~/.bashrc &> /dev/null) ]]; then
|
||||
# run wget https://raw.github.com/django/django/master/extras/django_bash_completion \
|
||||
# --no-check-certificate -O ~/.django_bash_completion.sh
|
||||
cp ${ORCHESTRA_PATH}/bin/django_bash_completion.sh ~/.django_bash_completion.sh
|
||||
echo 'source $HOME/.django_bash_completion.sh' >> ~/.bashrc
|
||||
fi
|
||||
}
|
||||
export -f startproject
|
||||
|
||||
|
||||
[ $# -lt 1 ] && { print_help; exit 1; }
|
||||
$1 "${@}"
|
Loading…
Reference in a new issue