mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-11-10 17:36:33 +08:00
327 lines
No EOL
11 KiB
Bash
327 lines
No EOL
11 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
|
|
###################################
|
|
# VARIABLES
|
|
###################################
|
|
IMAGE_NAME="railsdocker_web"
|
|
PG_IMAGE_NAME="postgres:9.4"
|
|
WEB_CONTAINER="web"
|
|
DB_CONTAINER="db"
|
|
DBDATA_CONTAINER="dbdata"
|
|
WIN_HOST_RAILS_WS=$PWD
|
|
WIN_HOST_DB_TEST="$PWD/db/test.dump"
|
|
WIN_HOST_DB_DEV="$PWD/db/development.dump"
|
|
CONTAINER_MOUNT_WS="//tmp//app"
|
|
CONTAINER_RAILS_WS_PARENT="//usr//src//"
|
|
CONTAINER_RAILS_WS="//usr//src//app"
|
|
PORT=3000
|
|
###################################
|
|
|
|
|
|
# Show help etc.
|
|
PROCEED=0
|
|
if [ $# -eq 0 ]; then
|
|
echo "Invalid arguments. Call '$FILENAME help' for more info."
|
|
elif [ $1 == "help" ]; then
|
|
echo "Usage: $FILENAME COMMAND/S"
|
|
echo ""
|
|
echo "Windows Boot2Docker helper script. If starting from scratch, the following order of commands should be used to get you started: docker, setup, build."
|
|
echo ""
|
|
echo "Commands:"
|
|
echo " $FILENAME help Prints out the help contents"
|
|
echo ""
|
|
echo " $FILENAME bash Starts the bash console on host computer with Docker environment configured"
|
|
echo ""
|
|
echo " $FILENAME docker Creates the Docker image from the Dockerfile"
|
|
echo ""
|
|
echo " $FILENAME data Initializes the data persistent container"
|
|
echo ""
|
|
echo " $FILENAME run Starts the Rails server in the configured Docker container"
|
|
echo ""
|
|
echo " $FILENAME cli Starts the bash console in the configured Docker container"
|
|
echo " (with unison syncing which means a bit slower startup, but faster command execution)"
|
|
echo ""
|
|
echo " $FILENAME cli active Connects to the bash console in the already running Docker container"
|
|
echo ""
|
|
echo " $FILENAME cli nosync Starts the bash console in the configured Docker container"
|
|
echo " (without database container running)"
|
|
echo " (without Unison syncing, fast startup but horrendously slow command execution)"
|
|
echo ""
|
|
echo " $FILENAME cli nodb Starts the bash console in the configured Docker container"
|
|
echo " (without database container running)"
|
|
echo " (with unison syncing which means a bit slower startup, but faster command execution)"
|
|
echo ""
|
|
echo " $FILENAME db-cli Starts the bash console in the configured database Docker container"
|
|
echo ""
|
|
echo " $FILENAME db-cli active Connects to the bash console in the already running database Docker container"
|
|
echo ""
|
|
echo " $FILENAME psql Connects to the database of the running database Docker container"
|
|
echo ""
|
|
echo " $FILENAME pgdump Dumps the database contents of the running database Docker container into dump files on the host"
|
|
echo ""
|
|
echo " $FILENAME pgrestore Restores the database contents of the dump files on host into the Docker container"
|
|
echo ""
|
|
echo " $FILENAME clean Removes the Docker image (this will also remove the downloaded packages)"
|
|
echo ""
|
|
echo " $FILENAME cclean Removes all the stopped Docker containers (cleans up some disk space)"
|
|
else
|
|
PROCEED=1
|
|
fi
|
|
|
|
# Only continue if not help...
|
|
if [ $PROCEED -eq 1 ]; then
|
|
cd "$B2D_HOME"
|
|
|
|
# Copy of Boot2Docker start.sh from here on
|
|
|
|
# clear the MSYS MOTD
|
|
|
|
cd "$(dirname "$BASH_SOURCE")"
|
|
|
|
ISO="$HOME/.boot2docker/boot2docker.iso"
|
|
|
|
if [ ! -e "$ISO" ]; then
|
|
echo 'copying initial boot2docker.iso (run "boot2docker.exe download" to update)'
|
|
mkdir -p "$(dirname "$ISO")"
|
|
cp ./boot2docker.iso "$ISO"
|
|
fi
|
|
|
|
echo 'initializing...'
|
|
./boot2docker.exe init
|
|
echo
|
|
|
|
echo 'starting...'
|
|
./boot2docker.exe start
|
|
echo
|
|
|
|
echo 'IP address of docker VM:'
|
|
./boot2docker.exe ip
|
|
B2D_IP="$(./boot2docker.exe ip)"
|
|
echo
|
|
|
|
echo 'setting environment variables ...'
|
|
./boot2docker.exe shellinit | sed 's,\\,\\\\,g' # eval swallows single backslashes in windows style path
|
|
eval "$(./boot2docker.exe shellinit 2>/dev/null | sed 's,\\,\\\\,g')"
|
|
echo
|
|
|
|
# Modification of original code
|
|
cd "$VBOX_HOME"
|
|
echo "$VBOX_HOME"
|
|
set +e
|
|
"$VBOX_HOME/"VBoxManage controlvm boot2docker-vm natpf1 delete "rails-server"
|
|
set -e
|
|
"$VBOX_HOME/"VBoxManage controlvm boot2docker-vm natpf1 "rails-server,tcp,127.0.0.1,$PORT,,$PORT"
|
|
cd "$B2D_HOME"
|
|
|
|
echo 'You can now use `docker` directly, or `boot2docker ssh` to log into the VM.'
|
|
|
|
|
|
# End of copy Boot2Docker start.sh
|
|
|
|
if [ $1 == "bash" ]; then
|
|
exec "$BASH" --login -i
|
|
elif [ $1 == "docker" ]; then
|
|
exec "$BASH" --login -i -c "\
|
|
cd $WIN_HOST_RAILS_WS\
|
|
;docker pull $PG_IMAGE_NAME\
|
|
;docker build -t $IMAGE_NAME .\
|
|
;docker rm $WEB_CONTAINER\
|
|
;docker rm $DB_CONTAINER"
|
|
elif [ $1 == "data" ]; then
|
|
exec "$BASH" --login -i -c "\
|
|
docker create \
|
|
-v //var//lib//postgres \
|
|
--name $DBDATA_CONTAINER \
|
|
$PG_IMAGE_NAME \
|
|
//bin//true"
|
|
elif [ $1 == "run" ]; then
|
|
exec "$BASH" --login -i -c "\
|
|
docker kill $WEB_CONTAINER\
|
|
;docker rm $WEB_CONTAINER\
|
|
;docker kill $DB_CONTAINER\
|
|
;docker rm $DB_CONTAINER\
|
|
;docker run \
|
|
--rm \
|
|
--name $DB_CONTAINER \
|
|
--volumes-from $DBDATA_CONTAINER \
|
|
-p 5432:5432 \
|
|
$PG_IMAGE_NAME \
|
|
& (sleep 10\
|
|
;docker run \
|
|
--rm \
|
|
--name $WEB_CONTAINER \
|
|
--link $DB_CONTAINER:db \
|
|
-ti \
|
|
-v $WIN_HOST_RAILS_WS:$CONTAINER_MOUNT_WS \
|
|
-w $CONTAINER_MOUNT_WS \
|
|
-p $PORT:$PORT \
|
|
-u 'root' \
|
|
$IMAGE_NAME \
|
|
//bin//bash -l -c '\
|
|
rm -r tmp/pids/server.pid\
|
|
;export PATH=/usr/local/bundle/bin:\$PATH\
|
|
;cp -rf $CONTAINER_MOUNT_WS// $CONTAINER_RAILS_WS_PARENT\
|
|
;chmod -R 777 $CONTAINER_MOUNT_WS\
|
|
;chmod -R 777 $CONTAINER_RAILS_WS\
|
|
;unison \
|
|
$CONTAINER_MOUNT_WS \
|
|
$CONTAINER_RAILS_WS \
|
|
-perms 0 \
|
|
-ignorecase false \
|
|
-links false \
|
|
-ignoreinodenumbers \
|
|
-auto \
|
|
-silent \
|
|
-ignore \"Path vendor/bundle\" \
|
|
-ignore \"Path .git\" \
|
|
-ignore \"Path .bundle\" \
|
|
-repeat 1 \
|
|
> /dev/null \
|
|
& chmod -R 777 $CONTAINER_RAILS_WS\
|
|
;cd $CONTAINER_RAILS_WS\
|
|
;rails server -b 0.0.0.0 -p $PORT')"
|
|
elif [[ ( $1 == "cli" ) && ( $2 == "active" ) ]]; then
|
|
exec "$BASH" --login -i -c "\
|
|
docker exec \
|
|
-ti \
|
|
$WEB_CONTAINER \
|
|
//bin//bash -l"
|
|
elif [[ ( $1 == "cli" ) && ( $2 == "nosync" ) ]]; then
|
|
exec "$BASH" --login -i -c "\
|
|
docker kill $WEB_CONTAINER\
|
|
;docker rm $WEB_CONTAINER\
|
|
;docker run \
|
|
--rm \
|
|
--name $WEB_CONTAINER \
|
|
-ti \
|
|
-v $WIN_HOST_RAILS_WS:$CONTAINER_RAILS_WS \
|
|
-w $CONTAINER_RAILS_WS \
|
|
-p $PORT:$PORT \
|
|
$IMAGE_NAME \
|
|
//bin//bash -l"
|
|
elif [[ ( $1 == "cli" ) && ( $2 == "nodb" ) ]]; then
|
|
exec "$BASH" --login -i -c "
|
|
docker kill $WEB_CONTAINER\
|
|
;docker rm $WEB_CONTAINER\
|
|
;docker run \
|
|
--rm \
|
|
--name $WEB_CONTAINER \
|
|
-ti \
|
|
-v $WIN_HOST_RAILS_WS:$CONTAINER_MOUNT_WS \
|
|
-w $CONTAINER_MOUNT_WS \
|
|
-u 'root' \
|
|
$IMAGE_NAME //bin//bash -l -c '\
|
|
rm -r tmp/pids/server.pid\
|
|
;export PATH=/usr/local/bundle/bin:\$PATH\
|
|
;cp -rf $CONTAINER_MOUNT_WS// $CONTAINER_RAILS_WS_PARENT\
|
|
;chmod -R 777 $CONTAINER_MOUNT_WS\
|
|
;chmod -R 777 $CONTAINER_RAILS_WS\
|
|
;unison \
|
|
$CONTAINER_MOUNT_WS \
|
|
$CONTAINER_RAILS_WS \
|
|
-perms 0 \
|
|
-ignorecase false \
|
|
-links false \
|
|
-ignoreinodenumbers \
|
|
-auto \
|
|
-silent \
|
|
-ignore \"Path vendor/bundle\" \
|
|
-ignore \"Path .git\" \
|
|
-ignore \"Path .bundle\" \
|
|
-repeat 1 \
|
|
> /dev/null \
|
|
& chmod -R 777 $CONTAINER_RAILS_WS\
|
|
;cd $CONTAINER_RAILS_WS\
|
|
;//bin//bash'"
|
|
elif [ $1 == "cli" ]; then
|
|
exec "$BASH" --login -i -c "
|
|
docker kill $WEB_CONTAINER\
|
|
;docker rm $WEB_CONTAINER\
|
|
;docker kill $DB_CONTAINER\
|
|
;docker rm $DB_CONTAINER\
|
|
;docker run \
|
|
--rm \
|
|
--name $DB_CONTAINER \
|
|
--volumes-from $DBDATA_CONTAINER \
|
|
-p 5432:5432 \
|
|
$PG_IMAGE_NAME \
|
|
> /dev/null \
|
|
& (sleep 10\
|
|
;docker run \
|
|
--rm \
|
|
--name $WEB_CONTAINER \
|
|
--link $DB_CONTAINER:db \
|
|
-ti \
|
|
-v $WIN_HOST_RAILS_WS:$CONTAINER_MOUNT_WS \
|
|
-w $CONTAINER_MOUNT_WS \
|
|
-u 'root' \
|
|
$IMAGE_NAME //bin//bash -l -c '\
|
|
rm -r tmp/pids/server.pid\
|
|
;export PATH=/usr/local/bundle/bin:\$PATH\
|
|
;cp -rf $CONTAINER_MOUNT_WS// $CONTAINER_RAILS_WS_PARENT\
|
|
;chmod -R 777 $CONTAINER_MOUNT_WS\
|
|
;chmod -R 777 $CONTAINER_RAILS_WS\
|
|
;unison \
|
|
$CONTAINER_MOUNT_WS \
|
|
$CONTAINER_RAILS_WS \
|
|
-perms 0 \
|
|
-ignorecase false \
|
|
-links false \
|
|
-ignoreinodenumbers \
|
|
-auto \
|
|
-silent \
|
|
-ignore \"Path vendor/bundle\" \
|
|
-ignore \"Path .git\" \
|
|
-ignore \"Path .bundle\" \
|
|
-repeat 1 \
|
|
> /dev/null \
|
|
& chmod -R 777 $CONTAINER_RAILS_WS\
|
|
;cd $CONTAINER_RAILS_WS\
|
|
;//bin//bash')"
|
|
elif [[ ( $1 == "db-cli" ) && ( $2 == "active" ) ]]; then
|
|
exec "$BASH" --login -i -c "\
|
|
docker exec \
|
|
-ti \
|
|
$DB_CONTAINER \
|
|
//bin//bash -l"
|
|
elif [ $1 == "db-cli" ]; then
|
|
exec "$BASH" --login -i -c "\
|
|
docker kill $DB_CONTAINER\
|
|
;docker rm $DB_CONTAINER\
|
|
;docker run \
|
|
--rm \
|
|
--name $DB_CONTAINER \
|
|
-ti \
|
|
--volumes-from $DBDATA_CONTAINER \
|
|
-p 5432:5432 \
|
|
$PG_IMAGE_NAME \
|
|
//bin//bash -l"
|
|
elif [ $1 == "psql" ]; then
|
|
eval "'$PSQL_BIN/psql' -h $B2D_IP -p 5432 -U postgres"
|
|
elif [ $1 == "pgdump" ]; then
|
|
eval "'$PSQL_BIN/pg_dump' -h $B2D_IP -p 5432 -U postgres -f '$WIN_HOST_DB_TEST' -O -c -C scinote_test"
|
|
eval "'$PSQL_BIN/pg_dump' -h $B2D_IP -p 5432 -U postgres -f '$WIN_HOST_DB_DEV' -O -c -C scinote_development"
|
|
elif [ $1 == "pgrestore" ]; then
|
|
eval "'$PSQL_BIN/psql' -h $B2D_IP -p 5432 -U postgres -f '$WIN_HOST_DB_TEST' -d scinote_test"
|
|
eval "'$PSQL_BIN/psql' -h $B2D_IP -p 5432 -U postgres -f '$WIN_HOST_DB_DEV' -d scinote_development"
|
|
elif [ $1 == "clean" ]; then
|
|
exec "$BASH" --login -i -c "\
|
|
docker rmi -f $IMAGE_NAME\
|
|
;docker rmi -f $PG_IMAGE_NAME"
|
|
elif [ $1 == "cclean" ]; then
|
|
exec "$BASH" --login -i -c "\
|
|
docker rm $(docker ps -a -q)"
|
|
fi
|
|
fi
|
|
unset IMAGE_NAME
|
|
unset PG_IMAGE_NAME
|
|
unset WEB_CONTAINER
|
|
unset DB_CONTAINER
|
|
unset WIN_HOST_RAILS_WS
|
|
unset WIN_HOST_DB_TEST
|
|
unset WIN_HOST_DB_DEV
|
|
unset CONTAINER_RAILS_WS
|
|
unset PORT
|
|
unset B2D_IP
|
|
unset PROCEED |