From f39ab931963eb1fa469adef0d61184fb9a460ffb Mon Sep 17 00:00:00 2001 From: Sven Anders Date: Sun, 15 Dec 2024 09:11:58 +0100 Subject: [PATCH 1/5] Add devcontainer to dawarich --- .devcontainer/Dockerfile | 42 +++++++++++++++++ .devcontainer/devcontainer.json | 17 +++++++ .devcontainer/docker-compose.yml | 79 ++++++++++++++++++++++++++++++++ .gitignore | 9 ++++ DEVELOPMENT.md | 24 ++++++++++ 5 files changed, 171 insertions(+) create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/devcontainer.json create mode 100644 .devcontainer/docker-compose.yml create mode 100644 DEVELOPMENT.md diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 00000000..561c959a --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,42 @@ +# Basis-Image für Ruby und Node.js +FROM ruby:3.3.4-alpine + +ENV APP_PATH=/var/app +ENV BUNDLE_VERSION=2.5.9 +ENV BUNDLE_PATH=/usr/local/bundle/gems +ENV TMP_PATH=/tmp/ +ENV RAILS_LOG_TO_STDOUT=true +ENV RAILS_PORT=3000 + +# Install dependencies for application +RUN apk -U add --no-cache \ + build-base \ + git \ + postgresql-dev \ + postgresql-client \ + libxml2-dev \ + libxslt-dev \ + nodejs \ + yarn \ + imagemagick \ + tzdata \ + less \ + yaml-dev \ + # gcompat for nokogiri on mac m1 + gcompat \ + && rm -rf /var/cache/apk/* \ + && mkdir -p $APP_PATH + +RUN gem install bundler --version "$BUNDLE_VERSION" \ + && rm -rf $GEM_HOME/cache/* + +RUN adduser -D -h ${APP_PATH} vscode + +# Navigate to app directory +WORKDIR $APP_PATH + +USER vscode + +EXPOSE $RAILS_PORT + + diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000..c93d6994 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,17 @@ +{ + "name": "Ruby and Node DevContainer", + "dockerComposeFile": ["docker-compose.yml"], + "service": "dawarich_dev", + "settings": { + "terminal.integrated.defaultProfile.linux": "bash" + }, + "extensions": [ + "rebornix.ruby", // Ruby-Unterstützung + "esbenp.prettier-vscode", // Prettier für JS-Formatierung + "dbaeumer.vscode-eslint" // ESLint für JavaScript + ], + "postCreateCommand": "yarn install && bundle config set --local path 'vendor/bundle' && bundle install --jobs 20 --retry 5", + "forwardPorts": [3000], // Weiterleitung für Rails-Server + "remoteUser": "vscode", + "workspaceFolder": "/var/app" +} diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml new file mode 100644 index 00000000..5e2f006a --- /dev/null +++ b/.devcontainer/docker-compose.yml @@ -0,0 +1,79 @@ +networks: + dawarich: +services: + dawarich_dev: + build: + context: . + dockerfile: Dockerfile + container_name: dawarich_dev + volumes: + - "${PWD}:/var/app:cached" + - dawarich_gem_cache_app:/usr/local/bundle/gems_app + - dawarich_public:/var/app/public + - dawarich_watched:/var/app/tmp/imports/watched + networks: + - dawarich + ports: + - 3000:3000 + - 9394:9394 + stdin_open: true + tty: true + environment: + RAILS_ENV: development + REDIS_URL: redis://dawarich_redis:6379/0 + DATABASE_HOST: dawarich_db + DATABASE_USERNAME: postgres + DATABASE_PASSWORD: password + DATABASE_NAME: dawarich_development + MIN_MINUTES_SPENT_IN_CITY: 60 + APPLICATION_HOST: localhost + APPLICATION_HOSTS: localhost + TIME_ZONE: Europe/London + APPLICATION_PROTOCOL: http + DISTANCE_UNIT: km + PHOTON_API_HOST: photon.komoot.io + PHOTON_API_USE_HTTPS: true + PROMETHEUS_EXPORTER_ENABLED: false + PROMETHEUS_EXPORTER_HOST: 0.0.0.0 + PROMETHEUS_EXPORTER_PORT: 9394 + ENABLE_TELEMETRY: false # More on telemetry: https://dawarich.app/docs/tutorials/telemetry + dawarich_redis: + image: redis:7.0-alpine + container_name: dawarich_redis + command: redis-server + networks: + - dawarich + volumes: + - dawarich_shared:/data + restart: always + healthcheck: + test: [ "CMD", "redis-cli", "--raw", "incr", "ping" ] + interval: 10s + retries: 5 + start_period: 30s + timeout: 10s + dawarich_db: + image: postgres:14.2-alpine + container_name: dawarich_db + volumes: + - dawarich_db_data:/var/lib/postgresql/data + - dawarich_shared:/var/shared + networks: + - dawarich + restart: always + healthcheck: + test: [ "CMD-SHELL", "pg_isready -U postgres -d dawarich_development" ] + interval: 10s + retries: 5 + start_period: 30s + timeout: 10s + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: password +volumes: + dawarich_db_data: + dawarich_gem_cache_app: + dawarich_gem_cache_sidekiq: + dawarich_shared: + dawarich_public: + dawarich_watched: diff --git a/.gitignore b/.gitignore index d53fcdf6..b3803267 100644 --- a/.gitignore +++ b/.gitignore @@ -51,3 +51,12 @@ !/app/assets/builds/.keep .DS_Store .env + +.devcontainer/.onCreateCommandMarker +.devcontainer/.postCreateCommandMarker +.devcontainer/.updateContentCommandMarker + +.vscode-server/ +.ash_history +.cache/ +.dotnet/ diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md new file mode 100644 index 00000000..5808ee8a --- /dev/null +++ b/DEVELOPMENT.md @@ -0,0 +1,24 @@ +If you want to develop with dawarich you can use the devcontainer, with your IDE. It is tested with visual studio code. + +Load the directory in Vs-Code and press F1. And Run the command: `Dev Containers: Rebuild Containers` after a while you should see a terminal. + +Now you can create/prepare the Database (this need to be done once): +```bash +bundle exec rails db:create +bundle exec rails db:prepare +bundle exec rake data:migrate +bundle exec rake db:seed +``` + +Afterwards you can run sidekiq: +```bash +bundle exec sidekiq + +``` + +And in a second terminal the dawarich-app: +```bash +bundle exec bin/dev +``` + +You can connect with a web browser to http://127.0.0.l:3000/ and login with the default credentials. From 72c588e2617716f788df8e23015da247801ba6aa Mon Sep 17 00:00:00 2001 From: Sven Anders Date: Sun, 15 Dec 2024 17:16:56 +0100 Subject: [PATCH 2/5] Do gem Update to 3.5.7 --- .devcontainer/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 561c959a..4239ee5d 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -27,9 +27,10 @@ RUN apk -U add --no-cache \ && rm -rf /var/cache/apk/* \ && mkdir -p $APP_PATH -RUN gem install bundler --version "$BUNDLE_VERSION" \ +RUN gem update --system 3.5.7 && gem install bundler --version "$BUNDLE_VERSION" \ && rm -rf $GEM_HOME/cache/* + RUN adduser -D -h ${APP_PATH} vscode # Navigate to app directory From b89a2096a798dd2100fd1ad6fccf52afb1cdfcfa Mon Sep 17 00:00:00 2001 From: Sven Anders Date: Sun, 15 Dec 2024 17:25:42 +0100 Subject: [PATCH 3/5] Use root user for dawarich in docker container --- .devcontainer/Dockerfile | 5 +++-- .devcontainer/devcontainer.json | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 4239ee5d..d830a97b 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -31,12 +31,13 @@ RUN gem update --system 3.5.7 && gem install bundler --version "$BUNDLE_VERSION" && rm -rf $GEM_HOME/cache/* -RUN adduser -D -h ${APP_PATH} vscode +# FIXME It would be a good idea to use a other user than root, but this lead to permission error on export and maybe more yet. +# RUN adduser -D -h ${APP_PATH} vscode +USER root # Navigate to app directory WORKDIR $APP_PATH -USER vscode EXPOSE $RAILS_PORT diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index c93d6994..2442d774 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -12,6 +12,6 @@ ], "postCreateCommand": "yarn install && bundle config set --local path 'vendor/bundle' && bundle install --jobs 20 --retry 5", "forwardPorts": [3000], // Weiterleitung für Rails-Server - "remoteUser": "vscode", + "remoteUser": "root", "workspaceFolder": "/var/app" } From ccb53324e37526e94d4cb4ca0053efd1305e259b Mon Sep 17 00:00:00 2001 From: Sven Anders Date: Sun, 15 Dec 2024 17:26:56 +0100 Subject: [PATCH 4/5] Use root user for dawarich in docker container --- .devcontainer/Dockerfile | 3 --- 1 file changed, 3 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index d830a97b..39a87c65 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -30,7 +30,6 @@ RUN apk -U add --no-cache \ RUN gem update --system 3.5.7 && gem install bundler --version "$BUNDLE_VERSION" \ && rm -rf $GEM_HOME/cache/* - # FIXME It would be a good idea to use a other user than root, but this lead to permission error on export and maybe more yet. # RUN adduser -D -h ${APP_PATH} vscode USER root @@ -38,7 +37,5 @@ USER root # Navigate to app directory WORKDIR $APP_PATH - EXPOSE $RAILS_PORT - From 1bb8fa9e674c120b2b11eeb25fceb325631378c1 Mon Sep 17 00:00:00 2001 From: Sven Anders Date: Mon, 16 Dec 2024 14:28:54 +0100 Subject: [PATCH 5/5] Correct development doc and translate devcontainer.json comments to english --- .devcontainer/devcontainer.json | 8 ++++---- DEVELOPMENT.md | 3 --- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 2442d774..8acaef4f 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -6,12 +6,12 @@ "terminal.integrated.defaultProfile.linux": "bash" }, "extensions": [ - "rebornix.ruby", // Ruby-Unterstützung - "esbenp.prettier-vscode", // Prettier für JS-Formatierung - "dbaeumer.vscode-eslint" // ESLint für JavaScript + "rebornix.ruby", // Ruby-Support + "esbenp.prettier-vscode", // Prettier for JS-Formating + "dbaeumer.vscode-eslint" // ESLint for JavaScript ], "postCreateCommand": "yarn install && bundle config set --local path 'vendor/bundle' && bundle install --jobs 20 --retry 5", - "forwardPorts": [3000], // Weiterleitung für Rails-Server + "forwardPorts": [3000], // Redirect to Rails-App-Server "remoteUser": "root", "workspaceFolder": "/var/app" } diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 5808ee8a..8b1b6a97 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -4,10 +4,7 @@ Load the directory in Vs-Code and press F1. And Run the command: `Dev Containers Now you can create/prepare the Database (this need to be done once): ```bash -bundle exec rails db:create bundle exec rails db:prepare -bundle exec rake data:migrate -bundle exec rake db:seed ``` Afterwards you can run sidekiq: