浏览代码

Merge pull request #25 from lllllllillllllillll/dev

v0.06
lllllllillllllillll 1 年之前
父节点
当前提交
086fd9667f
共有 11 个文件被更改,包括 181 次插入190 次删除
  1. 43 35
      CHANGELOG.md
  2. 2 10
      Dockerfile
  3. 87 93
      README.md
  4. 1 1
      app.js
  5. 9 15
      compose.yaml
  6. 7 1
      controllers/dashboard.js
  7. 23 26
      package-lock.json
  8. 1 1
      package.json
  9. 5 5
      templates.json
  10. 2 2
      views/pages/dashboard.ejs
  11. 1 1
      views/partials/footer.ejs

+ 43 - 35
CHANGELOG.md

@@ -1,35 +1,43 @@
-## v0.05 ( Nov 17th 2023 )
-* Environment Variables and Labels are now unchecked by default.
-* Support for Docker volumes.
-* Fixed app uninstall.
-* Fixed Proxy Manager.
-* Updated functions to ignore the three DweebUI containers: DweebUI, DweebCache(redis), and DweebProxy(caddy).
-* Visual updates: Tabs for networks, images, and volumes. Added 'update' option in container drop-down.
-* Updated main.js to prevent javascript errors.
-* Fix for templates using 'set' instead of 'default' in environment variables.
-* Fixes for templates with no volumes or no labels.
-* New README.md.
-* New screenshots.
-* Automatically persists data in docker volumes if there is no bind mount.
-
-## v0.04 (Nov 11th 2023)
-* Docker Image and Compose file available.
-* The containers DweebUI and DweebCache are hidden from the dashboard.
-* Default icon for containers.
-* Fixed missing information in container details/edit modals (Ports, Env, Volumes, Labels).
-
-## v0.03 (Nov 5th 2023)
-* Container graphs now load instantly on refresh
-* Working net data for server dashboard
-* Redis is now installed as a docker container.
-
-
-## v0.02 (Nov 1st 2023)
-* Significant code clean-up and improvements
-* CPU and RAM graphs for each container
-* Updated Templates.json
-* Fixed text color of VPN and VNC buttons
-
-
-## v0.01 (Oct 15th 2023)
-* First release. Not much working.
+## v0.06 ( Nov 24th 2023 )
+* Multi-platform image (amd64/arm64).
+* Removed Caddy from compose file.
+* Proxy Manager UI can be enabled from environment variable.
+* Removed hardcoded redis passwords.
+* Repo change: Implemented image build-and-publish and dependabot (Thank you, gaby).
+* Updated dependencies.
+
+## v0.05 ( Nov 17th 2023 )
+* Environment Variables and Labels are now unchecked by default.
+* Support for Docker volumes.
+* Fixed app uninstall.
+* Fixed Proxy Manager.
+* Updated functions to ignore the three DweebUI containers: DweebUI, DweebCache(redis), and DweebProxy(caddy).
+* Visual updates: Tabs for networks, images, and volumes. Added 'update' option in container drop-down.
+* Updated main.js to prevent javascript errors.
+* Fix for templates using 'set' instead of 'default' in environment variables.
+* Fixes for templates with no volumes or no labels.
+* New README.md.
+* New screenshots.
+* Automatically persists data in docker volumes if there is no bind mount.
+
+## v0.04 (Nov 11th 2023)
+* Docker Image and Compose file available.
+* The containers DweebUI and DweebCache are hidden from the dashboard.
+* Default icon for containers.
+* Fixed missing information in container details/edit modals (Ports, Env, Volumes, Labels).
+
+## v0.03 (Nov 5th 2023)
+* Container graphs now load instantly on refresh
+* Working net data for server dashboard
+* Redis is now installed as a docker container.
+
+
+## v0.02 (Nov 1st 2023)
+* Significant code clean-up and improvements
+* CPU and RAM graphs for each container
+* Updated Templates.json
+* Fixed text color of VPN and VNC buttons
+
+
+## v0.01 (Oct 15th 2023)
+* First release. Not much working.

+ 2 - 10
Dockerfile

@@ -2,28 +2,20 @@
 
 FROM node:21-alpine
 
-# Use production node environment by default.
 ENV NODE_ENV production
 
 WORKDIR /app
 
-# Download dependencies as a separate step to take advantage of Docker's caching.
-# Leverage a cache mount to /root/.npm to speed up subsequent builds.
-# Leverage a bind mounts to package.json and package-lock.json to avoid having to copy them into
-# into this layer.
+
 RUN --mount=type=bind,source=package.json,target=package.json \
     --mount=type=bind,source=package-lock.json,target=package-lock.json \
     --mount=type=cache,target=/root/.npm \
     npm ci --omit=dev
 
