lbry-docker/spee.ch/docker-entrypoint.sh
Leopere 3c9fcf6fce Chainquery works mostly and so does lbrycrd
Merge branch 'master' of github.com:lbryio/lbry-docker

Starting on a .travis.yml but may be unnecessary

Renamed www.spee.ch and lbrynet-daemon to reflect their upstream repos.

Disabled Adminer
Started debug for chainquery container.

Get latest release tagged url from github API

remove zip.zip maybe?

debugging curl

explicit unzip

Adding -o for unzip

simplified, removed debug and fixed curl

reverted to original unzip function

Pull chainquery from prep container

passing alternative config path
Aligned config path location with linux spec

updated config location

maybe don't be as explicit

adding debug for chainqueryconfig.toml

Fixes magicless chainquery and starts on bootstrap
added chainquery/.gitignore to ignore large blobs.
fixed Dockerfile up to use staged prep and production
removed db-seed.sh as we have quick-bootstrap.sh
start.sh needed modification to pull config from the right location in the linux FS
Added chainquery/.dockerignore to prevent extremely long build times in the future
Removed fancy bash vars in chainquery/.env
Started work on getting quick-bootstrap.sh ready for release.

Switch to lbrynet network

Switched network name to lbrynet

Merge branch 'leopere' of github.com:lbryio/lbry-docker into leopere

Remove debugging access port bind

Expose chainquery to the internet

Merge branch 'leopere' of github.com:lbryio/lbry-docker into leopere

Removed now unnecessary run command

Undo

Cleanup and commenting on environment variables

Start getting ready for adding chainquery start.sh magic

Quick update
2018-11-04 22:44:00 -05:00

168 lines
6.5 KiB
Bash
Executable file

