diff --git a/README.md b/README.md new file mode 100644 index 0000000..2ae9e0e --- /dev/null +++ b/README.md @@ -0,0 +1,114 @@ +This repo contains a docker-compose file for the following apps: + +## Media Servers + +[Emby](https://emby.media/) Emby Server is a personal media server with apps on just about every device. + +[Plex](https://app.plex.tv)the media server/client solution for enjoying your media! + + +##### Plex Enhancing Apps +------------------ +[Ombi](https://ombi.io) - A simple way for your shared media users to request and download content - automatically! + +[PlexPy](https://jonnywong16.github.io/plexpy/) - A Python based monitoring and tracking tool for Plex Media Server. + +[PlexTogether](http://plextogether.com/) - PlexTogether allows you and your friends/family to watch Plex in sync, wherever you are. + +--------------- +#### Automation +----------- + +##### Movies +[CouchPotato](https://couchpota.to/) - A Video Library Manager for Movies. Automatic torrent/nzb searching and hands off to torrent or newsgroup downloading client. + +[Radarr](https://radarr.video) - Radarr is an independent fork of Sonarr reworked for automatically downloading movies via Usenet and BitTorrent, à la Couchpotato. + +[Watcher](https://github.com/nosmokingbandit/Watcher3) Watcher is an automated movie NZB & Torrent searcher and snatcher. You can add a list of wanted movies and Watcher will automatically send the NZB or Torrent to your download client. Watcher also has basic post-processing capabilities such as renaming and moving. + +##### TV Shows +[Sonarr](https://sonarr.tv/) -An automatic TV Shows downloader and manager for Usenet and BitTorrent. It can grab, sort and rename new episodes and automatically upgrade the quality of files already downloaded when a better quality format becomes available. + +[Sickrage](http://sickrage.github.io/) - SickRage is an automatic Video Library Manager for TV Shows. Automatic torrent/nzb searching, downloading, and processing at the qualities you want. + +[Sickbeard](http://sickbeard.com) - The ultimate PVR application that searches for and manages your TV shows Automatically finds new and old episodes for you and it works with your current download client. + +[Sickgear](https://github.com/SickGear/SickGear) Automate your TV enjoyment with innovation, proven stability and reliability. + +##### Music +[Headphones](https://github.com/rembo10/headphones) - An automated music downloader for NZB and Torrent, written in Python. + +[Beets](http://beets.io) - Beets is a Music Library Manager that handles grabbing and fixing metadata as well as being a html5 media player. + +[Lidarr](https://github.com/lidarr/lidarr) Lidarr is a music collection manager for Usenet and BitTorrent users. + +##### eBooks / Comics +[LazyLibrarian](https://github.com/DobyTang/LazyLibrarian) - a program to follow authors and grab metadata for all your digital reading needs. + +[Mylar](https://github.com/evilhero/mylar) - An automated Comic Book downloader (cbr/cbz) for use with SABnzbd, NZBGet and torrents. + +[Ubooquity](https://vaemendis.net/ubooquity/) - Ubooquity is a free home server for your comics and ebooks library + +------------- +### Torrents +------------- +[rTorrent](https://github.com/rakshasa/rtorrent/wiki) - CLI torrent with and insane amount of customization to tune exactly to your needs + + * [ruTorrent](https://github.com/Novik/ruTorrent) - WebUI for rTorrent with an immense amount of enhancement plugins + * [Flood](https://github.com/jfurrow/flood) - WebUI for rTorrent. Fairly New, not as large of a beneficial toolkit but + definately but still beneficial and looks awesome. + +[Transmission](https://transmissionbt.com/) - Bittorrent client - Finally has official Windows port + +[Deluge](http://deluge-torrent.org) - lightweight, Free Software, cross-platform BitTorrent client. + +[Deluge-VPN](http://deluge-torrent.org) - lightweight, Free Software, cross-platform BitTorrent client with openvpn built in. + +[Cardigann](https://github.com/cardigann/cardigann) - A server for adding extra indexers to Sonarr, SickRage and CouchPotato via Torznab and TorrentPotato proxies. Behind the scenes Cardigann logs in and runs searches and then transforms the results into a compatible format. + +[Jackett](https://github.com/Jackett/Jackett) - Jackett works as a proxy server: it translates queries from apps into tracker-site-specific http queries, parses the html response, then sends results back to the requesting software. This allows for getting recent uploads (like RSS) and performing searches. + +--------- +### Usenet +--------- +[NZBGet](https://nzbget.net) - NZBGet is a binary downloader, which downloads files from Usenet based on information given in nzb-files. + +[SABnzbd](https://sabnzbd.org) - SABnzbd is an Open Source Binary Newsreader written in Python and an automated usenet download tool. + +[NZBHydra](https://github.com/theotherp/nzbhydra) - Meta search for NZB indexers as well as integrates indexers into the automation software. + +---------- +##### Landing Page/Dashboards +--------- +[Organizr](https://organizr.us) or [Organizr Reddit](https://www.reddit.com/r/organizr/) - Integrates all your services into the website so no more remembering 10-15 ips. Can Invites friends and family to plex, Plus its on awesome looking landing/homepage/frontend for your server. It really is that good. Take 2 seconds and check the reddit or website. + +[Muximux](https://github.com/mescon/Muximux) - This is a lightweight portal to view & manage your webapps without having to run anything more than a PHP enabled webserver. With Muximux you don't need to keep multiple tabs open, or bookmark the URL to all of your apps. + + +##### Docker Dashboard/Management Tools + +[Portainer](https://portainer.io) - Portainer is an Open-Source Lightweight Management UI which allows you to easily manage your Docker hosts or swarm clusters + +##### Server Monitoring (networking, disk usage, memory etc etc) + +[NetData](https://my-netdata.io) - Unparalleled insights, in real-time, of everything happening on your systems and applications, with stunning, interactive web dashboards and powerful performance and health alarms. + +##### File Hosting, Management, Sharing and Synchronization +[Nextcloud](https://nextcloud.com/) - Personal File Hosting Site to Give you Access from Anywhere or to Share with friends and Family. + +[OwnCloud](https://owncloud.org) - All-in-one solution for saving, synchronizing, viewing, +editing and sharing files, calendars, address books and more. + +[Syncthing](https://www.syncany.org/) - Syncthing is an open source peer-to-peer file synchronisation tool. + +[ResilioSync](https://www.resilio.com/individuals/) - Fast and reliable file and folder synchronization solution for individuals. + +###### Remote Server Management + +[Guacamole](https://guacamole.incubator.apache.org/) clientless remote desktop gateway. It supports standard protocols like VNC, RDP, and SSH. + +##### File Sync + +[Syncthing](http://forum.syncthing.net) Open Source Continuous File Synchronization. + +[Resilio Sync](www.resilio.com) a proprietary peer-to-peer file synchronization tool. \ No newline at end of file diff --git a/beets/docker-compose.yml b/beets/docker-compose.yml new file mode 100644 index 0000000..58beea7 --- /dev/null +++ b/beets/docker-compose.yml @@ -0,0 +1,18 @@ +version: '2' +services: + beets: + image: linuxserver/beets + container_name: beets + restart: always + networks: + - media + ports: + - 1234:1234 + volumes: + - /srv/appdata/beets:/config + +networks: + media: + external: true + + \ No newline at end of file diff --git a/cardigann/docker-compose.yml b/cardigann/docker-compose.yml new file mode 100644 index 0000000..6035442 --- /dev/null +++ b/cardigann/docker-compose.yml @@ -0,0 +1,22 @@ +version: '2' + +services: + cardigann: + image: linuxserver/cardigann + container_name: cardigann + restart: always + networks: + - media + ports: + - 5060:5060 + volumes: + - /srv/appdata/cardigann:/config + environment: + PUID: ${userid} + PGID: ${groupid} + TZ: ${time} + +networks: + media: + external: true + \ No newline at end of file diff --git a/couchpotato/docker-compose.yml b/couchpotato/docker-compose.yml new file mode 100644 index 0000000..6bd1c45 --- /dev/null +++ b/couchpotato/docker-compose.yml @@ -0,0 +1,25 @@ +version: '2.1' + +services: + couchpotato: + image: linuxserver/couchpotato + container_name: couchpotato + restart: always + networks: + - media + ports: + - 5050:5050 + volumes: + - /srv/appdata/couchpotato:/config + - /srv/downloads/movies:/downloads + - /srv/media/movies:/movies + - /etc/localtime:/etc/localtime:ro + environment: + PUID: ${userid} + PGID: ${groupid} + TZ: ${time} + UMASK_SET: 022 + +networks: + media: + external: true diff --git a/deluge-vpn/docker-compose.yml b/deluge-vpn/docker-compose.yml new file mode 100644 index 0000000..0e5c919 --- /dev/null +++ b/deluge-vpn/docker-compose.yml @@ -0,0 +1,27 @@ +version: '2' + +services: + delugevpn: + image: binhex/arch-delugevpn + container_name: delugevpn + - NET_ADMIN + ports: + - 8112:8112 + - 8118:8118 + - 58846:58846 + - 58946:58946 + volumes: + - /srv/appdata/delugevpn:/config + - /srv/downloads:/data + - /etc/localtime:/etc/localtime:ro + env_file: id.env + environment: + PUID: ${userid} + PGID: ${groupid} + TZ: ${time} + UMASK: '000' + VPN_ENABLED: 'yes' + VPN_PROV: 'pia' + ENABLE_PRIVOXY: 'yes' + STRICT_PORT_FORWARDING: 'yes' + NAME_SERVERS: '8.8.8.8,8.8.4.4,209.222.18.222' \ No newline at end of file diff --git a/deluge-vpn/id.env b/deluge-vpn/id.env new file mode 100644 index 0000000..1b9c178 --- /dev/null +++ b/deluge-vpn/id.env @@ -0,0 +1,2 @@ +VPN_USER=vpnuser +VPN_PASS=vpnpassword \ No newline at end of file diff --git a/deluge/docker-compose.yml b/deluge/docker-compose.yml new file mode 100644 index 0000000..1b941a6 --- /dev/null +++ b/deluge/docker-compose.yml @@ -0,0 +1,16 @@ +version: '2' + +services: + deluge: + image: linuxserver/deluge + container_name: deluge + network_mode: host + restart: always + volumes: + - /srv/appdata/deluge:/config + - /srv/downloads:/downloads + environment: + PUID: ${userid} + PGID: ${groupid} + TZ: ${time} + UMASK_SET: 022 \ No newline at end of file diff --git a/emby/docker-compose.yml b/emby/docker-compose.yml new file mode 100644 index 0000000..46a0c25 --- /dev/null +++ b/emby/docker-compose.yml @@ -0,0 +1,24 @@ +version: '2' + +services: + emby: + image: binhex/arch-emby + container_name: emby + restart: always + networks: + - media + ports: + - 8096:8096 + volumes: + - /srv/appdata/emby:/config + - /srv/media:/media + - /etc/localtime:/etc/localtime:ro + environment: + PUID: ${userid} + PGID: ${groupid} + TZ: ${time} + UMASK_SET: 022 + +networks: + media: + external: true diff --git a/filebot/docker-compose.yml b/filebot/docker-compose.yml new file mode 100644 index 0000000..6ae5acb --- /dev/null +++ b/filebot/docker-compose.yml @@ -0,0 +1,20 @@ +version: '2' + +services: + filebot: + image: coppit/filebot + container_name: filebot + restart: always + volumes: + - /srv/appdata/filebot:/config + - /srv/media:/output + - /srv/downloads/complete:/input + environment: + PUID: ${userid} + PGID: ${groupid} + TZ: ${time} + +networks: + media: + external: true + \ No newline at end of file diff --git a/guacamole/docker-compose.yml b/guacamole/docker-compose.yml new file mode 100644 index 0000000..7b2437c --- /dev/null +++ b/guacamole/docker-compose.yml @@ -0,0 +1,46 @@ +version: '2' + +services: + guac-db: + image: postgres + container_name: guac-db + restart: always + networks: + - media + volumes: + - ./init:/docker-entrypoint-initdb.d + - /srv/appdata/guacamole:/var/lib/postgressql/data + environment: + POSTGRES_DB: guac_db + env_file: id.env + + guac-server: + image: guacamole/guacd:0.9.13-incubating + container_name: guac-server + hostname: guac-server + restart: always + networks: + - media + + guacamole: + image: guacamole/guacamole:0.9.13-incubating + container_name: guacamole + restart: always + networks: + - media + ports: + - 8282:8080 + environment: + POSTGRES_HOSTNAME: guac-db + GUACD_HOSTNAME: guac-server + POSTGRES_DATABASE: guac_db + GUACD_PORT: 4822 + env_file: id.env + depends_on: + - guac-db + - guac-server + +networks: + media: + external: true + \ No newline at end of file diff --git a/guacamole/id.env b/guacamole/id.env new file mode 100644 index 0000000..d3be496 --- /dev/null +++ b/guacamole/id.env @@ -0,0 +1,2 @@ +POSTGRES_USER=postgresuser +POSTGRES_PASSWORD=postgrespw \ No newline at end of file diff --git a/guacamole/init/initdb.sql b/guacamole/init/initdb.sql new file mode 100644 index 0000000..b5edd7e --- /dev/null +++ b/guacamole/init/initdb.sql @@ -0,0 +1,483 @@ +-- +-- Licensed to the Apache Software Foundation (ASF) under one +-- or more contributor license agreements. See the NOTICE file +-- distributed with this work for additional information +-- regarding copyright ownership. The ASF licenses this file +-- to you under the Apache License, Version 2.0 (the +-- "License"); you may not use this file except in compliance +-- with the License. You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, +-- software distributed under the License is distributed on an +-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +-- KIND, either express or implied. See the License for the +-- specific language governing permissions and limitations +-- under the License. +-- + +-- +-- Connection group types +-- + +CREATE TYPE guacamole_connection_group_type AS ENUM( + 'ORGANIZATIONAL', + 'BALANCING' +); + +-- +-- Object permission types +-- + +CREATE TYPE guacamole_object_permission_type AS ENUM( + 'READ', + 'UPDATE', + 'DELETE', + 'ADMINISTER' +); + +-- +-- System permission types +-- + +CREATE TYPE guacamole_system_permission_type AS ENUM( + 'CREATE_CONNECTION', + 'CREATE_CONNECTION_GROUP', + 'CREATE_SHARING_PROFILE', + 'CREATE_USER', + 'ADMINISTER' +); + +-- +-- Guacamole proxy (guacd) encryption methods +-- + +CREATE TYPE guacamole_proxy_encryption_method AS ENUM( + 'NONE', + 'SSL' +); + +-- +-- Table of connection groups. Each connection group has a name. +-- + +CREATE TABLE guacamole_connection_group ( + + connection_group_id serial NOT NULL, + parent_id integer, + connection_group_name varchar(128) NOT NULL, + type guacamole_connection_group_type + NOT NULL DEFAULT 'ORGANIZATIONAL', + + -- Concurrency limits + max_connections integer, + max_connections_per_user integer, + enable_session_affinity boolean NOT NULL DEFAULT FALSE, + + PRIMARY KEY (connection_group_id), + + CONSTRAINT connection_group_name_parent + UNIQUE (connection_group_name, parent_id), + + CONSTRAINT guacamole_connection_group_ibfk_1 + FOREIGN KEY (parent_id) + REFERENCES guacamole_connection_group (connection_group_id) + ON DELETE CASCADE + +); + +CREATE INDEX ON guacamole_connection_group(parent_id); + +-- +-- Table of connections. Each connection has a name, protocol, and +-- associated set of parameters. +-- A connection may belong to a connection group. +-- + +CREATE TABLE guacamole_connection ( + + connection_id serial NOT NULL, + connection_name varchar(128) NOT NULL, + parent_id integer, + protocol varchar(32) NOT NULL, + + -- Concurrency limits + max_connections integer, + max_connections_per_user integer, + + -- Guacamole proxy (guacd) overrides + proxy_port integer, + proxy_hostname varchar(512), + proxy_encryption_method guacamole_proxy_encryption_method, + + PRIMARY KEY (connection_id), + + CONSTRAINT connection_name_parent + UNIQUE (connection_name, parent_id), + + CONSTRAINT guacamole_connection_ibfk_1 + FOREIGN KEY (parent_id) + REFERENCES guacamole_connection_group (connection_group_id) + ON DELETE CASCADE + +); + +CREATE INDEX ON guacamole_connection(parent_id); + +-- +-- Table of users. Each user has a unique username and a hashed password +-- with corresponding salt. Although the authentication system will always set +-- salted passwords, other systems may set unsalted passwords by simply not +-- providing the salt. +-- + +CREATE TABLE guacamole_user ( + + user_id serial NOT NULL, + + -- Username and optionally-salted password + username varchar(128) NOT NULL, + password_hash bytea NOT NULL, + password_salt bytea, + password_date timestamptz NOT NULL, + + -- Account disabled/expired status + disabled boolean NOT NULL DEFAULT FALSE, + expired boolean NOT NULL DEFAULT FALSE, + + -- Time-based access restriction + access_window_start time, + access_window_end time, + + -- Date-based access restriction + valid_from date, + valid_until date, + + -- Timezone used for all date/time comparisons and interpretation + timezone varchar(64), + + -- Profile information + full_name varchar(256), + email_address varchar(256), + organization varchar(256), + organizational_role varchar(256), + + PRIMARY KEY (user_id), + + CONSTRAINT username + UNIQUE (username) + +); + +-- +-- Table of sharing profiles. Each sharing profile has a name, associated set +-- of parameters, and a primary connection. The primary connection is the +-- connection that the sharing profile shares, and the parameters dictate the +-- restrictions/features which apply to the user joining the connection via the +-- sharing profile. +-- + +CREATE TABLE guacamole_sharing_profile ( + + sharing_profile_id serial NOT NULL, + sharing_profile_name varchar(128) NOT NULL, + primary_connection_id integer NOT NULL, + + PRIMARY KEY (sharing_profile_id), + + CONSTRAINT sharing_profile_name_primary + UNIQUE (sharing_profile_name, primary_connection_id), + + CONSTRAINT guacamole_sharing_profile_ibfk_1 + FOREIGN KEY (primary_connection_id) + REFERENCES guacamole_connection (connection_id) + ON DELETE CASCADE + +); + +CREATE INDEX ON guacamole_sharing_profile(primary_connection_id); + +-- +-- Table of connection parameters. Each parameter is simply a name/value pair +-- associated with a connection. +-- + +CREATE TABLE guacamole_connection_parameter ( + + connection_id integer NOT NULL, + parameter_name varchar(128) NOT NULL, + parameter_value varchar(4096) NOT NULL, + + PRIMARY KEY (connection_id,parameter_name), + + CONSTRAINT guacamole_connection_parameter_ibfk_1 + FOREIGN KEY (connection_id) + REFERENCES guacamole_connection (connection_id) ON DELETE CASCADE + +); + +CREATE INDEX ON guacamole_connection_parameter(connection_id); + +-- +-- Table of sharing profile parameters. Each parameter is simply +-- name/value pair associated with a sharing profile. These parameters dictate +-- the restrictions/features which apply to the user joining the associated +-- connection via the sharing profile. +-- + +CREATE TABLE guacamole_sharing_profile_parameter ( + + sharing_profile_id integer NOT NULL, + parameter_name varchar(128) NOT NULL, + parameter_value varchar(4096) NOT NULL, + + PRIMARY KEY (sharing_profile_id, parameter_name), + + CONSTRAINT guacamole_sharing_profile_parameter_ibfk_1 + FOREIGN KEY (sharing_profile_id) + REFERENCES guacamole_sharing_profile (sharing_profile_id) ON DELETE CASCADE + +); + +CREATE INDEX ON guacamole_sharing_profile_parameter(sharing_profile_id); + +-- +-- Table of connection permissions. Each connection permission grants a user +-- specific access to a connection. +-- + +CREATE TABLE guacamole_connection_permission ( + + user_id integer NOT NULL, + connection_id integer NOT NULL, + permission guacamole_object_permission_type NOT NULL, + + PRIMARY KEY (user_id,connection_id,permission), + + CONSTRAINT guacamole_connection_permission_ibfk_1 + FOREIGN KEY (connection_id) + REFERENCES guacamole_connection (connection_id) ON DELETE CASCADE, + + CONSTRAINT guacamole_connection_permission_ibfk_2 + FOREIGN KEY (user_id) + REFERENCES guacamole_user (user_id) ON DELETE CASCADE + +); + +CREATE INDEX ON guacamole_connection_permission(connection_id); +CREATE INDEX ON guacamole_connection_permission(user_id); + +-- +-- Table of connection group permissions. Each group permission grants a user +-- specific access to a connection group. +-- + +CREATE TABLE guacamole_connection_group_permission ( + + user_id integer NOT NULL, + connection_group_id integer NOT NULL, + permission guacamole_object_permission_type NOT NULL, + + PRIMARY KEY (user_id,connection_group_id,permission), + + CONSTRAINT guacamole_connection_group_permission_ibfk_1 + FOREIGN KEY (connection_group_id) + REFERENCES guacamole_connection_group (connection_group_id) ON DELETE CASCADE, + + CONSTRAINT guacamole_connection_group_permission_ibfk_2 + FOREIGN KEY (user_id) + REFERENCES guacamole_user (user_id) ON DELETE CASCADE + +); + +CREATE INDEX ON guacamole_connection_group_permission(connection_group_id); +CREATE INDEX ON guacamole_connection_group_permission(user_id); + +-- +-- Table of sharing profile permissions. Each sharing profile permission grants +-- a user specific access to a sharing profile. +-- + +CREATE TABLE guacamole_sharing_profile_permission ( + + user_id integer NOT NULL, + sharing_profile_id integer NOT NULL, + permission guacamole_object_permission_type NOT NULL, + + PRIMARY KEY (user_id,sharing_profile_id,permission), + + CONSTRAINT guacamole_sharing_profile_permission_ibfk_1 + FOREIGN KEY (sharing_profile_id) + REFERENCES guacamole_sharing_profile (sharing_profile_id) ON DELETE CASCADE, + + CONSTRAINT guacamole_sharing_profile_permission_ibfk_2 + FOREIGN KEY (user_id) + REFERENCES guacamole_user (user_id) ON DELETE CASCADE + +); + +CREATE INDEX ON guacamole_sharing_profile_permission(sharing_profile_id); +CREATE INDEX ON guacamole_sharing_profile_permission(user_id); + +-- +-- Table of system permissions. Each system permission grants a user a +-- system-level privilege of some kind. +-- + +CREATE TABLE guacamole_system_permission ( + + user_id integer NOT NULL, + permission guacamole_system_permission_type NOT NULL, + + PRIMARY KEY (user_id,permission), + + CONSTRAINT guacamole_system_permission_ibfk_1 + FOREIGN KEY (user_id) + REFERENCES guacamole_user (user_id) ON DELETE CASCADE + +); + +CREATE INDEX ON guacamole_system_permission(user_id); + +-- +-- Table of user permissions. Each user permission grants a user access to +-- another user (the "affected" user) for a specific type of operation. +-- + +CREATE TABLE guacamole_user_permission ( + + user_id integer NOT NULL, + affected_user_id integer NOT NULL, + permission guacamole_object_permission_type NOT NULL, + + PRIMARY KEY (user_id,affected_user_id,permission), + + CONSTRAINT guacamole_user_permission_ibfk_1 + FOREIGN KEY (affected_user_id) + REFERENCES guacamole_user (user_id) ON DELETE CASCADE, + + CONSTRAINT guacamole_user_permission_ibfk_2 + FOREIGN KEY (user_id) + REFERENCES guacamole_user (user_id) ON DELETE CASCADE + +); + +CREATE INDEX ON guacamole_user_permission(affected_user_id); +CREATE INDEX ON guacamole_user_permission(user_id); + +-- +-- Table of connection history records. Each record defines a specific user's +-- session, including the connection used, the start time, and the end time +-- (if any). +-- + +CREATE TABLE guacamole_connection_history ( + + history_id serial NOT NULL, + user_id integer DEFAULT NULL, + username varchar(128) NOT NULL, + connection_id integer DEFAULT NULL, + connection_name varchar(128) NOT NULL, + sharing_profile_id integer DEFAULT NULL, + sharing_profile_name varchar(128) DEFAULT NULL, + start_date timestamptz NOT NULL, + end_date timestamptz DEFAULT NULL, + + PRIMARY KEY (history_id), + + CONSTRAINT guacamole_connection_history_ibfk_1 + FOREIGN KEY (user_id) + REFERENCES guacamole_user (user_id) ON DELETE SET NULL, + + CONSTRAINT guacamole_connection_history_ibfk_2 + FOREIGN KEY (connection_id) + REFERENCES guacamole_connection (connection_id) ON DELETE SET NULL, + + CONSTRAINT guacamole_connection_history_ibfk_3 + FOREIGN KEY (sharing_profile_id) + REFERENCES guacamole_sharing_profile (sharing_profile_id) ON DELETE SET NULL + +); + +CREATE INDEX ON guacamole_connection_history(user_id); +CREATE INDEX ON guacamole_connection_history(connection_id); +CREATE INDEX ON guacamole_connection_history(sharing_profile_id); +CREATE INDEX ON guacamole_connection_history(start_date); +CREATE INDEX ON guacamole_connection_history(end_date); + +-- +-- User password history +-- + +CREATE TABLE guacamole_user_password_history ( + + password_history_id serial NOT NULL, + user_id integer NOT NULL, + + -- Salted password + password_hash bytea NOT NULL, + password_salt bytea, + password_date timestamptz NOT NULL, + + PRIMARY KEY (password_history_id), + + CONSTRAINT guacamole_user_password_history_ibfk_1 + FOREIGN KEY (user_id) + REFERENCES guacamole_user (user_id) ON DELETE CASCADE + +); + +CREATE INDEX ON guacamole_user_password_history(user_id); +-- +-- Licensed to the Apache Software Foundation (ASF) under one +-- or more contributor license agreements. See the NOTICE file +-- distributed with this work for additional information +-- regarding copyright ownership. The ASF licenses this file +-- to you under the Apache License, Version 2.0 (the +-- "License"); you may not use this file except in compliance +-- with the License. You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, +-- software distributed under the License is distributed on an +-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +-- KIND, either express or implied. See the License for the +-- specific language governing permissions and limitations +-- under the License. +-- + + +-- Create default user "guacadmin" with password "guacadmin" +INSERT INTO guacamole_user (username, password_hash, password_salt, password_date) +VALUES ('guacadmin', + E'\\xCA458A7D494E3BE824F5E1E175A1556C0F8EEF2C2D7DF3633BEC4A29C4411960', -- 'guacadmin' + E'\\xFE24ADC5E11E2B25288D1704ABE67A79E342ECC26064CE69C5B3177795A82264', + CURRENT_TIMESTAMP); + +-- Grant this user all system permissions +INSERT INTO guacamole_system_permission +SELECT user_id, permission::guacamole_system_permission_type +FROM ( + VALUES + ('guacadmin', 'CREATE_CONNECTION'), + ('guacadmin', 'CREATE_CONNECTION_GROUP'), + ('guacadmin', 'CREATE_SHARING_PROFILE'), + ('guacadmin', 'CREATE_USER'), + ('guacadmin', 'ADMINISTER') +) permissions (username, permission) +JOIN guacamole_user ON permissions.username = guacamole_user.username; + +-- Grant admin permission to read/update/administer self +INSERT INTO guacamole_user_permission +SELECT guacamole_user.user_id, affected.user_id, permission::guacamole_object_permission_type +FROM ( + VALUES + ('guacadmin', 'guacadmin', 'READ'), + ('guacadmin', 'guacadmin', 'UPDATE'), + ('guacadmin', 'guacadmin', 'ADMINISTER') +) permissions (username, affected_username, permission) +JOIN guacamole_user ON permissions.username = guacamole_user.username +JOIN guacamole_user affected ON permissions.affected_username = affected.username; + diff --git a/headphones/docker-compose.yml b/headphones/docker-compose.yml new file mode 100644 index 0000000..5a38e52 --- /dev/null +++ b/headphones/docker-compose.yml @@ -0,0 +1,24 @@ +version: '2' + +services: + headphones: + image: linuxserver/headphones + container_name: headphones + restart: always + networks: + - media + ports: + - 1818:8181 + volumes: + - /srv/appdata/headphones:/config + - /srv/downloads:/downloads + - /srv/media/music:/music + environment: + PUID: ${userid} + PGID: ${groupid} + TZ: ${time} + +networks: + media: + external: true + diff --git a/jackett/docker-compose.yml b/jackett/docker-compose.yml new file mode 100644 index 0000000..2d712f0 --- /dev/null +++ b/jackett/docker-compose.yml @@ -0,0 +1,23 @@ +version: '2' + +services: + jackett: + image: linuxserver/jackett + container_name: jackett + restart: always + networks: + - media + ports: + - 9117:9117 + volumes: + - /srv/downloads:/downloads + - /srv/appdata/jackett:/config + environment: + PUID: ${userid} + PGID: ${groupid} + TZ: ${time} + +networks: + media: + external: true + \ No newline at end of file diff --git a/lazylibrarian/docker-compose.yml b/lazylibrarian/docker-compose.yml new file mode 100644 index 0000000..e9b812a --- /dev/null +++ b/lazylibrarian/docker-compose.yml @@ -0,0 +1,24 @@ +version: '2' + +services: + lazylibrarian: + image: linuxserver/lazylibrarian + container_name: lazylibrarian + restart: always + networks: + - media + ports: + - 5299:5299 + volumes: + - /srv/appdata/lazylibrarian:/config + - /srv/downloads:/downloads + - /srv/media/books:/books + environment: + PUID: ${userid} + PGID: ${groupid} + TZ: ${time} + +networks: + media: + external: true + \ No newline at end of file diff --git a/lidarr/docker-compose.yml b/lidarr/docker-compose.yml new file mode 100644 index 0000000..dfdf69a --- /dev/null +++ b/lidarr/docker-compose.yml @@ -0,0 +1,24 @@ +version: '2' + +services: + lidarr: + image: volikon/lidarr + container_name: lidarr + restart: always + networks: + - media + ports: + - 8686:8686 + volumes: + - /srv/appdata/lidarr:/config + - /srv/media:/music + - /srv/downloads:/downloads + - /etc/localtime:/etc/localtime:ro + environment: + PUID: ${userid} + PGID: ${groupid} + TZ: ${time} + +networks: + media: + external: true \ No newline at end of file diff --git a/muximux/docker-compose.yml b/muximux/docker-compose.yml new file mode 100644 index 0000000..c26ab2e --- /dev/null +++ b/muximux/docker-compose.yml @@ -0,0 +1,21 @@ +version: '2' + +services: + muximux: + image: linuxserver/muximux + container_name: muximux + restart: always + networks: + - media + ports: + - 8888:80 + volumes: + - /srv/appdata/muximux:/config + environment: + PUID: ${userid} + PGID: ${groupid} + TZ: ${time} + +networks: + media: + external: true \ No newline at end of file diff --git a/mylar/docker-compose.yml b/mylar/docker-compose.yml new file mode 100644 index 0000000..ba8b378 --- /dev/null +++ b/mylar/docker-compose.yml @@ -0,0 +1,24 @@ +version: '2' + +services: + mylar: + image: linuxserver/mylar + container_name: mylar + restart: always + networks: + - media + ports: + - 8090:8090 + volumes: + - /srv/appdata/mylar:/config + - /srv/downloads:/downloads + - /srv/media/comics:/comics + environment: + PUID: ${userid} + PGID: ${groupid} + TZ: ${time} + +networks: + media: + external: true + \ No newline at end of file diff --git a/netdata/docker-compose.yml b/netdata/docker-compose.yml new file mode 100644 index 0000000..f4fb5ef --- /dev/null +++ b/netdata/docker-compose.yml @@ -0,0 +1,20 @@ +version: '2' + +services: + netdata: + image: titpetric/netdata + container_name: netdata + restart: always + networks: + - media + ports: + - 19999:19999 + volumes: + - /proc:/host/proc:ro + - /sys:/host/sys:ro + - /var/run/docker.sock:/var/run/docker.sock:ro + +networks: + media: + external: true + diff --git a/nextcloud/docker-compose.yml b/nextcloud/docker-compose.yml new file mode 100644 index 0000000..2133738 --- /dev/null +++ b/nextcloud/docker-compose.yml @@ -0,0 +1,28 @@ +version: '2' + +services: + nextcloud-db: + image: mariadb + container_name: nextcloud-db + restart: always + networks: + - media + volumes: + - /srv/appdata/nextcloud/db:/var/lib/mysql + env_file: id.env + + nextcloud: + image: nextcloud:fpm + container_name: nextcloud + restart: always + networks: + - media + links: + - nextcloud-db + volumes: + - /srv/appdata/nextcloud/data:/var/www/html + +networks: + media: + external: true + \ No newline at end of file diff --git a/nextcloud/id.env b/nextcloud/id.env new file mode 100644 index 0000000..393d3af --- /dev/null +++ b/nextcloud/id.env @@ -0,0 +1,4 @@ +MYSQL_ROOT_PASSWORD=mysqlrootpass +MYSQL_PASSWORD=mysqlpass +MYSQL_DATABASE=nextcloud +MYSQL_USER=nextcloud \ No newline at end of file diff --git a/nzbget/docker-compose.yml b/nzbget/docker-compose.yml new file mode 100644 index 0000000..813a1e1 --- /dev/null +++ b/nzbget/docker-compose.yml @@ -0,0 +1,22 @@ +version: '2' + +services: + nzbget: + image: linuxserver/nzbget + container_name: nzbget + restart: always + networks: + - media + ports: + - 6789:6789 + volumes: + - /srv/appdata/nzbget:/config + - /srv/downloads:/downloads + environment: + PUID: ${userid} + PGID: ${groupid} + TZ: ${time} + +networks: + media: + external: true \ No newline at end of file diff --git a/nzbhydra/docker-compose.yml b/nzbhydra/docker-compose.yml new file mode 100644 index 0000000..176a346 --- /dev/null +++ b/nzbhydra/docker-compose.yml @@ -0,0 +1,22 @@ +version: '2' + +services: + nzbhydra: + image: linuxserver/hydra + container_name: nzbhydra + restart: always + networks: + - media + ports: + - 5075:5075 + volumes: + - /srv/appdata/nzbhydra:/config + - /srv/downloads:/downloads + environment: + PUID: ${userid} + PGID: ${groupid} + TZ: ${time} + +networks: + media: + external: true \ No newline at end of file diff --git a/organizr/docker-compose.yml b/organizr/docker-compose.yml new file mode 100644 index 0000000..54815f0 --- /dev/null +++ b/organizr/docker-compose.yml @@ -0,0 +1,22 @@ +version: '2' + +services: + organizr: + image: lsiocommunity/organizr + container_name: organizr + restart: always + networks: + - media + ports: + - 8811:80 + - 8443:443 + volumes: + - /srv/appdata/organizr:/config + environment: + PUID: ${userid} + PGID: ${groupid} + TZ: ${time} + +networks: + media: + external: true \ No newline at end of file diff --git a/owncloud/docker-compose.yml b/owncloud/docker-compose.yml new file mode 100644 index 0000000..ec5b909 --- /dev/null +++ b/owncloud/docker-compose.yml @@ -0,0 +1,62 @@ +version: '3' + +services: + owncloud: + image: owncloud/server + restart: always + ports: + - 6443:443 + - 6444:80 + depends_on: + - db + - redis + environment: + - OWNCLOUD_DB_TYPE=mysql + - OWNCLOUD_DB_NAME=owncloud + - OWNCLOUD_DB_USERNAME=owncloud + - OWNCLOUD_DB_PASSWORD=owncloud + - OWNCLOUD_DB_HOST=db + - OWNCLOUD_UTF8MB4_ENABLED=true + - OWNCLOUD_REDIS_ENABLED=true + - OWNCLOUD_REDIS_HOST=redis + env_file: id.env + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:80/status.php"] + interval: 30s + timeout: 10s + retries: 5 + volumes: + - /srv/appdata/owncloud:/mnt/data + + db: + image: webhippie/mariadb:latest + restart: always + environment: + - MARIADB_ROOT_PASSWORD=owncloud + - MARIADB_USERNAME=owncloud + - MARIADB_PASSWORD=owncloud + - MARIADB_DATABASE=owncloud + - MARIADB_MAX_ALLOWED_PACKET=128M + - MARIADB_INNODB_LOG_FILE_SIZE=64M + - MARIADB_INNODB_LARGE_PREFIX=ON + - MARIADB_INNODB_FILE_FORMAT=Barracuda + healthcheck: + test: ["CMD", "/usr/bin/healthcheck"] + interval: 30s + timeout: 10s + retries: 5 + volumes: + - /srv/appdata/owncloud/mysql:/var/lib/mysql + + redis: + image: webhippie/redis:latest + restart: always + environment: + - REDIS_MAXCONN=10000 + healthcheck: + test: ["CMD", "/usr/bin/healthcheck"] + interval: 30s + timeout: 10s + retries: 5 + volumes: + - /srv/appdata/owncloud/redis:/var/lib/redis \ No newline at end of file diff --git a/owncloud/id.env b/owncloud/id.env new file mode 100644 index 0000000..56d518d --- /dev/null +++ b/owncloud/id.env @@ -0,0 +1,3 @@ +OWNCLOUD_DOMAIN=ownclouddomain +OWNCLOUD_ADMIN_USERNAME=adminuser +OWNCLOUD_ADMIN_PASSWORD=adminpw \ No newline at end of file diff --git a/plex/docker-compose.yml b/plex/docker-compose.yml new file mode 100644 index 0000000..51fc5cd --- /dev/null +++ b/plex/docker-compose.yml @@ -0,0 +1,29 @@ +version: '2' + +services: + plex: + image: linuxserver/plex + container_name: plex + restart: always + networks: + - media + ports: + - 32400:32400 + - 32400:32400/udp + - 32469:32469 + - 32469:32469/udp + - 5353:5353/udp + - 1900:1900/udp + volumes: + - /srv/appdata/plex:/config + - /srv/appdata/plex/transcode:/transcode + - /srv/media:/data + environment: + PUID: ${userid} + PGID: ${groupid} + TZ: ${time} + +networks: + media: + external: true + \ No newline at end of file diff --git a/plexpy/docker-compose.yml b/plexpy/docker-compose.yml new file mode 100644 index 0000000..9273165 --- /dev/null +++ b/plexpy/docker-compose.yml @@ -0,0 +1,22 @@ +version: '2' + +services: + plexpy: + image: linuxserver/plexpy + container_name: plexpy + restart: always + networks: + - media + ports: + - 8181:8181 + volumes: + - /srv/appdata/plexpy:/config + - "/srv/appdata/plex/Library/Application Support/Plex Media Server/Logs:/logs:ro" + environment: + PUID: ${userid} + PGID: ${groupid} + TZ: ${time} + +networks: + media: + external: true \ No newline at end of file diff --git a/portainer/docker-compose.yml b/portainer/docker-compose.yml new file mode 100644 index 0000000..3c5477f --- /dev/null +++ b/portainer/docker-compose.yml @@ -0,0 +1,22 @@ +version: '2' + +services: + portainer: + image: portainer/portainer + container_name: portainer + restart: always + networks: + - media + ports: + - 9000:9000 + volumes: + - /srv/appdata/portainer:/data + - /var/run/docker.sock:/var/run/docker.sock:ro + environment: + PUID: ${userid} + PGID: ${groupid} + TZ: ${time} + +networks: + media: + external: true \ No newline at end of file diff --git a/radarr/docker-compose.yml b/radarr/docker-compose.yml new file mode 100644 index 0000000..88a28aa --- /dev/null +++ b/radarr/docker-compose.yml @@ -0,0 +1,24 @@ +version: '2' + +services: + radarr: + image: linuxserver/radarr + container_name: radarr + restart: always + networks: + - media + ports: + - 7878:7878 + volumes: + - /srv/appdata/radarr:/config + - /srv/media:/movies + - /srv/downloads:/downloads + - /etc/localtime:/etc/localtime:ro + environment: + PUID: ${userid} + PGID: ${groupid} + TZ: ${time} + +networks: + media: + external: true \ No newline at end of file diff --git a/resiliosync/docker-compose.yml b/resiliosync/docker-compose.yml new file mode 100644 index 0000000..3c26609 --- /dev/null +++ b/resiliosync/docker-compose.yml @@ -0,0 +1,24 @@ +version: '2' + +services: + resiliosync: + image: linuxserver/resilio-sync + container_name: resiliosync + restart: always + networks: + - media + ports: + - 7777:8888 + - 55555:55555 + volumes: + - /srv/appdata/resiliosync:/config + - /srv/syncfolder:/sync + environment: + PUID: ${userid} + PGID: ${groupid} + UMASK_SET: 022 + +networks: + media: + external: true + \ No newline at end of file diff --git a/rtorrent-flood-rutorrent/docker-compose.yml b/rtorrent-flood-rutorrent/docker-compose.yml new file mode 100644 index 0000000..549a4c4 --- /dev/null +++ b/rtorrent-flood-rutorrent/docker-compose.yml @@ -0,0 +1,22 @@ +version: '2' + +services: + rtorrent: + image: vaeyo/rtorrent + container_name: rutorrent-flood + restart: always + networks: + - media + ports: + - 3000:3000 + - 6881:6881/udp + - 8080:80 + - 50000:50000 + volumes: + - /srv/downloads:/downloads + - /srv/appdata/rtorrent:/config + - /etc/localtime:/etc/localtime:ro + +networks: + media: + external: true \ No newline at end of file diff --git a/rtorrent-flood/docker-compose.yml b/rtorrent-flood/docker-compose.yml new file mode 100644 index 0000000..6c86d01 --- /dev/null +++ b/rtorrent-flood/docker-compose.yml @@ -0,0 +1,22 @@ +version: '2' + +services: + rtorrent: + image: linuxserver/flood + container_name: rtorrent + restart: always + networks: + - media + ports: + - 3000:3000 + volumes: + - /srv/appdata/rtorrent:/config + - /srv/downloads:/downloads + environment: + PUID: ${userid} + PGID: ${groupid} + TZ: ${time} + +networks: + media: + external: true \ No newline at end of file diff --git a/rtorrent-rutorrent/docker-compose.yml b/rtorrent-rutorrent/docker-compose.yml new file mode 100644 index 0000000..aba8188 --- /dev/null +++ b/rtorrent-rutorrent/docker-compose.yml @@ -0,0 +1,25 @@ +version: '2' + +services: + rtorrent: + image: linuxserver/rutorrent + container_name: rtorrent + restart: always + networks: + - media + ports: + - 5000:5000 + - 6881:6881/udp + - 8180:80 + - 51413:51413 + volumes: + - /srv/appdata/rtorrent:/config + - /srv/downloads:/downloads + environment: + PUID: ${userid} + PGID: ${groupid} + TZ: ${time} + +networks: + media: + external: true \ No newline at end of file diff --git a/sabnzbd/docker-compose.yml b/sabnzbd/docker-compose.yml new file mode 100644 index 0000000..ad9e9e5 --- /dev/null +++ b/sabnzbd/docker-compose.yml @@ -0,0 +1,24 @@ +version: '2' + +services: + sabnzbd: + image: linuxserver/sabnzbd + container_name: sabnzbd + restart: always + networks: + - media + ports: + - 8008:8080 + - 9009:9090 + volumes: + - /srv/appdata/sabnzbd:/config + - /srv/downloads/complete:/downloads + - /srv/downloads/incomplete:/incomplete-downloads + environment: + PUID: ${userid} + PGID: ${groupid} + TZ: ${time} + +networks: + media: + external: true \ No newline at end of file diff --git a/shellinabox/docker-compose.yml b/shellinabox/docker-compose.yml new file mode 100644 index 0000000..9940497 --- /dev/null +++ b/shellinabox/docker-compose.yml @@ -0,0 +1,25 @@ +version: '2' + +services: + shellinabox: + image: sspreitzer/shellinabox + container_name: shellinabox + restart: always + networks: + - media + ports: + - 4100:4200 + environment: + - SIAB_ADDUSER=false + - SIAB_USER=root + - SIAB_GROUP=root + - SIAB_USERID=0 + - SIAB_GROUPID=0 + - SIAB_PASSWORD=12345 + - SIAB_SHELL=/bin/bash + - SIAB_HOME=/ + - SIAB_SUDO=true + +networks: + media: + external: true \ No newline at end of file diff --git a/sickgear/docker-compose.yml b/sickgear/docker-compose.yml new file mode 100644 index 0000000..49f7fa7 --- /dev/null +++ b/sickgear/docker-compose.yml @@ -0,0 +1,22 @@ +version: '2' + +services: + sickgear: + image: ressu/sickgear + container_name: sickgear + restart: always + networks: + - media + ports: + - 8001:8081 + volumes: + - /srv/appdata/sickgear:/data + - /srv/media:/tv + environments: + - APP_UID=${userid} + - APP_GID=${groupid} + - TZ=${time} + +networks: + media: + external: true \ No newline at end of file diff --git a/sickrage/docker-compose.yml b/sickrage/docker-compose.yml new file mode 100644 index 0000000..1038252 --- /dev/null +++ b/sickrage/docker-compose.yml @@ -0,0 +1,23 @@ +version: '2' + +services: + sickrage: + image: linuxserver/sickrage + container_name: sickrage + restart: always + networks: + - media + ports: + - 8081:8081 + volumes: + - /srv/appdata/sickrage:/config + - /srv/downloads:/downloads + - /srv/media:/tv + environment: + PUID: ${userid} + PGID: ${groupid} + TZ: ${time} + +networks: + media: + external: true \ No newline at end of file diff --git a/sonarr/docker-compose.yml b/sonarr/docker-compose.yml new file mode 100644 index 0000000..8ae8dd3 --- /dev/null +++ b/sonarr/docker-compose.yml @@ -0,0 +1,24 @@ +version: '2' + +services: + sonarr: + image: linuxserver/sonarr + container_name: sonarr + restart: always + networks: + - media + ports: + - 8989:8989 + volumes: + - /srv/appdata/sonarr:/config + - /srv/downloads:/downloads + - /srv/media:/tv + - /etc/localtime:/etc/localtime:ro + environment: + PUID: ${userid} + PGID: ${groupid} + TZ: ${time} + +networks: + media: + external: true \ No newline at end of file diff --git a/syncthing/docker-compose.yml b/syncthing/docker-compose.yml new file mode 100644 index 0000000..ff69544 --- /dev/null +++ b/syncthing/docker-compose.yml @@ -0,0 +1,25 @@ +version: '2' + +services: + syncthing: + image: linuxserver/syncthing + container_name: syncthing + restart: always + networks: + - media + ports: + - 8384:8384 + - 22000:22000 + - 21027:21027/udp + volumes: + - /srv/syncfolder:/srv/data + - /srv/appdata/syncthing:/srv/config + environment: + PUID: ${userid} + PGID: ${groupid} + UMASK_SET: 022 + +networks: + media: + external: true + \ No newline at end of file diff --git a/transmission/docker-compose.yml b/transmission/docker-compose.yml new file mode 100644 index 0000000..e68e20b --- /dev/null +++ b/transmission/docker-compose.yml @@ -0,0 +1,26 @@ +version: '2' + +services: + transmission: + image: linuxserver/transmission + container_name: transmission + restart: always + networks: + - media + ports: + - 9091:9091 + - 51413:51413 + - 51413:51413/udp + volumes: + - /srv/appdata/transmission:/config + - /srv/downloads:/downloads + - /srv/downloads/watch:/watch + environment: + PUID: ${userid} + PGID: ${groupid} + TZ: ${time} + +networks: + media: + external: true + \ No newline at end of file diff --git a/ubooquity/docker-compose.yml b/ubooquity/docker-compose.yml new file mode 100644 index 0000000..e7b38f2 --- /dev/null +++ b/ubooquity/docker-compose.yml @@ -0,0 +1,26 @@ +version: '2' + +services: + ubooquity: + image: linuxserver/ubooquity + container_name: ubooquity + restart: always + networks: + - media + ports: + - 2202:2202 + - 2203:2203 + volumes: + - /srv/appdata/ubooquity:/config + - /srv/media/books:/books + - /srv/media/comics:/comics + environment: + PUID: ${userid} + PGID: ${groupid} + TZ: ${time} + MAXMEM: 1024MB + +networks: + media: + external: true + \ No newline at end of file diff --git a/watcher/docker-compose.yml b/watcher/docker-compose.yml new file mode 100644 index 0000000..f3cc70c --- /dev/null +++ b/watcher/docker-compose.yml @@ -0,0 +1,24 @@ +version: '2' + +services: + watcher: + image: linuxserver/watcher + container_name: watcher + restart: always + networks: + - media + ports: + - 9090:9090 + volumes: + - /srv/appdata/watcher:/config + - /srv/downloads:/downloads + - /srv/media:/movies + - /etc/localtime:/etc/localtime:ro + environment: + PUID: ${userid} + PGID: ${groupid} + TZ: ${time} + +networks: + media: + external: true \ No newline at end of file