Sign inSign up

griefed/app-collection

By griefed

Updated almost 2 years ago

A bundle of apps. Previously available as separate containers, now bundled into one.

Image
Web servers
5

10K+

griefed/app-collection repository overview

docker-App-Collection

Homepage Blog Fleet GitHub DockerHub


docker-App-Collection

Docker Pulls Docker Cloud Automated build Docker Cloud Build Status Docker Image Size (latest by date) GitHub Repo stars GitHub forks

App-Collection is, as the name implies, a collection of various apps which I have previously released in separate Docker Containers and am now moving/collecting into one single container.

Please keep in mind that the first start of the container may take a while.
That is due to the apps and how they are installed on first run as they are not part of the image itself.
Especially Composerize can take a couple of minutes to finish.

Current applications:

App-CollectionScreenshots
active-forkscomposerize
dcc-webnginxconfig.io
sui-dashboard-statustriangulator
tgenphp-noise

Creates a Container which runs Griefed's docker-App-Collection, with lsiobase/nginx as the base image, similar to https://apps.griefed.de.

The lsiobase/nginx image is a custom base image built with Alpine linux and S6 overlay. Using this image allows us to use the same user/group ids in the container as on the host, making file transfers much easier

Deployment

TagsDescription
latestUsing the latest tag will pull the latest image for amd64/x86_64 architecture.
armUsing the armtag will pull the latest image for arm architecture. Use this if you intend on running the container on a Raspberry Pi 3B, for example.

Pre-built images

using docker-compose:

version: "2"
services:
  app-collection:
    image: griefed/app-collection:latest
    container_name: app-collection
    restart: unless-stopped
    environment:
      - TZ=Europe/Berlin # Timezone
      - PUID=1000 # User ID
      - PROTOCOL=https # The protocol used to access this container. Either HTTP or HTTPS.
      - PGID=1000 # Group ID
      - INSTALL_TRIANGULATOR=true # Whether to install triangulator. Either true or false.
      - INSTALL_TGEN=true # Whether to install tgen. Either true or false.
      - INSTALL_NGINXCONFIG_IO=true # Whether to install NGINXConfig.io. Either true or false.
      - INSTALL_DCC=true # Whether to install dcc. Either true or false.
      - INSTALL_COMPOSERIZE=true # Whether to install composerize. Either true or false.
      - INSTALL_ACTIVE_GITHUB_FORKS=true # Whether to install Active GitHub Forks. Either true or false.
      - INSTALL_PHP_NOISE=true # Whether to install php-noise. Either true or false.
      - DOMAIN=www.example.com # The address of the device this container is running on. Can be an IP or sub.domain.tld.
    volumes:
      - /host/path/to/config:/config # Contains all application data and base-image config files
    ports:
      - 443:443 # https
      - 80:80 # http

Using CLI:

docker create \
  --name=app-collection \
  -e TZ=Europe/Berlin \
  -e PUID=1000 \
  -e PROTOCOL=https \
  -e PGID=1000 \
  -e INSTALL_TRIANGULATOR=true \
  -e INSTALL_TGEN=true \
  -e INSTALL_NGINXCONFIG_IO=true \
  -e INSTALL_DCC=true \
  -e INSTALL_COMPOSERIZE=true \
  -e INSTALL_ACTIVE_GITHUB_FORKS=true \
  -e INSTALL_PHP_NOISE=true \
  -e DOMAIN=www.example.com \
  -v /host/path/to/config:/config \
  -p 443:443 \
  -p 80:80 \
  --restart unless-stopped \
  griefed/app-collection:latest

Raspberry Pi

To run this container on a Raspberry Pi, use the arm-tag. I've tested it on a Raspberry Pi 3B.

griefed/app-collection:arm

Configuration

ConfigurationExplanation
Restart policy"no", always, on-failure, unless-stopped
config volumeContains config files and logs.
TZTimezone
PUIDfor UserID
PGIDfor GroupID
DOMAINThe address of the device this container is running on. Can be an IP or sub.domain.tld.
PROTOCOLThe protocol used to access this container. Either HTTP or HTTPS.
INSTALL_DCCEither true or false.
INSTALL_COMPOSERIZEEither true or false.
INSTALL_NGINXCONFIG_IOEither true or false.
INSTALL_TGENEither true or false.
INSTALL_TRIANGULATOREither true or false.
INSTALL_ACTIVE_GITHUB_FORKSEither true or false.
INSTALL_PHP_NOISEEither true or false.
portsThe port where the service will be available at.

INSTALL and .lock files

If INSTALL_-variable is set to false, App-Collection will not install that app during boot. If set to true, App-Collection will install the corresponding app and place a appname.lock file in the /config/www/ folder. If at any point you wish to reinstall one of the apps, make sure the corresponding appname.lock file is deleted. If at any point you wish to uninstall one of the apps:

  1. Stop the container with docker stop app-collection
  2. Set the INSTALL_-variable for the app you do not want to install to false
  3. Edit your apps.json and remove entries no longer available.
    1. Optionally, if you didn't edit your apps.json, delete the folder you specified in volumes: so App-Collection will generate a fresh one.
  4. Run docker-compose up -d app-collection

User / Group Identifiers

When using volumes, permissions issues can arise between the host OS and the container. Linuxserver.io avoids this issue by allowing you to specify the user PUID and group PGID.

Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

  $ id username
    uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)

Building the image yourself

Use the Dockerfile to build the image yourself, in case you want to make any changes to it

docker-compose.yml

version: '3.6'
services:
  app-collection:
    build: ./docker-App-Collection/
    container_name: app-collection
    restart: unless-stopped
    environment:
      - TZ=Europe/Berlin # Timezone
      - PUID=1000 # User ID
      - PROTOCOL=https # The protocol used to access this container. Either HTTP or HTTPS.
      - PGID=1000 # Group ID
      - INSTALL_TRIANGULATOR=true # Whether to install triangulator. Either true or false.
      - INSTALL_TGEN=true # Whether to install tgen. Either true or false.
      - INSTALL_NGINXCONFIG_IO=true # Whether to install NGINXConfig.io. Either true or false.
      - INSTALL_DCC=true # Whether to install dcc. Either true or false.
      - INSTALL_COMPOSERIZE=true # Whether to install composerize. Either true or false.
      - INSTALL_ACTIVE_GITHUB_FORKS=true # Whether to install Active GitHub Forks. Either true or false.
      - INSTALL_PHP_NOISE=true # Whether to install php-noise. Either true or false.
      - DOMAIN=www.example.com # The address of the device this container is running on. Can be an IP or sub.domain.tld.
    volumes:
      - /host/path/to/config:/config # Contains all application data and base-image config files
    ports:
      - 443:443 # https
      - 80:80 # http
  1. Clone the repository: git clone https://github.com/Griefed/docker-App-Collection.git ./docker-App-Collection
  2. Prepare docker-compose.yml file as seen above
  3. docker-compose up -d --build app-collection
  4. Visit IP.ADDRESS.OF.HOST:8080
  5. ???
  6. Profit!

App Information

Active GitHub Forks

  • works after providing a personal GitHub token. It is used only to increase the limits to query to API. The token is stored in Local Storage only, not sent anywhere except for the GitHub API.
  • include the original repository in the list, marked in bold
  • after expanding Options, it is possible to increase the maximum amount of forks to retrieve and to utilize some kind of caching
  • retrieve commits of each fork and show the differences
  • click on box in the Diff column to see the commits

Optimizations

