diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..79fff8b --- /dev/null +++ b/.dockerignore @@ -0,0 +1,7 @@ +.env +.git +.gitignore +.travis.yml +.vscode +node_modules +test \ No newline at end of file diff --git a/.env b/.env new file mode 100644 index 0000000..39f3876 --- /dev/null +++ b/.env @@ -0,0 +1,4 @@ +COMPOSE_CONVERT_WINDOWS_PATHS=1 +XBS_API_HOSTNAME=xbsapi.yourdomain.org +XBS_DB_PASSWORD=xbsdbpass +XBS_DB_USERNAME=xbsdb \ No newline at end of file diff --git a/acme.json b/acme.json new file mode 100644 index 0000000..e69de29 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..5979f95 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,51 @@ +version: "3.7" + +volumes: + xbs-db-data: + +services: + db: + container_name: "xbs-db" + environment: + - "MONGO_INITDB_DATABASE=xbrowsersync" + - "MONGO_INITDB_ROOT_PASSWORD=$XBS_DB_PASSWORD" + - "MONGO_INITDB_ROOT_USERNAME=$XBS_DB_USERNAME" + image: "mongo:4.0.4" + labels: + - "traefik.enable=false" + ports: + - "27017:27017" + restart: "always" + volumes: + - "xbs-db-data:/data/db" + - "./mongoconfig.js:/docker-entrypoint-initdb.d/mongoconfig.js" + api: + container_name: "xbs-api" + depends_on: + - "db" + environment: + - "XBROWSERSYNC_DB_PWD=$XBS_DB_PASSWORD" + - "XBROWSERSYNC_DB_USER=$XBS_DB_USERNAME" + image: "xbrowsersync-api:1.1.6" + labels: + - "traefik.frontend.rule=Host:$XBS_API_HOSTNAME" + - "traefik.port=8080" + restart: "always" + volumes: + - "./settings.json:/usr/src/api/config/settings.json" + reverse-proxy: + command: "--api --docker" + container_name: "xbs-reverse-proxy" + depends_on: + - "api" + image: traefik:1.7.5-alpine + labels: + - "traefik.enable=false" + ports: + - "443:443" + - "80:80" + restart: "always" + volumes: + - "/var/run/docker.sock:/var/run/docker.sock" + - "./acme.json:/acme.json" + - "./traefik.toml:/traefik.toml" \ No newline at end of file diff --git a/dockerfile b/dockerfile new file mode 100644 index 0000000..0604f09 --- /dev/null +++ b/dockerfile @@ -0,0 +1,23 @@ +FROM node:10.14.2-alpine + +# Set environment variables +ENV XBROWSERSYNC_API_VERSION 1.1.6 +ENV XBROWSERSYNC_API_PORT 8080 +ENV XBROWSERSYNC_DB_USER $XBROWSERSYNC_DB_USER +ENV XBROWSERSYNC_DB_PWD $XBROWSERSYNC_DB_PWD + +WORKDIR /usr/src/api + +# Download release and unpack +RUN wget -q -O release.tar.gz https://github.com/xBrowserSync/API/archive/v$XBROWSERSYNC_API_VERSION.tar.gz \ + && tar -C . -xzf release.tar.gz \ + && rm release.tar.gz \ + && mv API-$XBROWSERSYNC_API_VERSION/* . \ + && rm -rf API-$XBROWSERSYNC_API_VERSION/ + +# Install dependencies +RUN npm install + +# Expose port and start api +EXPOSE $XBROWSERSYNC_API_PORT +CMD [ "node", "dist/api.js"] \ No newline at end of file diff --git a/mongoconfig.js b/mongoconfig.js new file mode 100644 index 0000000..3bb7d2c --- /dev/null +++ b/mongoconfig.js @@ -0,0 +1,2 @@ +db.newsynclogs.createIndex( { "expiresAt": 1 }, { expireAfterSeconds: 0 } ); +db.newsynclogs.createIndex( { "ipAddress": 1 } ); \ No newline at end of file diff --git a/settings.json b/settings.json new file mode 100644 index 0000000..43cb51c --- /dev/null +++ b/settings.json @@ -0,0 +1,5 @@ +{ + "db": { + "host": "db" + } +} diff --git a/traefik.toml b/traefik.toml new file mode 100644 index 0000000..de951b7 --- /dev/null +++ b/traefik.toml @@ -0,0 +1,23 @@ +defaultEntryPoints = ["http", "https"] + +[entryPoints] + [entryPoints.http] + address = ":80" + [entryPoints.http.redirect] + entryPoint = "https" + [entryPoints.https] + address = ":443" + [entryPoints.https.tls] + +[retry] + +[api] +dashboard = false + +[acme] +email = "you@yourdomain.org" +storage = "acme.json" +entryPoint = "https" +onHostRule = true + [acme.httpChallenge] + entryPoint = "http" \ No newline at end of file