From a90dc8d5b520dd21b01ef51ce1666c45b28a9121 Mon Sep 17 00:00:00 2001 From: Lukas Frischknecht Date: Fri, 28 Feb 2020 22:49:18 +0100 Subject: [PATCH] misc: add support for VSCode remote development (#1533) * Add support for VSCode remote development * misc: remote dev containers fixes Co-authored-by: Nicolas Giard --- .devcontainer/devcontainer.json | 33 ++++ .../Dockerfile | 5 +- .../config.yml | 0 .../docker-compose.yml | 38 ++-- dev/docker-common/wait.sh | 178 ------------------ dev/docker-mariadb/Dockerfile | 21 --- dev/docker-mariadb/config.yml | 10 - dev/docker-mariadb/docker-compose.yml | 50 ----- dev/docker-mariadb/init.sh | 6 - dev/docker-mssql/Dockerfile | 21 --- dev/docker-mssql/config.yml | 10 - dev/docker-mssql/docker-compose.yml | 40 ---- dev/docker-mssql/init.sh | 6 - dev/docker-mysql/Dockerfile | 21 --- dev/docker-mysql/config.yml | 10 - dev/docker-mysql/docker-compose.yml | 50 ----- dev/docker-mysql/init.sh | 6 - dev/docker-postgres/init.sh | 6 - dev/docker-sqlite/Dockerfile | 20 -- dev/docker-sqlite/config.yml | 6 - dev/docker-sqlite/docker-compose.yml | 22 --- 21 files changed, 52 insertions(+), 507 deletions(-) create mode 100644 .devcontainer/devcontainer.json rename dev/{docker-postgres => containers}/Dockerfile (74%) rename dev/{docker-postgres => containers}/config.yml (100%) rename dev/{docker-postgres => containers}/docker-compose.yml (61%) delete mode 100644 dev/docker-common/wait.sh delete mode 100644 dev/docker-mariadb/Dockerfile delete mode 100644 dev/docker-mariadb/config.yml delete mode 100644 dev/docker-mariadb/docker-compose.yml delete mode 100644 dev/docker-mariadb/init.sh delete mode 100644 dev/docker-mssql/Dockerfile delete mode 100644 dev/docker-mssql/config.yml delete mode 100644 dev/docker-mssql/docker-compose.yml delete mode 100644 dev/docker-mssql/init.sh delete mode 100644 dev/docker-mysql/Dockerfile delete mode 100644 dev/docker-mysql/config.yml delete mode 100644 dev/docker-mysql/docker-compose.yml delete mode 100644 dev/docker-mysql/init.sh delete mode 100644 dev/docker-postgres/init.sh delete mode 100644 dev/docker-sqlite/Dockerfile delete mode 100644 dev/docker-sqlite/config.yml delete mode 100644 dev/docker-sqlite/docker-compose.yml diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000..997523d6 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,33 @@ +// How to get remote container development working with VSCode: +// 1. Install "Remote Development" extension pack (ms-vscode-remote.vscode-remote-extensionpack) +// 2. Select "Remote Containers - Reopen in container" + +{ + "name": "Wiki.js", + "dockerComposeFile": [ + "../dev/containers/docker-compose.yml" + ], + "forwardPorts": [3000, 3001], + "service": "wiki", + "workspaceFolder": "/wiki", + "settings": { + "terminal.integrated.shell.linux": "/bin/bash" + }, + "extensions": [ + "EditorConfig.editorconfig", + "dbaeumer.vscode-eslint", + "christian-kohler.path-intellisense", + "mrmlnc.vscode-puglint", + "octref.vetur", + "dzannotti.vscode-babel-coloring", + "wayou.vscode-todo-highlight", + "visualstudioexptteam.vscodeintellicode", + "lukas-tr.materialdesignicons-intellisense", + "codezombiech.gitignore", + "kumar-harsh.graphql-for-vscode", + "mrmlnc.vscode-duplicate", + "oderwat.indent-rainbow", + "christian-kohler.npm-intellisense" +], + "postCreateCommand": ["yarn", "install"] +} diff --git a/dev/docker-postgres/Dockerfile b/dev/containers/Dockerfile similarity index 74% rename from dev/docker-postgres/Dockerfile rename to dev/containers/Dockerfile index 3a0f7113..a4a6f8ea 100644 --- a/dev/docker-postgres/Dockerfile +++ b/dev/containers/Dockerfile @@ -1,7 +1,7 @@ # -- DEV DOCKERFILE -- # -- DO NOT USE IN PRODUCTION! -- -FROM node:10-alpine +FROM node:12-alpine LABEL maintainer "requarks.io" RUN apk update && \ @@ -9,9 +9,6 @@ RUN apk update && \ mkdir -p /wiki WORKDIR /wiki -COPY package.json . -RUN yarn --silent -COPY ./dev/docker-postgres/init.sh ./init.sh ENV dockerdev 1 ENV DEVDB postgres diff --git a/dev/docker-postgres/config.yml b/dev/containers/config.yml similarity index 100% rename from dev/docker-postgres/config.yml rename to dev/containers/config.yml diff --git a/dev/docker-postgres/docker-compose.yml b/dev/containers/docker-compose.yml similarity index 61% rename from dev/docker-postgres/docker-compose.yml rename to dev/containers/docker-compose.yml index 414b5d2c..dce10ba3 100644 --- a/dev/docker-postgres/docker-compose.yml +++ b/dev/containers/docker-compose.yml @@ -27,40 +27,38 @@ services: ports: - "3001:8080" - solr: - image: solr:7-alpine - logging: - driver: "none" - networks: - - wikinet - ports: - - "8983:8983" - volumes: - - solr-data:/opt/solr/server/solr/mycores - entrypoint: - - docker-entrypoint.sh - - solr-precreate - - wiki + # solr: + # image: solr:7-alpine + # logging: + # driver: "none" + # networks: + # - wikinet + # ports: + # - "8983:8983" + # volumes: + # - solr-data:/opt/solr/server/solr/mycores + # entrypoint: + # - docker-entrypoint.sh + # - solr-precreate + # - wiki wiki: build: - context: . - dockerfile: dev/docker-postgres/Dockerfile + context: ../.. + dockerfile: dev/containers/Dockerfile depends_on: - db - - solr networks: - wikinet ports: - "3000:3000" volumes: - - .:/wiki + - ../..:/wiki - /wiki/node_modules - command: ["sh", "./dev/docker-postgres/init.sh"] networks: wikinet: volumes: db-data: - solr-data: + # solr-data: diff --git a/dev/docker-common/wait.sh b/dev/docker-common/wait.sh deleted file mode 100644 index 071c2bee..00000000 --- a/dev/docker-common/wait.sh +++ /dev/null @@ -1,178 +0,0 @@ -#!/usr/bin/env bash -# Use this script to test if a given TCP host/port are available - -WAITFORIT_cmdname=${0##*/} - -echoerr() { if [[ $WAITFORIT_QUIET -ne 1 ]]; then echo "$@" 1>&2; fi } - -usage() -{ - cat << USAGE >&2 -Usage: - $WAITFORIT_cmdname host:port [-s] [-t timeout] [-- command args] - -h HOST | --host=HOST Host or IP under test - -p PORT | --port=PORT TCP port under test - Alternatively, you specify the host and port as host:port - -s | --strict Only execute subcommand if the test succeeds - -q | --quiet Don't output any status messages - -t TIMEOUT | --timeout=TIMEOUT - Timeout in seconds, zero for no timeout - -- COMMAND ARGS Execute command with args after the test finishes -USAGE - exit 1 -} - -wait_for() -{ - if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then - echoerr "$WAITFORIT_cmdname: waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT" - else - echoerr "$WAITFORIT_cmdname: waiting for $WAITFORIT_HOST:$WAITFORIT_PORT without a timeout" - fi - WAITFORIT_start_ts=$(date +%s) - while : - do - if [[ $WAITFORIT_ISBUSY -eq 1 ]]; then - nc -z $WAITFORIT_HOST $WAITFORIT_PORT - WAITFORIT_result=$? - else - (echo > /dev/tcp/$WAITFORIT_HOST/$WAITFORIT_PORT) >/dev/null 2>&1 - WAITFORIT_result=$? - fi - if [[ $WAITFORIT_result -eq 0 ]]; then - WAITFORIT_end_ts=$(date +%s) - echoerr "$WAITFORIT_cmdname: $WAITFORIT_HOST:$WAITFORIT_PORT is available after $((WAITFORIT_end_ts - WAITFORIT_start_ts)) seconds" - break - fi - sleep 1 - done - return $WAITFORIT_result -} - -wait_for_wrapper() -{ - # In order to support SIGINT during timeout: http://unix.stackexchange.com/a/57692 - if [[ $WAITFORIT_QUIET -eq 1 ]]; then - timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --quiet --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT & - else - timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT & - fi - WAITFORIT_PID=$! - trap "kill -INT -$WAITFORIT_PID" INT - wait $WAITFORIT_PID - WAITFORIT_RESULT=$? - if [[ $WAITFORIT_RESULT -ne 0 ]]; then - echoerr "$WAITFORIT_cmdname: timeout occurred after waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT" - fi - return $WAITFORIT_RESULT -} - -# process arguments -while [[ $# -gt 0 ]] -do - case "$1" in - *:* ) - WAITFORIT_hostport=(${1//:/ }) - WAITFORIT_HOST=${WAITFORIT_hostport[0]} - WAITFORIT_PORT=${WAITFORIT_hostport[1]} - shift 1 - ;; - --child) - WAITFORIT_CHILD=1 - shift 1 - ;; - -q | --quiet) - WAITFORIT_QUIET=1 - shift 1 - ;; - -s | --strict) - WAITFORIT_STRICT=1 - shift 1 - ;; - -h) - WAITFORIT_HOST="$2" - if [[ $WAITFORIT_HOST == "" ]]; then break; fi - shift 2 - ;; - --host=*) - WAITFORIT_HOST="${1#*=}" - shift 1 - ;; - -p) - WAITFORIT_PORT="$2" - if [[ $WAITFORIT_PORT == "" ]]; then break; fi - shift 2 - ;; - --port=*) - WAITFORIT_PORT="${1#*=}" - shift 1 - ;; - -t) - WAITFORIT_TIMEOUT="$2" - if [[ $WAITFORIT_TIMEOUT == "" ]]; then break; fi - shift 2 - ;; - --timeout=*) - WAITFORIT_TIMEOUT="${1#*=}" - shift 1 - ;; - --) - shift - WAITFORIT_CLI=("$@") - break - ;; - --help) - usage - ;; - *) - echoerr "Unknown argument: $1" - usage - ;; - esac -done - -if [[ "$WAITFORIT_HOST" == "" || "$WAITFORIT_PORT" == "" ]]; then - echoerr "Error: you need to provide a host and port to test." - usage -fi - -WAITFORIT_TIMEOUT=${WAITFORIT_TIMEOUT:-15} -WAITFORIT_STRICT=${WAITFORIT_STRICT:-0} -WAITFORIT_CHILD=${WAITFORIT_CHILD:-0} -WAITFORIT_QUIET=${WAITFORIT_QUIET:-0} - -# check to see if timeout is from busybox? -WAITFORIT_TIMEOUT_PATH=$(type -p timeout) -WAITFORIT_TIMEOUT_PATH=$(realpath $WAITFORIT_TIMEOUT_PATH 2>/dev/null || readlink -f $WAITFORIT_TIMEOUT_PATH) -if [[ $WAITFORIT_TIMEOUT_PATH =~ "busybox" ]]; then - WAITFORIT_ISBUSY=1 - WAITFORIT_BUSYTIMEFLAG="-t" - -else - WAITFORIT_ISBUSY=0 - WAITFORIT_BUSYTIMEFLAG="" -fi - -if [[ $WAITFORIT_CHILD -gt 0 ]]; then - wait_for - WAITFORIT_RESULT=$? - exit $WAITFORIT_RESULT -else - if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then - wait_for_wrapper - WAITFORIT_RESULT=$? - else - wait_for - WAITFORIT_RESULT=$? - fi -fi - -if [[ $WAITFORIT_CLI != "" ]]; then - if [[ $WAITFORIT_RESULT -ne 0 && $WAITFORIT_STRICT -eq 1 ]]; then - echoerr "$WAITFORIT_cmdname: strict mode, refusing to execute subprocess" - exit $WAITFORIT_RESULT - fi - exec "${WAITFORIT_CLI[@]}" -else - exit $WAITFORIT_RESULT -fi diff --git a/dev/docker-mariadb/Dockerfile b/dev/docker-mariadb/Dockerfile deleted file mode 100644 index 7d303558..00000000 --- a/dev/docker-mariadb/Dockerfile +++ /dev/null @@ -1,21 +0,0 @@ -# -- DEV DOCKERFILE -- -# -- DO NOT USE IN PRODUCTION! -- - -FROM node:10-alpine -LABEL maintainer "requarks.io" - -RUN apk update && \ - apk add bash curl git python make g++ nano openssh gnupg --no-cache && \ - mkdir -p /wiki - -WORKDIR /wiki -COPY package.json . -RUN yarn --silent -COPY ./dev/docker-mariadb/init.sh ./init.sh - -ENV dockerdev 1 -ENV DEVDB mariadb - -EXPOSE 3000 - -CMD ["tail", "-f", "/dev/null"] diff --git a/dev/docker-mariadb/config.yml b/dev/docker-mariadb/config.yml deleted file mode 100644 index 78f30aca..00000000 --- a/dev/docker-mariadb/config.yml +++ /dev/null @@ -1,10 +0,0 @@ -port: 3000 -bindIP: 0.0.0.0 -db: - type: mariadb - host: db - port: 3306 - user: wikijs - pass: wikijsrocks - db: wiki -logLevel: info diff --git a/dev/docker-mariadb/docker-compose.yml b/dev/docker-mariadb/docker-compose.yml deleted file mode 100644 index 92edb67c..00000000 --- a/dev/docker-mariadb/docker-compose.yml +++ /dev/null @@ -1,50 +0,0 @@ -# -- DEV DOCKER-COMPOSE -- -# -- DO NOT USE IN PRODUCTION! -- - -version: "3" -services: - db: - image: mariadb:10.3 - environment: - MYSQL_DATABASE: wiki - MYSQL_PASSWORD: wikijsrocks - MYSQL_USER: wikijs - MYSQL_ROOT_PASSWORD: wikijsrocks - logging: - driver: "none" - volumes: - - db-data:/var/lib/mysql - networks: - - wikinet - ports: - - "13306:3306" - - adminer: - image: adminer:latest - logging: - driver: "none" - networks: - - wikinet - ports: - - "3001:8080" - - wiki: - build: - context: . - dockerfile: dev/docker-mariadb/Dockerfile - depends_on: - - db - networks: - - wikinet - ports: - - "3000:3000" - volumes: - - .:/wiki - - /wiki/node_modules - command: ["sh", "./dev/docker-mariadb/init.sh"] - -networks: - wikinet: - -volumes: - db-data: diff --git a/dev/docker-mariadb/init.sh b/dev/docker-mariadb/init.sh deleted file mode 100644 index 1b0dc81d..00000000 --- a/dev/docker-mariadb/init.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -echo "Waiting for mariadb to start up..." -bash ./dev/docker-common/wait.sh db:3306 -echo "=== READY ===" -tail -f /dev/null diff --git a/dev/docker-mssql/Dockerfile b/dev/docker-mssql/Dockerfile deleted file mode 100644 index b8a9c56c..00000000 --- a/dev/docker-mssql/Dockerfile +++ /dev/null @@ -1,21 +0,0 @@ -# -- DEV DOCKERFILE -- -# -- DO NOT USE IN PRODUCTION! -- - -FROM node:10-alpine -LABEL maintainer "requarks.io" - -RUN apk update && \ - apk add bash curl git python make g++ nano openssh gnupg --no-cache && \ - mkdir -p /wiki - -WORKDIR /wiki -COPY package.json . -RUN yarn --silent -COPY ./dev/docker-mssql/init.sh ./init.sh - -ENV dockerdev 1 -ENV DEVDB mssql - -EXPOSE 3000 - -CMD ["tail", "-f", "/dev/null"] diff --git a/dev/docker-mssql/config.yml b/dev/docker-mssql/config.yml deleted file mode 100644 index 3993b442..00000000 --- a/dev/docker-mssql/config.yml +++ /dev/null @@ -1,10 +0,0 @@ -port: 3000 -bindIP: 0.0.0.0 -db: - type: mssql - host: db - port: 1433 - user: SA - pass: W1kiJSR0cks! - db: wiki -logLevel: info diff --git a/dev/docker-mssql/docker-compose.yml b/dev/docker-mssql/docker-compose.yml deleted file mode 100644 index 0f66e095..00000000 --- a/dev/docker-mssql/docker-compose.yml +++ /dev/null @@ -1,40 +0,0 @@ -# -- DEV DOCKER-COMPOSE -- -# -- DO NOT USE IN PRODUCTION! -- - -version: "3" -services: - db: - image: mcr.microsoft.com/mssql/server:2017-latest - environment: - ACCEPT_EULA: 'Y' - MSSQL_PID: Developer - SA_PASSWORD: W1kiJSR0cks! - logging: - driver: "none" - volumes: - - db-data:/var/opt/mssql - networks: - - wikinet - ports: - - "11433:1433" - - wiki: - build: - context: . - dockerfile: dev/docker-mssql/Dockerfile - depends_on: - - db - networks: - - wikinet - ports: - - "3000:3000" - volumes: - - .:/wiki - - /wiki/node_modules - command: ["sh", "./dev/docker-mssql/init.sh"] - -networks: - wikinet: - -volumes: - db-data: diff --git a/dev/docker-mssql/init.sh b/dev/docker-mssql/init.sh deleted file mode 100644 index 23f4bf15..00000000 --- a/dev/docker-mssql/init.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -echo "Waiting for mssql to start up..." -bash ./dev/docker-common/wait.sh db:1433 -echo "=== READY ===" -tail -f /dev/null diff --git a/dev/docker-mysql/Dockerfile b/dev/docker-mysql/Dockerfile deleted file mode 100644 index b3fa01b1..00000000 --- a/dev/docker-mysql/Dockerfile +++ /dev/null @@ -1,21 +0,0 @@ -# -- DEV DOCKERFILE -- -# -- DO NOT USE IN PRODUCTION! -- - -FROM node:10-alpine -LABEL maintainer "requarks.io" - -RUN apk update && \ - apk add bash curl git python make g++ nano openssh gnupg --no-cache && \ - mkdir -p /wiki - -WORKDIR /wiki -COPY package.json . -RUN yarn --silent -COPY ./dev/docker-mysql/init.sh ./init.sh - -ENV dockerdev 1 -ENV DEVDB mysql - -EXPOSE 3000 - -CMD ["tail", "-f", "/dev/null"] diff --git a/dev/docker-mysql/config.yml b/dev/docker-mysql/config.yml deleted file mode 100644 index e99a9f92..00000000 --- a/dev/docker-mysql/config.yml +++ /dev/null @@ -1,10 +0,0 @@ -port: 3000 -bindIP: 0.0.0.0 -db: - type: mysql - host: db - port: 3306 - user: wikijs - pass: wikijsrocks - db: wiki -logLevel: info diff --git a/dev/docker-mysql/docker-compose.yml b/dev/docker-mysql/docker-compose.yml deleted file mode 100644 index e32782e1..00000000 --- a/dev/docker-mysql/docker-compose.yml +++ /dev/null @@ -1,50 +0,0 @@ -# -- DEV DOCKER-COMPOSE -- -# -- DO NOT USE IN PRODUCTION! -- - -version: "3" -services: - db: - image: mysql:5.7 - environment: - MYSQL_DATABASE: wiki - MYSQL_PASSWORD: wikijsrocks - MYSQL_USER: wikijs - MYSQL_ROOT_PASSWORD: wikijsrocks - logging: - driver: "none" - volumes: - - db-data:/var/lib/mysql - networks: - - wikinet - ports: - - "13306:3306" - - adminer: - image: adminer:latest - logging: - driver: "none" - networks: - - wikinet - ports: - - "3001:8080" - - wiki: - build: - context: . - dockerfile: dev/docker-mysql/Dockerfile - depends_on: - - db - networks: - - wikinet - ports: - - "3000:3000" - volumes: - - .:/wiki - - /wiki/node_modules - command: ["sh", "./dev/docker-mysql/init.sh"] - -networks: - wikinet: - -volumes: - db-data: diff --git a/dev/docker-mysql/init.sh b/dev/docker-mysql/init.sh deleted file mode 100644 index d70876cc..00000000 --- a/dev/docker-mysql/init.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -echo "Waiting for mysql to start up..." -bash ./dev/docker-common/wait.sh db:3306 -echo "=== READY ===" -tail -f /dev/null diff --git a/dev/docker-postgres/init.sh b/dev/docker-postgres/init.sh deleted file mode 100644 index daf1b184..00000000 --- a/dev/docker-postgres/init.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -echo "Waiting for postgres to start up..." -bash ./dev/docker-common/wait.sh db:5432 -echo "=== READY ===" -tail -f /dev/null diff --git a/dev/docker-sqlite/Dockerfile b/dev/docker-sqlite/Dockerfile deleted file mode 100644 index c9a64df8..00000000 --- a/dev/docker-sqlite/Dockerfile +++ /dev/null @@ -1,20 +0,0 @@ -# -- DEV DOCKERFILE -- -# -- DO NOT USE IN PRODUCTION! -- - -FROM node:10-alpine -LABEL maintainer "requarks.io" - -RUN apk update && \ - apk add bash curl git python make g++ nano openssh gnupg sqlite --no-cache && \ - mkdir -p /wiki - -WORKDIR /wiki -COPY package.json . -RUN yarn --silent - -ENV dockerdev 1 -ENV DEVDB sqlite - -EXPOSE 3000 - -CMD ["tail", "-f", "/dev/null"] diff --git a/dev/docker-sqlite/config.yml b/dev/docker-sqlite/config.yml deleted file mode 100644 index edb96072..00000000 --- a/dev/docker-sqlite/config.yml +++ /dev/null @@ -1,6 +0,0 @@ -port: 3000 -bindIP: 0.0.0.0 -db: - type: sqlite - storage: /wiki/db.sqlite -logLevel: info diff --git a/dev/docker-sqlite/docker-compose.yml b/dev/docker-sqlite/docker-compose.yml deleted file mode 100644 index 4b084778..00000000 --- a/dev/docker-sqlite/docker-compose.yml +++ /dev/null @@ -1,22 +0,0 @@ -# -- DEV DOCKER-COMPOSE -- -# -- DO NOT USE IN PRODUCTION! -- - -version: "3" -services: - wiki: - build: - context: . - dockerfile: dev/docker-sqlite/Dockerfile - networks: - - wikinet - ports: - - "3000:3000" - volumes: - - .:/wiki - - /wiki/node_modules - -networks: - wikinet: - -volumes: - db-data: