mirror of
https://github.com/discourse/discourse.git
synced 2025-01-19 03:22:46 +08:00
ab23412113
Sometimes plugins directories will end up with other symlinks (e.g. inside node_modules folders). This logic does not work with deeply nested symlinks, and they are unlikely to be necessary for the plugin to work. Therefore we should only look for symlinks in the top-level of the `plugins` directory
112 lines
3.1 KiB
Bash
Executable File
112 lines
3.1 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
SCRIPTPATH=$(cd "$(dirname "$0")" > /dev/null; pwd -P)
|
|
SOURCE_DIR=$(cd "$SCRIPTPATH" > /dev/null; cd ../.. > /dev/null; pwd -P)
|
|
DATA_DIR="$SOURCE_DIR/data/postgres"
|
|
PLUGINS_DIR="$SOURCE_DIR/plugins"
|
|
|
|
show_help() {
|
|
cat <<EOF
|
|
Usage: ${0##*/} [-e VAR=VAL] [--env VAR=VAL] [--env-file filename] [-h] [--init]
|
|
|
|
-e, --env set environment variables
|
|
--env-file pass in a file containing a list of environment variable assignments
|
|
--init perform first-time initialization
|
|
-p --net-public publish ports on container on 0.0.0.0 (less secure as users on LAN may see dev env)
|
|
EOF
|
|
}
|
|
|
|
initialize=""
|
|
ENV_ARGS=""
|
|
local_publish="127.0.0.1"
|
|
|
|
while [ "${#@}" -ne "0" ]; do
|
|
case "$1" in
|
|
-h | --help)
|
|
show_help
|
|
exit 0
|
|
;;
|
|
-i | --init)
|
|
initialize="initialize"
|
|
;;
|
|
-p | --net-public)
|
|
local_publish="0.0.0.0"
|
|
;;
|
|
-e | --env)
|
|
if [ -z "$2" ]; then
|
|
show_help
|
|
exit 0
|
|
else
|
|
ENV_ARGS+=" -e $2"
|
|
shift
|
|
fi
|
|
;;
|
|
--env-file)
|
|
if [ -z "$2" ]; then
|
|
show_help
|
|
exit 0
|
|
else
|
|
ENV_ARGS="--env-file=$2"
|
|
break
|
|
fi
|
|
;;
|
|
*)
|
|
echo "unexpected argument: $1" >& 2
|
|
show_help >& 2
|
|
exit 1
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
echo "Using source in: ${SOURCE_DIR}"
|
|
echo "Using data in: ${DATA_DIR}"
|
|
|
|
mkdir -p "${DATA_DIR}"
|
|
|
|
mount_plugin_symlinks=""
|
|
for symlink in $(find $PLUGINS_DIR -depth 1 -type l); do
|
|
# `readlink -f` doesn't work on macOS, to fix it you need to override the `readlink` with `greadlink`
|
|
# > brew install coreutils
|
|
# > ln -s "$(which greadlink)" "$(dirname "$(which greadlink)")/readlink"
|
|
# reference: https://meta.discourse.org/t/beginners-guide-to-install-discourse-for-development-using-docker/102009/124?u=aleber
|
|
symlink_value=$(readlink -f $symlink)
|
|
plugin_name=$(basename $symlink)
|
|
mount_plugin_symlinks+=" -v ${symlink_value}:/src/plugins/${plugin_name}:delegated"
|
|
done
|
|
[[ ! -z "$mount_plugin_symlinks" ]] && echo "Mounting symlinks for plugins: ${mount_plugin_symlinks}"
|
|
|
|
# 1080 mailcatcher
|
|
# 3000 puma... if you must (but unicorn is preferred)
|
|
# 9292 unicorn
|
|
# 9405 prometheus exporter
|
|
|
|
docker pull discourse/discourse_dev:release
|
|
docker run -d \
|
|
-p $local_publish:1080:1080 \
|
|
-p $local_publish:3000:3000 \
|
|
-p $local_publish:9292:9292 \
|
|
-p $local_publish:9405:9405 \
|
|
-v "$DATA_DIR:/shared/postgres_data:delegated" \
|
|
-v "$SOURCE_DIR:/src:delegated" \
|
|
-e UNICORN_BIND_ALL=true \
|
|
$mount_plugin_symlinks \
|
|
$ENV_ARGS \
|
|
--hostname=discourse \
|
|
--name=discourse_dev \
|
|
--restart=always \
|
|
discourse/discourse_dev:release /sbin/boot
|
|
|
|
if [ "${initialize}" = "initialize" ]; then
|
|
echo "Installing gems..."
|
|
"${SCRIPTPATH}/bundle" install
|
|
|
|
echo "Migrating database..."
|
|
"${SCRIPTPATH}/rake" db:migrate
|
|
RAILS_ENV=test "${SCRIPTPATH}/rake" db:migrate
|
|
|
|
echo "Creating admin user..."
|
|
"${SCRIPTPATH}/rake" admin:create
|
|
fi
|