From e3d4680ec429a03cb53733627fdef2fc5efa4f19 Mon Sep 17 00:00:00 2001 From: rishighan Date: Mon, 12 Sep 2022 12:46:36 -0700 Subject: [PATCH] Deploy website - based on 0ad5eeda7119f7190c14057efe618c9bf419887e --- 404.html | 4 ++-- assets/js/{5946dff2.9b71f80d.js => 5946dff2.40a759c3.js} | 2 +- .../{runtime~main.cd6d7dc8.js => runtime~main.3f3e3a68.js} | 2 +- blog/archive/index.html | 4 ++-- blog/first-blog-post/index.html | 4 ++-- blog/index.html | 4 ++-- blog/long-blog-post/index.html | 4 ++-- blog/mdx-blog-post/index.html | 4 ++-- blog/tags/docusaurus/index.html | 4 ++-- blog/tags/facebook/index.html | 4 ++-- blog/tags/hello/index.html | 4 ++-- blog/tags/hola/index.html | 4 ++-- blog/tags/index.html | 4 ++-- blog/welcome/index.html | 4 ++-- docs/architecture/index.html | 4 ++-- docs/intro/index.html | 4 ++-- docs/resources/index.html | 4 ++-- docs/unRAID_dockercompose/index.html | 6 +++--- docs/unraid_install/index.html | 4 ++-- index.html | 4 ++-- markdown-page/index.html | 4 ++-- 21 files changed, 41 insertions(+), 41 deletions(-) rename assets/js/{5946dff2.9b71f80d.js => 5946dff2.40a759c3.js} (62%) rename assets/js/{runtime~main.cd6d7dc8.js => runtime~main.3f3e3a68.js} (98%) diff --git a/404.html b/404.html index 0ff2c88..80be9e4 100644 --- a/404.html +++ b/404.html @@ -5,13 +5,13 @@ Page Not Found | ThreeTwo! - +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- + \ No newline at end of file diff --git a/assets/js/5946dff2.9b71f80d.js b/assets/js/5946dff2.40a759c3.js similarity index 62% rename from assets/js/5946dff2.9b71f80d.js rename to assets/js/5946dff2.40a759c3.js index cdc44c7..c9d0e19 100644 --- a/assets/js/5946dff2.9b71f80d.js +++ b/assets/js/5946dff2.40a759c3.js @@ -1 +1 @@ -"use strict";(self.webpackChunkthreetwo_docs=self.webpackChunkthreetwo_docs||[]).push([[813],{3905:function(e,n,t){t.d(n,{Zo:function(){return p},kt:function(){return d}});var o=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function i(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=o.createContext({}),c=function(e){var n=o.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},p=function(e){var n=c(e.components);return o.createElement(s.Provider,{value:n},e.children)},m={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},u=o.forwardRef((function(e,n){var t=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(t),d=r,h=u["".concat(s,".").concat(d)]||u[d]||m[d]||a;return t?o.createElement(h,i(i({ref:n},p),{},{components:t})):o.createElement(h,i({ref:n},p))}));function d(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var a=t.length,i=new Array(a);i[0]=u;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var c=2;c")," with actual values:")),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"UNDERLYING_HOSTNAME=\nCOMICS_DIRECTORY=\nUSERDATA_DIRECTORY=/mnt/user/appdata/threetwo/userdata\n\nCOMICVINE_API_KEY=\n\nLOGGER=true\nLOGLEVEL=info\nSERVICEDIR=dist/services\n\nCHOKIDAR_USEPOLLING=true\n\nUNRAR_BIN_PATH=/usr/bin/unrar\nSEVENZ_BINARY_PATH=/usr/bin/7za\nMONGO_URI=mongodb://db:27017/threetwo\nELASTICSEARCH_URI=http://elasticsearch:9200\nREDIS_URI=redis://redis:6379\nTRANSPORTER=redis://redis:6379\nCACHER=Memory\n")))),(0,r.kt)("h3",{id:"installation"},"Installation"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Install the ",(0,r.kt)("inlineCode",{parentName:"li"},"docker-compose manager")," plugin from the unRAID CA store. After installation, you can find the plugin UI under the ",(0,r.kt)("inlineCode",{parentName:"li"},"Docker")," tab."),(0,r.kt)("li",{parentName:"ol"},"Create a new stack, give it a name."),(0,r.kt)("li",{parentName:"ol"},"Hover over the gear next to it and click on ",(0,r.kt)("inlineCode",{parentName:"li"},"Edit Stack"),"."),(0,r.kt)("li",{parentName:"ol"},"Copy-paste this into the textarea:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},'version: "3.7"\n\nx-userdata-volume:\n &userdata-volume\n type: bind\n source: ${USERDATA_DIRECTORY}\n target: /userdata\n\nx-comics-volume:\n &comics-volume\n type: bind\n source: ${COMICS_DIRECTORY}\n target: /comics\n\nservices:\nthreetwo:\n build:\n context: https://github.com/rishighan/threetwo.git\n dockerfile: Dockerfile\n image: frishi/threetwo\n container_name: threetwo-ui\n env_file: /boot/config/plugins/compose.manager/projects/ThreeTwo/.env\n restart: unless-stopped\n ports:\n - "8050:8050"\n - "3050:3050"\n links:\n - core-services\n depends_on:\n - db\n - elasticsearch\n - redis\n networks:\n - proxy\n\nmetadata-service:\n build:\n context: https://github.com/rishighan/threetwo-metadata-service.git\n image: frishi/threetwo-metadata-service\n container_name: metadata-service\n ports:\n - "3080:3080"\n environment:\n SERVICES: api,comicvine\n env_file: /boot/config/plugins/compose.manager/projects/ThreeTwo/.env\n depends_on:\n - redis\n volumes:\n - *comics-volume\n - *userdata-volume\n networks:\n - proxy\n\ncore-services:\n build:\n context: https://github.com/rishighan/threetwo-core-service.git\n image: frishi/threetwo-core-service\n container_name: core-services\n ports:\n - "3000:3000"\n - "3001:3001"\n depends_on:\n - db\n - redis\n - elasticsearch\n environment:\n name: core-services\n SERVICES: api,library,importqueue,settings,search,socket,imagetransformation,opds\n env_file: /boot/config/plugins/compose.manager/projects/ThreeTwo/.env\n volumes:\n - *comics-volume\n - *userdata-volume\n\n networks:\n - proxy\n\ndb:\n image: "bitnami/mongodb:latest"\n container_name: database\n networks:\n - proxy\n ports:\n - "27017:27017"\n volumes:\n - "mongodb_data:/bitnami/mongodb"\n\nredis:\n image: "bitnami/redis:latest"\n container_name: queue\n environment:\n ALLOW_EMPTY_PASSWORD: "yes"\n networks:\n - proxy\n ports:\n - "6379:6379"\n\nelasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:7.16.2\n container_name: elasticsearch\n environment:\n - "discovery.type=single-node"\n - "ES_JAVA_OPTS=-Xms512m -Xmx512m"\n - "xpack.security.enabled=true"\n - "xpack.security.authc.api_key.enabled=true"\n - "ELASTIC_PASSWORD=password"\n ulimits:\n memlock:\n soft: -1\n hard: -1\n ports:\n - 9200:9200\n networks:\n - proxy\n\nnetworks:\nproxy:\n external: true\n\nvolumes:\nmongodb_data:\n driver: local\nelastic:\n driver: local\n')),(0,r.kt)("ol",{start:5},(0,r.kt)("li",{parentName:"ol"},"Click ",(0,r.kt)("inlineCode",{parentName:"li"},"Save Changes")),(0,r.kt)("li",{parentName:"ol"},"Click ",(0,r.kt)("inlineCode",{parentName:"li"},"Compose Up")," and check for errors."),(0,r.kt)("li",{parentName:"ol"},"If all goes well, you should see the following containers appear as icons without images in the unRAID ",(0,r.kt)("inlineCode",{parentName:"li"},"Docker Containers")," panel:",(0,r.kt)("ol",{parentName:"li"},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"threetwo-ui")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"core-services")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"metadata-service")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"elasticsearch")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"database")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"queue")))),(0,r.kt)("li",{parentName:"ol"},"You can look at the logs for these containers by clicking on their icons and then ",(0,r.kt)("inlineCode",{parentName:"li"},"Logs"))),(0,r.kt)("h3",{id:"ports"},"Ports"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"threetwo-ui"),", runs on port 8050"),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"threetwo-core-service")," on 3000"),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"threetwo-metadata-service")," on 3080")),(0,r.kt)("h3",{id:"getting-updates"},"Getting Updates"),(0,r.kt)("p",null,"Go to the ",(0,r.kt)("inlineCode",{parentName:"p"},"Docker Containers")," tab from the unRAID web UI:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Click on ",(0,r.kt)("inlineCode",{parentName:"li"},"Compose Down"),", and let the command finish running."),(0,r.kt)("li",{parentName:"ol"},"Click on ",(0,r.kt)("inlineCode",{parentName:"li"},"Compose Pull"),", and let it finish running."),(0,r.kt)("li",{parentName:"ol"},"Click on ",(0,r.kt)("inlineCode",{parentName:"li"},"Compose Up")," to bring up the stack.")))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkthreetwo_docs=self.webpackChunkthreetwo_docs||[]).push([[813],{3905:function(e,n,t){t.d(n,{Zo:function(){return p},kt:function(){return d}});var o=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function i(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=o.createContext({}),c=function(e){var n=o.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},p=function(e){var n=c(e.components);return o.createElement(s.Provider,{value:n},e.children)},m={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},u=o.forwardRef((function(e,n){var t=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(t),d=r,h=u["".concat(s,".").concat(d)]||u[d]||m[d]||a;return t?o.createElement(h,i(i({ref:n},p),{},{components:t})):o.createElement(h,i({ref:n},p))}));function d(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var a=t.length,i=new Array(a);i[0]=u;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var c=2;c")," with actual values:")),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"UNDERLYING_HOSTNAME=\nCOMICS_DIRECTORY=\nUSERDATA_DIRECTORY=/mnt/user/appdata/threetwo/userdata\n\nCOMICVINE_API_KEY=\n\nLOGGER=true\nLOGLEVEL=info\nSERVICEDIR=dist/services\n\nCHOKIDAR_USEPOLLING=true\n\nUNRAR_BIN_PATH=/usr/bin/unrar\nSEVENZ_BINARY_PATH=/usr/bin/7za\nMONGO_URI=mongodb://db:27017/threetwo\nELASTICSEARCH_URI=http://elasticsearch:9200\nREDIS_URI=redis://redis:6379\nTRANSPORTER=redis://redis:6379\nCACHER=Memory\n")))),(0,r.kt)("h3",{id:"installation"},"Installation"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Install the ",(0,r.kt)("inlineCode",{parentName:"li"},"docker-compose manager")," plugin from the unRAID CA store. After installation, you can find the plugin UI under the ",(0,r.kt)("inlineCode",{parentName:"li"},"Docker")," tab."),(0,r.kt)("li",{parentName:"ol"},"Create a new stack, give it a name."),(0,r.kt)("li",{parentName:"ol"},"Hover over the gear next to it and click on ",(0,r.kt)("inlineCode",{parentName:"li"},"Edit Stack"),"."),(0,r.kt)("li",{parentName:"ol"},"Copy-paste this into the textarea:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},'version: "3.7"\n\nx-userdata-volume: &userdata-volume\n type: bind\n source: ${USERDATA_DIRECTORY}\n target: /userdata\n\nx-comics-volume: &comics-volume\n type: bind\n source: ${COMICS_DIRECTORY}\n target: /comics\n\nservices:\nthreetwo:\n build:\n context: https://github.com/rishighan/threetwo.git\n dockerfile: Dockerfile\n image: frishi/threetwo\n container_name: threetwo-ui\n env_file: /boot/config/plugins/compose.manager/projects/ThreeTwo/.env\n restart: unless-stopped\n ports:\n - "8050:8050"\n - "3050:3050"\n links:\n - core-services\n depends_on:\n - db\n - elasticsearch\n - redis\n networks:\n - proxy\n\nmetadata-service:\n build:\n context: https://github.com/rishighan/threetwo-metadata-service.git\n image: frishi/threetwo-metadata-service\n container_name: metadata-service\n ports:\n - "3080:3080"\n environment:\n SERVICES: api,comicvine\n env_file: /boot/config/plugins/compose.manager/projects/ThreeTwo/.env\n depends_on:\n - redis\n volumes:\n - *comics-volume\n - *userdata-volume\n networks:\n - proxy\n\ncore-services:\n build:\n context: https://github.com/rishighan/threetwo-core-service.git\n image: frishi/threetwo-core-service\n container_name: core-services\n ports:\n - "3000:3000"\n - "3001:3001"\n depends_on:\n - db\n - redis\n - elasticsearch\n environment:\n name: core-services\n SERVICES: api,library,importqueue,settings,search,socket,imagetransformation,opds\n env_file: /boot/config/plugins/compose.manager/projects/ThreeTwo/.env\n volumes:\n - *comics-volume\n - *userdata-volume\n\n networks:\n - proxy\n\ndb:\n image: "bitnami/mongodb:latest"\n container_name: database\n networks:\n - proxy\n ports:\n - "27017:27017"\n volumes:\n - "mongodb_data:/bitnami/mongodb"\n\nredis:\n image: "bitnami/redis:latest"\n container_name: queue\n environment:\n ALLOW_EMPTY_PASSWORD: "yes"\n networks:\n - proxy\n ports:\n - "6379:6379"\n\nelasticsearch:\n image: docker.elastic.co/elasticsearch/elasticsearch:7.16.2\n container_name: elasticsearch\n environment:\n - "discovery.type=single-node"\n - "ES_JAVA_OPTS=-Xms512m -Xmx512m"\n - "xpack.security.enabled=true"\n - "xpack.security.authc.api_key.enabled=true"\n - "ELASTIC_PASSWORD=password"\n ulimits:\n memlock:\n soft: -1\n hard: -1\n ports:\n - 9200:9200\n networks:\n - proxy\n\nnetworks:\nproxy:\n external: true\n\nvolumes:\nmongodb_data:\n driver: local\nelastic:\n driver: local\n')),(0,r.kt)("ol",{start:5},(0,r.kt)("li",{parentName:"ol"},"Click ",(0,r.kt)("inlineCode",{parentName:"li"},"Save Changes")),(0,r.kt)("li",{parentName:"ol"},"Click ",(0,r.kt)("inlineCode",{parentName:"li"},"Compose Up")," and check for errors."),(0,r.kt)("li",{parentName:"ol"},"If all goes well, you should see the following containers appear as icons without images in the unRAID ",(0,r.kt)("inlineCode",{parentName:"li"},"Docker Containers")," panel:",(0,r.kt)("ol",{parentName:"li"},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"threetwo-ui")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"core-services")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"metadata-service")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"elasticsearch")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"database")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"queue")))),(0,r.kt)("li",{parentName:"ol"},"You can look at the logs for these containers by clicking on their icons and then ",(0,r.kt)("inlineCode",{parentName:"li"},"Logs"))),(0,r.kt)("h3",{id:"ports"},"Ports"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"threetwo-ui"),", runs on port 8050"),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"threetwo-core-service")," on 3000"),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"threetwo-metadata-service")," on 3080")),(0,r.kt)("h3",{id:"getting-updates"},"Getting Updates"),(0,r.kt)("p",null,"Go to the ",(0,r.kt)("inlineCode",{parentName:"p"},"Docker Containers")," tab from the unRAID web UI:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Click on ",(0,r.kt)("inlineCode",{parentName:"li"},"Compose Down"),", and let the command finish running."),(0,r.kt)("li",{parentName:"ol"},"Click on ",(0,r.kt)("inlineCode",{parentName:"li"},"Compose Pull"),", and let it finish running."),(0,r.kt)("li",{parentName:"ol"},"Click on ",(0,r.kt)("inlineCode",{parentName:"li"},"Compose Up")," to bring up the stack.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.cd6d7dc8.js b/assets/js/runtime~main.3f3e3a68.js similarity index 98% rename from assets/js/runtime~main.cd6d7dc8.js rename to assets/js/runtime~main.3f3e3a68.js index 55acf3b..d9f2652 100644 --- a/assets/js/runtime~main.cd6d7dc8.js +++ b/assets/js/runtime~main.3f3e3a68.js @@ -1 +1 @@ -!function(){"use strict";var e,t,n,r,f,c={},o={};function a(e){var t=o[e];if(void 0!==t)return t.exports;var n=o[e]={id:e,loaded:!1,exports:{}};return c[e].call(n.exports,n,n.exports,a),n.loaded=!0,n.exports}a.m=c,a.c=o,e=[],a.O=function(t,n,r,f){if(!n){var c=1/0;for(i=0;i=f)&&Object.keys(a.O).every((function(e){return a.O[e](n[u])}))?n.splice(u--,1):(o=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[n,r,f]},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},a.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var f=Object.create(null);a.r(f);var c={};t=t||[null,n({}),n([]),n(n)];for(var o=2&r&&e;"object"==typeof o&&!~t.indexOf(o);o=n(o))Object.getOwnPropertyNames(o).forEach((function(t){c[t]=function(){return e[t]}}));return c.default=function(){return e},a.d(f,c),f},a.d=function(e,t){for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.f={},a.e=function(e){return Promise.all(Object.keys(a.f).reduce((function(t,n){return a.f[n](e,t),t}),[]))},a.u=function(e){return"assets/js/"+({3:"925b3f96",13:"01a85c17",32:"86a5cf17",36:"73664a40",45:"c0db966c",53:"935f2afb",85:"1f391b9e",89:"a6aa9e1f",103:"ccc49370",115:"03f09ed3",148:"d92a3c43",237:"1df93b7f",267:"59362658",362:"e273c56f",414:"393be207",453:"7f190043",458:"421237dd",480:"7b2682fd",514:"1be78505",525:"d214fa37",535:"814f3328",590:"4bcc3c7c",608:"9e4087bc",610:"6875c492",633:"76858a84",636:"f4f34a3a",642:"7661071f",671:"0e384e19",714:"09c8d506",737:"af04bd44",787:"30b2e18d",798:"41b02a5e",813:"5946dff2",830:"c0248160",914:"d9f32620",918:"17896441",927:"5281b7a2",948:"8717b14a",999:"7d4e8ca2"}[e]||e)+"."+{3:"e60c0a6e",13:"25c3ac2d",32:"29294142",36:"8a0c5940",45:"b77c9c86",53:"ae2578cd",85:"a23f7bf2",89:"5eeeb795",103:"f040c871",115:"7a9b08c9",148:"694ec2c3",237:"69d2074e",267:"03c3ef25",362:"25ec04c1",414:"ceb121b1",453:"6fbe18b8",458:"bfa5c9d7",480:"179a6852",514:"07811182",525:"bab1e8fd",529:"3f6109ef",535:"dac5ec67",588:"4e6813ca",590:"bcad081d",608:"28133f56",610:"636024cf",633:"c157068c",636:"6687866f",642:"955697ac",671:"87469ea7",714:"24090cb8",737:"c8eebe36",787:"8d60ad54",798:"0b37f803",813:"9b71f80d",830:"5fdee82f",914:"6f4564d1",918:"e82b9909",927:"ae829f25",948:"db66babc",972:"e802f08c",999:"18b2ee1c"}[e]+".js"},a.miniCssF=function(e){},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},f="threetwo-docs:",a.l=function(e,t,n,c){if(r[e])r[e].push(t);else{var o,u;if(void 0!==n)for(var d=document.getElementsByTagName("script"),i=0;i=f)&&Object.keys(a.O).every((function(e){return a.O[e](n[u])}))?n.splice(u--,1):(o=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[n,r,f]},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},a.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var f=Object.create(null);a.r(f);var c={};t=t||[null,n({}),n([]),n(n)];for(var o=2&r&&e;"object"==typeof o&&!~t.indexOf(o);o=n(o))Object.getOwnPropertyNames(o).forEach((function(t){c[t]=function(){return e[t]}}));return c.default=function(){return e},a.d(f,c),f},a.d=function(e,t){for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.f={},a.e=function(e){return Promise.all(Object.keys(a.f).reduce((function(t,n){return a.f[n](e,t),t}),[]))},a.u=function(e){return"assets/js/"+({3:"925b3f96",13:"01a85c17",32:"86a5cf17",36:"73664a40",45:"c0db966c",53:"935f2afb",85:"1f391b9e",89:"a6aa9e1f",103:"ccc49370",115:"03f09ed3",148:"d92a3c43",237:"1df93b7f",267:"59362658",362:"e273c56f",414:"393be207",453:"7f190043",458:"421237dd",480:"7b2682fd",514:"1be78505",525:"d214fa37",535:"814f3328",590:"4bcc3c7c",608:"9e4087bc",610:"6875c492",633:"76858a84",636:"f4f34a3a",642:"7661071f",671:"0e384e19",714:"09c8d506",737:"af04bd44",787:"30b2e18d",798:"41b02a5e",813:"5946dff2",830:"c0248160",914:"d9f32620",918:"17896441",927:"5281b7a2",948:"8717b14a",999:"7d4e8ca2"}[e]||e)+"."+{3:"e60c0a6e",13:"25c3ac2d",32:"29294142",36:"8a0c5940",45:"b77c9c86",53:"ae2578cd",85:"a23f7bf2",89:"5eeeb795",103:"f040c871",115:"7a9b08c9",148:"694ec2c3",237:"69d2074e",267:"03c3ef25",362:"25ec04c1",414:"ceb121b1",453:"6fbe18b8",458:"bfa5c9d7",480:"179a6852",514:"07811182",525:"bab1e8fd",529:"3f6109ef",535:"dac5ec67",588:"4e6813ca",590:"bcad081d",608:"28133f56",610:"636024cf",633:"c157068c",636:"6687866f",642:"955697ac",671:"87469ea7",714:"24090cb8",737:"c8eebe36",787:"8d60ad54",798:"0b37f803",813:"40a759c3",830:"5fdee82f",914:"6f4564d1",918:"e82b9909",927:"ae829f25",948:"db66babc",972:"e802f08c",999:"18b2ee1c"}[e]+".js"},a.miniCssF=function(e){},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},f="threetwo-docs:",a.l=function(e,t,n,c){if(r[e])r[e].push(t);else{var o,u;if(void 0!==n)for(var d=document.getElementsByTagName("script"),i=0;i Archive | ThreeTwo! - + - + \ No newline at end of file diff --git a/blog/first-blog-post/index.html b/blog/first-blog-post/index.html index 3faaa49..ba3d017 100644 --- a/blog/first-blog-post/index.html +++ b/blog/first-blog-post/index.html @@ -5,13 +5,13 @@ First Blog Post | ThreeTwo! - +

First Blog Post

· One min read
Gao Wei

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- + \ No newline at end of file diff --git a/blog/index.html b/blog/index.html index 2c9e7c0..c132f7c 100644 --- a/blog/index.html +++ b/blog/index.html @@ -5,13 +5,13 @@ Blog | ThreeTwo! - +

· One min read
Sébastien Lorber
Yangshun Tay

Docusaurus blogging features are powered by the blog plugin.

Simply add Markdown files (or folders) to the blog directory.

Regular blog authors can be added to authors.yml.

The blog post date can be extracted from filenames, such as:

  • 2019-05-30-welcome.md
  • 2019-05-30-welcome/index.md

A blog post folder can be convenient to co-locate blog post images:

Docusaurus Plushie

The blog supports tags as well!

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

· One min read
Gao Wei

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- + \ No newline at end of file diff --git a/blog/long-blog-post/index.html b/blog/long-blog-post/index.html index bbad4ac..c958275 100644 --- a/blog/long-blog-post/index.html +++ b/blog/long-blog-post/index.html @@ -5,13 +5,13 @@ Long Blog Post | ThreeTwo! - +

Long Blog Post

· 3 min read
Endilie Yacop Sucipto

This is the summary of a very long blog post,

Use a <!-- truncate --> comment to limit blog post size in the list view.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- + \ No newline at end of file diff --git a/blog/mdx-blog-post/index.html b/blog/mdx-blog-post/index.html index e030301..1cbc34f 100644 --- a/blog/mdx-blog-post/index.html +++ b/blog/mdx-blog-post/index.html @@ -5,13 +5,13 @@ MDX Blog Post | ThreeTwo! - +
- + \ No newline at end of file diff --git a/blog/tags/docusaurus/index.html b/blog/tags/docusaurus/index.html index 26c2df5..dbbacf9 100644 --- a/blog/tags/docusaurus/index.html +++ b/blog/tags/docusaurus/index.html @@ -5,13 +5,13 @@ 4 posts tagged with "docusaurus" | ThreeTwo! - +

4 posts tagged with "docusaurus"

View All Tags

· One min read
Sébastien Lorber
Yangshun Tay

Docusaurus blogging features are powered by the blog plugin.

Simply add Markdown files (or folders) to the blog directory.

Regular blog authors can be added to authors.yml.

The blog post date can be extracted from filenames, such as:

  • 2019-05-30-welcome.md
  • 2019-05-30-welcome/index.md

A blog post folder can be convenient to co-locate blog post images:

Docusaurus Plushie

The blog supports tags as well!

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

· One min read
Gao Wei

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- + \ No newline at end of file diff --git a/blog/tags/facebook/index.html b/blog/tags/facebook/index.html index 8412914..188333a 100644 --- a/blog/tags/facebook/index.html +++ b/blog/tags/facebook/index.html @@ -5,13 +5,13 @@ One post tagged with "facebook" | ThreeTwo! - +

One post tagged with "facebook"

View All Tags

· One min read
Sébastien Lorber
Yangshun Tay

Docusaurus blogging features are powered by the blog plugin.

Simply add Markdown files (or folders) to the blog directory.

Regular blog authors can be added to authors.yml.

The blog post date can be extracted from filenames, such as:

  • 2019-05-30-welcome.md
  • 2019-05-30-welcome/index.md

A blog post folder can be convenient to co-locate blog post images:

Docusaurus Plushie

The blog supports tags as well!

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

- + \ No newline at end of file diff --git a/blog/tags/hello/index.html b/blog/tags/hello/index.html index 18fdf46..ae187c4 100644 --- a/blog/tags/hello/index.html +++ b/blog/tags/hello/index.html @@ -5,13 +5,13 @@ 2 posts tagged with "hello" | ThreeTwo! - +

2 posts tagged with "hello"

View All Tags

· One min read
Sébastien Lorber
Yangshun Tay

Docusaurus blogging features are powered by the blog plugin.

Simply add Markdown files (or folders) to the blog directory.

Regular blog authors can be added to authors.yml.

The blog post date can be extracted from filenames, such as:

  • 2019-05-30-welcome.md
  • 2019-05-30-welcome/index.md

A blog post folder can be convenient to co-locate blog post images:

Docusaurus Plushie

The blog supports tags as well!

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

- + \ No newline at end of file diff --git a/blog/tags/hola/index.html b/blog/tags/hola/index.html index 65f5222..3459969 100644 --- a/blog/tags/hola/index.html +++ b/blog/tags/hola/index.html @@ -5,13 +5,13 @@ One post tagged with "hola" | ThreeTwo! - +

One post tagged with "hola"

View All Tags

· One min read
Gao Wei

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- + \ No newline at end of file diff --git a/blog/tags/index.html b/blog/tags/index.html index f33e2f8..c7b5293 100644 --- a/blog/tags/index.html +++ b/blog/tags/index.html @@ -5,13 +5,13 @@ Tags | ThreeTwo! - + - + \ No newline at end of file diff --git a/blog/welcome/index.html b/blog/welcome/index.html index 9fca226..798dad1 100644 --- a/blog/welcome/index.html +++ b/blog/welcome/index.html @@ -5,13 +5,13 @@ Welcome | ThreeTwo! - +

Welcome

· One min read
Sébastien Lorber
Yangshun Tay

Docusaurus blogging features are powered by the blog plugin.

Simply add Markdown files (or folders) to the blog directory.

Regular blog authors can be added to authors.yml.

The blog post date can be extracted from filenames, such as:

  • 2019-05-30-welcome.md
  • 2019-05-30-welcome/index.md

A blog post folder can be convenient to co-locate blog post images:

Docusaurus Plushie

The blog supports tags as well!

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

- + \ No newline at end of file diff --git a/docs/architecture/index.html b/docs/architecture/index.html index a77eac7..67e8404 100644 --- a/docs/architecture/index.html +++ b/docs/architecture/index.html @@ -5,13 +5,13 @@ Technical Architecture | ThreeTwo! - +

Technical Architecture

High-level Architecture

ThreeTwo!, the app is built upon the microservice architecture. The UI is a standalone node.js app and the rest of the logic is broken into microservices.

The microservices deal with:

  1. Library functions (model orchestration, CRUD ops on comics, metadata)
  2. Comic Vine (scraping issues, volumes and more)
  3. Grand Comics Database (scraping, aggregations and more)
  4. Helpers (image transformation, file-system ops, compression/uncompression)

Technical stack

ThreeTwo! is written in TypeScript from UI to the services layer.

The technologies used are:

  1. React
  2. Redux
  3. moleculer
  4. RabbitMQ
  5. socket.io
  6. node.js
  7. Express
  8. MongoDB
  9. mongoose
- + \ No newline at end of file diff --git a/docs/intro/index.html b/docs/intro/index.html index 2996641..4d2a4cb 100644 --- a/docs/intro/index.html +++ b/docs/intro/index.html @@ -5,13 +5,13 @@ Introduction | ThreeTwo! - +

ThreeTwo!

ThreeTwo! is a comic book curation app.

It aims to help you organize your comic book collection and automate various aspects of acquiring new comic books.

It is a culmination of ideas I developed over the past couple of years using various pieces of software to achieve the stated goal of curating comic books. It borrows heavily from Mylar, Ubooquity, ComicRack, Calibre and many other software used to manage comic book collections.

Philosophy

Curation is a disease of the mind, albeit a disease with a purpose. You want to be able to peruse your collection, and enjoy the process of doing so.

Discovery

The first tenet of ThreeTwo! is discovery–the act of importing comics from your OS, finding new comic to read or just searching through your collection for a comic that sparks nostalgia. Discovery is important, both from a technical perspective, so that ThreeTwo! can infer metadata from your collection, as well as from a curatorial standpoint, you want to keep track of what you are reading, or what you want to be reading.

Curation

ThreeTwo! takes curation seriously, and thusly offers ComicVine scraping, and other means of applying/extending the comic metadata. This is so that your collection can truly shine, and actually help in discovering or rediscovering comics.

Acquisition

Once you have added to your list of wanted comics, you can rely on ThreeTwo!'s first-class support for DC++ via AirDC++ to acquire them. Just configure your AirDC++ host, hub information and you are golden.

Consumption

You can access your massive comic collection via OPDS through apps on your mobile devices, like Panels on iOS

- + \ No newline at end of file diff --git a/docs/resources/index.html b/docs/resources/index.html index b71e2ec..014a767 100644 --- a/docs/resources/index.html +++ b/docs/resources/index.html @@ -5,13 +5,13 @@ Resources & Help | ThreeTwo! - +
- + \ No newline at end of file diff --git a/docs/unRAID_dockercompose/index.html b/docs/unRAID_dockercompose/index.html index f186530..a42db45 100644 --- a/docs/unRAID_dockercompose/index.html +++ b/docs/unRAID_dockercompose/index.html @@ -5,13 +5,13 @@ Install ThreeTwo! on unRAID with the docker-compose plugin | ThreeTwo! - +
-

Install ThreeTwo! on unRAID with the docker-compose plugin

Notes

This guide goes over ThreeTwo! installation on unRAID using the docker-compose manager plugin. Currently, this is the recommended approach for unRAID users.

With the help of this plugin, you are able to pull the entire ThreeTwo! docker-compose stack up, down with the click of a button. It abstracts away a lot of complexity associated with writing out commands in the console.

That said, the plugin is still in beta, so you may experience strange behavior.

Pre-requisites

First things first, let's go over what the pre-requisites are:

  1. The docker-compose configuration for ThreeTwo! now resides in its own repo here: https://github.com/rishighan/threetwo-docker-compose You will be using this as reference.

  2. A working AirDC++ install is necessary for DC++ searching/downloading to work. You can install it through the unRAID via the CA store or via a docker

  3. comics and userdata folders.

    1. The comics folder must be the folder AirDC++ downloads comics to.
    2. Create the userdata folder under /mnt/user/appdata/threetwo
  4. To get ComicVine to work for metadata scraping and other functions, you must have a ComicVine API key. You can get one here. Metadata scraping will not work unless you supply an API key.

  5. Open an unRAID terminal and create an .env file:

    1. Run this command: nano /boot/config/plugins/compose.manager/projects/ThreeTwo/.env
    2. Paste this into the file, replacing anything within <> with actual values:
    UNDERLYING_HOSTNAME=<UNRAID_HOSTNAME>
    COMICS_DIRECTORY=<PATH_TO_COMICS_DIRECTORY>
    USERDATA_DIRECTORY=/mnt/user/appdata/threetwo/userdata

    COMICVINE_API_KEY=<YOUR_COMICVINE_API_KEY>

    LOGGER=true
    LOGLEVEL=info
    SERVICEDIR=dist/services

    CHOKIDAR_USEPOLLING=true

    UNRAR_BIN_PATH=/usr/bin/unrar
    SEVENZ_BINARY_PATH=/usr/bin/7za
    MONGO_URI=mongodb://db:27017/threetwo
    ELASTICSEARCH_URI=http://elasticsearch:9200
    REDIS_URI=redis://redis:6379
    TRANSPORTER=redis://redis:6379
    CACHER=Memory

Installation

  1. Install the docker-compose manager plugin from the unRAID CA store. After installation, you can find the plugin UI under the Docker tab.
  2. Create a new stack, give it a name.
  3. Hover over the gear next to it and click on Edit Stack.
  4. Copy-paste this into the textarea:
version: "3.7"

x-userdata-volume:
&userdata-volume
type: bind
source: ${USERDATA_DIRECTORY}
target: /userdata

x-comics-volume:
&comics-volume
type: bind
source: ${COMICS_DIRECTORY}
target: /comics

services:
threetwo:
build:
context: https://github.com/rishighan/threetwo.git
dockerfile: Dockerfile
image: frishi/threetwo
container_name: threetwo-ui
env_file: /boot/config/plugins/compose.manager/projects/ThreeTwo/.env
restart: unless-stopped
ports:
- "8050:8050"
- "3050:3050"
links:
- core-services
depends_on:
- db
- elasticsearch
- redis
networks:
- proxy

metadata-service:
build:
context: https://github.com/rishighan/threetwo-metadata-service.git
image: frishi/threetwo-metadata-service
container_name: metadata-service
ports:
- "3080:3080"
environment:
SERVICES: api,comicvine
env_file: /boot/config/plugins/compose.manager/projects/ThreeTwo/.env
depends_on:
- redis
volumes:
- *comics-volume
- *userdata-volume
networks:
- proxy

core-services:
build:
context: https://github.com/rishighan/threetwo-core-service.git
image: frishi/threetwo-core-service
container_name: core-services
ports:
- "3000:3000"
- "3001:3001"
depends_on:
- db
- redis
- elasticsearch
environment:
name: core-services
SERVICES: api,library,importqueue,settings,search,socket,imagetransformation,opds
env_file: /boot/config/plugins/compose.manager/projects/ThreeTwo/.env
volumes:
- *comics-volume
- *userdata-volume

networks:
- proxy

db:
image: "bitnami/mongodb:latest"
container_name: database
networks:
- proxy
ports:
- "27017:27017"
volumes:
- "mongodb_data:/bitnami/mongodb"

redis:
image: "bitnami/redis:latest"
container_name: queue
environment:
ALLOW_EMPTY_PASSWORD: "yes"
networks:
- proxy
ports:
- "6379:6379"

elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.16.2
container_name: elasticsearch
environment:
- "discovery.type=single-node"
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- "xpack.security.enabled=true"
- "xpack.security.authc.api_key.enabled=true"
- "ELASTIC_PASSWORD=password"
ulimits:
memlock:
soft: -1
hard: -1
ports:
- 9200:9200
networks:
- proxy

networks:
proxy:
external: true

volumes:
mongodb_data:
driver: local
elastic:
driver: local
  1. Click Save Changes
  2. Click Compose Up and check for errors.
  3. If all goes well, you should see the following containers appear as icons without images in the unRAID Docker Containers panel:
    1. threetwo-ui
    2. core-services
    3. metadata-service
    4. elasticsearch
    5. database
    6. queue
  4. You can look at the logs for these containers by clicking on their icons and then Logs

Ports

  1. threetwo-ui, runs on port 8050
  2. threetwo-core-service on 3000
  3. threetwo-metadata-service on 3080

Getting Updates

Go to the Docker Containers tab from the unRAID web UI:

  1. Click on Compose Down, and let the command finish running.
  2. Click on Compose Pull, and let it finish running.
  3. Click on Compose Up to bring up the stack.
- +

Install ThreeTwo! on unRAID with the docker-compose plugin

Notes

This guide goes over ThreeTwo! installation on unRAID using the docker-compose manager plugin. Currently, this is the recommended approach for unRAID users.

With the help of this plugin, you are able to pull the entire ThreeTwo! docker-compose stack up, down with the click of a button. It abstracts away a lot of complexity associated with writing out commands in the console.

That said, the plugin is still in beta, so you may experience strange behavior.

Pre-requisites

First things first, let's go over what the pre-requisites are:

  1. The docker-compose configuration for ThreeTwo! now resides in its own repo here: https://github.com/rishighan/threetwo-docker-compose You will be using this as reference.

  2. A working AirDC++ install is necessary for DC++ searching/downloading to work. You can install it through the unRAID via the CA store or via a docker

  3. comics and userdata folders.

    1. The comics folder must be the folder AirDC++ downloads comics to.
    2. Create the userdata folder under /mnt/user/appdata/threetwo
  4. To get ComicVine to work for metadata scraping and other functions, you must have a ComicVine API key. You can get one here. Metadata scraping will not work unless you supply an API key.

  5. Open an unRAID terminal and create an .env file:

    1. Run this command: nano /boot/config/plugins/compose.manager/projects/ThreeTwo/.env
    2. Paste this into the file, replacing anything within <> with actual values:
    UNDERLYING_HOSTNAME=<UNRAID_HOSTNAME>
    COMICS_DIRECTORY=<PATH_TO_COMICS_DIRECTORY>
    USERDATA_DIRECTORY=/mnt/user/appdata/threetwo/userdata

    COMICVINE_API_KEY=<YOUR_COMICVINE_API_KEY>

    LOGGER=true
    LOGLEVEL=info
    SERVICEDIR=dist/services

    CHOKIDAR_USEPOLLING=true

    UNRAR_BIN_PATH=/usr/bin/unrar
    SEVENZ_BINARY_PATH=/usr/bin/7za
    MONGO_URI=mongodb://db:27017/threetwo
    ELASTICSEARCH_URI=http://elasticsearch:9200
    REDIS_URI=redis://redis:6379
    TRANSPORTER=redis://redis:6379
    CACHER=Memory

Installation

  1. Install the docker-compose manager plugin from the unRAID CA store. After installation, you can find the plugin UI under the Docker tab.
  2. Create a new stack, give it a name.
  3. Hover over the gear next to it and click on Edit Stack.
  4. Copy-paste this into the textarea:
version: "3.7"

x-userdata-volume: &userdata-volume
type: bind
source: ${USERDATA_DIRECTORY}
target: /userdata

x-comics-volume: &comics-volume
type: bind
source: ${COMICS_DIRECTORY}
target: /comics

services:
threetwo:
build:
context: https://github.com/rishighan/threetwo.git
dockerfile: Dockerfile
image: frishi/threetwo
container_name: threetwo-ui
env_file: /boot/config/plugins/compose.manager/projects/ThreeTwo/.env
restart: unless-stopped
ports:
- "8050:8050"
- "3050:3050"
links:
- core-services
depends_on:
- db
- elasticsearch
- redis
networks:
- proxy

metadata-service:
build:
context: https://github.com/rishighan/threetwo-metadata-service.git
image: frishi/threetwo-metadata-service
container_name: metadata-service
ports:
- "3080:3080"
environment:
SERVICES: api,comicvine
env_file: /boot/config/plugins/compose.manager/projects/ThreeTwo/.env
depends_on:
- redis
volumes:
- *comics-volume
- *userdata-volume
networks:
- proxy

core-services:
build:
context: https://github.com/rishighan/threetwo-core-service.git
image: frishi/threetwo-core-service
container_name: core-services
ports:
- "3000:3000"
- "3001:3001"
depends_on:
- db
- redis
- elasticsearch
environment:
name: core-services
SERVICES: api,library,importqueue,settings,search,socket,imagetransformation,opds
env_file: /boot/config/plugins/compose.manager/projects/ThreeTwo/.env
volumes:
- *comics-volume
- *userdata-volume

networks:
- proxy

db:
image: "bitnami/mongodb:latest"
container_name: database
networks:
- proxy
ports:
- "27017:27017"
volumes:
- "mongodb_data:/bitnami/mongodb"

redis:
image: "bitnami/redis:latest"
container_name: queue
environment:
ALLOW_EMPTY_PASSWORD: "yes"
networks:
- proxy
ports:
- "6379:6379"

elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.16.2
container_name: elasticsearch
environment:
- "discovery.type=single-node"
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- "xpack.security.enabled=true"
- "xpack.security.authc.api_key.enabled=true"
- "ELASTIC_PASSWORD=password"
ulimits:
memlock:
soft: -1
hard: -1
ports:
- 9200:9200
networks:
- proxy

networks:
proxy:
external: true

volumes:
mongodb_data:
driver: local
elastic:
driver: local
  1. Click Save Changes
  2. Click Compose Up and check for errors.
  3. If all goes well, you should see the following containers appear as icons without images in the unRAID Docker Containers panel:
    1. threetwo-ui
    2. core-services
    3. metadata-service
    4. elasticsearch
    5. database
    6. queue
  4. You can look at the logs for these containers by clicking on their icons and then Logs

Ports

  1. threetwo-ui, runs on port 8050
  2. threetwo-core-service on 3000
  3. threetwo-metadata-service on 3080

Getting Updates

Go to the Docker Containers tab from the unRAID web UI:

  1. Click on Compose Down, and let the command finish running.
  2. Click on Compose Pull, and let it finish running.
  3. Click on Compose Up to bring up the stack.
+ \ No newline at end of file diff --git a/docs/unraid_install/index.html b/docs/unraid_install/index.html index edff2d9..c7787b1 100644 --- a/docs/unraid_install/index.html +++ b/docs/unraid_install/index.html @@ -5,13 +5,13 @@ Install ThreeTwo! on unRaid | ThreeTwo! - +

Install ThreeTwo! on unRaid

Notes

  • Currently, ThreeTwo! is installed along with its dependencies using docker-compose. The easiest way to install it on unRAID is to use a VM.
  • Skip the VM creation steps, if you already have a Debian VM

Pre-requisites

This guide assumes the following is installed or readily available:

  • unRaid 6.9.2 (this version was tested against 6.9.2)
  • Debian 10.x (Grab the install .iso here)

Getting the VM up and running

  1. Download the Debian install .iso
  2. Place it in a folder accessible by the VM
  3. Go to the VM tab in your unRaid navigation
  4. Click Add VM
  5. From the list presented to you, click Debian under Linux
  6. On the VM configration page, enter the desired options for memory, CPU cores, vdisk allocation
  7. Make sure that you have set the volume containing the comics correctly for Unraid Share
  8. Make sure that you have also set the Unraid Mount tag option
  9. Make sure that the network bridge is set to br0
  10. Set a password for VNC so you can follow through with a graphical install if you so wish

Installing Debian on the VM

  1. Launch the VM via VNC Remote option
  2. Follow the steps of the graphical installer
  3. Create a root user and a normal user and set the passwords for both

Docker pre-requisites

  1. Make sure you have sudo
  2. Make sure you have ssh access for the user you created earlier
  3. ssh into the VM as the non-root user
  4. Install Docker Engine
  5. Install docker-compose
  6. Verify that docker and docker-compose commands work

Installation

  1. Clone the repo: git clone https://github.com/rishighan/threetwo.git

  2. Change the directory: cd threetwo

  3. Create directories within threetwo

    mkdir comics userdata

    mkdir userdata/covers userdata/temporary userdata/expanded
  4. Create an external docker network using sudo docker network create proxy

  5. Run sudo docker-compose up --build -d

  6. Wait for a hot minute

Post-install checks

  1. Once the docker-compose up command successfully completes, you can check the spun-up containers using docker ps
- + \ No newline at end of file diff --git a/index.html b/index.html index 3b7f7cc..361b6a8 100644 --- a/index.html +++ b/index.html @@ -5,13 +5,13 @@ Hello from ThreeTwo! | ThreeTwo! - +

ThreeTwo!

Start Flipping!

Don't Hate, Curate.

Don't Hate, Curate.

Browse, search, discover your comic book library that you have so proudly built from scratch.

No Fuss DC++

No Fuss DC++

With first-class support for the excellent AirDC++, find and acquire hidden gems.

Shine with Comic Vine

Shine with Comic Vine

Scrape Comic Vine's exhaustive comic book database to analyze and clean up your library's metadata.

- + \ No newline at end of file diff --git a/markdown-page/index.html b/markdown-page/index.html index 0640115..15439e9 100644 --- a/markdown-page/index.html +++ b/markdown-page/index.html @@ -5,13 +5,13 @@ Markdown page example | ThreeTwo! - +

Markdown page example

You don't need React to write simple standalone pages.

- + \ No newline at end of file