Fixes on create and deploy container script
This commit is contained in:
parent
5d6367f794
commit
242d0825c8
|
@ -40,10 +40,14 @@ If you are planing to do some development or perhaps just checking out this proj
|
|||
https://raw.github.com/glic3rinu/django-orchestra/master/scripts/container/create.sh
|
||||
sudo bash /tmp/create.sh
|
||||
sudo lxc-start -n orchestra
|
||||
# root/root
|
||||
```
|
||||
|
||||
2. Deploy Django-orchestra development environment inside the container
|
||||
2. Deploy Django-orchestra development environment **inside the container**
|
||||
```bash
|
||||
# Make sure your container is connected to the Internet
|
||||
# Probably you will have to configure the NAT first:
|
||||
# sudo iptables -t nat -A POSTROUTING -s `container_ip` -j MASQUERADE
|
||||
wget -O /tmp/deploy.sh \
|
||||
https://raw.github.com/glic3rinu/django-orchestra/master/scripts/container/deploy.sh
|
||||
cd /tmp/ # Moving away from /root before running deploy.sh
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -u
|
||||
set -e
|
||||
|
||||
bold=$(tput bold)
|
||||
normal=$(tput sgr0)
|
||||
|
||||
|
||||
PYTHON_BIN='python3'
|
||||
|
||||
function help () {
|
||||
if [[ $# -gt 1 ]]; then
|
||||
CMD="print_${2}_help"
|
||||
|
@ -71,11 +74,11 @@ export -f check_root
|
|||
|
||||
|
||||
get_orchestra_dir () {
|
||||
if ! $(echo "import orchestra"|python 2> /dev/null); then
|
||||
echo -e "\nErr. orchestra not installed.\n" >&2
|
||||
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)
|
||||
PATH=$(echo "import orchestra, os; print(os.path.dirname(os.path.realpath(orchestra.__file__)))" | $PYTHON_BIN)
|
||||
echo $PATH
|
||||
}
|
||||
export -f get_orchestra_dir
|
||||
|
@ -116,20 +119,19 @@ function install_requirements () {
|
|||
unset OPTIND
|
||||
unset opt
|
||||
|
||||
check_root
|
||||
ORCHESTRA_PATH=$(get_orchestra_dir)
|
||||
check_root || true
|
||||
ORCHESTRA_PATH=$(get_orchestra_dir) || true
|
||||
|
||||
APT="python3 \
|
||||
python3-pip \
|
||||
python3-psycopg2 \
|
||||
python3-lxml \
|
||||
postgresql \
|
||||
rabbitmq-server \
|
||||
python3-dev \
|
||||
bind9utils \
|
||||
python3-cracklib \
|
||||
libz-dev \
|
||||
libxml2-dev \
|
||||
libxslt1-dev \
|
||||
wkhtmltopdf \
|
||||
xvfb \
|
||||
ca-certificates \
|
||||
|
@ -154,8 +156,7 @@ function install_requirements () {
|
|||
django-filter==0.9.2 \
|
||||
passlib==1.6.2 \
|
||||
jsonfield==0.9.22 \
|
||||
lxml==3.3.5 \
|
||||
python-dateutil==2.2 \
|
||||
python-dateutil==2.4.2 \
|
||||
django-iban==0.3.0 \
|
||||
requests \
|
||||
phonenumbers \
|
||||
|
@ -166,20 +167,18 @@ function install_requirements () {
|
|||
if $testing; then
|
||||
APT="${APT} \
|
||||
iceweasel \
|
||||
dnsutils \
|
||||
python3-mysqldb"
|
||||
dnsutils"
|
||||
PIP="${PIP} \
|
||||
selenium \
|
||||
xvfbwrapper \
|
||||
freezegun \
|
||||
coverage \
|
||||
flake8 \
|
||||
orchestra-orm==dev \
|
||||
django-debug-toolbar==1.3.0 \
|
||||
https://github.com/django-nose/django-nose/archive/master.zip \
|
||||
sqlparse \
|
||||
pyinotify \
|
||||
--allow-external orchestra-orm --allow-unverified orchestra-orm"
|
||||
PyMySQL"
|
||||
fi
|
||||
|
||||
# Make sure locales are in place before installing postgres
|
||||
|
@ -215,12 +214,6 @@ function install_requirements () {
|
|||
| xargs sed -i "s/${IMPORT}, SortedDict/${IMPORT}\n ${COLLECTIONS}/"
|
||||
ls /usr/local/lib/python*/dist-packages/passlib/ext/django/utils.py \
|
||||
| xargs sed -i "s/SortedDict/OrderedDict/g"
|
||||
|
||||
# Patch dateutil
|
||||
sed -i "s/elif not isinstance(dt2, datetime.datetime):/else:/" \
|
||||
/usr/local/lib/python2.7/dist-packages/dateutil/relativedelta.py
|
||||
sed -i "s/if not type(dt1) == type(dt2): #isinstance(dt1, type(dt2)):/if not isinstance(dt2, type(dt1)):/" \
|
||||
/usr/local/lib/python2.7/dist-packages/dateutil/relativedelta.py
|
||||
}
|
||||
export -f install_requirements
|
||||
|
||||
|
@ -286,189 +279,5 @@ function startproject () {
|
|||
export -f startproject
|
||||
|
||||
|
||||
function print_install_certificate_help () {
|
||||
cat <<- EOF
|
||||
|
||||
${bold}NAME${normal}
|
||||
${bold}orchetsra-admin install_certificate${normal} - Installs a valid all-purpose self signed certificate that is valid for the next ten years
|
||||
|
||||
${bold}OPTIONS${normal}
|
||||
${bold}-h, --help${normal}
|
||||
Displays this help text
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
|
||||
function install_certificate () {
|
||||
opts=$(getopt -o h -l help -- "$@") || exit 1
|
||||
set -- $opts
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
case $1 in
|
||||
-h|--help) print_deploy_help; exit 0 ;;
|
||||
(--) shift; break;;
|
||||
(-*) echo "$0: Err. - unrecognized option $1" 1>&2; exit 1;;
|
||||
(*) break;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
unset OPTIND
|
||||
unset opt
|
||||
|
||||
check_root
|
||||
run openssl req -new -x509 -days 3650 -nodes -newkey rsa:4096 -out /etc/ssl/certs/mailserver.pem -keyout /etc/ssl/private/mailserver.pem
|
||||
run chmod go= /etc/ssl/private/mailserver.pem
|
||||
}
|
||||
export -f install_certificate
|
||||
|
||||
|
||||
function print_uninstall_certificate_help () {
|
||||
cat <<- EOF
|
||||
|
||||
${bold}NAME${normal}
|
||||
${bold}orchetsra-admin uninstall_certificate${normal} - Remove self signed certificate
|
||||
|
||||
${bold}OPTIONS${normal}
|
||||
${bold}-h, --help${normal}
|
||||
Displays this help text
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
function uninstall_certificate () {
|
||||
opts=$(getopt -o h -l help -- "$@") || exit 1
|
||||
set -- $opts
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
case $1 in
|
||||
-h|--help) print_deploy_help; exit 0 ;;
|
||||
(--) shift; break;;
|
||||
(-*) echo "$0: Err. - unrecognized option $1" 1>&2; exit 1;;
|
||||
(*) break;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
unset OPTIND
|
||||
unset opt
|
||||
|
||||
check_root
|
||||
run rm -f /etc/ssl/private/mailserver.pem
|
||||
}
|
||||
export -f uninstall_certificate
|
||||
|
||||
|
||||
function print_install_postfix_help () {
|
||||
cat <<- EOF
|
||||
|
||||
${bold}NAME${normal}
|
||||
${bold}orchetsra-admin install_postfix${normal} - Installs postfix server and its dependencies (dovecot, amavis, spamassassin and clamav) using apt-get. Also it generates a valid all-purpose certificate self signed that is valid for the next ten years.
|
||||
|
||||
${bold}OPTIONS${normal}
|
||||
${bold}-h, --help${normal}
|
||||
Displays this help text
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
|
||||
function install_postfix () {
|
||||
opts=$(getopt -o h -l help -- "$@") || exit 1
|
||||
set -- $opts
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
case $1 in
|
||||
-h|--help) print_deploy_help; exit 0 ;;
|
||||
(--) shift; break;;
|
||||
(-*) echo "$0: Err. - unrecognized option $1" 1>&2; exit 1;;
|
||||
(*) break;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
unset OPTIND
|
||||
unset opt
|
||||
|
||||
check_root
|
||||
ORCHESTRA_PATH=$(get_orchestra_dir)
|
||||
|
||||
APT="postfix postfix-pgsql \
|
||||
swaks \
|
||||
dovecot-core dovecot-pop3d dovecot-imapd dovecot-antispam \
|
||||
dovecot-pgsql dovecot-sieve dovecot-managesieved dovecot-solr \
|
||||
amavisd-new spamassassin \
|
||||
clamav-freshclam clamav-base clamav clamav-daemon clamav-testfiles \
|
||||
"
|
||||
run apt-get update
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
run apt-get install -y $APT
|
||||
unset $DEBIAN_FRONTEND;
|
||||
run /usr/bin/freshclam
|
||||
run apt-get --purge remove 'exim4*' -y
|
||||
if [ ! -f /etc/ssl/private/mailserver.pem ]; then
|
||||
install_certificate
|
||||
fi;
|
||||
}
|
||||
export -f install_postfix
|
||||
|
||||
|
||||
function print_uninstall_postfix_help () {
|
||||
cat <<- EOF
|
||||
|
||||
${bold}NAME${normal}
|
||||
${bold}orchetsra-admin uninstall_postfix${normal} - Uninstalls postfix server and its dependencies (dovecot, amavis, spamassassin and clamav) using dpkg and remove self signed certificate
|
||||
|
||||
${bold}OPTIONS${normal}
|
||||
${bold}-h, --help${normal}
|
||||
Displays this help text
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
|
||||
function uninstall_postfix () {
|
||||
opts=$(getopt -o h -l help -- "$@") || exit 1
|
||||
set -- $opts
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
case $1 in
|
||||
-h|--help) print_deploy_help; exit 0 ;;
|
||||
(--) shift; break;;
|
||||
(-*) echo "$0: Err. - unrecognized option $1" 1>&2; exit 1;;
|
||||
(*) break;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
unset OPTIND
|
||||
unset opt
|
||||
|
||||
check_root
|
||||
ORCHESTRA_PATH=$(get_orchestra_dir)
|
||||
|
||||
APT="postfix postfix-pgsql \
|
||||
swaks \
|
||||
dovecot-core dovecot-pop3d dovecot-imapd dovecot-antispam \
|
||||
dovecot-pgsql dovecot-sieve dovecot-managesieved dovecot-solr \
|
||||
amavisd-new spamassassin \
|
||||
clamav-freshclam clamav-base clamav clamav-daemon libclamav6 clamav-testfiles \
|
||||
"
|
||||
run dpkg -P --force-depends $APT
|
||||
run apt-get update
|
||||
run apt-get -f install -y
|
||||
|
||||
if [ -d /var/run/amavis ]; then
|
||||
run rm -rf /var/run/amavis
|
||||
fi;
|
||||
|
||||
if [ -d /var/lib/clamav ]; then
|
||||
run rm -rf /var/lib/clamav
|
||||
fi;
|
||||
|
||||
if [ -f /etc/ssl/private/mailserver.pem ]; then
|
||||
uninstall_certificate
|
||||
fi;
|
||||
}
|
||||
export -f uninstall_postfix
|
||||
|
||||
|
||||
[ $# -lt 1 ] && print_help
|
||||
$1 "${@}"
|
||||
|
|
|
@ -8,9 +8,9 @@ from django.conf import settings
|
|||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
# dependencies = [
|
||||
# migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
# ]
|
||||
dependencies = [
|
||||
('orders', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
|
|
|
@ -22,19 +22,26 @@ lxc-create -h &> /dev/null || {
|
|||
exit 1
|
||||
}
|
||||
|
||||
lxc-ls | grep -E "(^|\s)$NAME($|\s)" && {
|
||||
echo -e "\nErr. Container with name $NAME already exists."
|
||||
echo -e " You can destroy it by: sudo lxc-destroy -n $NAME\n" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
lxc-create -n $NAME -t debian
|
||||
|
||||
trap "umount $CONTAINER/{dev,sys}; exit 1;" INT TERM EXIT
|
||||
mount --bind /dev $CONTAINER/dev
|
||||
mount -t sysfs none $CONTAINER/sys
|
||||
trap "umount $CONTAINER/{dev,sys}; exit 1;"INT TERM EXIT
|
||||
|
||||
|
||||
|
||||
sed -i "s/\tlocalhost$/\tlocalhost $NAME/" $CONTAINER/etc/hosts
|
||||
sed -i "s/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/" $CONTAINER/etc/locale.gen
|
||||
chroot $CONTAINER locale-gen
|
||||
|
||||
|
||||
chroot $CONTAINER apt-get update
|
||||
chroot $CONTAINER apt-get install -y --force-yes \
|
||||
nano git screen sudo iputils-ping python3 python3-pip wget curl dnsutils rsyslog
|
||||
|
||||
|
|
|
@ -4,8 +4,9 @@
|
|||
|
||||
# This script is safe to run several times, for example in order to upgrade your deployment
|
||||
|
||||
|
||||
set -u
|
||||
set -e
|
||||
|
||||
bold=$(tput bold)
|
||||
normal=$(tput sgr0)
|
||||
|
||||
|
@ -20,7 +21,7 @@ PASSWORD='orchestra'
|
|||
HOME="/home/$USER"
|
||||
PROJECT_NAME='panel'
|
||||
BASE_DIR="$HOME/$PROJECT_NAME"
|
||||
|
||||
PYTHON_BIN="python3"
|
||||
|
||||
surun () {
|
||||
echo " ${bold}\$ su $USER -c \"${@}\"${normal}"
|
||||
|
@ -34,20 +35,20 @@ run () {
|
|||
|
||||
|
||||
# Create a system user for running Orchestra
|
||||
useradd orchestra -s "/bin/bash"
|
||||
useradd $USER -s "/bin/bash" || true
|
||||
echo "$USER:$PASSWORD" | chpasswd
|
||||
mkdir $HOME
|
||||
mkdir -p $HOME
|
||||
chown $USER.$USER $HOME
|
||||
run adduser $USER sudo
|
||||
groups $USER | grep -E "(^|\s)$USER($|\s)" > /dev/null || run adduser $USER sudo
|
||||
|
||||
|
||||
CURRENT_VERSION=$(python3 -c "from orchestra import get_version; print get_version();" 2> /dev/null || false)
|
||||
|
||||
CURRENT_VERSION=$($PYTHON_BIN -c "from orchestra import get_version; print(get_version());" 2> /dev/null || false) || true
|
||||
if [[ ! $CURRENT_VERSION ]]; then
|
||||
# First Orchestra installation
|
||||
run "apt-get -y install git python3-pip"
|
||||
surun "git clone https://github.com/glic3rinu/django-orchestra.git ~/django-orchestra"
|
||||
echo $HOME/django-orchestra/ | sudo tee /usr/local/lib/python3*/dist-packages/orchestra.pth
|
||||
surun "git clone https://github.com/glic3rinu/django-orchestra.git ~/django-orchestra" || surun "export GIT_DIR=~/django-orchestra/.git; git pull"
|
||||
PYTHON_PATH=$($PYTHON_BIN -c "import sys; print([path for path in sys.path if path.startswith('/usr/local/lib/python')][0]);")
|
||||
echo $HOME/django-orchestra/ | sudo tee "$PYTHON_PATH/orchestra.pth"
|
||||
run "cp $HOME/django-orchestra/orchestra/bin/orchestra-admin /usr/local/bin/"
|
||||
fi
|
||||
|
||||
|
@ -64,40 +65,36 @@ MANAGE="$BASE_DIR/manage.py"
|
|||
if [[ ! $(sudo su postgres -c "psql -lqt" | awk {'print $1'} | grep '^orchestra$') ]]; then
|
||||
# orchestra database does not esists
|
||||
# Speeding up tests, don't do this in production!
|
||||
POSTGRES_VERSION=$(psql --version | head -n1 | awk {'print $3'} | sed -r "s/(^[0-9\.]*).*/\1/")
|
||||
. /usr/share/postgresql-common/init.d-functions
|
||||
POSTGRES_VERSION=$(psql --version | head -n1 | sed -r "s/^.*\s([0-9]+\.[0-9]+).*/\1/")
|
||||
sed -i "s/^#fsync =\s*.*/fsync = off/" \
|
||||
/etc/postgresql/${POSTGRES_VERSION}/main/postgresql.conf
|
||||
sed -i "s/^#full_page_writes =\s*.*/full_page_writes = off/" \
|
||||
/etc/postgresql/${POSTGRES_VERSION}/main/postgresql.conf
|
||||
|
||||
run "service postgresql restart"
|
||||
run "python3 $MANAGE setuppostgres --db_name orchestra --db_user orchestra --db_password orchestra"
|
||||
run "$PYTHON_BIN $MANAGE setuppostgres --db_name orchestra --db_user orchestra --db_password orchestra"
|
||||
# Create database permissions are needed for running tests
|
||||
sudo su postgres -c 'psql -c "ALTER USER orchestra CREATEDB;"'
|
||||
fi
|
||||
|
||||
if [[ $CURRENT_VERSION ]]; then
|
||||
# Per version upgrade specific operations
|
||||
run "python3 $MANAGE postupgradeorchestra --no-restart --from $CURRENT_VERSION"
|
||||
else
|
||||
run "python3 $MANAGE syncdb --noinput"
|
||||
run "python3 $MANAGE migrate --noinput"
|
||||
fi
|
||||
run "$PYTHON_BIN $MANAGE syncdb --noinput"
|
||||
run "$PYTHON_BIN $MANAGE migrate --noinput"
|
||||
|
||||
sudo python $MANAGE setupcelery --username $USER --processes 2
|
||||
|
||||
# Install and configure Nginx web server
|
||||
surun "mkdir $BASE_DIR/static"
|
||||
surun "python3 $MANAGE collectstatic --noinput"
|
||||
surun "mkdir -p $BASE_DIR/static"
|
||||
surun "$PYTHON_BIN $MANAGE collectstatic --noinput"
|
||||
run "apt-get install -y nginx uwsgi uwsgi-plugin-python3"
|
||||
run "python3 $MANAGE setupnginx"
|
||||
run "$PYTHON_BIN $MANAGE setupnginx"
|
||||
run "service nginx start"
|
||||
|
||||
# Apply changes
|
||||
run "python3 $MANAGE restartservices"
|
||||
run "$PYTHON_BIN $MANAGE restartservices"
|
||||
|
||||
# Create a orchestra user
|
||||
cat <<- EOF | python3 $MANAGE shell
|
||||
cat <<- EOF | $PYTHON_BIN $MANAGE shell
|
||||
from orchestra.apps.accounts.models import Account
|
||||
if not Account.objects.filter(username="$USER").exists():
|
||||
print 'Creating orchestra superuser'
|
||||
|
|
Loading…
Reference in a new issue