diff --git a/keystone/Dockerfile b/keystone/Dockerfile index bf9ab0b..bc52b8f 100644 --- a/keystone/Dockerfile +++ b/keystone/Dockerfile @@ -13,8 +13,13 @@ COPY keystone.conf /etc/keystone RUN mkdir -p /etc/nginx/ssl COPY keystone.wsgi.conf /etc/nginx/ +VOLUME /var/lib/mysql + COPY bootstrap.sh /usr/bin +COPY pre-setup.sh /usr/bin COPY openrc /root/ +RUN /usr/bin/pre-setup.sh + WORKDIR /root CMD '/usr/bin/bootstrap.sh' diff --git a/keystone/bootstrap.sh b/keystone/bootstrap.sh index 2c9ff6d..0d009ba 100755 --- a/keystone/bootstrap.sh +++ b/keystone/bootstrap.sh @@ -1,55 +1,22 @@ #!/bin/bash -IDENTITY_HOST=localhost -KEYSTONE_DB_USER=keystone -KEYSTONE_DB_PASSWORD=914de29bc82616d7c159eaf9b1f39402 -KEYSTONE_DB_NAME=keystone +IDENTITY_HOST="${IDENTITY_HOST:-localhost}" KEYSTONE_ADMIN_PASSWORD="${KEYSTONE_ADMIN_PASSWORD:-bb915e9ce0ae4b46e82a069b2ef0f8d7}" sed -i.bak s/IDENTITY_HOST/$IDENTITY_HOST/g /root/openrc sed -i.bak s/KEYSTONE_ADMIN_PASSWORD/$KEYSTONE_ADMIN_PASSWORD/g /root/openrc -sed -i.bak s/MARIADB_HOST/$MARIADB_HOST/g /etc/keystone/keystone.conf -sed -i.bak s/KEYSTONE_DB_USER/$KEYSTONE_DB_USER/g /etc/keystone/keystone.conf -sed -i.bak s/KEYSTONE_DB_PASSWORD/$KEYSTONE_DB_PASSWORD/g /etc/keystone/keystone.conf -sed -i.bak s/KEYSTONE_DB_NAME/$KEYSTONE_DB_NAME/g /etc/keystone/keystone.conf -sed -i.bak s/IDENTITY_HOST/$IDENTITY_HOST/g /etc/nginx/keystone.wsgi.conf # MariaDB -# Bootstrap mariadb if it hasn't been started -if [[ ! -d /var/lib/mysql/mysql ]]; then - /usr/bin/mysql-systemd-start pre - mysqld_safe & - mysqladmin --silent --wait=30 ping || exit 1 +mysqld_safe & +mysqladmin --silent --wait=30 ping || exit 1 - # Set root user password - mysql -e "GRANT ALL PRIVILEGES ON *.* TO \"root\"@\"%\" IDENTIFIED by \"secret\" WITH GRANT OPTION;" - - # Remove anonymous user access - mysql -e "DELETE FROM mysql.user WHERE User=\"\";" - - # Remove test database - mysql -e "DROP DATABASE test;" - - # Keystone Database and user - mysql -e "create database $KEYSTONE_DB_NAME;" - mysql -e "grant all on $KEYSTONE_DB_NAME.* to '$KEYSTONE_DB_USER'@'%' identified by '$KEYSTONE_DB_PASSWORD';" - mysql -e "grant all on $KEYSTONE_DB_NAME.* to '$KEYSTONE_DB_USER'@'localhost' identified by '$KEYSTONE_DB_PASSWORD';" -fi # Populate keystone database keystone-manage db_sync -# Nginx & UWSGI -mkdir -p /run/uwsgi/keystone -sed -i 's/uid.*/ /' /usr/share/uwsgi/keystone/{public,admin}.ini -sed -i 's/gid.*/ /' /usr/share/uwsgi/keystone/{public,admin}.ini -echo "logto=/var/log/uwsgi-keystone-admin.log" >> /usr/share/uwsgi/keystone/admin.ini -echo "logto=/var/log/uwsgi-keystone-public.log" >> /usr/share/uwsgi/keystone/public.ini +# Start keystone service /usr/bin/uwsgi --ini /usr/share/uwsgi/keystone/admin.ini -s /run/uwsgi/keystone/admin.sock & /usr/bin/uwsgi --ini /usr/share/uwsgi/keystone/public.ini -s /run/uwsgi/keystone/public.sock & - -mkdir /var/lib/nginx -echo "user root;" >> /usr/share/nginx/conf/nginx.conf /usr/bin/nginx /usr/bin/memcached -u root & diff --git a/keystone/keystone.conf b/keystone/keystone.conf index 2fa4dc1..8cb4ef8 100644 --- a/keystone/keystone.conf +++ b/keystone/keystone.conf @@ -1,7 +1,7 @@ [DEFAULT] [database] -connection = mysql+pymysql://keystone:secret@localhost/keystone +connection = mysql+pymysql://KEYSTONE_DB_USER:KEYSTONE_DB_PASSWORD@localhost/KEYSTONE_DB_NAME [cache] enabled = True diff --git a/keystone/pre-setup.sh b/keystone/pre-setup.sh new file mode 100755 index 0000000..e1f1b9a --- /dev/null +++ b/keystone/pre-setup.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +IDENTITY_HOST="${IDENTITY_HOST:-localhost}" +KEYSTONE_DB_USER=keystone +KEYSTONE_DB_PASSWORD=914de29bc82616d7c159eaf9b1f39402 +KEYSTONE_DB_NAME=keystone + +sed -i.bak s/MARIADB_HOST/$MARIADB_HOST/g /etc/keystone/keystone.conf +sed -i.bak s/KEYSTONE_DB_USER/$KEYSTONE_DB_USER/g /etc/keystone/keystone.conf +sed -i.bak s/KEYSTONE_DB_PASSWORD/$KEYSTONE_DB_PASSWORD/g /etc/keystone/keystone.conf +sed -i.bak s/KEYSTONE_DB_NAME/$KEYSTONE_DB_NAME/g /etc/keystone/keystone.conf +sed -i.bak s/IDENTITY_HOST/$IDENTITY_HOST/g /etc/nginx/keystone.wsgi.conf + +# MariaDB +mkdir /data +echo "bind-address = 0.0.0.0" >> /etc/mariadb/my.cnf +echo "datadir = /data" >> /etc/mariadb/my.cnf + +# Bootstrap mariadb if it hasn't been started +if [[ ! -d /var/lib/mysql/mysql ]]; then + /usr/bin/mysql-systemd-start pre + mysqld_safe & + + until mysql -e "SELECT 1;" + do + continue + done + + # Set root user password + mysql -e "GRANT ALL PRIVILEGES ON *.* TO \"root\"@\"%\" IDENTIFIED by \"secret\" WITH GRANT OPTION;" + + # Remove anonymous user access + mysql -e "DELETE FROM mysql.user WHERE User=\"\";" + + # Remove test database + mysql -e "DROP DATABASE test;" + + # Keystone Database and user + mysql -e "create database $KEYSTONE_DB_NAME;" + mysql -e "grant all on $KEYSTONE_DB_NAME.* to '$KEYSTONE_DB_USER'@'%' IDENTIFIED by '$KEYSTONE_DB_PASSWORD';" + mysql -e "grant all on $KEYSTONE_DB_NAME.* to '$KEYSTONE_DB_USER'@'localhost' IDENTIFIED BY '$KEYSTONE_DB_PASSWORD';" + mysql -e "FLUSH PRIVILEGES;" +fi + +# Populate keystone database +keystone-manage db_sync + +# Nginx & UWSGI +mkdir -p /run/uwsgi/keystone +sed -i 's/uid.*/ /' /usr/share/uwsgi/keystone/{public,admin}.ini +sed -i 's/gid.*/ /' /usr/share/uwsgi/keystone/{public,admin}.ini +echo "logto=/var/log/uwsgi-keystone-admin.log" >> /usr/share/uwsgi/keystone/admin.ini +echo "logto=/var/log/uwsgi-keystone-public.log" >> /usr/share/uwsgi/keystone/public.ini +/usr/bin/uwsgi --ini /usr/share/uwsgi/keystone/admin.ini -s /run/uwsgi/keystone/admin.sock & +/usr/bin/uwsgi --ini /usr/share/uwsgi/keystone/public.ini -s /run/uwsgi/keystone/public.sock & + +mkdir /var/lib/nginx +echo "user root;" >> /usr/share/nginx/conf/nginx.conf +