-# Run the application as a non-root user.
 USER root
 
-# Copy the rest of the source files into the image.
 COPY . .
 
-# Expose the port that the application listens on.
 EXPOSE 8000
 
-# Run the application.
-CMD node app.js
+CMD node app.js

+ 87 - 93
README.md

@@ -1,93 +1,87 @@
-# DweebUI
-DweebUI is a simple Docker web interface created with javascript and node.js
-
-Pre-Pre-Pre-Pre-Pre Alpha v0.05 ( :fire: Experimental. Don't install on any servers you care about :fire: )
-
-[![GitHub Stars](https://img.shields.io/github/stars/lllllllillllllillll/DweebUI)](https://github.com/lllllllillllllillll)
-[![GitHub License](https://img.shields.io/github/license/lllllllillllllillll/DweebUI)](https://github.com/lllllllillllllillll/DweebUI/blob/main/LICENSE)
-[![GitHub Activity](https://img.shields.io/github/commit-activity/y/lllllllillllllillll/DweebUI)](https://github.com/lllllllillllllillll)
-
-* I haven't used Github very much and I'm still new to javascript.
-* This is the first project I've ever released and I'm sure it's full of plenty of bugs and mistakes.
-* I probably should have waited a lot longer to share this :|
-
-<a href="https://raw.githubusercontent.com//lllllllillllllillll/DweebUI/main/screenshots/dashboard.png"><img src="https://raw.githubusercontent.com/lllllllillllllillll/DweebUI/main/screenshots/dashboard.png" width="50%"/></a>
-
-<a href="https://raw.githubusercontent.com/lllllllillllllillll/DweebUI/main/screenshots/apps.png"><img src="https://raw.githubusercontent.com/lllllllillllllillll/DweebUI/main/screenshots/apps.png" width="50%"/></a>
-
-
-## Features
-* [x] Dashboard provides server metrics (cpu, ram, network, disk) and container controls on a single page.
-* [x] Light/Dark Mode.
-* [x] Easy to install app templates.
-* [x] Automatically persists data in docker volumes if bind mount isn't used. 
-* [x] Proxy manager for Caddy.
-* [x] Partial Portainer Template Support (Network Mode, Ports, Volumes, Enviroment Variables, Labels, Commands, Restart Policy, Nvidia Hardware Acceleration).
-* [x] Multi-User built-in.
-* [ ] User pages: Shortcuts, Requests, Support. (planned)
-* [x] Support for Windows, Linux, and MacOS.
-* [ ] Import compose files. (planned)
-* [x] Pure javascript. No frameworks or typescript.
-* [x] Templates.json maintains compatability with Portainer, allowing you to use the template without needing to use DweebUI.
-* [ ] Manage your Docker networks, images, and volumes. (planned)
-* [ ] Preset variables. (planned)
-* [ ] VPN, VPS, and Firewall Toggles. (planned)
-* [ ] Offline Mode. (planned)
-
-## Setup
-
-* Docker compose.yaml: 
-```
-services:
-  dweebui:
-    container_name: DweebUI
-    image: lllllllillllllillll/dweebui:v0.05
-    restart: unless-stopped
-    ports:
-      - 8000:8000
-    depends_on:
-      - cache
-    links:
-      - cache
-    volumes:
-      - dweebui:/app
-      - caddy:/app/caddyfiles
-      - /var/run/docker.sock:/var/run/docker.sock
-  cache:
-    container_name: DweebCache
-    image: redis:6.2-alpine
-    restart: always
-    command: redis-server --save 20 1 --loglevel warning --requirepass eYVX7EwVmmxKPCDmwMtyKVge8oLd2t81
-    volumes: 
-      - cache:/data
-  proxy:
-    container_name: DweebProxy
-    image: caddy:2.4.5-alpine
-    depends_on:
-      - dweebui
-    restart: unless-stopped
-    network_mode: host
-    volumes:
-      - caddy:/data
-      - caddy:/config
-      - caddy:/etc/caddy
-volumes:
-  dweebui:
-  cache:
-  caddy:
-```
-
-* Using setup.sh: 
-```
-Extract DweebUI.zip and navigate to /DweebUI
-cd DweebUI
-chmod +x setup.sh
-sudo ./setup.sh
-```
-
-
-## Credit
-
-* UI was built using HTML and CSS elements from https://tabler.io/
-* Apps template based on Portainer template provided by Lissy93 here: https://github.com/Lissy93/portainer-templates
-* Most of the app icons were sourced from Walkxcode's dashboard icons here: https://github.com/walkxcode/dashboard-icons
+# DweebUI
+DweebUI is a simple Docker web interface created with javascript and node.js
+
+Pre-Pre-Pre-Pre-Pre Alpha v0.06 ( :fire: Experimental. Don't install on any servers you care about :fire: )
+
+[![GitHub Stars](https://img.shields.io/github/stars/lllllllillllllillll/DweebUI)](https://github.com/lllllllillllllillll)
+[![GitHub License](https://img.shields.io/github/license/lllllllillllllillll/DweebUI)](https://github.com/lllllllillllllillll/DweebUI/blob/main/LICENSE)
+[![GitHub Activity](https://img.shields.io/github/commit-activity/y/lllllllillllllillll/DweebUI)](https://github.com/lllllllillllllillll)
+
+* I haven't used Github very much and I'm still new to javascript.
+* This is the first project I've ever released and I'm sure it's full of plenty of bugs and mistakes.
+* I probably should have waited a lot longer to share this :|
+
+<a href="https://raw.githubusercontent.com//lllllllillllllillll/DweebUI/main/screenshots/dashboard.png"><img src="https://raw.githubusercontent.com/lllllllillllllillll/DweebUI/main/screenshots/dashboard.png" width="50%"/></a>
+
+<a href="https://raw.githubusercontent.com/lllllllillllllillll/DweebUI/main/screenshots/apps.png"><img src="https://raw.githubusercontent.com/lllllllillllllillll/DweebUI/main/screenshots/apps.png" width="50%"/></a>
+
+
+## Features
+* [x] Dashboard provides server metrics (cpu, ram, network, disk) and container controls on a single page.
+* [x] Light/Dark Mode.
+* [x] Easy to install app templates.
+* [x] Automatically persists data in docker volumes if bind mount isn't used. 
+* [x] Proxy manager for Caddy. (Optional)
+* [x] Partial Portainer Template Support (Network Mode, Ports, Volumes, Enviroment Variables, Labels, Commands, Restart Policy, Nvidia Hardware Acceleration).
+* [x] Multi-User built-in.
+* [ ] User pages: Shortcuts, Requests, Support. (planned)
+* [x] Support for Windows, Linux, and MacOS.
+* [ ] Import compose files. (planned)
+* [x] Pure javascript. No frameworks or typescript.
+* [x] Templates.json maintains compatability with Portainer, allowing you to use the template without needing to use DweebUI.
+* [ ] Manage your Docker networks, images, and volumes. (planned)
+* [ ] Preset variables. (planned)
+* [ ] VPN, VPS, and Firewall Toggles. (planned)
+* [ ] Offline Mode. (planned)
+
+## Setup
+
+* Docker compose.yaml: 
+```
+services:
+  dweebui:
+    container_name: DweebUI
+    image: lllllllillllllillll/dweebui:v0.06
+    environment:
+      NODE_ENV: production
+      REDIS_PASS: replace_with_password_for_redis
+      # Proxy_Manager: enabled
+    restart: unless-stopped
+    ports:
+      - 8000:8000
+    depends_on:
+      - cache
+    links:
+      - cache
+    volumes:
+      - dweebui:/app
+      - caddyfiles:/app/caddyfiles
+      - /var/run/docker.sock:/var/run/docker.sock
+  cache:
+    container_name: DweebCache
+    image: redis:6.2-alpine
+    restart: always
+    command: redis-server --save 20 1 --loglevel warning --requirepass replace_with_password_for_redis
+    volumes: 
+      - cache:/data
+
+volumes:
+  dweebui:
+  cache:
+  caddyfiles:
+```
+
+* Using setup.sh: 
+```
+Extract DweebUI.zip and navigate to /DweebUI
+cd DweebUI
+chmod +x setup.sh
+sudo ./setup.sh
+```
+
+
+## Credit
+
+* UI was built using HTML and CSS elements from https://tabler.io/
+* Apps template based on Portainer template provided by Lissy93 here: https://github.com/Lissy93/portainer-templates
+* Most of the app icons were sourced from Walkxcode's dashboard icons here: https://github.com/walkxcode/dashboard-icons

+ 1 - 1
app.js

@@ -12,7 +12,7 @@ app.locals.site_list = '';
 
 const redisClient = require('redis').createClient({
     url: 'redis://DweebCache:6379',
-    password:'eYVX7EwVmmxKPCDmwMtyKVge8oLd2t81',
+    password: process.env.REDIS_PASS,
     legacyMode:true
 });
 redisClient.connect().catch(console.log);

+ 9 - 15
compose.yaml

@@ -1,7 +1,11 @@
 services:
   dweebui:
     container_name: DweebUI
-    image: lllllllillllllillll/dweebui:v0.05
+    image: lllllllillllllillll/dweebui:v0.06
+    environment:
+      NODE_ENV: production
+      REDIS_PASS: replace_with_password_for_redis
+      # Proxy_Manager: enabled
     restart: unless-stopped
     ports:
       - 8000:8000
@@ -11,27 +15,17 @@ services:
       - cache
     volumes:
       - dweebui:/app
-      - caddy:/app/caddyfiles
+      - caddyfiles:/app/caddyfiles
       - /var/run/docker.sock:/var/run/docker.sock
   cache:
     container_name: DweebCache
     image: redis:6.2-alpine
     restart: always
-    command: redis-server --save 20 1 --loglevel warning --requirepass eYVX7EwVmmxKPCDmwMtyKVge8oLd2t81
+    command: redis-server --save 20 1 --loglevel warning --requirepass replace_with_password_for_redis
     volumes: 
       - cache:/data
-  proxy:
-    container_name: DweebProxy
-    image: caddy:2.4.5-alpine
-    depends_on:
-      - dweebui
-    restart: unless-stopped
-    network_mode: host
-    volumes:
-      - caddy:/data
-      - caddy:/config
-      - caddy:/etc/caddy
+
 volumes:
   dweebui:
   cache:
-  caddy:
+  caddyfiles:

+ 7 - 1
controllers/dashboard.js

@@ -1,6 +1,5 @@
 const User = require('../database/UserModel');
 
-
 exports.Dashboard = async function (req, res) {
 
     if (req.session.role == "admin") {
@@ -8,6 +7,12 @@ exports.Dashboard = async function (req, res) {
         // get user data with matching UUID from sqlite database
         let user = await User.findOne({ where: { UUID: req.session.UUID } });
 
+        let caddy = 'd-none';
+
+        if (process.env.Proxy_Manager == 'enabled') {
+            caddy = '';
+        }
+
         // Render the home page
         res.render("pages/dashboard", {
             name: user.first_name + ' ' + user.last_name,
@@ -15,6 +20,7 @@ exports.Dashboard = async function (req, res) {
             avatar: user.avatar,
             isLoggedIn: true,
             site_list: req.app.locals.site_list,
+            caddy: caddy
         });
     } else {
         // Redirect to the login page

+ 23 - 26
package-lock.json

@@ -11,7 +11,7 @@
       "dependencies": {
         "bcrypt": "^5.1.0",
         "child_process": "^1.0.2",
-        "connect-redis": "^7.1.0",
+        "connect-redis": "^6.1.3",
         "dockerode": "^4.0.0",
         "dockerode-compose": "^1.4.0",
         "ejs": "^3.1.9",
@@ -152,38 +152,38 @@
       "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q=="
     },
     "node_modules/@types/cors": {
-      "version": "2.8.15",
-      "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.15.tgz",
-      "integrity": "sha512-n91JxbNLD8eQIuXDIChAN1tCKNWCEgpceU9b7ZMbFA+P+Q4yIeh80jizFLEvolRPc1ES0VdwFlGv+kJTSirogw==",
+      "version": "2.8.17",
+      "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz",
+      "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==",
       "dependencies": {
         "@types/node": "*"
       }
     },
     "node_modules/@types/debug": {
-      "version": "4.1.10",
-      "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.10.tgz",
-      "integrity": "sha512-tOSCru6s732pofZ+sMv9o4o3Zc+Sa8l3bxd/tweTQudFn06vAzb13ZX46Zi6m6EJ+RUbRTHvgQJ1gBtSgkaUYA==",
+      "version": "4.1.12",
+      "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
+      "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==",
       "dependencies": {
         "@types/ms": "*"
       }
     },
     "node_modules/@types/ms": {
-      "version": "0.7.33",
-      "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.33.tgz",
-      "integrity": "sha512-AuHIyzR5Hea7ij0P9q7vx7xu4z0C28ucwjAZC0ja7JhINyCnOw8/DnvAPQQ9TfOlCtZAmCERKQX9+o1mgQhuOQ=="
+      "version": "0.7.34",
+      "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz",
+      "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g=="
     },
     "node_modules/@types/node": {
-      "version": "20.8.10",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.10.tgz",
-      "integrity": "sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==",
+      "version": "20.9.4",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.4.tgz",
+      "integrity": "sha512-wmyg8HUhcn6ACjsn8oKYjkN/zUzQeNtMy44weTJSM6p4MMzEOuKbA3OjJ267uPCOW7Xex9dyrNTful8XTQYoDA==",
       "dependencies": {
         "undici-types": "~5.26.4"
       }
     },
     "node_modules/@types/validator": {
-      "version": "13.11.5",
-      "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.5.tgz",
-      "integrity": "sha512-xW4qsT4UIYILu+7ZrBnfQdBYniZrMLYYK3wN9M/NdeIHgBN5pZI2/8Q7UfdWIcr5RLJv/OGENsx91JIpUUoC7Q=="
+      "version": "13.11.7",
+      "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.7.tgz",
+      "integrity": "sha512-q0JomTsJ2I5Mv7dhHhQLGjMvX0JJm5dyZ1DXQySIUzU1UlwzB8bt+R6+LODUbz0UDIOvEzGc28tk27gBJw2N8Q=="
     },
     "node_modules/abbrev": {
       "version": "1.1.1",
@@ -565,14 +565,11 @@
       "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
     },
     "node_modules/connect-redis": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/connect-redis/-/connect-redis-7.1.0.tgz",
-      "integrity": "sha512-UaqO1EirWjON2ENsyau7N5lbkrdYBpS6mYlXSeff/OYXsd6EGZ+SXSmNPoljL2PSua8fgjAEaldSA73PMZQ9Eg==",
+      "version": "6.1.3",
+      "resolved": "https://registry.npmjs.org/connect-redis/-/connect-redis-6.1.3.tgz",
+      "integrity": "sha512-aaNluLlAn/3JPxRwdzw7lhvEoU6Enb+d83xnokUNhC9dktqBoawKWL+WuxinxvBLTz6q9vReTnUDnUslaz74aw==",
       "engines": {
-        "node": ">=16"
-      },
-      "peerDependencies": {
-        "express-session": ">=1"
+        "node": ">=12"
       }
     },
     "node_modules/console-control-strings": {
@@ -817,9 +814,9 @@
       }
     },
     "node_modules/engine.io": {
-      "version": "6.5.3",
-      "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.3.tgz",
-      "integrity": "sha512-IML/R4eG/pUS5w7OfcDE0jKrljWS9nwnEfsxWCIJF5eO6AHo6+Hlv+lQbdlAYsiJPHzUthLm1RUjnBzWOs45cw==",
+      "version": "6.5.4",
+      "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz",
+      "integrity": "sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==",
       "dependencies": {
         "@types/cookie": "^0.4.1",
         "@types/cors": "^2.8.12",

+ 1 - 1
package.json

@@ -8,7 +8,7 @@
   "dependencies": {
     "bcrypt": "^5.1.0",
     "child_process": "^1.0.2",
-    "connect-redis": "^7.1.0",
+    "connect-redis": "^6.1.3",
     "dockerode": "^4.0.0",
     "dockerode-compose": "^1.4.0",
     "ejs": "^3.1.9",

+ 5 - 5
templates.json

@@ -3701,16 +3701,16 @@
       "type": 1,
       "volumes": [
         {
-          "bind": "/home/docker/caddy/",
+          "bind": "caddy",
           "container": "/data"
         },
         {
-          "bind": "caddy/Caddyfile",
-          "container": "/etc/caddy/Caddyfile"
+          "bind": "caddy",
+          "container": "/config"
         },
         {
-          "bind": "caddy/sites",
-          "container": "/etc/caddy/sites"
+          "bind": "caddyfiles",
+          "container": "/etc/caddy"
         }
       ]
     },

+ 2 - 2
views/pages/dashboard.ejs

@@ -126,7 +126,7 @@
                 </div>
               </div>
 
-              <div class="col-12 mt-12">
+              <div class="col-12 mt-12 <%- caddy %>">
                 <div class="card">
                   <div class="card-header">
                     <h3 class="card-title">Caddy Proxy Manager</h3>
@@ -248,7 +248,7 @@
 
                   </form>
                                         
-                    <p class="m-0 text-muted ms-auto">./caddyfiles/Caddyfile</p>
+                    <p class="m-0 text-muted ms-auto">caddy:/etc/caddy</p>
 
                   </div>
                 </div>

+ 1 - 1
views/partials/footer.ejs

@@ -24,7 +24,7 @@
           </li>
           <li class="list-inline-item">
             <a href="#" class="link-secondary" rel="noopener">
-              v0.05
+              v0.06
             </a>
           </li>
         </ul>