#!/usr/bin/env bash
set -eo pipefail
## Add -x to set if you want really explicit feedback.
## -u breaks unbound variables
## This docker-entrypoint will take a copy of the configuration and install any
## ENVVARS and then copy any required files into the /app/ directory next to any
## custom files added by the user.
# default to run whatever the user wanted like "/bin/ash"
## If user runs no need to run any more of the entrypoint script.
if [[ -z "$@" ]]; then
echof info "User did not attempt input. Now executing docker-entrypoint."
else
echof info "Running $@."
exec "$@"
exit 1
fi
ENVVARS=("MYSQL_ENV_MYSQL_USER"
"MYSQL_ENV_MYSQL_PASSWORD"
"MYSQL_ENV_MYSQL_DATABASE"
"MYSQL_ENV_MYSQL_ADDRESS"
"GOOGLE_ANALYTICS_UID"
"SITE_TITLE"
"SITE_ADDRESS"
"SITE_DESCRIPTION"
)
# MYSQL_ENV_MYSQL_USER=alphauser
# MYSQL_ENV_MYSQL_PASSWORD=alphapassword
# MYSQL_ENV_MYSQL_DATABASE=alphadatabase
# MYSQL_ENV_MYSQL_ADDRESS=alphaaddress
# GOOGLE_ANALYTICS_UID=alphauid
# SITE_TITLE=AlphaTitle
# SITE_ADDRESS=alpha.address.com
SITE_DESCRIPTION=alpha.description
## There might be a better way to do this now I'm working on something for configuring things more magically.
function set_conf() {
case $1 in
MYSQL_ENV_MYSQL_USER )
if [[ -z "$MYSQL_ENV_MYSQL_USER" ]]; then
echof info "User did not attempt to configure $MYSQL_ENV_MYSQL_USER"
else
echof info "Configuring $MYSQL_ENV_MYSQL_USER."
echof info "Setting '$MYSQL_ENV_MYSQL_USER' $MYSQL_ENV_MYSQL_USER in /app/config/mysqlConfig.json"
sed -i 's/"username": "root"/"username": "'$MYSQL_ENV_MYSQL_USER'"/' /app/config/mysqlConfig.json
fi
;;
MYSQL_ENV_MYSQL_PASSWORD )
if [[ -z "$MYSQL_ENV_MYSQL_PASSWORD" ]]; then
echof info "User did not attempt to configure $MYSQL_ENV_MYSQL_PASSWORD"
else
## This echo should be sanitized of any secrets before this is finished.
echof info "Setting '$MYSQL_ENV_MYSQL_PASSWORD' $MYSQL_ENV_MYSQL_PASSWORD in /app/config/mysqlConfig.json"
sed -i 's/"password": ""/"password": "'$MYSQL_ENV_MYSQL_PASSWORD'"/' /app/config/mysqlConfig.json
fi
;;
MYSQL_ENV_MYSQL_DATABASE )
if [[ -z "$MYSQL_ENV_MYSQL_DATABASE" ]]; then
echof info "User did not attempt to configure $MYSQL_ENV_MYSQL_DATABASE"
else
echof info "Setting '$MYSQL_ENV_MYSQL_DATABASE' $MYSQL_ENV_MYSQL_DATABASE in /app/config/mysqlConfig.json"
sed -i 's/"database": "lbry"/"database": "'$MYSQL_ENV_MYSQL_DATABASE'"/' /app/config/mysqlConfig.json
fi
;;
MYSQL_SERVER_ADDRESS )
if [[ -z "$MYSQL_SERVER_ADDRESS" ]]; then
echof info "User did not attempt to configure $MYSQL_SERVER_ADDRESS"
else
echof warn "This variable is not currently available."
fi
;;
SITE_ADDRESS )
if [[ -z "$SITE_ADDRESS" ]]; then
echof info "User did not attempt to configure $SITE_ADDRESS"
else
echof info "Setting '$SITE_ADDRESS' $SITE_ADDRESS in /app/config/siteConfig.json"
sed -i 's,"host": "https://www.example.com","host": "https://"$SITE_ADDRESS,' /app/config/siteConfig.json
fi
;;
GOOGLE_ANALYTICS_UID )
if [[ -z "$GOOGLE_ANALYTICS_UID" ]]; then
echof info "User did not attempt to configure $GOOGLE_ANALYTICS_UID"
else
echof info "Setting '$GOOGLE_ANALYTICS_UID' $GOOGLE_ANALYTICS_UID in /app/config/siteConfig.json"
sed -i 's/"googleId": null/"googleId": '$GOOGLE_ANALYTICS_UID'/' /app/config/siteConfig.json
fi
;;
SITE_TITLE )
if [[ -z "$SITE_TITLE" ]]; then
echof info "User did not attempt to configure $SITE_TITLE"
else
echof info "Setting '$SITE_TITLE' $SITE_TITLE in /app/config/siteConfig.json"
sed -i 's/"title": "My Site"/"title": "'$SITE_TITLE'"/' /app/config/siteConfig.json
fi
;;
SITE_DESCRIPTION )
if [[ -z "$SITE_DESCRIPTION" ]]; then
echof info "User did not attempt to configure $SITE_DESCRIPTION"
else
echof info "Setting '$SITE_DESCRIPTION' $SITE_DESCRIPTION in /app/config/siteConfig.json"
sed -i 's/"description": "A decentralized hosting platform built on LBRY"/"Description": "'$SITE_DESCRIPTION'"/' /app/config/siteConfig.json
fi
;;
esac
}
function configure_speech() {
# install configuration changes here.
echof info "Installing configuration files into /app/config/."
mkdir -p /app/config/
cp /usr/local/src/spee.ch/cli/defaults/mysqlConfig.json /app/config/mysqlConfig.json
cp /usr/local/src/spee.ch/cli/defaults/siteConfig.json /app/config/siteConfig.json
echof info "Installing any environment variables that have been set."
for i in "${ENVVARS[@]}"; do
if [[ -z "$i" ]]; then
echof info "$i was not set, moving on."
else
set_conf $i
fi
done
}
function final_permset() {
# ## Finally reassert permissions in case there is user added drift.
# rddo /app "test_for_dir" '775 "speech:speech"'
# rfdo /app "test_for_file" '665 "speech:speech"'
# ## Define any permission exceptions here.
# # test_for_dir /app/config 775 "speech:speech"
# # test_for_file /app/config/siteConfig.json 665 "speech:speech"
echof info "Copied Spee.ch and set permissions"
}
###################################
## Actual installation function. ##
###################################
# if Spee.ch is not yet installed, copy it into web root.
# This could be updated to be part of an upgrade mechanism.
if [ "$(ls -A /app)" ]; then
echof warn "/app is not Empty. It contains:" 1>&2
ls -A 1>&2
## If siteConfig.json isn't installed add it and configure or ignore and proceed.
if [ ! -e '/app/config/siteConfig.json' ]; then
echof warn "Spee.ch doesn't appear to have a configuration."
echof blank "Installing config"
configure_speech
else
## If the file exists skip configuration and proceed.
echof info "Spee.ch config already installed skipping configuration step."
final_permset
fi
## Install all other files after installing siteConfig.json
echof info "Making an attempt to nicely merge files using:"
echof run "mv -fnu /usr/local/src/spee.ch/* /app/"
mv -fnu /usr/local/src/spee.ch/* /app/
final_permset
else
echof info "Speech not installed, installing fresh copy now."
configure_speech
echof run "cp -r /usr/local/src/spee.ch/* /app/"
cp -r /usr/local/src/spee.ch/* /app/
final_permset
fi
## Superfluous permissions assertion maybe axe this later.
# echof run 'test_for_dir /app/config/siteConfig.json 775 "speech:speech"'
# test_for_file /app/config/siteConfig.json 775 "speech:speech"