From 84df8eed33f34359056575275fddff9a88b3b3fe Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Mon, 19 Sep 2022 03:36:39 +0200 Subject: Add redis to docker development setup With #8392 the `single_process_mode` was removed, which means that development now also requires a redis. --- docker/develop/docker-compose.yml | 10 ++++++++++ docker/develop/docker-entrypoint.sh | 27 ++++++++++++++++----------- script/diaspora-dev | 22 ++++++++++++++++------ 3 files changed, 42 insertions(+), 17 deletions(-) diff --git a/docker/develop/docker-compose.yml b/docker/develop/docker-compose.yml index b2d5e9d55..88a031a11 100644 --- a/docker/develop/docker-compose.yml +++ b/docker/develop/docker-compose.yml @@ -1,6 +1,7 @@ version: "3.4" volumes: + redis_data: postgresql_data: mysql_data: dia_data_tmp: @@ -21,8 +22,17 @@ services: - dia_data_bundle:/diaspora/vendor/bundle ports: - ${DIASPORA_DOCKER_PORT:-3000}:3000 + environment: + - ENVIRONMENT_REDIS=redis://redis depends_on: - "${DIASPORA_DOCKER_DB}" + - redis + + redis: + image: redis:7 + command: redis-server --save 60 1 --loglevel warning + volumes: + - redis_data:/data postgresql: image: postgres:10.3 diff --git a/docker/develop/docker-entrypoint.sh b/docker/develop/docker-entrypoint.sh index 19f9cdb57..a212b7f3a 100755 --- a/docker/develop/docker-entrypoint.sh +++ b/docker/develop/docker-entrypoint.sh @@ -18,18 +18,11 @@ chown -R $HOST_UID:$HOST_GID /home/diaspora mkdir -p /diaspora/tmp/pids chown $HOST_UID:$HOST_GID /diaspora/tmp /diaspora/tmp/pids /diaspora/vendor/bundle -# ----- Wait for DB ---- -if [ -z $DIA_NODB ] || [ ! $DIA_NODB -eq 1 ]; then - if grep -qFx " <<: *postgresql" /diaspora/config/database.yml; then - host=postgresql - port=5432 - else - host=mysql - port=3306 - fi - - c=0 +function wait_for_port() { + local host=$1 + local port=$2 + local c=0 trap '{ exit 1; }' INT while ! (< /dev/tcp/${host}/${port}) 2>/dev/null; do printf "\rWaiting for $host:$port to become ready ... ${c}s" @@ -40,6 +33,18 @@ if [ -z $DIA_NODB ] || [ ! $DIA_NODB -eq 1 ]; then if [ ! -z $c ]; then printf "\rWaiting for $host:$port to become ready ... done (${c}s)\n" fi +} + +if [ -z $DIA_NODB ] || [ ! $DIA_NODB -eq 1 ]; then + # ----- Wait for DB ----- + if grep -qFx " <<: *postgresql" /diaspora/config/database.yml; then + wait_for_port postgresql 5432 + else + wait_for_port mysql 3306 + fi + + # ----- Wait for Redis ----- + wait_for_port redis 6379 fi cd /diaspora diff --git a/script/diaspora-dev b/script/diaspora-dev index 067f8c978..cfc543e9f 100755 --- a/script/diaspora-dev +++ b/script/diaspora-dev @@ -208,6 +208,11 @@ dia_is_db_running() { dia_docker_compose ps --services --filter status=running | grep -qx $DIASPORA_DOCKER_DB } +dia_is_redis_running() { + # Check if redis container is running + dia_docker_compose ps --services --filter status=running | grep -qx redis +} + dia_get_db() { # Get currently configured or assumed db type grep -q '^ <<: \*mysql' "$DIASPORA_CONFIG_DB" 2>/dev/null && echo mysql || echo postgresql @@ -324,13 +329,14 @@ dia_exec() { # Use a running container dia_docker_compose exec $detach diaspora /exec-entrypoint.sh "$@" else - if ! dia_is_db_running; then not_running=1; fi + # stop db/redis if it was not running before + if ! dia_is_db_running; then stopdb="dia_docker_compose stop $DIASPORA_DOCKER_DB"; fi + if ! dia_is_redis_running; then stopredis="dia_docker_compose stop redis"; fi # Start a new container echo "No running instance found, starting new one for command execution ..." dia_docker_compose run --rm $detach --service-ports diaspora "$@" - if [ ! -z $not_running ]; then - dia_docker_compose stop $DIASPORA_DOCKER_DB - fi + $stopdb + $stopredis fi } @@ -449,24 +455,28 @@ dia_setup() { dia_setup_rails() { # Prepare rails, install dependencies, migrate database, ... - # stop db if it was not running before echo "Setting up environment for tests ..." + # stop db/redis if it was not running before if ! dia_is_db_running; then stopdb="dia_docker_compose stop $DIASPORA_DOCKER_DB"; fi + if ! dia_is_redis_running; then stopredis="dia_docker_compose stop redis"; fi dia_docker_compose run --rm diaspora bin/setup $stopdb + $stopredis } dia_setup_tests() { # Prepare all possible tests - # stop db if it was not running before echo "Setting up environment for tests ..." + # stop db/redis if it was not running before if ! dia_is_db_running; then stopdb="dia_docker_compose stop $DIASPORA_DOCKER_DB"; fi + if ! dia_is_redis_running; then stopredis="dia_docker_compose stop redis"; fi dia_docker_compose run \ --rm \ -e RAILS_ENV=test \ diaspora \ bin/rake db:create db:migrate tests:generate_fixtures assets:generate_error_pages $stopdb + $stopredis } dia_start() { -- cgit v1.2.3 From a4d45358a2d0b2d66a5927f475f9c1910a5bf19f Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Mon, 19 Sep 2022 03:44:15 +0200 Subject: Set listen not only on localhost when used in docker When puma was introduced in #8392 the default listen configuration was set to only localhost, which makes sense for most development setups, but when run within docker, it needs to listen on all IPs so the port can be forwarded to be accessable outside of docker. Because the new default makes sense without docker, I overwrite the option with a environment variable only in the docker-setup. This also ensures that it always contains the right value needed for the docker-setup to work, no matter what was configured outside of docker. --- docker/develop/docker-compose.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/develop/docker-compose.yml b/docker/develop/docker-compose.yml index 88a031a11..8b41d6ed7 100644 --- a/docker/develop/docker-compose.yml +++ b/docker/develop/docker-compose.yml @@ -24,6 +24,7 @@ services: - ${DIASPORA_DOCKER_PORT:-3000}:3000 environment: - ENVIRONMENT_REDIS=redis://redis + - SERVER_LISTEN=tcp://0.0.0.0:3000 depends_on: - "${DIASPORA_DOCKER_DB}" - redis -- cgit v1.2.3 From 1358f6fbb8ae4d180bb2723098e39358354c6510 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Mon, 19 Sep 2022 03:54:42 +0200 Subject: Expose docker-compose through diaspora-dev script As the docker-compose.yml contains variables, it can't just be used with docker-compose directly. So this manually use docker-compose commands with all the required environment variables set. --- script/diaspora-dev | 48 ++++++++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/script/diaspora-dev b/script/diaspora-dev index cfc543e9f..1c5eace04 100755 --- a/script/diaspora-dev +++ b/script/diaspora-dev @@ -44,6 +44,10 @@ print_usage() { print_usage_header "clean [options]" \ " --config Delete configuration files as well" ;; + docker-compose) + echo; echo "Run docker-compose commands with the required environment variables" + print_usage_header "docker-compose [options]" + ;; # test & development cucumber) echo; echo "Run cucumber tests" @@ -136,30 +140,31 @@ print_usage_full() { print_usage_header "$SCRIPT_NAME COMMAND" echo echo "Management Commands:" - echo " setup Prepare diaspora* to run for development" - echo " start Start diaspora*" - echo " stop Stop diaspora*" - echo " restart Restart of diaspora*" - echo " logs Follow log output of diaspora*" - echo " status Show current instance status of diaspora*" - echo " clean Reset diaspora* instance" + echo " setup Prepare diaspora* to run for development" + echo " start Start diaspora*" + echo " stop Stop diaspora*" + echo " restart Restart of diaspora*" + echo " logs Follow log output of diaspora*" + echo " status Show current instance status of diaspora*" + echo " clean Reset diaspora* instance" + echo " docker-compose Run docker-compose commands" echo echo "Test and Development Commands:" - echo " cucumber Run cucumber tests" - echo " jasmine Run jasmine tests" - echo " rspec Run rspec tests" - echo " pronto Run pronto checks" - echo " migrate Execute pending migrations" + echo " cucumber Run cucumber tests" + echo " jasmine Run jasmine tests" + echo " rspec Run rspec tests" + echo " pronto Run pronto checks" + echo " migrate Execute pending migrations" echo echo "Misc. Commands:" - echo " build Build basic diaspora* environment" - echo " bundle (Re-)Install gems for diaspora*" - echo " yarn (Re-)Install frontend dependencies for diaspora*" - echo " config Configure diaspora*" - echo " exec Execute a command in the run environment (advanced)" - echo " help Show help for commands" - echo " setup-rails Prepare diaspora* development environment (install dependencies, migrate db)" - echo " setup-tests Prepare diaspora* test environment" + echo " build Build basic diaspora* environment" + echo " bundle (Re-)Install gems for diaspora*" + echo " yarn (Re-)Install frontend dependencies for diaspora*" + echo " config Configure diaspora*" + echo " exec Execute a command in the run environment (advanced)" + echo " help Show help for commands" + echo " setup-rails Prepare diaspora* development environment (install dependencies, migrate db)" + echo " setup-tests Prepare diaspora* test environment" echo echo "Run '$SCRIPT_NAME help COMMAND' for more information on a command." } @@ -556,6 +561,9 @@ case "$dia_command" in cucumber) dia_cucumber "$@" ;; + docker-compose) + dia_docker_compose "$@" + ;; exec) dia_exec "$@" ;; -- cgit v1.2.3 From 6dd8af70f76dfd1b4acc697482793b6437706ad9 Mon Sep 17 00:00:00 2001 From: Dennis Schubert Date: Tue, 20 Sep 2022 00:27:45 +0200 Subject: Force the dev-docker to always run as amd64 We download a static amd64 browser, so this would explode on arm64, for example. --- docker/develop/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/develop/Dockerfile b/docker/develop/Dockerfile index 6f9db164c..3b04347c6 100644 --- a/docker/develop/Dockerfile +++ b/docker/develop/Dockerfile @@ -1,4 +1,4 @@ -FROM ruby:2.7-slim-bullseye +FROM amd64/ruby:2.7-slim-bullseye RUN DEBIAN_FRONTEND=noninteractive \ apt-get update && \ -- cgit v1.2.3