Because this version retrieves commits from every fork which is slow and uses your quota (it resets every hour, don't worry), I added two options for caching results:

  • Same size - if a fork has the same size as a fork that has already been read, it is assumed to be the same and contain the same commits.
  • Same Push Date - same but looks at the Last Push date. If both are selected, both conditions have to be satisfied at the same time. If the condition is satisfied, commits for the second fork are not retrieved but assumed to be the same as in the first fork.

Composerize

IMPORTANT: Composerize has ads built into it. These are implemented by the creator of Composerize and in no way affiliated with me, Griefed. Neither I nor you or anyone hosting Composerize will earn money from these placements, other than the creator of Composerize themselves. If you want to get rid of the ads, you'll need to edit /config/www/composerize/static/js/runtime-main.c7d51d1a.js at around line 162. If you want to get rid of Google Analytics, you will need to edit /config/www/composerize/index.html.

dcc Web

I've changed the index.html and .css under /gh-pages in order for the website to be deployed with regular apache's, for example a httpd:alpine docker container.

NGINXConfig

A lot of features with corresponding configuration directives. You can deep dive into the NGINX documentation right now OR you can use this tool to check how NGINX works, observe how your inputs are affecting the output, generate the best config for your specific use-case (and in parallel you can still use the docs).

SUI Dashboard Status

Changing color themes

  • Click the options button on the left bottom

Apps

Add your apps by editing apps.json:

{
    "apps" : [
	    {"name":"Name of app 1","hostname":"sub1.example.com","port":80,"href":"https://sub1.example.com" ,"icon":"icon-name"},
	    {"name":"Name of app 2","hostname":"sub2.example.com""port":8080,"href":"https://sub1.example.com" ,"icon":"icon-name"}
    ]
}

Please note:

Bookmarks

Add your bookmarks by editing links.json:

{  
   "bookmarks":[  
      {  
         "category":"Category1",
         "links":[  
            {  
               "name":"Link1",
               "url":"http://example.com"
            },
            {  
               "name":"Link2",
               "url":"http://example.com"
            }
         ]
      },
      {  
         "category":"Category2",
         "links":[  
            {  
               "name":"Link1",
               "url":"http://example.com"
            },
            {  
               "name":"Link2",
               "url":"http://example.com"
            }
         ]
      }
   ]
}

Add names for the categories you wish to define and add the bookmarks for each category.

Please note:

  • No , at the end of the last bookmark in a category and at the end of the last category

Color themes

These can be added or customized in the themer.js file. When changing the name of a theme or adding one, make sure to edit this section in index.html accordingly:

    <section  class="themes">

tgen

Quick usage and examples

    // initialize the generator
    var generator = tgen.init(256, 256);


    // --- texture 1 --------------------------------------------------------------

    var canvas1 = generator
            .do('waves')
            .toCanvas();

    // set img src, and width height
    $('#img1').attr('src', canvas1.toDataURL("image/png")).css({width: canvas1.width, height: canvas1.height});


    // --- texture 2 --------------------------------------------------------------

    var canvas2 = generator
            .do('fill')
            .do('waves', {blend: 'difference'})
            .do('waves', {blend: 'difference'})
            .do('contrast', {"adjust": 50})
            .toCanvas();

    // set img src, and width height
    $('#img2').attr('src', canvas2.toDataURL("image/png")).css({width: canvas2.width, height: canvas2.height});


    // --- texture 3 --------------------------------------------------------------

    var texture3 = generator
            .clear() // remove previous layers
            .do('fill')
            .do('clouds', {blend: 'difference'})
            .do('spheres', {blend: 'lineardodge', 'dynamic': true})
            .do('vibrance', {"adjust": 50});

    var canvas3 = texture3.toCanvas();

    // set img src, and width height
    $('#img3').attr('src', canvas3.toDataURL("image/png")).css({width: canvas3.width, height: canvas3.height});


    // --- texture 4 --------------------------------------------------------------

    // get the generated params of texture3
    var params = texture3.params();

    // get number of layers
    var layers = params.items.length;

    // change the color of clouds
    params.items[layers - 3][2].rgba = [255, 50, 10, 0.85];

    // change the blending method
    params.items[layers - 2][2].blend = 'overlay';

    // generate new texture with modified params of texture3
    var canvas4 = generator.render(params).toCanvas();

    // set img src, and width height
    $('#img4').attr('src', canvas4.toDataURL("image/png")).css({width: canvas4.width, height: canvas4.height});


    // --- texture 5 --------------------------------------------------------------

    var params = {
        "width":  256, // texture width in pixel
        "height": 256, // texture height in pixel
        "debug": true, // render info to console log, default value: false
        "items":  [
            [0, "lines2", { // layer number and effect name
                "blend": "opacity", // layer blend mode
                "count": 21, // square count
                "size":  [5, 15], // random size between 5-15%
                "rgba":  [
                    255, // fixed red channel
                    [128, 192], // random green channel between 128 and 192
                    [200, 255], // random blue channel between 200 and 255
                    [0.2, 0.6] // random opacity between 0.2 and 0.6
                ]
            }],
            [1, "spheres", { // second layer
                "blend":   "lighten",
                "origin":  "random",
                "dynamic": true, //
                "count":   21,
                "size":    [20, 100],
                "rgba":    [200, 200, 200, 0.7]
            }],
            [2, "copy", 0], // copy layer 0 to layer 1
            [2, "merge", { // merge layer 1 i

Tag summary

Content type

Image

Digest

sha256:6a8277f13

Size

64.7 MB

Last updated

almost 2 years ago

docker pull griefed/app-collection:develop-77661eec