diff --git a/firefly/docker-compose.yml b/firefly/docker-compose.yml index 73a8f98..7b16c61 100644 --- a/firefly/docker-compose.yml +++ b/firefly/docker-compose.yml @@ -1,4 +1,4 @@ -version: '2.8' +version: '2.4' services: app: @@ -32,6 +32,7 @@ services: db: image: 'postgres:13.2-alpine' restart: 'always' + healthcheck: test: 'pg_isready -U firefly' interval: '10s' @@ -49,6 +50,7 @@ services: redis: image: 'redis:6.0.12-alpine' restart: 'always' + healthcheck: test: 'redis-cli -h localhost ping' interval: '10s' diff --git a/koel/.env.example b/koel/.env.example index d58e408..9ba0882 100644 --- a/koel/.env.example +++ b/koel/.env.example @@ -12,7 +12,7 @@ DB_HOST=db DB_PORT=3306 DB_DATABASE=koel DB_USERNAME=koel -DB_PASSWORD=changeme +DB_PASSWORD=koel # A random 32-char string. You can leave this empty if use php artisan koel:init. APP_KEY= diff --git a/koel/docker-compose.yml b/koel/docker-compose.yml index 19d6e1a..27975a8 100644 --- a/koel/docker-compose.yml +++ b/koel/docker-compose.yml @@ -1,14 +1,22 @@ -version: '3.5' +version: '2.4' services: app: + # This repository sadly only has a 'latest' flag image: 'hyzual/koel:latest' restart: 'always' + healthcheck: + test: 'curl -f localhost:80 || exit 1' + interval: '1m' + timeout: '10s' + retries: 3 + start_period: '10s' depends_on: - - 'db' - labels: - - 'com.centurylinklabs.watchtower.enable=true' + db: + # Haven't found a good MySQL healthcheck yet + condition: 'service_started' + networks: - 'default' - 'nginx' @@ -18,17 +26,15 @@ services: - 'music:/music' db: - image: 'mysql:8' + image: 'mysql:8.0.24' restart: 'always' command: '--default-authentication-plugin=mysql_native_password' environment: - 'MYSQL_DATABASE=koel' - - 'MYSQL_PASSWORD=$DB_PASSWORD' - - 'MYSQL_ROOT_PASSWORD=$DB_PASSWORD' - - 'MYSQL_USER=$DB_USERNAME' - labels: - - 'com.centurylinklabs.watchtower.enable=true' + - 'MYSQL_USER=koel' + - 'MYSQL_PASSWORD=koel' + - 'MYSQL_RANDOM_ROOT_PASSWORD=yes' volumes: - 'db-data:/var/lib/mysql' diff --git a/minecraft/fabric/docker-compose.yml b/minecraft/fabric/docker-compose.yml index 28d43bf..440ad2b 100644 --- a/minecraft/fabric/docker-compose.yml +++ b/minecraft/fabric/docker-compose.yml @@ -1,4 +1,4 @@ -version: '3.5' +version: '2.0' services: app: build: diff --git a/minecraft/forge/docker-compose.yml b/minecraft/forge/docker-compose.yml index f8077d2..95ba6e4 100644 --- a/minecraft/forge/docker-compose.yml +++ b/minecraft/forge/docker-compose.yml @@ -1,4 +1,4 @@ -version: '3.5' +version: '2.0' services: app: build: diff --git a/minecraft/papermc/docker-compose.yml b/minecraft/papermc/docker-compose.yml index fd4afec..c9a41bc 100644 --- a/minecraft/papermc/docker-compose.yml +++ b/minecraft/papermc/docker-compose.yml @@ -1,4 +1,4 @@ -version: '3.5' +version: '2.0' services: app: build: @@ -7,7 +7,7 @@ services: - 'BASE_IMAGE' - 'MC_VERSION' - 'PAPERMC_VERSION' - image: 'chewingbever/mc-papermc:${MC_VERSION}-${PAPERMC_VERSION}' + image: 'localhost:5000/mc-papermc:${MC_VERSION}-${PAPERMC_VERSION}' restart: 'always' # Needed to interact with server console diff --git a/miniflux/miniflux.env.example b/miniflux/.env.example similarity index 63% rename from miniflux/miniflux.env.example rename to miniflux/.env.example index 161f6c8..0a429a9 100644 --- a/miniflux/miniflux.env.example +++ b/miniflux/.env.example @@ -1,5 +1,4 @@ # Database settings -DATABASE_URL=postgres://miniflux:changeme@db/miniflux?sslmode=disable RUN_MIGRATIONS=1 # Auto-create admin user diff --git a/miniflux/db.env.example b/miniflux/db.env.example deleted file mode 100644 index 79ebaff..0000000 --- a/miniflux/db.env.example +++ /dev/null @@ -1,3 +0,0 @@ -POSTGRES_DB=miniflux -POSTGRES_USER=miniflux -POSTGRES_PASSWORD=changeme diff --git a/miniflux/docker-compose.yml b/miniflux/docker-compose.yml index 4a59057..24aae5a 100644 --- a/miniflux/docker-compose.yml +++ b/miniflux/docker-compose.yml @@ -1,28 +1,44 @@ -version: '3.5' +version: '2.4' services: app: - image: 'miniflux/miniflux:latest' + image: 'miniflux/miniflux:2.0.29' restart: 'always' depends_on: - - 'db' + db: + condition: 'service_healthy' + healthcheck: + test: 'wget --no-verbose --tries=1 --spider http://localhost:8080/ || exit 1' + interval: '1m' + timeout: '5s' + retries: 3 + start_period: '5s' + env_file: - - 'miniflux.env' - labels: - - 'com.centurylinklabs.watchtower.enable=true' + - '.env' + environment: + # This is always the same, so we just put it here + - 'DATABASE_URL=postgres://miniflux:miniflux@db/miniflux?sslmode=disable' networks: - 'default' - 'nginx' db: - image: 'postgres:13-alpine' + image: 'postgres:13.2-alpine' restart: 'always' - env_file: - - 'db.env' - labels: - - 'com.centurylinklabs.watchtower.enable=true' + healthcheck: + test: 'pg_isready -U miniflux' + interval: '10s' + timeout: '5s' + retries: 5 + start_period: '0s' + + environment: + - 'POSTGRES_DB=miniflux' + - 'POSTGRES_USER=miniflux' + - 'POSTGRES_PASSWORD=miniflux' volumes: - 'db-data:/var/lib/postgresql/data' diff --git a/monica/.env.example b/monica/.env.example new file mode 100644 index 0000000..27ad3e7 --- /dev/null +++ b/monica/.env.example @@ -0,0 +1,168 @@ +# +# Welcome, friend ❤. Thanks for trying out Monica. We hope you'll have fun. +# + +# Two choices: local|production. Use local if you want to install Monica as a +# development version. Use production otherwise. +APP_ENV=production + +# true if you want to show debug information on errors. For production, put this +# to false. +APP_DEBUG=false + +# The encryption key. This is the most important part of the application. Keep +# this secure otherwise, everyone will be able to access your application. +# Must be 32 characters long exactly. +# Use `php artisan key:generate` or `pwgen -s 32 1` to generate a random key. +APP_KEY=ChangeMeBy32KeyLengthOrGenerated + +# Prevent information leakage by referring to IDs with hashIds instead of +# the actual IDs used in the database. +HASH_SALT=ChangeMeBy20+KeyLength +HASH_LENGTH=18 + +# The URL of your application. +APP_URL=http://localhost + +# Force using APP_URL as base url of your application. +# You should not need this, unless you are using subdirectory config. +APP_FORCE_URL=false + +# Database information +# To keep this information secure, we urge you to change the default password +# Currently only "mysql" compatible servers are working +DB_CONNECTION=mysql +DB_HOST=db +DB_PORT=3306 +# You can use mysql unix socket if available, it overrides DB_HOST and DB_PORT values. +#DB_UNIX_SOCKET=/var/run/mysqld/mysqld.sock +DB_DATABASE=monica +DB_USERNAME=monica +DB_PASSWORD=monica +DB_PREFIX= +DB_TEST_HOST=127.0.0.1 +DB_TEST_DATABASE=monica_test +DB_TEST_USERNAME=homestead +DB_TEST_PASSWORD=secret + +# Use utf8mb4 database charset format to support emoji characters +# ⚠ be sure your DBMS supports utf8mb4 format +DB_USE_UTF8MB4=true + +# Mail credentials used to send emails from the application. +MAIL_MAILER=smtp +MAIL_HOST=mailtrap.io +MAIL_PORT=2525 +MAIL_USERNAME= +MAIL_PASSWORD= +MAIL_ENCRYPTION= +# Outgoing emails will be sent with these identity +MAIL_FROM_ADDRESS= +MAIL_FROM_NAME="Monica instance" +# New registration notification sent to this email +APP_EMAIL_NEW_USERS_NOTIFICATION= + +# Ability to disable signups on your instance. +# Can be true or false. Default to false. +APP_DISABLE_SIGNUP=true + +# Enable user email verification. +APP_SIGNUP_DOUBLE_OPTIN=false + +# Set trusted proxy IP addresses. +# To trust all proxies that connect directly to your server, use a "*". +# To trust one or more specific proxies that connect directly to your server, +# use a comma separated list of IP addresses. +APP_TRUSTED_PROXIES=* + +# Enable automatic cloudflare trusted proxy discover +APP_TRUSTED_CLOUDFLARE=false + +# Frequency of creation of new log files. Logs are written when an error occurs. +# Refer to config/logging.php for the possible values. +LOG_CHANNEL=daily + +# Error tracking. Specific to hosted version on .com. You probably don't need +# those. +SENTRY_SUPPORT=false +SENTRY_LARAVEL_DSN= + +# Send a daily ping to https://version.monicahq.com to check if a new version +# is available. When a new version is detected, you will have a message in the +# UI, as well as the release notes for the new changes. Can be true or false. +# Default to true. +CHECK_VERSION=true + +# Cache, session, and queue parameters +# ⚠ Change this only if you know what you are doing +#. Cache: database, file, memcached, redis, dynamodb +#. Session: file, cookie, database, apc, memcached, redis, array +#. Queue: sync, database, beanstalkd, sqs, redis +# If Queue is not set to 'sync', you'll have to set a queue worker +# See https://laravel.com/docs/5.7/queues#running-the-queue-worker +CACHE_DRIVER=redis +SESSION_DRIVER=file +SESSION_LIFETIME=120 +QUEUE_CONNECTION=sync + +# If you use redis, set the redis host or ip, like: +REDIS_HOST=redis + +# Maximum allowed size for uploaded files, in kilobytes. +# Make sure this is an integer, without commas or spaces. +DEFAULT_MAX_UPLOAD_SIZE=10240 + +# Maximum allowed storage size per account, in megabytes. +# Make sure this is an integer, without commas or spaces. +DEFAULT_MAX_STORAGE_SIZE=512 + +# Default filesystem to store uploaded files. +# Possible values: public|s3 +DEFAULT_FILESYSTEM=public + +# AWS keys for S3 when using this storage method +AWS_KEY= +AWS_SECRET= +AWS_REGION=us-east-1 +AWS_BUCKET= +AWS_SERVER= + +# Allow Two Factor Authentication feature on your instance +MFA_ENABLED=true + +# Enable DAV support +DAV_ENABLED=true + +# CLIENT ID and SECRET used for OAuth authentication +PASSPORT_PERSONAL_ACCESS_CLIENT_ID= +PASSPORT_PERSONAL_ACCESS_CLIENT_SECRET= + +# Allow to access general statistics about your instance through a public API +# call +ALLOW_STATISTICS_THROUGH_PUBLIC_API_ACCESS=false + +# Indicates that each user in the instance must comply to international policies +# like CASL or GDPR +POLICY_COMPLIANT=true + +# Enable geolocation services +# This is used to translate addresses to GPS coordinates. +ENABLE_GEOLOCATION=false + +# API key for geolocation services +# We use LocationIQ (https://locationiq.com/) to translate addresses to +# latitude/longitude coordinates. We could use Google instead but we don't +# want to give anything to Google, ever. +# LocationIQ offers 10,000 free requests per day. +LOCATION_IQ_API_KEY= + +# Enable weather on contact profile page +# Weather can only be fetched if we know longitude/latitude - this is why +# you also need to activate the geolocation service above to make it work +ENABLE_WEATHER=false + +# Access to weather data from darksky api +# https://darksky.net/dev/register +# Darksky provides an api with 1000 free API calls per day +# You need to enable the weather above if you provide an API key here. +DARKSKY_API_KEY= diff --git a/monica/docker-compose.yml b/monica/docker-compose.yml new file mode 100644 index 0000000..cf6af26 --- /dev/null +++ b/monica/docker-compose.yml @@ -0,0 +1,58 @@ +version: '2.4' + +services: + app: + image: 'monica:2.20.0-apache' + restart: 'always' + + healthcheck: + test: 'curl -f localhost:8080 || exit 1' + interval: '1m' + timeout: '10s' + retries: 3 + start_period: '10s' + depends_on: + db: + condition: 'service_started' + redis: + condition: 'service_healthy' + + env_file: + - '.env' + networks: + - 'default' + - 'nginx' + volumes: + - 'data:/var/www/html/storage' + + db: + image: 'mysql:8.0.24' + restart: 'always' + command: '--default-authentication-plugin=mysql_native_password' + + environment: + - 'MYSQL_RANDOM_ROOT_PASSWORD=true' + - 'MYSQL_DATABASE=monica' + - 'MYSQL_USER=monica' + - 'MYSQL_PASSWORD=monica' + + volumes: + - 'db-data:/var/lib/mysql' + + redis: + image: 'redis:6.0.12-alpine' + restart: 'always' + + healthcheck: + test: 'redis-cli -h localhost ping' + interval: '10s' + timeout: '5s' + retries: 3 + +networks: + nginx: + external: true + +volumes: + data: + db-data: diff --git a/nextcloud/.env.example b/nextcloud/.env.example index 526887b..2c43195 100644 --- a/nextcloud/.env.example +++ b/nextcloud/.env.example @@ -2,7 +2,7 @@ POSTGRES_HOST=db POSTGRES_DB=nextcloud POSTGRES_USER=nextcloud -POSTGRES_PASSWORD=pass +POSTGRES_PASSWORD=nextcloud # Redis REDIS_HOST=redis diff --git a/nextcloud/docker-compose.yml b/nextcloud/docker-compose.yml index b287465..4ab2edb 100644 --- a/nextcloud/docker-compose.yml +++ b/nextcloud/docker-compose.yml @@ -1,17 +1,24 @@ -version: '3.5' +version: '2.4' services: app: - image: 'nextcloud:20-apache' + image: 'nextcloud:21.0.1-apache' restart: 'always' + healthcheck: + test: 'curl -f localhost || exit 1' + interval: '1m' + timeout: '10s' + retries: 3 + start_period: '10s' depends_on: - - 'db' - - 'redis' + db: + condition: 'service_healthy' + redis: + condition: 'service_healthy' + env_file: - '.env' - labels: - - 'com.centurylinklabs.watchtower.enable=true' networks: - 'default' - 'nginx' @@ -21,40 +28,41 @@ services: - 'root:/var/www/html' cron: - image: 'nextcloud:20-apache' - entrypoint: '/cron.sh' + image: 'nextcloud:21.0.1-apache' restart: 'always' + entrypoint: '/cron.sh' depends_on: - - 'app' + app: + condition: 'service_healthy' + env_file: - '.env' - labels: - - 'com.centurylinklabs.watchtower.enable=true' volumes: - 'config:/var/www/html/config' - 'data:/var/www/html/data' - 'root:/var/www/html' db: - image: 'postgres:13-alpine' + image: 'postgres:13.2-alpine' restart: 'always' environment: - - 'POSTGRES_DB' - - 'POSTGRES_USER' - - 'POSTGRES_PASSWORD' - labels: - - 'com.centurylinklabs.watchtower.enable=true' + - 'POSTGRES_DB=nextcloud' + - 'POSTGRES_USER=nextcloud' + - 'POSTGRES_PASSWORD=nextcloud' volumes: - 'db-data:/var/lib/postgresql/data' redis: - image: 'redis:6-alpine' + image: 'redis:6.0.12-alpine' restart: 'always' - labels: - - 'com.centurylinklabs.watchtower.enable=true' + healthcheck: + test: 'redis-cli -h localhost ping' + interval: '10s' + timeout: '5s' + retries: 3 networks: nginx: diff --git a/portainer/docker-compose.yml b/portainer/docker-compose.yml index 31b62b3..88165b0 100644 --- a/portainer/docker-compose.yml +++ b/portainer/docker-compose.yml @@ -1,12 +1,17 @@ -version: '3.5' +version: '2.4' services: app: - image: 'portainer/portainer-ce:latest' + image: 'portainer/portainer-ce:2.1.1-alpine' restart: 'always' - labels: - - 'com.centurylinklabs.watchtower.enable=true' + healthcheck: + test: 'curl -f localhost:9000 || exit 1' + interval: '1m' + timeout: '10s' + retries: 3 + start_period: '10s' + networks: - 'nginx' ports: @@ -17,8 +22,7 @@ services: networks: nginx: - external: - name: 'nginx' + external: true volumes: data: diff --git a/tshock/.env.example b/tshock/.env.example index fea30eb..0a562b3 100644 --- a/tshock/.env.example +++ b/tshock/.env.example @@ -1,29 +1,15 @@ -# Copyright (C) 2020 Jef Roosens - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - - -# Build arguments +# What version of TShock to use RELEASE_TAG= -# Environment variables +# What world size to create: +# 1 for small, 2 for medium, 3 for large AUTOCREATE=2 -# Mount points -CONFIG_DIR= -LOGS_DIR= -WORLDS_DIR= +# Mount points for the data directories +# By default, it creates volumes +CONFIG_DIR=config +LOGS_DIR=logs +WORLDS_DIR=worlds -# Other +# The port to publish the server on PORT=7777 diff --git a/tshock/Dockerfile b/tshock/Dockerfile index 2c694c1..c9f2d50 100644 --- a/tshock/Dockerfile +++ b/tshock/Dockerfile @@ -1,49 +1,27 @@ -# Copyright (C) 2020 Jef Roosens - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - - -FROM alpine:latest AS base +FROM alpine:3.13.5 AS base # Build arguments ARG RELEASE_TAG -# Add unzip & curl -RUN apk update && apk add --no-cache unzip curl - WORKDIR /terraria -# Download & unzip -# TODO convert this to jq? -RUN curl -s "https://api.github.com/repos/Pryaxis/TShock/releases/tags/${RELEASE_TAG}" | \ -grep "browser_download_url" | \ -grep -o "https[^\"]\+" | \ -xargs curl -sLo tshock.zip && \ -unzip tshock.zip && \ -rm tshock.zip && \ -# Is there a better way to do this? -mv TShock* tshock +RUN apk update && apk add --no-cache unzip curl && \ + curl -s "https://api.github.com/repos/Pryaxis/TShock/releases/tags/${RELEASE_TAG}" | \ + grep "browser_download_url" | \ + grep -o "https[^\"]\+" | \ + xargs curl -sLo tshock.zip && \ + unzip -d tshock tshock.zip && \ + rm tshock.zip -FROM mono:latest +FROM mono:6.12.0.107 WORKDIR /terraria COPY --from=base /terraria/tshock /terraria # Create worlds directory & symlink it RUN mkdir -p worlds logs config /root/.local/share/Terraria && \ -ln -s /terraria/worlds /root/.local/share/Terraria/Worlds + ln -s /terraria/worlds /root/.local/share/Terraria/Worlds ENTRYPOINT \ mono /terraria/TerrariaServer.exe \ diff --git a/tshock/README.md b/tshock/README.md index 4351aa4..8cda9d8 100644 --- a/tshock/README.md +++ b/tshock/README.md @@ -1,23 +1,3 @@ - - - # Build arguments The only required build argument is `RELEASE_TAG`. This is the GitHub tag of the release you wish to use. The releases can be found diff --git a/tshock/docker-compose.yml b/tshock/docker-compose.yml index 31ad2a0..32181e7 100644 --- a/tshock/docker-compose.yml +++ b/tshock/docker-compose.yml @@ -1,37 +1,25 @@ -# Copyright (C) 2020 Jef Roosens - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - - -version: '3.5' +version: '2.4' services: - tshock: + app: build: context: . args: - 'RELEASE_TAG=${RELEASE_TAG}' - image: 'terraria-tshock:${RELEASE_TAG}' - - restart: 'unless-stopped' + image: 'chewingbever/terraria-tshock:${RELEASE_TAG}' + restart: 'always' stdin_open: true tty: true environment: - - AUTOCREATE + - 'AUTOCREATE' ports: - '$PORT:7777' volumes: - '$CONFIG_DIR:/terraria/config' - '$LOGS_DIR:/terraria/logs' - '$WORLDS_DIR:/terraria/worlds' + +volumes: + config: + logs: + worlds: