From 4ea086fb00416d4f70c558333953970acba3a7a2 Mon Sep 17 00:00:00 2001 From: Dustin Brunner Date: Sun, 14 Mar 2021 14:34:40 +0100 Subject: [PATCH] Version 1 --- README.md | 46 ++++++ duplicati/docker-compose.yml | 17 ++ gitea/docker-compose.yml | 46 ++++++ hedgedoc/docker-compose.yml | 35 +++++ icecast/docker-compose.yml | 18 +++ lychee/docker-compose.yml | 83 ++++++++++ matrix-extensions/docker-compose.yml | 16 ++ .../element-web-config/config.json | 54 +++++++ nextcloud/docker-compose.yml | 32 ++++ npm/config.json | 10 ++ npm/docker-compose.yml | 28 ++++ onlyoffice/docker-compose.yml | 10 ++ overleaf/docker-compose.yml | 146 ++++++++++++++++++ picapport/docker-compose.yml | 15 ++ piwigo/docker-compose.yml | 27 ++++ synapse/docker-compose.yml | 14 ++ wordpress/docker-compose.yml | 31 ++++ 17 files changed, 628 insertions(+) create mode 100644 duplicati/docker-compose.yml create mode 100644 gitea/docker-compose.yml create mode 100644 hedgedoc/docker-compose.yml create mode 100644 icecast/docker-compose.yml create mode 100644 lychee/docker-compose.yml create mode 100644 matrix-extensions/docker-compose.yml create mode 100644 matrix-extensions/element-web-config/config.json create mode 100644 nextcloud/docker-compose.yml create mode 100644 npm/config.json create mode 100644 npm/docker-compose.yml create mode 100644 onlyoffice/docker-compose.yml create mode 100644 overleaf/docker-compose.yml create mode 100644 picapport/docker-compose.yml create mode 100644 piwigo/docker-compose.yml create mode 100644 synapse/docker-compose.yml create mode 100644 wordpress/docker-compose.yml diff --git a/README.md b/README.md index d50e140..5916817 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,48 @@ # docker-compose-homeserver Docker Compose application templates for homeserver setup + +In this repository I share my docker-compose files, which I use in my homeserver environment. + +
+ +# How to use these Files +These Containers are designed to work on a Debain based machine. +
You need to install docker (see https://docs.docker.com/engine/install/debian/) +
and docker-compose (see https://docs.docker.com/compose/install/). +
I also recommend to install portainer to monitor your created containers (see https://documentation.portainer.io/v2.0/deploy/ceinstalldocker/) + +For each application there is a seperate folder. +You need to place these folders in your home-directory, for example into `/root`. The docker-compose files are designed in a way, that all configuration- and data-folders are stored in these application folders. If you want to backup your containers you simply backup these folders and you can restore them easily. + +To deploy a container, go into the application-folder and type: +``` +docker-compose up -d +``` + + +# Application List +| Name | Description | +| -------- | ------------ | +| gitea | self-hosted Git service | +| hedgedoc | collaborative (multi user) markdown editor | +| icecast | audio streaming server | +| nextcloud | online file server / personal cloud | +| onlyoffice | webbrowser based office software, used with nextcloud +| npm | nginx proxy manager, nginy proxy with web ui | +| wordpress | content management system (CMS) / blog software | +| synapse | Matrix server, personal chat server | +| matrix-extensions | synapse-admin - User management for synapse with web ui | +| | element-web - Web Messenger client for matrix/element | +| duplicati | Automated backup software with web ui | +| overleaf | web based latex text editor with live preview (sharelatex) | +| lychee | web photo gallery | +| piwigo | web photo gallery <- Best one in my Opinion | +| picapport | web photo gallery | + +

+# Sources +Most of these Files I have not written myself. I found these accross the web and somtimes adapted them to my needs. + +Mainly these are the template files created by the respective developer of the application. + +dustinbrun \ No newline at end of file diff --git a/duplicati/docker-compose.yml b/duplicati/docker-compose.yml new file mode 100644 index 0000000..8269ced --- /dev/null +++ b/duplicati/docker-compose.yml @@ -0,0 +1,17 @@ +version: "2.1" +services: + duplicati: + image: ghcr.io/linuxserver/duplicati + container_name: duplicati + environment: + - PUID=0 + - PGID=0 + - TZ=Europe/Berlin + # - CLI_ARGS= #optional + volumes: + - ./config:/config + - ./backups:/backups + - ./source:/source + ports: + - 8200:8200 + restart: unless-stopped diff --git a/gitea/docker-compose.yml b/gitea/docker-compose.yml new file mode 100644 index 0000000..e955e73 --- /dev/null +++ b/gitea/docker-compose.yml @@ -0,0 +1,46 @@ +version: "2" + +networks: + gitea: + external: false + +services: + server: + image: gitea/gitea:latest + environment: + - USER_UID=1000 + - USER_GID=1000 + - DB_TYPE=mysql + - DB_HOST=db:3306 + - DB_NAME=gitea + - DB_USER=gitea + - DB_PASSWD=123456 + - APP_NAME=My_Git_Server + - DISABLE_SSH=true + - DISABLE_REGISTRATION=true + - DOMAIN=git.local + restart: always + networks: + - gitea + volumes: + - ./gitea:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + ports: + - "3000:3000" + - "222:22" + depends_on: + - db + + db: + image: mysql:5.7 + restart: always + environment: + - MYSQL_ROOT_PASSWORD=123456 + - MYSQL_USER=gitea + - MYSQL_PASSWORD=123456 + - MYSQL_DATABASE=gitea + networks: + - gitea + volumes: + - ./mysql:/var/lib/mysql diff --git a/hedgedoc/docker-compose.yml b/hedgedoc/docker-compose.yml new file mode 100644 index 0000000..61f816f --- /dev/null +++ b/hedgedoc/docker-compose.yml @@ -0,0 +1,35 @@ +version: "3" +services: + mariadb: + image: ghcr.io/linuxserver/mariadb:latest + container_name: hedgedoc_mariadb + restart: always + volumes: + - ./db_config:/config + environment: + - MYSQL_ROOT_PASSWORD=123456 + - MYSQL_DATABASE=hedgedoc + - MYSQL_USER=hedgedoc + - MYSQL_PASSWORD=123456 + - PGID=0 + - PUID=0 + - TZ=Europe/Berlin + hedgedoc: + image: ghcr.io/linuxserver/hedgedoc:latest + container_name: hedgedoc + restart: always + depends_on: + - mariadb + volumes: + - ./config:/config + environment: + - DB_HOST=mariadb + - DB_USER=hedgedoc + - DB_PASS=123456 + - DB_NAME=hedgedoc + - DB_PORT=3306 + - PGID=0 + - PUID=0 + - TZ=Europe/Berlin + ports: + - "86:3000" diff --git a/icecast/docker-compose.yml b/icecast/docker-compose.yml new file mode 100644 index 0000000..dafbe8a --- /dev/null +++ b/icecast/docker-compose.yml @@ -0,0 +1,18 @@ +version: "2" + +services: + icecast: + image: infiniteproject/icecast:latest + environment: + - ICECAST_HOSTNAME=My_Stream + - ICECAST_ADMIN_PASSWORD=changeme + - ICECAST_ADMIN_USERNAME=admin + - ICECAST_SOURCE_PASSWORD=changeme + - ICECAST_LOCATION=My_home + - ICECAST_MAX_CLIENTS=25 + - ICECAST_MAX_SOURCES=5 + restart: always +# volumes: +# - ./config:/etc/icecast2 + ports: + - "85:8000" diff --git a/lychee/docker-compose.yml b/lychee/docker-compose.yml new file mode 100644 index 0000000..a36cc7e --- /dev/null +++ b/lychee/docker-compose.yml @@ -0,0 +1,83 @@ +#------------------------------------------- +# Docker Compose +# @RobLandry +# Repo : https://github.com/LycheeOrg/Lychee-Laravel-Docker +#------------------------------------------- + +version: '3' + +services: + lychee_db: + container_name: lychee_db + image: mariadb:10 + environment: + - MYSQL_ROOT_PASSWORD=changeme + - MYSQL_DATABASE=lychee + - MYSQL_USER=lychee + - MYSQL_PASSWORD=changeme + expose: + - 3306 + volumes: + - ./mysql:/var/lib/mysql + networks: + - lychee + restart: unless-stopped + + lychee: + image: lycheeorg/lychee + container_name: lychee + ports: + - 90:80 + volumes: + - ./lychee/conf:/conf + - ./lychee/uploads:/uploads + - ./lychee/sym:/sym + networks: + - lychee + environment: + #- PUID=1000 + #- PGID=1000 + # PHP timezone e.g. PHP_TZ=America/New_York + - PHP_TZ=Germany/Berlin + #- APP_NAME=Laravel + #- APP_ENV=local + #- APP_DEBUG=true + #- APP_URL=http://localhost + #- LOG_CHANNEL=stack + - DB_CONNECTION=mysql + - DB_HOST=lychee_db + - DB_PORT=3306 + - DB_DATABASE=lychee + - DB_USERNAME=lychee + - DB_PASSWORD=changeme + #- DB_DROP_CLEAR_TABLES_ON_ROLLBACK=false + #- DB_OLD_LYCHEE_PREFIX='' + #- BROADCAST_DRIVER=log + #- CACHE_DRIVER=file + #- SESSION_DRIVER=file + #- SESSION_LIFETIME=120 + #- QUEUE_DRIVER=sync + #- SECURITY_HEADER_HSTS_ENABLE=false + #- REDIS_HOST=127.0.0.1 + #- REDIS_PASSWORD=null + #- REDIS_PORT=6379 + #- MAIL_DRIVER=smtp + #- MAIL_HOST=smtp.mailtrap.io + #- MAIL_PORT=2525 + #- MAIL_USERNAME=null + #- MAIL_PASSWORD=null + #- MAIL_ENCRYPTION=null + #- PUSHER_APP_ID='' + #- PUSHER_APP_KEY='' + #- PUSHER_APP_SECRET='' + #- PUSHER_APP_CLUSTER=mt1 + - STARTUP_DELAY=30 + restart: unless-stopped + depends_on: + - lychee_db + +networks: + lychee: + +volumes: + mysql: diff --git a/matrix-extensions/docker-compose.yml b/matrix-extensions/docker-compose.yml new file mode 100644 index 0000000..d4f04ff --- /dev/null +++ b/matrix-extensions/docker-compose.yml @@ -0,0 +1,16 @@ +version: "2" + +services: + element-web: + image: vectorim/element-web + restart: unless-stopped + volumes: + - ./element-web-config/config.json:/app/config.json + ports: + - "91:80" + + synapse-admin: + image: awesometechnologies/synapse-admin + restart: unless-stopped + ports: + - "92:80" diff --git a/matrix-extensions/element-web-config/config.json b/matrix-extensions/element-web-config/config.json new file mode 100644 index 0000000..8f91b70 --- /dev/null +++ b/matrix-extensions/element-web-config/config.json @@ -0,0 +1,54 @@ +{ + "default_server_config": { + "m.homeserver": { + "base_url": "--Chatserver-URL--", + "server_name": "My-Chat" + }, + "m.identity_server": { + "base_url": "--Chatserver-URL--" + } + }, + "disable_custom_urls": true, + "disable_guests": false, + "disable_login_language_selector": false, + "disable_3pid_login": false, + "brand": "Element", + "integrations_ui_url": "https://scalar.vector.im/", + "integrations_rest_url": "https://scalar.vector.im/api", + "integrations_widgets_urls": [ + "https://scalar.vector.im/_matrix/integrations/v1", + "https://scalar.vector.im/api", + "https://scalar-staging.vector.im/_matrix/integrations/v1", + "https://scalar-staging.vector.im/api", + "https://scalar-staging.riot.im/scalar/api" + ], + "bug_report_endpoint_url": "https://element.io/bugreports/submit", + "defaultCountryCode": "DE", + "showLabsSettings": false, + "features": { + "feature_new_spinner": false + }, + "default_federate": true, + "default_theme": "light", + "roomDirectory": { + "servers": [ + "matrix.org" + ] + }, + "piwik": { + "url": "https://piwik.riot.im/", + "whitelistedHSUrls": ["https://matrix.org"], + "whitelistedISUrls": ["https://vector.im", "https://matrix.org"], + "siteId": 1 + }, + "enable_presence_by_hs_url": { + "https://matrix.org": false, + "https://matrix-client.matrix.org": false + }, + "settingDefaults": { + "breadcrumbs": true + }, + "jitsi": { + "preferredDomain": "jitsi.riot.im" + } +} diff --git a/nextcloud/docker-compose.yml b/nextcloud/docker-compose.yml new file mode 100644 index 0000000..a906bd9 --- /dev/null +++ b/nextcloud/docker-compose.yml @@ -0,0 +1,32 @@ +version: '2' + +volumes: + nextcloud: + db: + +services: + db: + image: mariadb + command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW + restart: always + volumes: + - ./db:/var/lib/mysql + - /etc/localtime:/etc/localtime:ro + - /etc/timezone:/etc/timezone:ro + environment: + - MYSQL_ROOT_PASSWORD=changeme + - MYSQL_PASSWORD=changeme + - MYSQL_DATABASE=nextcloud + - MYSQL_USER=nextcloud + + app: + image: nextcloud + ports: + - 80:80 + - 443:443 + links: + - db + volumes: + - ./nextcloud:/var/www/html + - ./nextcloud_data:/var/www/html/data + restart: always diff --git a/npm/config.json b/npm/config.json new file mode 100644 index 0000000..ad6ef51 --- /dev/null +++ b/npm/config.json @@ -0,0 +1,10 @@ +{ + "database": { + "engine": "mysql", + "host": "db", + "name": "npm", + "user": "npm", + "password": "changeme", + "port": 3306 + } +} \ No newline at end of file diff --git a/npm/docker-compose.yml b/npm/docker-compose.yml new file mode 100644 index 0000000..0388ba8 --- /dev/null +++ b/npm/docker-compose.yml @@ -0,0 +1,28 @@ +version: "3" +services: + app: + image: jc21/nginx-proxy-manager:latest + restart: always + ports: + - 80:80 + - 81:81 + - 443:443 + volumes: + - ./config.json:/app/config/production.json + - ./data:/data + - ./letsencrypt:/etc/letsencrypt + depends_on: + - db + environment: + # if you want pretty colors in your docker logs: + - FORCE_COLOR=1 + db: + image: mariadb:latest + restart: always + environment: + MYSQL_ROOT_PASSWORD: "npm" + MYSQL_DATABASE: "npm" + MYSQL_USER: "npm" + MYSQL_PASSWORD: "changeme" + volumes: + - ./data/mysql:/var/lib/mysql diff --git a/onlyoffice/docker-compose.yml b/onlyoffice/docker-compose.yml new file mode 100644 index 0000000..c0d769e --- /dev/null +++ b/onlyoffice/docker-compose.yml @@ -0,0 +1,10 @@ +version: '2' +services: + docserver: + image: onlyoffice/documentserver + restart: always + ports: + - 81:80 + environment: + - JWT_ENABLED=true + - JWT_SECRET=changeme \ No newline at end of file diff --git a/overleaf/docker-compose.yml b/overleaf/docker-compose.yml new file mode 100644 index 0000000..1f942fd --- /dev/null +++ b/overleaf/docker-compose.yml @@ -0,0 +1,146 @@ +version: '2.2' +services: + sharelatex: + restart: always + # Server Pro users: + # image: quay.io/sharelatex/sharelatex-pro + image: sharelatex/sharelatex + container_name: sharelatex + depends_on: + mongo: + condition: service_healthy + redis: + condition: service_started + ports: + - 83:80 + links: + - mongo + - redis + volumes: + - ./sharelatex_data:/var/lib/sharelatex + ######################################################################## + #### Server Pro: Un-comment the following line to mount the docker #### + #### socket, required for Sibling Containers to work #### + ######################################################################## + # - /var/run/docker.sock:/var/run/docker.sock + environment: + + SHARELATEX_APP_NAME: Overleaf Community Edition + + SHARELATEX_MONGO_URL: mongodb://mongo/sharelatex + + # Same property, unfortunately with different names in + # different locations + SHARELATEX_REDIS_HOST: redis + REDIS_HOST: redis + + ENABLED_LINKED_FILE_TYPES: 'url,project_file' + + # Enables Thumbnail generation using ImageMagick + ENABLE_CONVERSIONS: 'true' + + # Disables email confirmation requirement + EMAIL_CONFIRMATION_DISABLED: 'true' + + # temporary fix for LuaLaTex compiles + # see https://github.com/overleaf/overleaf/issues/695 + TEXMFVAR: /var/lib/sharelatex/tmp/texmf-var + + ## Set for SSL via nginx-proxy + #VIRTUAL_HOST: 103.112.212.22 + + # SHARELATEX_SITE_URL: http://sharelatex.mydomain.com + # SHARELATEX_NAV_TITLE: Our ShareLaTeX Instance + # SHARELATEX_HEADER_IMAGE_URL: http://somewhere.com/mylogo.png + # SHARELATEX_ADMIN_EMAIL: support@it.com + + # SHARELATEX_LEFT_FOOTER: '[{"text": "Powered by ShareLaTeX 2016"},{"text": "Another page I want to link to can be found here"} ]' + # SHARELATEX_RIGHT_FOOTER: '[{"text": "Hello I am on the Right"} ]' + + # SHARELATEX_EMAIL_FROM_ADDRESS: "team@sharelatex.com" + + # SHARELATEX_EMAIL_AWS_SES_ACCESS_KEY_ID: + # SHARELATEX_EMAIL_AWS_SES_SECRET_KEY: + + # SHARELATEX_EMAIL_SMTP_HOST: smtp.mydomain.com + # SHARELATEX_EMAIL_SMTP_PORT: 587 + # SHARELATEX_EMAIL_SMTP_SECURE: false + # SHARELATEX_EMAIL_SMTP_USER: + # SHARELATEX_EMAIL_SMTP_PASS: + # SHARELATEX_EMAIL_SMTP_TLS_REJECT_UNAUTH: true + # SHARELATEX_EMAIL_SMTP_IGNORE_TLS: false + # SHARELATEX_CUSTOM_EMAIL_FOOTER: "
This system is run by department x
" + + ################ + ## Server Pro ## + ################ + + # SANDBOXED_COMPILES: 'true' + + # SANDBOXED_COMPILES_SIBLING_CONTAINERS: 'true' + # SANDBOXED_COMPILES_HOST_DIR: '/var/sharelatex_data/data/compiles' + # SYNCTEX_BIN_HOST_PATH: '/var/sharelatex_data/bin/synctex' + + # DOCKER_RUNNER: 'false' + + ## Works with test LDAP server shown at bottom of docker compose + # SHARELATEX_LDAP_URL: 'ldap://ldap:389' + # SHARELATEX_LDAP_SEARCH_BASE: 'ou=people,dc=planetexpress,dc=com' + # SHARELATEX_LDAP_SEARCH_FILTER: '(uid={{username}})' + # SHARELATEX_LDAP_BIND_DN: 'cn=admin,dc=planetexpress,dc=com' + # SHARELATEX_LDAP_BIND_CREDENTIALS: 'GoodNewsEveryone' + # SHARELATEX_LDAP_EMAIL_ATT: 'mail' + # SHARELATEX_LDAP_NAME_ATT: 'cn' + # SHARELATEX_LDAP_LAST_NAME_ATT: 'sn' + # SHARELATEX_LDAP_UPDATE_USER_DETAILS_ON_LOGIN: 'true' + + # SHARELATEX_TEMPLATES_USER_ID: "578773160210479700917ee5" + # SHARELATEX_NEW_PROJECT_TEMPLATE_LINKS: '[ {"name":"All Templates","url":"/templates/all"}]' + + + # SHARELATEX_PROXY_LEARN: "true" + + mongo: + restart: always + image: mongo + container_name: mongo + expose: + - 27017 + volumes: + - ./mongo_data:/data/db + healthcheck: + test: echo 'db.stats().ok' | mongo localhost:27017/test --quiet + interval: 10s + timeout: 10s + retries: 5 + + redis: + restart: always + image: redis:5 + container_name: redis + expose: + - 6379 + volumes: + - ./redis_data:/data + + # ldap: + # restart: always + # image: rroemhild/test-openldap + # container_name: ldap + # expose: + # - 389 + + # See https://github.com/jwilder/nginx-proxy for documentation on how to configure the nginx-proxy container, + # and https://github.com/overleaf/overleaf/wiki/HTTPS-reverse-proxy-using-Nginx for an example of some recommended + # settings. We recommend using a properly managed nginx instance outside of the Overleaf Server Pro setup, + # but the example here can be used if you'd prefer to run everything with docker-compose + + # nginx-proxy: + # image: jwilder/nginx-proxy + # container_name: nginx-proxy + # ports: + # #- "80:80" + # - "443:443" + # volumes: + # - /var/run/docker.sock:/tmp/docker.sock:ro + # - /home/sharelatex/tmp:/etc/nginx/certs diff --git a/picapport/docker-compose.yml b/picapport/docker-compose.yml new file mode 100644 index 0000000..f1b4f34 --- /dev/null +++ b/picapport/docker-compose.yml @@ -0,0 +1,15 @@ +version: '3' + +services: + picapport: + image: whatever4711/picapport + restart: always + ports: + - 84:80 + environment: + - Xms=512m + - Xmx=1g + - PICAPPORT_LANG=de + volumes: + - ./config:/opt/picapport/.picapport + - ./photos:/srv/photos diff --git a/piwigo/docker-compose.yml b/piwigo/docker-compose.yml new file mode 100644 index 0000000..cbc8557 --- /dev/null +++ b/piwigo/docker-compose.yml @@ -0,0 +1,27 @@ +version: "2.1" +services: + piwigo: + image: linuxserver/piwigo + container_name: piwigo + environment: + #- PUID=0 + #- PGID=0 + - TZ=Europe/Berlin + volumes: + - ./config:/config + - ./fotos_cloud:/config/www/gallery/fotos_cloud + ports: + - 82:80 + restart: unless-stopped + + db: + image: mariadb + command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW + restart: unless-stopped + volumes: + - ./db:/var/lib/mysql + environment: + - MYSQL_ROOT_PASSWORD=changeme + - MYSQL_PASSWORD=changeme + - MYSQL_DATABASE=piwigo + - MYSQL_USER=piwigo diff --git a/synapse/docker-compose.yml b/synapse/docker-compose.yml new file mode 100644 index 0000000..8c0a12f --- /dev/null +++ b/synapse/docker-compose.yml @@ -0,0 +1,14 @@ +version: "2" + +services: + synapse: + image: matrixdotorg/synapse:latest + environment: + - TZ=DE + - UID=0 + - GID=0 + restart: always + volumes: + - ./synapse-data:/data + ports: + - "8008:8008" diff --git a/wordpress/docker-compose.yml b/wordpress/docker-compose.yml new file mode 100644 index 0000000..4714c7f --- /dev/null +++ b/wordpress/docker-compose.yml @@ -0,0 +1,31 @@ +version: '3.1' + +services: + + wordpress: + image: wordpress + restart: always + ports: + - 84:80 + environment: + WORDPRESS_DB_HOST: db + WORDPRESS_DB_USER: wordpress + WORDPRESS_DB_PASSWORD: changeme + WORDPRESS_DB_NAME: wordpress + volumes: + - ./wordpress:/var/www/html + + db: + image: mysql:5.7 + restart: always + environment: + MYSQL_DATABASE: wordpress + MYSQL_USER: wordpress + MYSQL_PASSWORD: changeme + MYSQL_ROOT_PASSWORD: changeme + volumes: + - ./db:/var/lib/mysql + +volumes: + wordpress: + db: