From 8051670f163ba5a391dfb6b60a3571f9d8b36585 Mon Sep 17 00:00:00 2001 From: Alexandre Date: Sat, 22 Jan 2022 19:13:57 +0100 Subject: [PATCH] Spotbweb by @woutercoppens --- README.md | 3 +- spotweb/.dockerignore | 24 +++ spotweb/CHANGELOG.md | 2 + spotweb/DOCS.md | 169 ++++++++++++++++++ spotweb/Dockerfile | 139 ++++++++++++++ spotweb/README.md | 40 +++++ spotweb/build.yaml | 7 + spotweb/config.json | 36 ++++ spotweb/icon.png | Bin 0 -> 43590 bytes spotweb/logo.png | Bin 0 -> 43590 bytes spotweb/rootfs/etc/cont-init.d/90-spotweb | 112 ++++++++++++ spotweb/rootfs/etc/fix-attrs.d/nginx | 3 + spotweb/rootfs/etc/nginx/includes/mime.types | 96 ++++++++++ spotweb/rootfs/etc/nginx/nginx.conf | 63 +++++++ spotweb/rootfs/etc/nginx/servers/ingress.conf | 37 ++++ spotweb/rootfs/etc/nginx/servers/spotweb.conf | 44 +++++ spotweb/rootfs/etc/periodic/hourly/spotweb | 6 + .../etc/php8/conf.d/zzz_custom_opcache.ini | 12 ++ .../etc/php8/conf.d/zzz_custom_other.ini | 6 + spotweb/rootfs/etc/php8/php-fpm.d/www.conf | 18 ++ spotweb/rootfs/etc/services.d/cron/run | 3 + spotweb/rootfs/etc/services.d/nginx/finish | 9 + spotweb/rootfs/etc/services.d/nginx/run | 12 ++ spotweb/rootfs/etc/services.d/phpfpm/finish | 9 + spotweb/rootfs/etc/services.d/phpfpm/run | 6 + 25 files changed, 855 insertions(+), 1 deletion(-) create mode 100644 spotweb/.dockerignore create mode 100644 spotweb/CHANGELOG.md create mode 100644 spotweb/DOCS.md create mode 100644 spotweb/Dockerfile create mode 100644 spotweb/README.md create mode 100644 spotweb/build.yaml create mode 100644 spotweb/config.json create mode 100644 spotweb/icon.png create mode 100644 spotweb/logo.png create mode 100644 spotweb/rootfs/etc/cont-init.d/90-spotweb create mode 100644 spotweb/rootfs/etc/fix-attrs.d/nginx create mode 100644 spotweb/rootfs/etc/nginx/includes/mime.types create mode 100644 spotweb/rootfs/etc/nginx/nginx.conf create mode 100644 spotweb/rootfs/etc/nginx/servers/ingress.conf create mode 100644 spotweb/rootfs/etc/nginx/servers/spotweb.conf create mode 100644 spotweb/rootfs/etc/periodic/hourly/spotweb create mode 100644 spotweb/rootfs/etc/php8/conf.d/zzz_custom_opcache.ini create mode 100644 spotweb/rootfs/etc/php8/conf.d/zzz_custom_other.ini create mode 100644 spotweb/rootfs/etc/php8/php-fpm.d/www.conf create mode 100644 spotweb/rootfs/etc/services.d/cron/run create mode 100644 spotweb/rootfs/etc/services.d/nginx/finish create mode 100644 spotweb/rootfs/etc/services.d/nginx/run create mode 100644 spotweb/rootfs/etc/services.d/phpfpm/finish create mode 100644 spotweb/rootfs/etc/services.d/phpfpm/run diff --git a/README.md b/README.md index ad631380b..77e766fd1 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,7 @@ https://github.com/alexbelgium/hassio-addons - [Inadyn](inadyn/) : Inadyn, or In-a-Dyn, is a small and simple Dynamic DNS, DDNS, client with HTTPS support. Commonly available in many GNU/Linux distributions, used in off the shelf routers and Internet gateways to automate the task of keeping your Internet name in sync with your public¹ IP address. It can also be used in installations with redundant (backup) connections to the Internet. - [Portainer](portainer/) ![privileged][privileged-shield] ![ingress][ingress-shield] : Manage your docker environment - [Scrutiny](scrutiny/) ![support][support-shield] ![ingress][ingress-shield]: Scrutiny WebUI for smartd S.M.A.R.T monitoring +- [Spotweb by @woutercoppens](spotweb/) : Spotweb is a decentralized usenet community based on the Spotnet protocol - [Teamspeak](teamspeak/): Voice communication for online gaming, education and training. ## ✓ Multimedia distributors @@ -124,7 +125,7 @@ https://github.com/alexbelgium/hassio-addons ## ✓ Web hosting - [Grav](grav/) ![smb][smb-shield] : Fast, Simple, and Flexible, file-based Web-platform -- [Resioliosync](resiolosync/) ![smb][smb-shield]: Self-hosted file share and collaboration platform on the Web (dev by @TyjTyj) +- [Resioliosync by @tyjtyj](resiolosync/) ![smb][smb-shield]: Self-hosted file share and collaboration platform on the Web [//]: # "ADDONLIST_END" [smb-shield]: https://img.shields.io/badge/SMB--green?style=plastic.svg diff --git a/spotweb/.dockerignore b/spotweb/.dockerignore new file mode 100644 index 000000000..720e7a089 --- /dev/null +++ b/spotweb/.dockerignore @@ -0,0 +1,24 @@ +**/.classpath +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/bin +**/charts +**/docker-compose* +**/compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +README.md diff --git a/spotweb/CHANGELOG.md b/spotweb/CHANGELOG.md new file mode 100644 index 000000000..eba0b3d03 --- /dev/null +++ b/spotweb/CHANGELOG.md @@ -0,0 +1,2 @@ +## [0.0.1] +- Initial version \ No newline at end of file diff --git a/spotweb/DOCS.md b/spotweb/DOCS.md new file mode 100644 index 000000000..0cd804a3b --- /dev/null +++ b/spotweb/DOCS.md @@ -0,0 +1,169 @@ +# Home Assistant Community Add-on: Bookstack + +[Spotweb][spotweb] is a decentralized usenet community based on the [Spotnet][spotnet] protocol. Please support the developers of this software at +[spotweb]. + +## Installation + +The installation of this add-on is pretty straightforward and not different in +comparison to installing any other Home Assistant add-on. + +1. [Add my Hass.io add-ons repository][repository] to your Hass.io instance. +1. Make sure that the MariaDB addon is installed or use a remote MySQL server. +1. Install the Spotweb add-on. +1. Click the `Save` button to store your configuration. +1. Start the add-on. +1. Check the logs of the add-on to see if everything went well. +1. Carefully configure the add-on to your preferences, see the official documentation for for that. + +## Configuration + +**Note**: _Remember to restart the add-on when the configuration is changed._ + +Example add-on configuration: + +```yaml +log_level: info +ssl: false +certfile: fullchain.pem +keyfile: privkey.pem +``` + +**Note**: _This is just an example, don't copy and paste it! Create your own!_ + +### Option: `log_level` + +The `log_level` option controls the level of log output by the addon and can +be changed to be more or less verbose, which might be useful when you are +dealing with an unknown issue. Possible values are: + +- `trace`: Show every detail, like all called internal functions. +- `debug`: Shows detailed debug information. +- `info`: Normal (usually) interesting events. +- `warning`: Exceptional occurrences that are not errors. +- `error`: Runtime errors that do not require immediate action. +- `fatal`: Something went terribly wrong. Add-on becomes unusable. + +Please note that each level automatically includes log messages from a +more severe level, e.g., `debug` also shows `info` messages. By default, +the `log_level` is set to `info`, which is the recommended setting unless +you are troubleshooting. + +### Option: `ssl` + +Enables/Disables SSL (HTTPS) on the web interface of Bookstack +Panel. Set it `true` to enable it, `false` otherwise. + +### Option: `certfile` + +The certificate file to use for SSL. + +**Note**: _The file MUST be stored in `/ssl/`, which is the default_ + +### Option: `keyfile` + +The private key file to use for SSL. + +**Note**: _The file MUST be stored in `/ssl/`, which is the default_ + +### Option: `remote_mysql_host` + +If using an external database, the hostname/address for the MYSQL/MariaDB +database. + +### Option: `remote_mysql_database` + +Only applies if a remote MYSQL database is used, the name of the database. + +### Option: `remote_mysql_username` + +Only applies if a remote MYSQL database is used, the username with permissions. + +### Option: `remote_mysql_password` + +Only applies if a remote MYSQL database is used, the password of the above user. + +### Option: `remote_mysql_port` + +Only applies if a remote MYSQL database is used, the port that the database +server is listening on. + +## Database usage + +By default, spotweb will automatically use and configure the Home Assistant +MariaDB addon which should be installed prior to startup, this can be changed +within the configuration to use an external MySql/MariaDB Database. Please note +that there is no easy upgrade path between the two options. + +## Known issues and limitations + +## Changelog & Releases + +This repository keeps a change log using [GitHub's releases][releases] +functionality. + +Releases are based on [Semantic Versioning][semver], and use the format +of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented +based on the following: + +- `MAJOR`: Incompatible or major changes. +- `MINOR`: Backwards-compatible new features and enhancements. +- `PATCH`: Backwards-compatible bugfixes and package updates. + +## Support + +Got questions? + +You have several options to get them answered: + +- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on + support and feature requests. +- The [Home Assistant Discord chat server][discord-ha] for general Home + Assistant discussions and questions. +- The Home Assistant [Community Forum][forum]. +- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit] + +You could also [open an issue here][issue] GitHub. + +## Authors & contributors + +The original setup of this repository is by [Wouter Coppens][woutercoppens]. + +For a full list of all authors and contributors, +check [the contributor's page][contributors]. + +## License + +MIT License + +Copyright (c) 2021 Wouter Coppens + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +[spotnet]: https://github.com/spotnet/spotnet/wiki +[spotweb]: https://github.com/spotweb/spotweb +[contributors]: https://github.com/alexbelgium/spotweb/graphs/contributors +[discord-ha]: https://discord.gg/c5DvZ4e +[discord]: https://discord.me/hassioaddons +[forum]: https://community.home-assistant.io/t/community-hass-io-xxxxx/xxxxx +[woutercoppens]: https://github.com/alexbelgium +[issue]: https://github.com/alexbelgium/hassio-addons/issues +[reddit]: https://reddit.com/r/homeassistant +[releases]: https://github.com/alexbelgium/hassio-addons/releases +[semver]: http://semver.org/spec/v2.0.0 diff --git a/spotweb/Dockerfile b/spotweb/Dockerfile new file mode 100644 index 000000000..c5b492f85 --- /dev/null +++ b/spotweb/Dockerfile @@ -0,0 +1,139 @@ +#============================# +# ALEXBELGIUM'S DOCKERFILE # +#============================# +# _.------. +# _.-` ('>.-`"""-. +# '.--'` _'` _ .--.) +# -' '-.-';` ` +# ' - _.' ``'--. +# '---` .-'""` +# /` +#=== Home Assistant Addon ===# + +################# +# 1 Build Image # +################# + +ARG BUILD_FROM=ghcr.io/hassio-addons/base/amd64:11.0.0 +# hadolint ignore=DL3006 +FROM $BUILD_FROM + +################## +# 2 Modify Image # +################## + +ENV LANG C.UTF-8 + +# Environment variables +ENV APP_ID="spotweb" +ENV APP_NAME="Spotweb" +ENV APP_DIR="/app" +ENV SPOTWEB_RELEASE="1.5.1" + +# Set shell +SHELL ["/bin/bash", "-o", "pipefail", "-c"] + +# Setup base +# hadolint ignore=DL3003 +# Install app dependencies +RUN apk -U update && \ + apk -U upgrade && \ + apk -U add --no-cache \ + git \ + nginx \ + php8 \ + php8-fpm \ + php8-curl \ + php8-dom \ + php8-gettext \ + php8-xml \ + php8-simplexml \ + php8-zip \ + php8-zlib \ + php8-gd \ + php8-openssl \ + php8-mysqli \ + php8-pdo \ + php8-pdo_mysql \ + php8-pgsql \ + php8-pdo_pgsql \ + php8-sqlite3 \ + php8-pdo_sqlite \ + php8-json \ + php8-mbstring \ + php8-ctype \ + php8-opcache \ + php8-session \ + mariadb-client \ + \ + && mkdir -p /app \ + # Install latest Spotweb release + && git clone --depth=1 https://github.com/spotweb/spotweb.git /app \ + # spotweb needs a timezone set in the php.ini + # TODO: Can we dynamically set the correct timezone here ? + && sed -i "s/;date.timezone =/date.timezone = \"Europe\/Amsterdam\"/g" /etc/php8/php.ini \ + && mkdir /app/cache \ + && mkdir /var/tmp/nginx + +################## +# 3 Install apps # +################## + +# Copy rootfs +COPY rootfs / + +# Build arguments +ARG BUILD_ARCH +ARG BUILD_DATE +ARG BUILD_DESCRIPTION +ARG BUILD_NAME +ARG BUILD_REF +ARG BUILD_REPOSITORY +ARG BUILD_VERSION + +# Modules +ARG MODULES="00-banner.sh" + +# Automatic modules download +RUN if ! command -v bash >/dev/null 2>/dev/null; then (apt-get update && apt-get install -yqq --no-install-recommends bash || apk add --no-cache bash) >/dev/null; fi \ + && if ! command -v curl >/dev/null 2>/dev/null; then (apt-get update && apt-get install -yqq --no-install-recommends curl || apk add --no-cache curl) >/dev/null; fi \ + && mkdir -p /etc/cont-init.d \ + && for scripts in $MODULES; do curl -L -f -s -S "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates/$scripts" -o /etc/cont-init.d/"$scripts" || (echo "script failed to install $scripts" && exit 1); done \ + && chmod -R 755 /etc/cont-init.d || printf '%s\n' "${MODULES}" >/MODULESFILE + +# Manual apps +ENV PACKAGES="" + +# Automatic apps & bashio +RUN if ! command -v bash >/dev/null 2>/dev/null; then (apt-get update && apt-get install -yqq --no-install-recommends bash || apk add --no-cache bash) >/dev/null; fi \ + && if ! command -v curl >/dev/null 2>/dev/null; then (apt-get update && apt-get install -yqq --no-install-recommends curl || apk add --no-cache curl) >/dev/null; fi \ + && curl -L -f -s "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates/automatic_packages.sh" --output /automatic_packages.sh \ + && chmod 777 /automatic_packages.sh \ + && eval /./automatic_packages.sh "${PACKAGES:-}" \ + && rm /automatic_packages.sh || printf '%s\n' "${PACKAGES:-}" > /ENVFILE + +################ +# 4 Entrypoint # +################ + +############ +# 5 Labels # +############ + +# Labels +LABEL \ + io.hass.name="${APP_NAME}" \ + io.hass.description="${APP_NAME} Add-on for Home Assistant" \ + io.hass.arch="${BUILD_ARCH}" \ + io.hass.type="addon" \ + io.hass.version=${BUILD_VERSION} \ + maintainer="Wouter" \ + org.label-schema.description="${APP_NAME} Add-on for Home Assistant" \ + org.label-schema.build-date=${BUILD_DATE} \ + org.label-schema.name="${APP_NAME}" \ + org.label-schema.schema-version="1.0" \ + org.label-schema.url="https://github.com/alexbelgium/hassio-addons/${APP_ID}" \ + org.label-schema.usage="https://github.com/alexbelgium/hassio-addons/tree/master/${APP_ID}/README.md" \ + org.label-schema.vcs-ref=${BUILD_REF} \ + org.label-schema.vcs-url="https://github.com/alexbelgium/hassio-addons/${APP_ID}" \ + org.label-schema.vendor="Wouter's Community Add-ons for Home Assistant" \ No newline at end of file diff --git a/spotweb/README.md b/spotweb/README.md new file mode 100644 index 000000000..b37d49a38 --- /dev/null +++ b/spotweb/README.md @@ -0,0 +1,40 @@ +# Wouter's Home Assistant Add-ons: Spotweb by @woutercoppens + +## About + +This addon was built by [@woutercoppens](https://github.com/woutercoppens/hassio-addons/tree/main/spotweb) and is hosted on this repository. + +[Spotweb][spotweb] is a decentralized usenet community based on the [Spotnet][spotnet] protocol. + +Spotweb is one of the most-featured Spotnet clients currently available, featuring among other things: + +- Fast. +- Customizable filter system from within the system. +- Showing and filtering on new spots since the last view. +- Watchlist. +- Integration with Sick Gear , Sick beard and CouchPotato as a 'newznab' provider. +- Sabnzbd and nzbget integration. +- Multi-language. +- Multiple-user ready. + +## Installation + +Note: This addon requires a mysql database. Make sure you have the MariaDB addon running of use a remote MySQL server. +A database and user will be auto created if the MariaDB addon is detected. + +1. [Add my Hass.io add-ons repository][repository] to your Hass.io instance. +1. Make sure that the MariaDB addon is installed or use a remote MySQL server. +1. Install the Spotweb add-on. +1. Click the `Save` button to store your configuration. +1. Start the add-on. +1. Check the logs of the add-on to see if everything went well. +1. Carefully configure the add-on to your preferences, see the official documentation for for that. + +Thanks to Ingress support, security and authentication is handled by Home Assistant. Therefore authentication in Spotweb is disabled by default. Spotweb is ready to use after installation through Ingress WebUI. + +Spots are retrieved every hour by a background task. +Restart the addon after entering your credentials to force the first sync of spots. + +[repository]: https://github.com/alexbelgium/hassio-addons +[spotnet]: https://github.com/spotnet/spotnet/wiki +[spotweb]: https://github.com/spotweb/spotweb diff --git a/spotweb/build.yaml b/spotweb/build.yaml new file mode 100644 index 000000000..ee6005d53 --- /dev/null +++ b/spotweb/build.yaml @@ -0,0 +1,7 @@ +--- +build_from: + aarch64: ghcr.io/hassio-addons/base/aarch64:11.0.0 + amd64: ghcr.io/hassio-addons/base/amd64:11.0.0 + armhf: ghcr.io/hassio-addons/base/armhf:11.0.0 + armv7: ghcr.io/hassio-addons/base/armv7:11.0.0 + i386: ghcr.io/hassio-addons/base/i386:11.0.0 \ No newline at end of file diff --git a/spotweb/config.json b/spotweb/config.json new file mode 100644 index 000000000..8a0cb7749 --- /dev/null +++ b/spotweb/config.json @@ -0,0 +1,36 @@ +{ + "arch": ["aarch64", "amd64", "armhf", "armv7", "i386"], + "name": "Spotweb by @woutercoppens", + "image": "ghcr.io/alexbelgium/spotweb-{arch}", + "version": "dev", + "slug": "spotweb", + "description": "Spotweb is a decentralized usenet community based on the Spotnet protocol", + "url": "https://github.com/alexbelgium/hassio-addons/spotweb", + "init": false, + "ingress": true, + "ingress_port": 8099, + "panel_icon": "mdi:chart-timeline", + "panel_title": "Spotweb", + "map": ["ssl", "config:rw", "backup:rw"], + "options": { + "ssl": false, + "certfile": "fullchain.pem", + "keyfile": "privkey.pem" + }, + "ports": { "80/tcp": null }, + "ports_description": { "80/tcp": "Not required for Ingress" }, + "schema": { + "remote_mysql_host": "str?", + "remote_mysql_database": "str?", + "remote_mysql_username": "str?", + "remote_mysql_password": "password?", + "remote_mysql_port": "int?", + "log_level": "list(trace|debug|info|notice|warning|error|fatal)?", + "certfile": "str", + "keyfile": "str", + "ssl": "bool" + }, + "services": ["mysql:want"], + "startup": "services", + "hassio_api": true +} diff --git a/spotweb/icon.png b/spotweb/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a75e7e712d3f442bdabcfdafe204562eee792938 GIT binary patch literal 43590 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 /app/dbsettings.inc.php + + +# cat /app/dbsettings.inc.php + +# wait for mysql server to be available +until nc -z -v -w30 $host $port +do + bashio::log.info "Waiting for database connection at host '${host}:${port}'..." + sleep 2 +done + + # Check if database already exists +RESULT=`mysql -u "${username}" -p"${password}" -h "${host}" -P "${port}" --skip-column-names -e "SHOW DATABASES LIKE '${dbname}'"` +if [ "$RESULT" == "$dbname" ]; then + # database already exists, do healthcheck with upgrade-db + bashio::log.info "Existing database, checking health with upgrade-db...." + s6-setuidgid nginx php8 /app/bin/upgrade-db.php>/dev/null +else + # database does not yet exist + bashio::log.info "Creating database with default settings...." + mysql \ + -u "${username}" -p"${password}" \ + -h "${host}" -P "${port}" \ + -e "CREATE DATABASE ${dbname};" + # init database with default values + s6-setuidgid nginx php8 /app/bin/upgrade-db.php + # set systemtype to public (as we're behind ingress) + s6-setuidgid nginx php8 /app/bin/upgrade-db.php --set-systemtype public + # we also set some sane default settings + mysql \ + -u "${username}" -p"${password}" \ + -h "${host}" -P "${port}" \ + -D "${dbname}" \ + -e "REPLACE INTO usergroups(userid, groupid) VALUES (1, 2); \ + REPLACE INTO usergroups(userid, groupid) VALUES (1, 3); \ + REPLACE INTO usergroups(userid, groupid) VALUES (1, 4); \ + REPLACE INTO usergroups(userid, groupid) VALUES (1, 5); \ + UPDATE usersettings SET otherprefs='a:27:{s:17:\"template_specific\";a:1:{s:6:\"we1rdo\";a:1:{s:15:\"example_setting\";i:1;}}s:7:\"perpage\";i:25;s:15:\"date_formatting\";s:5:\"human\";s:15:\"normal_template\";s:6:\"we1rdo\";s:15:\"mobile_template\";s:6:\"we1rdo\";s:15:\"tablet_template\";s:6:\"we1rdo\";s:14:\"count_newspots\";s:2:\"on\";s:17:\"mouseover_subcats\";s:2:\"on\";s:13:\"keep_seenlist\";s:2:\"on\";s:15:\"auto_markasread\";s:2:\"on\";s:17:\"keep_downloadlist\";s:2:\"on\";s:14:\"keep_watchlist\";s:2:\"on\";s:17:\"nzb_search_engine\";s:8:\"nzbindex\";s:13:\"show_filesize\";s:2:\"on\";s:16:\"show_reportcount\";s:2:\"on\";s:19:\"minimum_reportcount\";s:1:\"1\";s:14:\"show_nzbbutton\";s:2:\"on\";s:13:\"show_multinzb\";s:2:\"on\";s:9:\"customcss\";s:0:\"\";s:18:\"newspotdefault_tag\";s:9:\"anonymous\";s:19:\"newspotdefault_body\";s:0:\"\";s:13:\"user_language\";s:5:\"en_US\";s:12:\"show_avatars\";s:2:\"on\";s:27:\"usemailaddress_for_gravatar\";b:1;s:11:\"nzbhandling\";a:7:{s:6:\"action\";s:6:\"nzbget\";s:9:\"local_dir\";s:4:\"/tmp\";s:14:\"prepare_action\";s:5:\"merge\";s:7:\"command\";s:0:\"\";s:7:\"sabnzbd\";a:4:{s:3:\"url\";s:0:\"\";s:6:\"apikey\";s:0:\"\";s:8:\"username\";s:0:\"\";s:8:\"password\";s:0:\"\";}s:6:\"nzbget\";a:6:{s:4:\"host\";s:28:\"addon_62c7908d_nzbget_docker\";s:4:\"port\";s:5:\"46836\";s:3:\"ssl\";s:0:\"\";s:8:\"username\";s:6:\"nzbget\";s:8:\"password\";s:0:\"\";s:7:\"timeout\";s:2:\"30\";}s:9:\"nzbvortex\";a:3:{s:4:\"host\";s:0:\"\";s:4:\"port\";s:0:\"\";s:6:\"apikey\";s:0:\"\";}}s:13:\"notifications\";a:6:{s:6:\"boxcar\";a:3:{s:5:\"email\";s:0:\"\";s:7:\"enabled\";b:0;s:6:\"events\";a:7:{s:17:\"watchlist_handled\";b:0;s:11:\"nzb_handled\";b:0;s:18:\"retriever_finished\";b:0;s:13:\"report_posted\";b:0;s:11:\"spot_posted\";b:0;s:10:\"user_added\";b:0;s:19:\"newspots_for_filter\";b:0;}}s:5:\"growl\";a:4:{s:4:\"host\";s:0:\"\";s:8:\"password\";s:0:\"\";s:7:\"enabled\";b:0;s:6:\"events\";a:7:{s:17:\"watchlist_handled\";b:0;s:11:\"nzb_handled\";b:0;s:18:\"retriever_finished\";b:0;s:13:\"report_posted\";b:0;s:11:\"spot_posted\";b:0;s:10:\"user_added\";b:0;s:19:\"newspots_for_filter\";b:0;}}s:3:\"nma\";a:3:{s:3:\"api\";s:0:\"\";s:7:\"enabled\";b:0;s:6:\"events\";a:7:{s:17:\"watchlist_handled\";b:0;s:11:\"nzb_handled\";b:0;s:18:\"retriever_finished\";b:0;s:13:\"report_posted\";b:0;s:11:\"spot_posted\";b:0;s:10:\"user_added\";b:0;s:19:\"newspots_for_filter\";b:0;}}s:5:\"prowl\";a:3:{s:6:\"apikey\";s:0:\"\";s:7:\"enabled\";b:0;s:6:\"events\";a:7:{s:17:\"watchlist_handled\";b:0;s:11:\"nzb_handled\";b:0;s:18:\"retriever_finished\";b:0;s:13:\"report_posted\";b:0;s:11:\"spot_posted\";b:0;s:10:\"user_added\";b:0;s:19:\"newspots_for_filter\";b:0;}}s:7:\"twitter\";a:7:{s:11:\"screen_name\";s:0:\"\";s:13:\"request_token\";s:0:\"\";s:20:\"request_token_secret\";s:0:\"\";s:12:\"access_token\";s:0:\"\";s:19:\"access_token_secret\";s:0:\"\";s:7:\"enabled\";b:0;s:6:\"events\";a:7:{s:17:\"watchlist_handled\";b:0;s:11:\"nzb_handled\";b:0;s:18:\"retriever_finished\";b:0;s:13:\"report_posted\";b:0;s:11:\"spot_posted\";b:0;s:10:\"user_added\";b:0;s:19:\"newspots_for_filter\";b:0;}}s:5:\"email\";a:2:{s:7:\"enabled\";b:0;s:6:\"events\";a:7:{s:17:\"watchlist_handled\";b:0;s:11:\"nzb_handled\";b:0;s:18:\"retriever_finished\";b:0;s:13:\"report_posted\";b:0;s:11:\"spot_posted\";b:0;s:10:\"user_added\";b:0;s:19:\"newspots_for_filter\";b:0;}}}s:16:\"defaultsortfield\";s:0:\"\";}' WHERE 1;" +fi \ No newline at end of file diff --git a/spotweb/rootfs/etc/fix-attrs.d/nginx b/spotweb/rootfs/etc/fix-attrs.d/nginx new file mode 100644 index 000000000..f48ece685 --- /dev/null +++ b/spotweb/rootfs/etc/fix-attrs.d/nginx @@ -0,0 +1,3 @@ +/app/cache true nginx:nginx 0644 0755 +/var/tmp/nginx true nginx:nginx 0644 0755 +/var/lib/nginx true nginx:nginx 0644 0755 \ No newline at end of file diff --git a/spotweb/rootfs/etc/nginx/includes/mime.types b/spotweb/rootfs/etc/nginx/includes/mime.types new file mode 100644 index 000000000..7c7cdef2d --- /dev/null +++ b/spotweb/rootfs/etc/nginx/includes/mime.types @@ -0,0 +1,96 @@ +types { + text/html html htm shtml; + text/css css; + text/xml xml; + image/gif gif; + image/jpeg jpeg jpg; + application/javascript js; + application/atom+xml atom; + application/rss+xml rss; + + text/mathml mml; + text/plain txt; + text/vnd.sun.j2me.app-descriptor jad; + text/vnd.wap.wml wml; + text/x-component htc; + + image/png png; + image/svg+xml svg svgz; + image/tiff tif tiff; + image/vnd.wap.wbmp wbmp; + image/webp webp; + image/x-icon ico; + image/x-jng jng; + image/x-ms-bmp bmp; + + font/woff woff; + font/woff2 woff2; + + application/java-archive jar war ear; + application/json json; + application/mac-binhex40 hqx; + application/msword doc; + application/pdf pdf; + application/postscript ps eps ai; + application/rtf rtf; + application/vnd.apple.mpegurl m3u8; + application/vnd.google-earth.kml+xml kml; + application/vnd.google-earth.kmz kmz; + application/vnd.ms-excel xls; + application/vnd.ms-fontobject eot; + application/vnd.ms-powerpoint ppt; + application/vnd.oasis.opendocument.graphics odg; + application/vnd.oasis.opendocument.presentation odp; + application/vnd.oasis.opendocument.spreadsheet ods; + application/vnd.oasis.opendocument.text odt; + application/vnd.openxmlformats-officedocument.presentationml.presentation + pptx; + application/vnd.openxmlformats-officedocument.spreadsheetml.sheet + xlsx; + application/vnd.openxmlformats-officedocument.wordprocessingml.document + docx; + application/vnd.wap.wmlc wmlc; + application/x-7z-compressed 7z; + application/x-cocoa cco; + application/x-java-archive-diff jardiff; + application/x-java-jnlp-file jnlp; + application/x-makeself run; + application/x-perl pl pm; + application/x-pilot prc pdb; + application/x-rar-compressed rar; + application/x-redhat-package-manager rpm; + application/x-sea sea; + application/x-shockwave-flash swf; + application/x-stuffit sit; + application/x-tcl tcl tk; + application/x-x509-ca-cert der pem crt; + application/x-xpinstall xpi; + application/xhtml+xml xhtml; + application/xspf+xml xspf; + application/zip zip; + + application/octet-stream bin exe dll; + application/octet-stream deb; + application/octet-stream dmg; + application/octet-stream iso img; + application/octet-stream msi msp msm; + + audio/midi mid midi kar; + audio/mpeg mp3; + audio/ogg ogg; + audio/x-m4a m4a; + audio/x-realaudio ra; + + video/3gpp 3gpp 3gp; + video/mp2t ts; + video/mp4 mp4; + video/mpeg mpeg mpg; + video/quicktime mov; + video/webm webm; + video/x-flv flv; + video/x-m4v m4v; + video/x-mng mng; + video/x-ms-asf asx asf; + video/x-ms-wmv wmv; + video/x-msvideo avi; +} diff --git a/spotweb/rootfs/etc/nginx/nginx.conf b/spotweb/rootfs/etc/nginx/nginx.conf new file mode 100644 index 000000000..ed49ba495 --- /dev/null +++ b/spotweb/rootfs/etc/nginx/nginx.conf @@ -0,0 +1,63 @@ +# Run nginx in foreground. +daemon off; + +# This is run inside Docker. +user nginx; + +# Pid storage location. +pid /var/run/nginx.pid; + +# Set number of worker processes. +worker_processes 1; + +# Enables the use of JIT for regular expressions to speed-up their processing. +pcre_jit on; + +# Write error log to the add-on log. +error_log /proc/1/fd/1 error; + +# Load allowed environment vars +env SUPERVISOR_TOKEN; + +# Load dynamic modules. +include /etc/nginx/modules/*.conf; + +# Max num of simultaneous connections by a worker process. +events { + worker_connections 1024; +} + +http { + include /etc/nginx/includes/mime.types; + + log_format homeassistant '[$time_local] $status ' + '$http_x_forwarded_for($remote_addr) ' + '$http_x_ingress_path ' + '$request ($http_user_agent)'; + + access_log off; + client_max_body_size 100m; + default_type application/octet-stream; + gzip on; + gzip_disable "msie6"; + gzip_proxied any; + keepalive_timeout 2; + sendfile on; + server_tokens off; + tcp_nodelay on; + tcp_nopush on; + + gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript; + + map $http_x_forwarded_proto $fastcgi_https { + default off; + "~https" on; + } + + map $http_upgrade $connection_upgrade { + default upgrade; + '' close; + } + + include /etc/nginx/servers/*.conf; +} diff --git a/spotweb/rootfs/etc/nginx/servers/ingress.conf b/spotweb/rootfs/etc/nginx/servers/ingress.conf new file mode 100644 index 000000000..81f8977b0 --- /dev/null +++ b/spotweb/rootfs/etc/nginx/servers/ingress.conf @@ -0,0 +1,37 @@ +server { + listen 8099 default_server; + + root /dev/null; + server_name $hostname; + + # server params + add_header X-Content-Type-Options nosniff; + add_header X-XSS-Protection "1; mode=block"; + add_header X-Robots-Tag none; + + # proxy params + proxy_http_version 1.1; + proxy_ignore_client_abort off; + proxy_read_timeout 86400s; + proxy_redirect off; + proxy_send_timeout 86400s; + proxy_max_temp_file_size 0; + + proxy_set_header Accept-Encoding ""; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $http_host; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-NginX-Proxy true; + proxy_set_header X-Real-IP $remote_addr; + + proxy_set_header X-Forwarded-Uri $http_x_ingress_path; + proxy_set_header X-SSL true; + + location / { + allow 172.30.32.2; + deny all; + proxy_pass http://127.0.0.1:80; + } +} \ No newline at end of file diff --git a/spotweb/rootfs/etc/nginx/servers/spotweb.conf b/spotweb/rootfs/etc/nginx/servers/spotweb.conf new file mode 100644 index 000000000..847d3908d --- /dev/null +++ b/spotweb/rootfs/etc/nginx/servers/spotweb.conf @@ -0,0 +1,44 @@ +server { + listen 80 default_server; + + root /app; + index index.php; + + # Make site accessible from http://localhost/ + server_name _; + + location / { + try_files $uri $uri/ =404; + } + + location /api { + rewrite ^/api/?$ /index.php?page=newznabapi last; + } + + error_page 404 /404.html; + + # pass the PHP scripts to FastCGI server listening on socket + # + location ~ \.php$ { + try_files $uri =404; + fastcgi_buffers 32 4k; + fastcgi_split_path_info ^(.+\.php)(/.+)$; + fastcgi_pass 127.0.0.1:9000; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param SCRIPT_NAME $fastcgi_script_name; + fastcgi_param HTTPS $fastcgi_https; + fastcgi_index index.php; + include fastcgi_params; + } + + location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ { + expires 5d; + } + + # deny access to . files, for security + # + location ~ /\. { + log_not_found off; + deny all; + } +} \ No newline at end of file diff --git a/spotweb/rootfs/etc/periodic/hourly/spotweb b/spotweb/rootfs/etc/periodic/hourly/spotweb new file mode 100644 index 000000000..78810bf37 --- /dev/null +++ b/spotweb/rootfs/etc/periodic/hourly/spotweb @@ -0,0 +1,6 @@ +#!/usr/bin/with-contenv bashio +# ============================================================================== +# Runs the hourly task to update spots +# ============================================================================== + +s6-setuidgid nginx php8 /app/retrieve.php diff --git a/spotweb/rootfs/etc/php8/conf.d/zzz_custom_opcache.ini b/spotweb/rootfs/etc/php8/conf.d/zzz_custom_opcache.ini new file mode 100644 index 000000000..7369e66d0 --- /dev/null +++ b/spotweb/rootfs/etc/php8/conf.d/zzz_custom_opcache.ini @@ -0,0 +1,12 @@ +[opcache] +opcache.enable=1 +opcache.enable_cli=1 +; 0 means it will check on every request +; 0 is irrelevant if opcache.validate_timestamps=0 which is desirable in production +opcache.revalidate_freq=0 +opcache.validate_timestamps=1 +opcache.max_accelerated_files=10000 +opcache.memory_consumption=192 +opcache.max_wasted_percentage=10 +opcache.interned_strings_buffer=16 +opcache.fast_shutdown=1 \ No newline at end of file diff --git a/spotweb/rootfs/etc/php8/conf.d/zzz_custom_other.ini b/spotweb/rootfs/etc/php8/conf.d/zzz_custom_other.ini new file mode 100644 index 000000000..6b97d271d --- /dev/null +++ b/spotweb/rootfs/etc/php8/conf.d/zzz_custom_other.ini @@ -0,0 +1,6 @@ +; Make sure _ENV is populated to use it in spotweb database settings +variables_order = "EGPCS" + +date.timezone = Europe/Amsterdam + +memory_limit = 1G \ No newline at end of file diff --git a/spotweb/rootfs/etc/php8/php-fpm.d/www.conf b/spotweb/rootfs/etc/php8/php-fpm.d/www.conf new file mode 100644 index 000000000..799877fde --- /dev/null +++ b/spotweb/rootfs/etc/php8/php-fpm.d/www.conf @@ -0,0 +1,18 @@ +[www] +user = nginx +group = nginx + +listen = 127.0.0.1:9000 + +pm = dynamic +pm.max_children = 50 +pm.start_servers = 20 +pm.min_spare_servers = 5 +pm.max_spare_servers = 20 +pm.max_requests = 1024 +;pm.status_path = /status + +; if we send this to /proc/self/fd/1, it never appears +access.log = /proc/self/fd/1 + +clear_env = no \ No newline at end of file diff --git a/spotweb/rootfs/etc/services.d/cron/run b/spotweb/rootfs/etc/services.d/cron/run new file mode 100644 index 000000000..d7a3c2d80 --- /dev/null +++ b/spotweb/rootfs/etc/services.d/cron/run @@ -0,0 +1,3 @@ +#!/usr/bin/with-contenv sh + +/usr/sbin/crond -f -S -l 0 \ No newline at end of file diff --git a/spotweb/rootfs/etc/services.d/nginx/finish b/spotweb/rootfs/etc/services.d/nginx/finish new file mode 100644 index 000000000..c34b3a0db --- /dev/null +++ b/spotweb/rootfs/etc/services.d/nginx/finish @@ -0,0 +1,9 @@ +#!/usr/bin/execlineb -S0 +# ============================================================================== +# Home Assistant Community Add-on: spotweb +# Take down the S6 supervision tree when Nginx fails +# ============================================================================== +if { s6-test ${1} -ne 0 } +if { s6-test ${1} -ne 256 } + +s6-svscanctl -t /var/run/s6/services \ No newline at end of file diff --git a/spotweb/rootfs/etc/services.d/nginx/run b/spotweb/rootfs/etc/services.d/nginx/run new file mode 100644 index 000000000..702917bfa --- /dev/null +++ b/spotweb/rootfs/etc/services.d/nginx/run @@ -0,0 +1,12 @@ +#!/usr/bin/with-contenv bashio +# ============================================================================== +# Home Assistant Community Add-on: spotweb +# Runs the Nginx daemon +# ============================================================================== + +# Wait for PHP-FPM to become available +bashio::net.wait_for 9000 + +bashio::log.info "Starting NGinx..." + +nginx -c /etc/nginx/nginx.conf \ No newline at end of file diff --git a/spotweb/rootfs/etc/services.d/phpfpm/finish b/spotweb/rootfs/etc/services.d/phpfpm/finish new file mode 100644 index 000000000..d82ea5bcc --- /dev/null +++ b/spotweb/rootfs/etc/services.d/phpfpm/finish @@ -0,0 +1,9 @@ +#!/usr/bin/execlineb -S0 +# ============================================================================== +# Home Assistant Community Add-on: Bookstack +# Take down the S6 supervision tree when PHP FPM fails +# ============================================================================== +if -n { s6-test $# -ne 0 } +if -n { s6-test ${1} -eq 256 } + +s6-svscanctl -t /var/run/s6/services \ No newline at end of file diff --git a/spotweb/rootfs/etc/services.d/phpfpm/run b/spotweb/rootfs/etc/services.d/phpfpm/run new file mode 100644 index 000000000..8b90261e6 --- /dev/null +++ b/spotweb/rootfs/etc/services.d/phpfpm/run @@ -0,0 +1,6 @@ +#!/usr/bin/with-contenv bashio + +bashio::log.info "Starting PHP-FPM..." + +#/usr/sbin/php-fpm8 -F +exec php-fpm8 --nodaemonize \ No newline at end of file