mirror of
https://github.com/Fishwaldo/huginn.git
synced 2025-03-15 19:31:26 +00:00
Adding a working example of docker linked mysql container for issue #887
This commit is contained in:
parent
8b8221e174
commit
60622c5a00
5 changed files with 94 additions and 15 deletions
|
@ -19,11 +19,15 @@ RUN apt-get update && \
|
|||
|
||||
RUN pip install supervisor-stdout
|
||||
|
||||
ADD scripts/ /scripts
|
||||
RUN chmod 755 /scripts/setup /scripts/init
|
||||
|
||||
ADD scripts/setup /scripts/setup
|
||||
RUN chmod 755 /scripts/setup
|
||||
RUN /scripts/setup
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
ADD scripts/init /scripts/init
|
||||
RUN chmod 755 /scripts/init
|
||||
|
||||
VOLUME /var/lib/mysql
|
||||
|
||||
EXPOSE 5000
|
||||
|
|
|
@ -51,13 +51,15 @@ Simple stand-alone usage:
|
|||
|
||||
To link to another mysql container, for example:
|
||||
|
||||
docker run --rm --name newcentury_mysql -p 3306 \
|
||||
docker run --rm --name mysql \
|
||||
-e HUGINN_MYSQL_DATABASE=huginn \
|
||||
-e HUGINN_MYSQL_USER=huginn \
|
||||
-e HUGINN_MYSQL_PASSWORD=somethingsecret \
|
||||
-e HUGINN_MYSQL_ROOT_PASSWORD=somethingevenmoresecret \
|
||||
cantino/huginn
|
||||
docker run --rm --name huginn --link newcentury_mysql:MYSQL -p 5000:5000 \
|
||||
docker run --rm --name huginn \
|
||||
--link mysql \
|
||||
-p 5000:5000 \
|
||||
-e HUGINN_DATABASE_NAME=huginn \
|
||||
-e HUGINN_DATABASE_USER=huginn \
|
||||
-e HUGINN_DATABASE_PASSWORD=somethingsecret \
|
||||
|
@ -65,7 +67,16 @@ To link to another mysql container, for example:
|
|||
|
||||
To link to another container named 'postgres':
|
||||
|
||||
docker run --rm --name huginn --link POSTGRES:mysql -p 5000:5000 -e "DATABASE_USER=huginn" -e "DATABASE_PASSWORD=pass@word" cantino/huginn
|
||||
docker run --rm --name huginn \
|
||||
--link postgres:postgresql \
|
||||
-p 5000:5000 \
|
||||
-e "HUGINN_DATABASE_USER=huginn" \
|
||||
-e "HUGINN_DATABASE_PASSWORD=pass@word" \
|
||||
cantino/huginn
|
||||
|
||||
The `docker/` folder also has a `docker-compose.yml` that allows for a sample database formation with a data volume container:
|
||||
|
||||
cd docker ; docker-compose up
|
||||
|
||||
## Environment Variables
|
||||
|
||||
|
|
28
docker/docker-compose.yml
Normal file
28
docker/docker-compose.yml
Normal file
|
@ -0,0 +1,28 @@
|
|||
mysqldata:
|
||||
image: mysql
|
||||
command: true
|
||||
|
||||
mysql:
|
||||
image: mysql
|
||||
volumes_from:
|
||||
- mysqldata
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: myrootpassword
|
||||
MYSQL_DATABASE: huginn
|
||||
MYSQL_USER: huginn
|
||||
MYSQL_PASSWORD: myhuginnpassword
|
||||
|
||||
huginn:
|
||||
build: .
|
||||
ports:
|
||||
- 5000:5000
|
||||
environment:
|
||||
HUGINN_DATABASE_NAME: huginn
|
||||
HUGINN_DATABASE_USERNAME: root
|
||||
HUGINN_DATABASE_PASSWORD: myrootpassword
|
||||
INTENTIONALLY_SLEEP: 10
|
||||
#DATABASE_INITIAL_CONNECT_MAX_RETRIES: 5
|
||||
PORT: 5000
|
||||
links:
|
||||
- mysql
|
||||
|
|
@ -100,7 +100,7 @@ EOF
|
|||
|
||||
# wait for mysql server to start (max 120 seconds)
|
||||
timeout=120
|
||||
while ! mysqladmin -uroot \${DATABASE_PASSWORD:+-p\$DATABASE_PASSWORD} status >/dev/null 2>&1
|
||||
while ! mysqladmin -u\${DATABASE_USERNAME:-root} \${DATABASE_PASSWORD:+-p\$DATABASE_PASSWORD} status >/dev/null 2>&1
|
||||
do
|
||||
(( timeout = timeout - 1 ))
|
||||
if [ \$timeout -eq 0 ]; then
|
||||
|
@ -111,10 +111,10 @@ EOF
|
|||
sleep 1
|
||||
done
|
||||
|
||||
if ! echo "USE \${DATABASE_NAME}" | mysql -uroot \${DATABASE_PASSWORD:+-p\$DATABASE_PASSWORD} >/dev/null 2>&1; then
|
||||
if ! echo "USE \${DATABASE_NAME}" | mysql -u\${DATABASE_USERNAME:-root} \${DATABASE_PASSWORD:+-p\$DATABASE_PASSWORD} >/dev/null 2>&1; then
|
||||
DB_INIT="yes"
|
||||
echo "CREATE DATABASE IF NOT EXISTS \\\`\${DATABASE_NAME}\\\` DEFAULT CHARACTER SET \\\`utf8\\\` COLLATE \\\`utf8_unicode_ci\\\`;" | mysql -uroot \${DATABASE_PASSWORD:+-p\$DATABASE_PASSWORD}
|
||||
echo "GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON \\\`${DATABASE_NAME}\\\`.* TO 'root'@'localhost';" | mysql -uroot \${DATABASE_PASSWORD:+-p\$DATABASE_PASSWORD}
|
||||
echo "GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON \\\`${DATABASE_NAME}\\\`.* TO 'root'@'localhost';" | mysql -u\${DATABASE_USERNAME:-root} \${DATABASE_PASSWORD:+-p\$DATABASE_PASSWORD}
|
||||
fi
|
||||
fi
|
||||
supervisorctl start foreman >/dev/null
|
||||
|
@ -142,19 +142,46 @@ cat <<FOREMAN > /tmp/foreman.sh
|
|||
#!/bin/bash -e
|
||||
source /app/.env
|
||||
|
||||
# Assuming we have a created database, run the migrations and seed it idempotently.
|
||||
[ -z "\${DO_NOT_MIGRATE}" ] && sudo -u huginn -EH bundle exec rake db:migrate
|
||||
[ -z "\${DO_NOT_SEED}" ] && sudo -u huginn -EH bundle exec rake db:seed
|
||||
# The database may need to start up for a bit first
|
||||
if [ -n "\${INTENTIONALLY_SLEEP}" ]; then
|
||||
echo "Intentionally sleeping \${INTENTIONALLY_SLEEP}"
|
||||
sleep \${INTENTIONALLY_SLEEP}
|
||||
fi
|
||||
|
||||
[ -n "\$INTENTIONALLY_SLEEP" ] && sleep \$INTENTIONALLY_SLEEP
|
||||
if [ -n "\${DATABASE_INITIAL_CONNECT_MAX_RETRIES}" ]; then
|
||||
max=\${DATABASE_INITIAL_CONNECT_MAX_RETRIES}
|
||||
count=0
|
||||
while ! rake mysql_test:ping > /dev/null 2>&1 && [[ \$count -le \$max ]] ; do
|
||||
count=\$[\$count+1]
|
||||
echo "Retry \$count of \$max attempting to connect to \$DATABASE_HOST. Sleeping \${DATABASE_INITIAL_CONNECT_SLEEP:5}"
|
||||
sleep \${DATABASE_INITIAL_CONNECT_SLEEP:5}
|
||||
done
|
||||
fi
|
||||
|
||||
# We may need to try and create a database
|
||||
if [ -n "\${CREATE_DB}" ]; then
|
||||
sudo -u huginn -EH bundle exec rake db:create
|
||||
fi
|
||||
|
||||
# Assuming we have a created database, run the migrations and seed it idempotently.
|
||||
if [ -z "\${DO_NOT_MIGRATE}" ]; then
|
||||
sudo -u huginn -EH bundle exec rake db:migrate
|
||||
fi
|
||||
|
||||
if [ -z "\${DO_NOT_SEED}" ]; then
|
||||
sudo -u huginn -EH bash -xc 'bundle exec rake db:seed &'
|
||||
fi
|
||||
|
||||
# Fixup the Procfile and prepare the PORT
|
||||
[ -n "\${DO_NOT_RUN_JOBS}" ] && perl -pi -e 's/^jobs:/#jobs:/' /app/Procfile
|
||||
if [ -n "\${DO_NOT_RUN_JOBS}" ]; then
|
||||
perl -pi -e 's/^jobs:/#jobs:/' /app/Procfile
|
||||
fi
|
||||
|
||||
perl -pi -e 's/rails server\$/rails server -b 0.0.0.0 -p \\\$PORT/' /app/Procfile
|
||||
export PORT
|
||||
|
||||
# Start huginn
|
||||
exec sudo -u huginn -EH bundle exec foreman start
|
||||
exec sudo -u huginn -EH bash -xc 'exec bundle exec foreman start'
|
||||
FOREMAN
|
||||
|
||||
chmod 755 /tmp/foreman.sh
|
||||
|
|
9
lib/tasks/database_test.rake
Normal file
9
lib/tasks/database_test.rake
Normal file
|
@ -0,0 +1,9 @@
|
|||
namespace :database_test do
|
||||
desc "Ping the database"
|
||||
task :ping do
|
||||
require 'active_record'
|
||||
require 'mysql2'
|
||||
ActiveRecord::Base.establish_connection
|
||||
ActiveRecord::Base.connection.verify!
|
||||
end
|
||||
end
|
Loading…
Add table
Reference in a new issue