From b449a279cd2c266d3c90f69bdab720d54c02f90b Mon Sep 17 00:00:00 2001 From: Tobias Manske Date: Sat, 18 Jun 2022 14:12:12 +0200 Subject: [PATCH] Initial Signed-off-by: Tobias Manske --- .gitignore | 128 + Makefile | 18 + Vagrantfile | 97 + backup.sh | 68 + compose/00_traefik/.env | 1 + compose/00_traefik/docker-compose.yaml | 31 + compose/00_traefik/traefik.yaml | 29 + compose/01_registry/.env | 1 + compose/01_registry/docker-compose.yml | 29 + compose/01_registry/htpasswd | 3 + compose/02_gitea/.env | 1 + compose/02_gitea/docker-compose.yml | 105 + compose/02_wireguard/.env | 1 + compose/02_wireguard/docker-compose.yml | 26 + compose/02_wireguard/wg0.conf | 17 + compose/03_hedgedoc/.env | 1 + compose/03_hedgedoc/docker-compose.yaml | 65 + compose/03_miniflux/.env | 1 + compose/03_miniflux/docker-compose.yml | 49 + compose/03_nextcloud/.env | 1 + compose/03_nextcloud/docker-compose.yml | 61 + compose/03_search/.env | 1 + compose/03_search/docker-compose.yml | 45 + compose/03_search/settings.yml | 2823 ++++++++++++++++++++++ compose/03_search/uwsgi.ini | 49 + compose/03_syncthing/.env | 1 + compose/03_syncthing/config/cert.pem | 45 + compose/03_syncthing/config/config.xml | 583 +++++ compose/03_syncthing/config/key.pem | 20 + compose/03_syncthing/docker-compose.yml | 25 + compose/04_blog/.env | 1 + compose/04_blog/docker-compose.yml | 18 + compose/05_watchtower/.env | 1 + compose/05_watchtower/docker-compose.yml | 34 + docker-config.json | 11 + inventory.yaml | 12 + playbook.yaml | 202 ++ setup.bu | 100 + vagrant.bu | 7 + vagrant_INSECURE.ign | 1 + vars/vault.yaml | 90 + vars/wireguard-peers.yaml | 74 + 42 files changed, 4876 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 Vagrantfile create mode 100755 backup.sh create mode 100644 compose/00_traefik/.env create mode 100644 compose/00_traefik/docker-compose.yaml create mode 100644 compose/00_traefik/traefik.yaml create mode 100644 compose/01_registry/.env create mode 100644 compose/01_registry/docker-compose.yml create mode 100644 compose/01_registry/htpasswd create mode 100644 compose/02_gitea/.env create mode 100644 compose/02_gitea/docker-compose.yml create mode 100644 compose/02_wireguard/.env create mode 100644 compose/02_wireguard/docker-compose.yml create mode 100644 compose/02_wireguard/wg0.conf create mode 100644 compose/03_hedgedoc/.env create mode 100644 compose/03_hedgedoc/docker-compose.yaml create mode 100644 compose/03_miniflux/.env create mode 100644 compose/03_miniflux/docker-compose.yml create mode 100644 compose/03_nextcloud/.env create mode 100644 compose/03_nextcloud/docker-compose.yml create mode 100644 compose/03_search/.env create mode 100644 compose/03_search/docker-compose.yml create mode 100644 compose/03_search/settings.yml create mode 100644 compose/03_search/uwsgi.ini create mode 100644 compose/03_syncthing/.env create mode 100644 compose/03_syncthing/config/cert.pem create mode 100644 compose/03_syncthing/config/config.xml create mode 100644 compose/03_syncthing/config/key.pem create mode 100644 compose/03_syncthing/docker-compose.yml create mode 100644 compose/04_blog/.env create mode 100644 compose/04_blog/docker-compose.yml create mode 100644 compose/05_watchtower/.env create mode 100644 compose/05_watchtower/docker-compose.yml create mode 100644 docker-config.json create mode 100644 inventory.yaml create mode 100644 playbook.yaml create mode 100644 setup.bu create mode 100644 vagrant.bu create mode 100644 vagrant_INSECURE.ign create mode 100644 vars/vault.yaml create mode 100644 vars/wireguard-peers.yaml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..63a4ce1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,128 @@ + +# Created by https://www.toptal.com/developers/gitignore/api/vagrant,git,vim,ansible,linux,windows,osx +# Edit at https://www.toptal.com/developers/gitignore?templates=vagrant,git,vim,ansible,linux,windows,osx + +### Ansible ### +*.retry + +### Git ### +# Created by git for backups. To disable backups in Git: +# $ git config --global mergetool.keepBackup false +*.orig + +# Created by git when using merge tools for conflicts +*.BACKUP.* +*.BASE.* +*.LOCAL.* +*.REMOTE.* +*_BACKUP_*.txt +*_BASE_*.txt +*_LOCAL_*.txt +*_REMOTE_*.txt + +### Linux ### +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +### OSX ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### Vagrant ### +# General +.vagrant/ + +# Log files (if you are creating logs in debug mode, uncomment this) +# *.log + +### Vagrant Patch ### +*.box + +### Vim ### +# Swap +[._]*.s[a-v][a-z] +!*.svg # comment out if you don't need vector files +[._]*.sw[a-p] +[._]s[a-rt-v][a-z] +[._]ss[a-gi-z] +[._]sw[a-p] + +# Session +Session.vim +Sessionx.vim + +# Temporary +.netrwhist +# Auto-generated tag files +tags +# Persistent undo +[._]*.un~ + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# End of https://www.toptal.com/developers/gitignore/api/vagrant,git,vim,ansible,linux,windows,osx +/vagrant.ign +/setup.ign +backups/* +render/ +borgbackup +borgbackup.pub diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..a9c97a6 --- /dev/null +++ b/Makefile @@ -0,0 +1,18 @@ +provision: + vagrant provision + +down: + vagrant destroy -f + +clean: down up + +up: vagrant.ign + vagrant up + +vagrant.ign: vagrant_INSECURE.ign setup.ign + butane --pretty --strict -d . vagrant.bu > vagrant.ign + +setup.ign: setup.bu + butane --pretty --strict -d . setup.bu > setup.ign + +.PHONY: provision down up clean diff --git a/Vagrantfile b/Vagrantfile new file mode 100644 index 0000000..47bf687 --- /dev/null +++ b/Vagrantfile @@ -0,0 +1,97 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +require 'json' + +ignition_file = File.join(File.dirname(__FILE__), 'vagrant.ign') + +# All Vagrant configuration is done below. The "2" in Vagrant.configure +# configures the configuration version (we support older styles for +# backwards compatibility). Please don't change it unless you know what +# you're doing. +Vagrant.configure("2") do |config| + # config.disksize.size = "30G" + # The most common configuration options are documented and commented below. + # For a complete reference, please see the online documentation at + # https://docs.vagrantup.com. + + # Every Vagrant development environment requires a box. You can search for + # boxes at https://vagrantcloud.com/search. + config.vm.box = "fedora-coreos" + + config.vm.provider :libvirt do |libvirt| + libvirt.disk_bus = 'ide' + libvirt.driver = 'kvm' + libvirt.memory = 4096 + libvirt.cpus = 4 + libvirt.machine_virtual_size = 60 + libvirt.qemuargs :value => '-fw_cfg' + libvirt.qemuargs :value => "name=opt/com.coreos/config,file=#{ignition_file}" + end + + config.vm.provision "ansible" do |ansible| + ansible.playbook = "playbook.yaml" + ansible.limit = "all,localhost" + ansible.ask_vault_pass = true + end + + # Disable automatic box update checking. If you disable this, then + # boxes will only be checked for updates when the user runs + # `vagrant box outdated`. This is not recommended. + # config.vm.box_check_update = false + + # Create a forwarded port mapping which allows access to a specific port + # within the machine from a port on the host machine. In the example below, + # accessing "localhost:8080" will access port 80 on the guest machine. + # NOTE: This will enable public access to the opened port + + # Create a forwarded port mapping which allows access to a specific port + # within the machine from a port on the host machine and only allow access + # via 127.0.0.1 to disable public access + # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1" + + # Create a private network, which allows host-only access to the machine + # using a specific IP. + config.vm.network :private_network, + :ip => "192.168.33.10", + :libvirt__guest_ipv6 => "yes", + :libvirt__ipv6_address => "fddd::13", + :libvirt__ipv6_prefix => "64" + + config.vm.network "forwarded_port", guest: 80, host: 80 + config.vm.network "forwarded_port", guest: 443, host: 443 + + # Create a public network, which generally matched to bridged network. + # Bridged networks make the machine appear as another physical device on + # your network. + # config.vm.network "public_network" + + # Share an additional folder to the guest VM. The first argument is + # the path on the host to the actual folder. The second argument is + # the path on the guest to mount the folder. And the optional third + # argument is a set of non-required options. + # config.vm.synced_folder "./backups", "/home/core/backups" + + # Provider-specific configuration so you can fine-tune various + # backing providers for Vagrant. These expose provider-specific options. + # Example for VirtualBox: + # + # config.vm.provider "virtualbox" do |vb| + # # Display the VirtualBox GUI when booting the machine + # vb.gui = true + # + # # Customize the amount of memory on the VM: + # vb.memory = "1024" + # end + # + # View the documentation for the provider you are using for more + # information on available options. + + # Enable provisioning with a shell script. Additional provisioners such as + # Ansible, Chef, Docker, Puppet and Salt are also available. Please see the + # documentation for more information about their specific syntax and use. + # config.vm.provision "shell", inline: <<-SHELL + # apt-get update + # apt-get install -y apache2 + # SHELL +end diff --git a/backup.sh b/backup.sh new file mode 100755 index 0000000..a1deaf4 --- /dev/null +++ b/backup.sh @@ -0,0 +1,68 @@ +#!/bin/sh +# Setting this, so the repo does not need to be given on the commandline: +export BORG_REPO=~borgbackup/backup +PUSH_KEY={{ backup.pushkey }} + +# See the section "Passphrase notes" for more infos. +#export BORG_PASSPHRASE='XYZl0ngandsecurepa_55_phrasea&&123' + +# some helpers and error handling: +info() { printf "\n%s %s\n\n" "$( date )" "$*" >&2; } +trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM + +info "Initialize Repo" +borg init -e none + +info "Starting backup" + + +# Backup the most important directories into an archive named after +# the machine this script is currently running on: + +borg create \ + --verbose \ + --filter AME \ + --list \ + --stats \ + --show-rc \ + --compression none \ + --exclude-caches \ + --one-file-system \ + ::'{hostname}-{now}' \ + /var/lib/docker/volumes + +backup_exit=$? + +info "Pruning repository" + +# Use the `prune` subcommand to maintain 7 daily, 4 weekly and 6 monthly +# archives of THIS machine. The '{hostname}-' prefix is very important to +# limit prune's operation to this machine's archives and not apply to +# other machines' archives also: + +borg prune \ + --list \ + --prefix '{hostname}-' \ + --show-rc \ + --keep-daily 7 \ + --keep-weekly 4 \ + --keep-monthly 6 \ + +chown -R borgbackup ~borgbackup + +prune_exit=$? + +# use highest exit code as global exit code +global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit )) + +if [ ${global_exit} -eq 0 ]; then + info "Backup and Prune finished successfully" + /usr/bin/curl -fsS -m 10 --retry 5 -o /dev/null https://monitor.chaoswg.org/api/push/${PUSH_KEY}?msg=OK&ping= +elif [ ${global_exit} -eq 1 ]; then + info "Backup and/or Prune finished with warnings" + /usr/bin/curl -fsS -m 10 --retry 5 -o /dev/null https://monitor.chaoswg.org/api/push/${PUSH_KEY}?msg=OK&ping= +else + info "Backup and/or Prune finished with errors" +fi + +exit ${global_exit} diff --git a/compose/00_traefik/.env b/compose/00_traefik/.env new file mode 100644 index 0000000..8d44674 --- /dev/null +++ b/compose/00_traefik/.env @@ -0,0 +1 @@ +COMPOSE_PROJECT_NAME=traefik diff --git a/compose/00_traefik/docker-compose.yaml b/compose/00_traefik/docker-compose.yaml new file mode 100644 index 0000000..11e1f63 --- /dev/null +++ b/compose/00_traefik/docker-compose.yaml @@ -0,0 +1,31 @@ +--- +version: '3.9' +services: + traefik: + image: traefik:v2.7 + container_name: traefik + restart: always + ports: + - "443:443" + - "80:80" + privileged: true + volumes: + - "/var/run/docker.sock:/var/run/docker.sock:z" + - "./traefik.yaml:/etc/traefik/traefik.yaml:Z,ro" + - "acme:/acme" + networks: + - gateway + - default + environment: + CLOUDFLARE_DNS_API_TOKEN: "{{ traefik.CLOUDFLARE_DNS_API_TOKEN }}" + +volumes: + acme: + +networks: + gateway: + name: gateway + internal: false + default: + driver: bridge +... diff --git a/compose/00_traefik/traefik.yaml b/compose/00_traefik/traefik.yaml new file mode 100644 index 0000000..9316b1f --- /dev/null +++ b/compose/00_traefik/traefik.yaml @@ -0,0 +1,29 @@ +log: + level: DEBUG +providers: + docker: + network: gateway + exposedbydefault: false +entryPoints: + web: + address: ":80" + http: + redirections: + entryPoint: + to: websecure + scheme: https + permanent: true + websecure: + address: ":443" + http: + tls: + certResolver: letsencrypt + +certificatesResolvers: + letsencrypt: + acme: + email: webmaster@tobiasmanske.de + storage: /acme/acme.json + # caServer: "https://acme-staging-v02.api.letsencrypt.org/directory" + dnsChallenge: + provider: cloudflare diff --git a/compose/01_registry/.env b/compose/01_registry/.env new file mode 100644 index 0000000..4ec97fb --- /dev/null +++ b/compose/01_registry/.env @@ -0,0 +1 @@ +COMPOSE_PROJECT_NAME=registry diff --git a/compose/01_registry/docker-compose.yml b/compose/01_registry/docker-compose.yml new file mode 100644 index 0000000..044cf19 --- /dev/null +++ b/compose/01_registry/docker-compose.yml @@ -0,0 +1,29 @@ +--- +services: + registry: + container_name: registry + restart: always + labels: + - "com.centurylinklabs.watchtower.scope=update" + - "traefik.enable=true" + - "traefik.http.routers.registry.rule=Host(`registry.tobiasmanske.de`)" + - "traefik.http.routers.registry.entryPoints=websecure" + - "traefik.http.services.registry.loadbalancer.server.port=5000" + image: 'registry:2' + networks: + - gateway + environment: + REGISTRY_AUTH: htpasswd + REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd + REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm + volumes: + - registry_data:/var/lib/registry + - ./htpasswd:/auth/htpasswd:ro,z + +volumes: + registry_data: + +networks: + gateway: + external: true +... diff --git a/compose/01_registry/htpasswd b/compose/01_registry/htpasswd new file mode 100644 index 0000000..7a4779c --- /dev/null +++ b/compose/01_registry/htpasswd @@ -0,0 +1,3 @@ +{% for line in registry.HTPASSWD %} +{{ line }} +{% endfor %} diff --git a/compose/02_gitea/.env b/compose/02_gitea/.env new file mode 100644 index 0000000..f0d8c7b --- /dev/null +++ b/compose/02_gitea/.env @@ -0,0 +1 @@ +COMPOSE_PROJECT_NAME=gitea diff --git a/compose/02_gitea/docker-compose.yml b/compose/02_gitea/docker-compose.yml new file mode 100644 index 0000000..d331201 --- /dev/null +++ b/compose/02_gitea/docker-compose.yml @@ -0,0 +1,105 @@ +--- +version: '3.9' + +services: + gitea: + image: gitea/gitea:1 + container_name: gitea + environment: + - "USER_UID=1000" + - "USER_GID=1000" + - "GITEA__database__DB_TYPE=postgres" + - "GITEA__database__HOST=db:5432" + - "GITEA__database__NAME={{ gitea.db.name }}" + - "GITEA__database__USER={{ gitea.db.user }}" + - "GITEA__database__PASSWD={{ gitea.db.password }}" + - "GITEA__webhook__ALLOWED_HOST_LIST=*.tobiasmanske.de" + restart: always + networks: + - backend + - gateway + volumes: + - gitea_data:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + labels: + - "traefik.enable=true" + - "traefik.http.routers.gitea.rule=Host(`git.tobiasmanske.de`)" + - "traefik.http.routers.gitea.entryPoints=websecure" + - "traefik.http.services.gitea.loadbalancer.server.port=3000" + - "com.centurylinklabs.watchtower.scope=update" + ports: + - "7779:22" + depends_on: + - db + + db: + image: postgres:14 + restart: always + labels: + - "com.centurylinklabs.watchtower.scope=update" + environment: + - POSTGRES_USER="{{ gitea.db.user }}" + - POSTGRES_PASSWORD="{{ gitea.db.password }}" + - POSTGRES_DB="{{ gitea.db.name }}" + networks: + - backend + volumes: + - pg_data:/var/lib/postgresql/data + + drone: + image: drone/drone:2 + restart: always + environment: + - "DRONE_GITEA_SERVER=https://git.tobiasmanske.de" + - "DRONE_GITEA_CLIENT_ID={{ gitea.drone.client_id }}" + - "DRONE_GIT_ALWAYS_AUTH=true" + - "DRONE_GITEA_CLIENT_SECRET={{ gitea.drone.client_secret }}" + - "DRONE_RPC_SECRET={{ gitea.drone.rpc_secret }}" + - "DRONE_SERVER_HOST=drone.tobiasmanske.de" + - "DRONE_SERVER_PROTO=https" + - "DRONE_IMAGE_CLONE=openjdk:17-bullseye" + networks: + - backend + - gateway + volumes: + - drone_data:/data + labels: + - "traefik.enable=true" + - "traefik.http.routers.drone.rule=Host(`drone.tobiasmanske.de`)" + - "traefik.http.routers.drone.entryPoints=websecure" + - "traefik.http.services.drone.loadbalancer.server.port=80" + - "com.centurylinklabs.watchtower.scope=update" + depends_on: + - gitea + + drone_runner: + image: drone/drone-runner-docker:1.8 + restart: always + privileged: true + labels: + - "com.centurylinklabs.watchtower.scope=update" + volumes: + - /var/run/docker.sock:/var/run/docker.sock + environment: + - "DRONE_RPC_SECRET={{ gitea.drone.rpc_secret }}" + - "DRONE_RPC_HOST=drone.tobiasmanske.de" + - "DRONE_RPC_PROTO=https" + - "DRONE_RUNNER_CAPACITY=2" + - "DRONE_RUNNER_NAME=docker-01" + - "DRONE_RUNNER_CLONE_IMAGE=drone/git:linux-amd64" + - "DRONE_RUNNER_VOLUMES=/etc/hosts:/etc/hosts" + networks: + - backend + - default + +networks: + backend: + internal: true + gateway: + external: true + +volumes: + gitea_data: + drone_data: + pg_data: diff --git a/compose/02_wireguard/.env b/compose/02_wireguard/.env new file mode 100644 index 0000000..da862ab --- /dev/null +++ b/compose/02_wireguard/.env @@ -0,0 +1 @@ +COMPOSE_PROJECT_NAME=wireguard diff --git a/compose/02_wireguard/docker-compose.yml b/compose/02_wireguard/docker-compose.yml new file mode 100644 index 0000000..41900de --- /dev/null +++ b/compose/02_wireguard/docker-compose.yml @@ -0,0 +1,26 @@ +--- +version: '3.9' +services: + wireguard: + image: linuxserver/wireguard:latest + container_name: wireguard + cap_add: + - NET_ADMIN + - SYS_MODULE + security_opt: + - label:disable + environment: + - PUID=1000 + - PGID=1000 + - TZ=Europe/Berlin + volumes: + - ./wg0.conf:/config/wg0.conf:ro,z + - /lib/modules:/lib/modules:ro + labels: + - "com.centurylinklabs.watchtower.scope=update" + ports: + - 51820:51820/udp + sysctls: + - net.ipv4.conf.all.src_valid_mark=1 + - net.ipv6.conf.all.disable_ipv6=0 + restart: unless-stopped diff --git a/compose/02_wireguard/wg0.conf b/compose/02_wireguard/wg0.conf new file mode 100644 index 0000000..d308ed9 --- /dev/null +++ b/compose/02_wireguard/wg0.conf @@ -0,0 +1,17 @@ +[Interface] +Address = 10.2.0.1/16 +Address = fd10:4000::1/32 +MTU = 1420 +SaveConfig = true +PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE +PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE +ListenPort = 51820 +PrivateKey = {{ wireguard.private_key }} + +{% for peer in wireguard_peers %} +# Peer: {{ peer.name }} +[Peer] +PublicKey = {{ peer.pubkey }} +AllowedIPs = {{ peer.allowedips | join(", ") }} + +{% endfor %} diff --git a/compose/03_hedgedoc/.env b/compose/03_hedgedoc/.env new file mode 100644 index 0000000..bc99434 --- /dev/null +++ b/compose/03_hedgedoc/.env @@ -0,0 +1 @@ +COMPOSE_PROJECT_NAME=hedgedoc diff --git a/compose/03_hedgedoc/docker-compose.yaml b/compose/03_hedgedoc/docker-compose.yaml new file mode 100644 index 0000000..6f2fd6a --- /dev/null +++ b/compose/03_hedgedoc/docker-compose.yaml @@ -0,0 +1,65 @@ +--- +version: '3' +services: + database: + image: postgres:13-alpine + environment: + - POSTGRES_USER={{ hedgedoc.db.user }} + - POSTGRES_PASSWORD={{ hedgedoc.db.password }} + - POSTGRES_DB={{ hedgedoc.db.name }} + volumes: + - database:/var/lib/postgresql/data + labels: + - "com.centurylinklabs.watchtower.scope=update" + restart: always + networks: + - backend + + app: + # Make sure to use the latest release from https://hedgedoc.org/latest-release + image: quay.io/hedgedoc/hedgedoc:1.9.3 + environment: + - CMD_DB_URL=postgres://{{ hedgedoc.db.user }}:{{ hedgedoc.db.password }}@database:5432/{{ hedgedoc.db.name }} + - CMD_DOMAIN=doc.tobiasmanske.de + - CMD_ALLOW_ORIGIN=doc.tobiasmanske.de,localhost + - CMD_CSP_ENABLE=true + - CMD_PROTOCOL_USESSL=true + - CMD_PROTOCOL_USE_SSL=true + - CMD_ALLOW_EMAIL_REGISTER=false + - CMD_ALLOW_ANONYMOUS=false + - CMD_ALLOW_ANONYMOUS_EDITS=true + - CMD_DEFAULT_PERMISSION=private + - CMD_SESSION_SECRET={{ hedgedoc.cmd.session_secret }} + - CMD_OAUTH2_CLIENT_ID={{ hedgedoc.cmd.client_id }} + - CMD_OAUTH2_CLIENT_SECRET={{ hedgedoc.cmd.client_secret }} + - CMD_OAUTH2_AUTHORIZATION_URL={{ hedgedoc.cmd.authorization_url }} + - CMD_OAUTH2_TOKEN_URL={{ hedgedoc.cmd.token_url }} + - CMD_OAUTH2_USER_PROFILE_URL={{ hedgedoc.cmd.user_profile_url }} + - CMD_OAUTH2_USER_PROFILE_USERNAME_ATTR=ocs.data.id + - CMD_OAUTH2_USER_PROFILE_DISPLAY_NAME_ATTR=ocs.data.display-name + - CMD_OAUTH2_USER_PROFILE_EMAIL_ATTR=ocs.data.email + volumes: + - uploads:/hedgedoc/public/uploads + restart: always + labels: + - "traefik.enable=true" + - "traefik.http.routers.hedgedoc.rule=Host(`doc.tobiasmanske.de`)" + - "traefik.http.routers.hedgedoc.entryPoints=websecure" + - "traefik.http.services.hedgedoc.loadbalancer.server.port=3000" + - "com.centurylinklabs.watchtower.scope=update" + depends_on: + - database + networks: + - backend + - gateway + +volumes: + database: + uploads: + +networks: + gateway: + external: true + backend: + internal: true +... diff --git a/compose/03_miniflux/.env b/compose/03_miniflux/.env new file mode 100644 index 0000000..8aaf7ef --- /dev/null +++ b/compose/03_miniflux/.env @@ -0,0 +1 @@ +COMPOSE_PROJECT_NAME=miniflux diff --git a/compose/03_miniflux/docker-compose.yml b/compose/03_miniflux/docker-compose.yml new file mode 100644 index 0000000..7c710d6 --- /dev/null +++ b/compose/03_miniflux/docker-compose.yml @@ -0,0 +1,49 @@ +version: '3' +services: + miniflux: + image: miniflux/miniflux:latest + restart: unless-stopped + depends_on: + db: + condition: service_healthy + environment: + - DATABASE_URL=postgres://{{ miniflux.db.user }}:{{ miniflux.db.password }}@db/{{ miniflux.db.name }}?sslmode=disable + - RUN_MIGRATIONS=1 + - CREATE_ADMIN=1 + - ADMIN_USERNAME={{ miniflux.admin.user }} + - ADMIN_PASSWORD={{ miniflux.admin.password }} + - BASE_URL=https://rss.tobiasmanske.de + labels: + - "traefik.enable=true" + - "traefik.http.routers.miniflux.rule=Host(`rss.tobiasmanske.de`)" + - "traefik.http.routers.miniflux.entryPoints=websecure" + - "traefik.http.services.miniflux.loadbalancer.server.port=8080" + - "com.centurylinklabs.watchtower.scope=update" + networks: + - backend + - gateway + + db: + image: postgres:13 + restart: unless-stopped + environment: + - POSTGRES_USER={{ miniflux.db.user }} + - POSTGRES_PASSWORD={{ miniflux.db.password }} + volumes: + - database:/var/lib/postgresql/data + healthcheck: + test: ["CMD", "pg_isready", "-U", "miniflux"] + interval: 10s + start_period: 30s + networks: + - backend + +volumes: + database: + +networks: + backend: + internal: true + gateway: + external: true + name: gateway diff --git a/compose/03_nextcloud/.env b/compose/03_nextcloud/.env new file mode 100644 index 0000000..b4403fc --- /dev/null +++ b/compose/03_nextcloud/.env @@ -0,0 +1 @@ +COMPOSE_PROJECT_NAME=nextcloud diff --git a/compose/03_nextcloud/docker-compose.yml b/compose/03_nextcloud/docker-compose.yml new file mode 100644 index 0000000..5983810 --- /dev/null +++ b/compose/03_nextcloud/docker-compose.yml @@ -0,0 +1,61 @@ +version: '2' + +services: + db: + image: mariadb:latest + restart: always + command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --innodb-file-per-table=1 --skip-innodb-read-only-compressed + volumes: + - database:/var/lib/mysql + environment: + - MYSQL_ROOT_PASSWORD={{ nextcloud.db.rootpassword }} + - MYSQL_PASSWORD={{ nextcloud.db.password }} + - MYSQL_DATABASE={{ nextcloud.db.name }} + - MYSQL_USER={{ nextcloud.db.user }} + labels: + - "com.centurylinklabs.watchtower.scope=update" + networks: + - backend + + app: + image: registry.tobiasmanske.de/nextcloud:main + restart: always + links: + - db + volumes: + - nc_config:/var/www/html/config + - nc_custom_apps:/var/www/html/custom_apps + - nc_data:/var/www/data + environment: + - MYSQL_PASSWORD={{ nextcloud.db.password }} + - MYSQL_DATABASE={{ nextcloud.db.name }} + - MYSQL_USER={{ nextcloud.db.user }} + - MYSQL_HOST=db + networks: + - backend + - gateway + - default + labels: + - "traefik.enable=true" + - "traefik.http.routers.nextcloud.rule=Host(`wolke.chaoswg.org`)" + - "traefik.http.routers.nextcloud.entryPoints=websecure" + - "traefik.http.services.nextcloud.loadbalancer.server.port=80" + - "traefik.http.middlewares.nextcloud.headers.customrequestheaders.Front-End-Https=on" + - "traefik.http.middlewares.nextcloud.headers.customresponseheaders.Strict-Transport-Security=max-age=15768000; includeSubDomains;" + - "traefik.http.middlewares.nextcloud-dav.replacepathregex.regex=^/.well-known/ca(l|rd)dav" + - "traefik.http.middlewares.nextcloud-dav.replacepathregex.replacement=/remote.php/dav/" + - "traefik.http.routers.nextcloud.middlewares=nextcloud,nextcloud-dav" + - "com.centurylinklabs.watchtower.scope=update" + +volumes: + nc_config: + nc_custom_apps: + nc_data: + database: + +networks: + gateway: + external: true + name: gateway + backend: + internal: true diff --git a/compose/03_search/.env b/compose/03_search/.env new file mode 100644 index 0000000..5ff4c85 --- /dev/null +++ b/compose/03_search/.env @@ -0,0 +1 @@ +COMPOSE_PROJECT_NAME=searxng diff --git a/compose/03_search/docker-compose.yml b/compose/03_search/docker-compose.yml new file mode 100644 index 0000000..3a60e24 --- /dev/null +++ b/compose/03_search/docker-compose.yml @@ -0,0 +1,45 @@ +--- +version: '3.9' + +services: + searxng: + image: searxng/searxng:latest # >.< + container_name: searxng + restart: always + networks: + - gateway + - default + - backend + volumes: + - ./settings.yml:/etc/searxng/settings.yml:ro,z + - ./uwsgi.ini:/etc/searxng/uwsgi.ini:ro,z + labels: + - "traefik.enable=true" + - "traefik.http.routers.searxng.rule=Host(`search.tobiasmanske.de`)" + - "traefik.http.routers.searxng.entryPoints=websecure" + - "traefik.http.services.searxng.loadbalancer.server.port=8080" + - "com.centurylinklabs.watchtower.scope=update" + + redis: + container_name: redis + image: "redis:alpine" + command: redis-server --save "" --appendonly "no" + networks: + - backend + tmpfs: + - /var/lib/redis + cap_drop: + - ALL + cap_add: + - SETGID + - SETUID + - DAC_OVERRIDE + +networks: + gateway: + external: true + backend: + internal: true + +volumes: + data: diff --git a/compose/03_search/settings.yml b/compose/03_search/settings.yml new file mode 100644 index 0000000..84f2195 --- /dev/null +++ b/compose/03_search/settings.yml @@ -0,0 +1,2823 @@ +--- +general: + debug: false # Debug mode, only for development + instance_name: "Search" # displayed name + contact_url: false # mailto:contact@example.com + enable_metrics: true # record stats + +brand: + new_issue_url: https://github.com/searxng/searxng/issues/new + docs_url: https://docs.searxng.org/ + public_instances: https://searx.space + wiki_url: https://github.com/searxng/searxng/wiki + issue_url: https://github.com/searxng/searxng/issues + +search: + # Filter results. 0: None, 1: Moderate, 2: Strict + safe_search: 0 + # Existing autocomplete backends: "dbpedia", "duckduckgo", "google", + # "seznam", "startpage", "swisscows", "qwant", "wikipedia" - leave blank to turn it off + # by default. + autocomplete: "" + # minimun characters to type before autocompleter starts + autocomplete_min: 4 + # Default search language - leave blank to detect from browser information or + # use codes from 'languages.py' + default_lang: "en" + # Available languages + languages: + - all + - en + - de + # ban time in seconds after engine errors + ban_time_on_fail: 5 + # max ban time in seconds after engine errors + max_ban_time_on_fail: 120 + # remove format to deny access, use lower case. + # formats: [html, csv, json, rss] + formats: + - html + +server: + # If you change port, bind_address or base_url don't forget to rebuild + # instance's enviroment (make buildenv) + port: 8888 + bind_address: "127.0.0.1" + base_url: http://search.tobiasmanske.de/ # Possible values: false or "https://example.org/location". + limiter: true # rate limit the number of request on the instance, block some bots + + # If your instance owns a /etc/searxng/settings.yml file, then set the following + # values there. + + secret_key: "{{ search.server.secret_key }}" # change this! + # Proxying image results through searx + image_proxy: true + # 1.0 and 1.1 are supported + http_protocol_version: "1.0" + # POST queries are more secure as they don't show up in history but may cause + # problems when using Firefox containers + method: "POST" + default_http_headers: + X-Content-Type-Options: nosniff + X-XSS-Protection: 1; mode=block + X-Download-Options: noopen + X-Robots-Tag: noindex, nofollow + Referrer-Policy: no-referrer + +{% raw %} + +redis: + # https://redis-py.readthedocs.io/en/stable/connections.html#redis.client.Redis.from_url + url: redis://redis:6379/0 + +ui: + # Custom static path - leave it blank if you didn't change + static_path: "" + static_use_hash: false + # Custom templates path - leave it blank if you didn't change + templates_path: "" + # query_in_title: When true, the result page's titles contains the query + # it decreases the privacy, since the browser can records the page titles. + query_in_title: true + # ui theme + default_theme: simple + # Default interface locale - leave blank to detect from browser information or + # use codes from the 'locales' config section + default_locale: "" + # Open result links in a new tab by default + # results_on_new_tab: false + theme_args: + # style of simple theme: auto, light, dark + simple_style: auto + +# Lock arbitrary settings on the preferences page. To find the ID of the user +# setting you want to lock, check the ID of the form on the page "preferences". +# +# preferences: +# lock: +# - language +# - autocomplete +# - method +# - query_in_title + +# searx supports result proxification using an external service: +# https://github.com/asciimoo/morty uncomment below section if you have running +# morty proxy the key is base64 encoded (keep the !!binary notation) +# Note: since commit af77ec3, morty accepts a base64 encoded key. +# +# result_proxy: +# url: http://127.0.0.1:3000/ +# key: !!binary "your_morty_proxy_key" +# # [true|false] enable the "proxy" button next to each result +# proxify_results: true + +# communication with search engines +# +outgoing: + # default timeout in seconds, can be override by engine + request_timeout: 3.0 + # the maximum timeout in seconds + # max_request_timeout: 10.0 + # suffix of searx_useragent, could contain informations like an email address + # to the administrator + useragent_suffix: "" + # The maximum number of concurrent connections that may be established. + pool_connections: 100 + # Allow the connection pool to maintain keep-alive connections below this + # point. + pool_maxsize: 20 + # See https://www.python-httpx.org/http2/ + enable_http2: true + # uncomment below section if you want to use a proxyq see: SOCKS proxies + # https://2.python-requests.org/en/latest/user/advanced/#proxies + # are also supported: see + # https://2.python-requests.org/en/latest/user/advanced/#socks + # + # proxies: + # all://: + # - http://proxy1:8080 + # - http://proxy2:8080 + # + # using_tor_proxy: true + # + # Extra seconds to add in order to account for the time taken by the proxy + # + # extra_proxy_timeout: 10.0 + # + # uncomment below section only if you have more than one network interface + # which can be the source of outgoing search requests + # + # source_ips: + # - 1.1.1.1 + # - 1.1.1.2 + # - fe80::/126 + +# External plugin configuration, for more details see +# https://docs.searxng.org/dev/plugins.html +# +# plugins: +# - plugin1 +# - plugin2 +# - ... + +# Comment or un-comment plugin to activate / deactivate by default. +# +enabled_plugins: + # these plugins are enabled if nothing is configured .. + - 'Hash plugin' + - 'Search on category select' + - 'Self Informations' + - 'Tracker URL remover' + - 'Ahmia blacklist' # activation depends on outgoing.using_tor_proxy + # these plugins are disabled if nothing is configured .. + - 'Hostname replace' # see hostname_replace configuration below + - 'Open Access DOI rewrite' + - 'Vim-like hotkeys' + +# Configuration of the "Hostname replace" plugin: +# +hostname_replace: + # '(.*\.)?youtube\.com$': 'invidious.example.com' + # '(.*\.)?youtu\.be$': 'invidious.example.com' + # '(.*\.)?youtube-noocookie\.com$': 'yotter.example.com' + # '(.*\.)?reddit\.com$': 'teddit.example.com' + # '(.*\.)?redd\.it$': 'teddit.example.com' + # '(www\.)?twitter\.com$': 'nitter.example.com' + # # to remove matching host names from result list, set value to false + # Personally removed + '(www\.)?quora\.com$': false + # https://github.com/quenhus/uBlock-Origin-dev-filter + # GitHub copycats + '(www\.)?bleepcoder\.com$': false + '(www\.)?githubja\.com$': false + '(.*\.)?gitmemory\.com$': false + '(www\.)?giters\.com$': false + '(www\.)?githubmemory\.com$': false + '(.*\.)?wenyanet\.com$': false + '(www\.)?issueexplorer\.com$': false + '(www\.)?opensourcelibs\.com$': false + '(www\.)?awesomeopensource\.com$': false + '(www\.)?findbestopensource\.com$': false + '(www\.)?githubhelp\.com$': false + '(www\.)?pythonissues\.com$': false + '(www\.)?golangrepo\.com$': false + '(www\.)?gitmemory\.cn$': false + '(www\.)?githubmate\.com$': false + '(www\.)?reposhub\.com$': false + '(www\.)?gitanswer\.com$': false + '(www\.)?githubplus\.com$': false + '(www\.)?pythonrepo\.com$': false + '(www\.)?bestofcpp\.com$': false + '(www\.)?github\.innominds\.com$': false + '(www\.)?higithub\.com$': false + '(www\.)?openprojectrepo\.com$': false + '(www\.)?golangissues\.com$': false + '(www\.)?gitfreak\.com$': false + '(www\.)?pythonawesome\.com$': false + '(www\.)?gitmotion\.com$': false + '(www\.)?fantashit\.com$': false + '(www\.)?githubhot\.com$': false + '(www\.)?gitcode\.net$': false + '(www\.)?readintrend\.com$': false + '(www\.)?news24lite\.com$': false + '(www\.)?github\.phala\.one$': false + '(www\.)?google-yandex\.info$': false + '(www\.)?coder\.social$': false + '(www\.)?javarepos\.com$': false + '(.*\.)?fastgit\.org$': false + '(www\.)?gitmetadata\.com$': false + '(www\.)?iboxshare\.com$': false + '(www\.)?fuscin\.com$': false + '(www\.)?bestofvue\.com$': false + '(www\.)?swiftobc\.com$': false + '(www\.)?flutterrepos\.com$': false + '(www\.)?androidrepo\.com$': false + '(www\.)?bestofflutter\.com$': false + '(www\.)?jsrepos\.com$': false + '(www\.)?macosrepo\.com$': false + '(www\.)?zzun\.app$': false + '(www\.)?rustrepo\.com$': false + '(www\.)?bestofreactjs\.com$': false + '(www\.)?bestofphp\.com$': false + '(www\.)?bestofjava\.com$': false + '(www\.)?lifesaver\.codes$': false + '(www\.)?softbranchdevelopers\.com$': false + '(www\.)?vuejscode\.com$': false + '(www\.)?issueantenna\.com$': false + '(www\.)?pythonlang\.dev$': false + '(www\.)?githublab\.com$': false + '(www\.)?libhunt\.com$': false + '(www\.)?andywarholpopartillustration\.blogspot\.com$': false + '(www\.)?bytemeta\.vip$': false + '(www\.)?editcode\.net$': false + # NPM copycats + '(www\.)?npmmirror.com$': false + '(www\.)?cnpmjs.org$': false + '(www\.)?npm.io$': false + # StackOverflow copycats + '(www\.)?code-examples\.net$': false + '(www\.)?kotaeta\.com$': false + '(www\.)?answer-id\.com$': false + '(www\.)?code\.i-harness\.com$': false + '(www\.)?living-sun\.com$': false + '(www\.)?qastack\.jp$': false + '(www\.)?qastack\.ru$': false + '(www\.)?qastack\.it$': false + '(www\.)?qastack\.mx$': false + '(www\.)?qastack\.com\.br$': false + '(www\.)?qastack\.info\.tr$': false + '(www\.)?qastack\.in\.th$': false + '(www\.)?qastack\.com\.de$': false + '(www\.)?qastack\.fr$': false + '(www\.)?qastack\.cn$': false + '(www\.)?qastack\.com\.ua$': false + '(www\.)?qastack\.co\.in$': false + '(www\.)?qastack\.kr$': false + '(www\.)?qastack\.vn$': false + '(www\.)?qastack\.net\.bd$': false + '(www\.)?qa-stack\.pl$': false + '(www\.)?qastack\.id$': false + '(www\.)?coder\.work$': false + '(www\.)?it-swarm-ja\.tech$': false + '(www\.)?it-swarm\.jp\.net$': false + '(www\.)?it-mure\.jp\.net$': false + '(www\.)?it-swarm-ja\.com$': false + '(www\.)?it-swarm\.com\.ru$': false + '(www\.)?it-swarm-fr\.com$': false + '(.*\.)?codeflow\.site$': false + '(www\.)?codeguides\.site$': false + '(www\.)?overcoder\.net$': false + '(www\.)?coderoad\.ru$': false + '(www\.)?generacodice\.blog$': false + '(www\.)?generacodice\.it$': false + '(www\.)?generacodice\.com$': false + '(www\.)?javaer101\.com$': false + '(.*\.)?voidcc\.com$': false + '(.*\.)?siwib\.org$': false + '(.*\.)?fluffyfables\.com$': false + '(www\.)?fixes\.pub$': false + '(www\.)?knews\.vip$': false + '(www\.)?isolution\.pro$': false + '(.*\.)?uwenku\.com$': false + '(www\.)?lycaeum\.dev$': false + '(www\.)?brocante\.dev$': false + '(www\.)?classmethod\.dev$': false + '(www\.)?stormcrow\.dev$': false + '(.*\.)?athabasca-foto\.com$': false + '(.*\.)?zsharp\.org$': false + '(.*\.)?projectbackpack\.org$': false + '(.*\.)?waymanamechurch\.org$': false + '(.*\.)?sunflowercreations\.org$': false + '(.*\.)?cfadnc\.org$': false + '(.*\.)?fitforlearning\.org$': false + '(.*\.)?panaindustrial\.com$': false + '(.*\.)?sierrasummit2005\.org$': false + '(.*\.)?theshuggahpies\.com$': false + '(.*\.)?pcbconline\.org$': false + '(www\.)?nuomiphp\.com$': false + '(www\.)?ubuntu\.buildwebhost\.com$': false + '(www\.)?ubuntuaa\.com$': false + '(www\.)?debugcn\.com$': false + '(.*\.)?sch22\.org$': false + '(.*\.)?gupgallery\.com$': false + '(.*\.)?amuddycup\.com$': false + '(.*\.)?ecnf2016\.org$': false + '(.*\.)?softwareuser\.asklobster\.com$': false + '(.*\.)?domainelespailles\.net$': false + '(.*\.)?ec-europe\.org$': false + '(.*\.)?pakostnici\.com$': false + '(.*\.)?try2explore\.com$': false + '(www\.)?laravelquestions\.com$': false + '(www\.)?itectec\.com$': false + '(www\.)?stackovergo\.com$': false + '(.*\.)?faithcov\.org$': false + '(.*\.)?noblenaz\.org$': false + '(www\.)?py4u\.net$': false + '(.*\.)?culinarydegree\.info$': false + '(.*\.)?safehavenpetrescue\.org$': false + '(www\.)?qapicks\.com$': false + '(www\.)?issues-world\.com$': false + '(.*\.)?narkive\.jp$': false + '(.*\.)?ourladylakes\.org$': false + '(www\.)?intellipaat\.com$': false + '(www\.)?article\.docway\.net$': false + '(www\.)?xiu2\.net$': false + '(www\.)?codehero\.jp$': false + '(www\.)?quabr\.com$': false + '(www\.)?webdevqa\.jp\.net$': false + '(www\.)?exceptionshub\.com$': false + '(www\.)?newbedev\.com$': false + '(www\.)?codenong\.com$': false + '(www\.)?cainiaojiaocheng\.com$': false + '(www\.)?routinepanic\.com$': false + '(www\.)?pythonwd\.com$': false + '(www\.)?tutorialmore\.com$': false + '(www\.)?alwaysemmyhope\.com$': false + '(www\.)?pretagteam\.com$': false + '(www\.)?titanwolf\.org$': false + '(www\.)?coderedirect\.com$': false + '(www\.)?ostack\.cn$': false + '(www\.)?easysavecode\.com$': false + '(www\.)?webdevdesigner\.com$': false + '(www\.)?ghcc\.net$': false + '(.*\.)?developreference\.com$': false + '(www\.)?semicolonworld\.com$': false + '(www\.)?tipsfordev\.com$': false + '(www\.)?qi-u\.com$': false + '(www\.)?stackqna\.com$': false + '(www\.)?xsprogram\.com$': false + '(www\.)?stackoom\.com$': false + '(www\.)?christfever\.in$': false + '(www\.)?codersatellite\.com$': false + '(www\.)?cndgn\.com$': false + '(.*\.)?coredump\.biz$': false + '(www\.)?farath\.com$': false + '(www\.)?devbugfix\.com$': false + '(www\.)?tech\.wayne-chu\.com$': false + '(www\.)?stackify\.dev$': false + '(www\.)?webknox\.com$': false + '(www\.)?stackfinder\.jp\.net$': false + '(www\.)?coder-solution-jp\.com$': false + '(www\.)?jpndev\.com$': false + '(www\.)?uebu-kaihatsu\.jp\.net$': false + '(www\.)?sqlite\.in$': false + '(www\.)?stackguides\.com$': false + '(www\.)?younggeeks\.in$': false + '(www\.)?answerlib\.com$': false + '(www\.)?edupro\.id$': false + '(www\.)?python-stack\.de$': false + '(www\.)?stackfinder\.ru$': false + '(www\.)?stackfault\.net$': false + '(www\.)?howtofix\.io$': false + '(www\.)?buzzphp\.com$': false + '(www\.)?desenv-web-rp\.com$': false + '(www\.)?askdev\.vn$': false + '(www\.)?quares\.ru$': false + '(www\.)?examplefiles\.net$': false + '(www\.)?codewdw\.com$': false + '(www\.)?jpcodeqa\.com$': false + '(www\.)?tutorialguruji\.com$': false + '(www\.)?justshowmethecode\.com$': false + '(www\.)?it-roy-ru\.com$': false + '(www\.)?jscodetips\.com$': false + '(www\.)?5axxw\.com$': false + '(www\.)?question-it\.com$': false + '(www\.)?webmonkez\.com$': false + '(www\.)?ibootweb\.com$': false + '(.*\.)?codefaq\.info$': false + '(www\.)?codefaq\.ru$': false + '(.*\.)?mediatagtw\.com$': false + '(www\.)?alltodev\.com$': false + '(www\.)?progi\.pro$': false + '(www\.)?jike\.in$': false + '(www\.)?web-dev-qa\.com$': false + '(.*\.)?elfishgene\.com$': false + '(www\.)?dapper-tutorial\.net$': false + '(www\.)?cmsdk\.com$': false + '(www\.)?ask-ubuntu\.ru$': false + '(www\.)?askubuntu\.ru$': false + '(www\.)?kompsekret\.ru$': false + '(www\.)?ohandroid\.com$': false + '(www\.)?poweruser\.guru$': false + '(www\.)?ruphp\.com$': false + '(www\.)?server-fault\.ru$': false + '(www\.)?sprosi\.pro$': false + '(www\.)?stackru\.com$': false + '(www\.)?switch-case\.ru$': false + '(www\.)?ubuntugeeks\.com$': false + '(www\.)?ubuntuplace\.info$': false + '(www\.)?wikiroot\.ru$': false + '(www\.)?sysadminde\.com$': false + '(www\.)?askdev\.ru$': false + '(www\.)?qarchive\.ru$': false + '(www\.)?qarus\.ru$': false + '(www\.)?recalll\.co$': false + '(www\.)?soinside\.com$': false + '(www\.)?stackanswers\.net$': false + '(www\.)?stackoverflood\.com$': false + '(www\.)?switch-case\.com$': false + '(www\.)?techarks\.ru$': false + '(www\.)?techfeed\.net$': false + '(www\.)?thinbug\.com$': false + '(www\.)?utyatnishna\.ru$': false + '(www\.)?v-resheno\.ru$': false + '(www\.)?web-answers\.ru$': false + '(.*\.)?xszz\.org$': false + '(www\.)?ylhow\.com$': false + '(www\.)?yuanmacha\.com$': false + '(www\.)?qa\.1r1g\.com$': false + '(www\.)?it-swarm\.com\.de$': false + '(www\.)?it-swarm-es\.com$': false + '(www\.)?legkovopros\.ru$': false + '(www\.)?mlink\.in$': false + '(www\.)?mlog\.club$': false + '(www\.)?overcoder\.ru$': false + '(www\.)?prog-help\.ru$': false + '(www\.)?qa-help\.ru$': false + '(www\.)?devfaq\.fr$': false + '(www\.)?extutorial\.com$': false + '(www\.)?fooobar\.com$': false + '(www\.)?husl\.ru$': false + '(www\.)?answacode\.com$': false + '(www\.)?answeright\.com$': false + '(www\.)?codegear\.dev$': false + '(www\.)?bilee\.com$': false + '(www\.)?askvoprosy\.com$': false + '(www\.)?de\.askdev\.info$': false + '(www\.)?codeindex\.ru$': false + '(www\.)?codengineering\.ru$': false + '(www\.)?coderoad\.in$': false + '(www\.)?coderquestion\.ru$': false + '(www\.)?dogovori\.info$': false + '(www\.)?itecnote\.com$': false + '(www\.)?askcodez\.com$': false + '(www\.)?bootpanic\.com$': false + '(www\.)?askentire\.net$': false + '(www\.)?de-vraag\.com$': false + '(www\.)?qacode\.ru$': false + '(www\.)?sobrelinux\.info$': false + '(www\.)?askfrance\.me$': false + '(www\.)?respuestas\.me$': false + '(www\.)?antwortenhier\.me$': false + '(www\.)?proubuntu\.ru$': false + '(www\.)?over\.wiki$': false + '(www\.)?debiantutorials\.org$': false + '(www\.)?grokbase\.com$': false + '(www\.)?wp-qa\.com$': false + '(.*\.)?codegrepper\.com$': false + '(.*\.)?programmierfrage\.com$': false + '(www\.)?microeducate\.tech$': false + '(www\.)?ringingliberty\.com$': false + '(www\.)?askandroidquestions\.com$': false + '(www\.)?tutorialmeta\.com$': false + '(www\.)?helpex\.vn$': false + '(www\.)?techtalk7\.com$': false + '(www\.)?serveanswer\.com$': false + '(www\.)?solveforums\.msomimaktaba\.com$': false + '(www\.)?pythonshowcase\.com$': false + '(www\.)?codeutility\.org$': false + '(www\.)?reactquestions\.com$': false + '(www\.)?dockerquestions\.com$': false + '(www\.)?angularquestions\.com$': false + '(www\.)?pythonfixing\.com$': false + '(www\.)?stackallflow\.com$': false + '(www\.)?nxtstage\.net$': false + '(www\.)?intelligentsystemsmonitoring\.com$': false + '(www\.)?localcoder\.org$': false + '(www\.)?rotadev\.com$': false + '(www\.)?errorsfixing\.com$': false + '(www\.)?catwolf\.org$': false + '(www\.)?configrouter\.com$': false + '(www\.)?akuum\.org$': false + '(www\.)?readforlearn\.com$': false + '(www\.)?codehunter\.cc$': false + '(www\.)?levitrares\.com$': false + '(www\.)?graef\.io$': false + '(www\.)?syntaxfix\.com$': false + '(www\.)?ourpython\.com$': false + '(www\.)?vigges\.net$': false + '(www\.)?exchangetuts\.com$': false + '(www\.)?fullstackuser\.com$': false + '(www\.)?dtuto\.com$': false + '(www\.)?w3coded\.com$': false + '(www\.)?thelivingtrove\.com$': false + '(www\.)?ti-enxame\.com$': false + '(www\.)?desenv-web-rp-bd\.com$': false + '(www\.)?web-dev-qa-db-pt\.com$': false + '(www\.)?tra-loi-cau-hoi-phat-trien-web\.com$': false + '(www\.)?suttonedfoundation\.org$': false + '(www\.)?tousu\.in$': false + '(www\.)?itdaan\.com$': false + '(www\.)?itranslater\.com$': false + '(www\.)?software-testing\.com$': false + '(www\.)?itbaoku\.cn$': false + '(www\.)?nibes\.cn$': false + '(www\.)?devqanda\.com$': false + '(www\.)?sargon24\.com$': false + '(www\.)?javafixing\.com$': false + '(www\.)?catchconsole\.com$': false + '(.*\.)?icopy\.site$': false + '(www\.)?frameboxxindore\.com$': false + '(www\.)?qa\.wujigu\.com$': false + '(www\.)?shenzhenjia\.net$': false + '(www\.)?ogeek\.cn$': false + '(www\.)?devdreamz\.com$': false + '(.*\.)?imtqy\.com$': false + '(www\.)?idqna\.com$': false + '(www\.)?peaku\.co$': false + '(.*\.)?javawenti\.com$': false + '(.*\.)?runexception\.com$': false + '(www\.)?ebestcode\.com$': false + '(www\.)?likecs\.com$': false + '(.*\.)?solveforum\.com$': false + '(www\.)?codetd\.com$': false + # Wikipedia copycats + '(www\.)?encyclopedia\.thefreedictionary\.com$': false + '(www\.)?algebra\.com$': false + '(www\.)?wikizero\.com$': false + '(www\.)?mediawiki\.feverous\.co\.uk$': false + '(www\.)?everything\.explained\.today$': false + '(www\.)?wiwa\.wiki$': false + '(www\.)?findatwiki\.com$': false + '(www\.)?wikide\.wiki$': false + '(www\.)?wikit\.wiki$': false + '(www\.)?secret-bases\.co\.uk/wiki$': false + '(www\.)?scholarship\.edu\.vn/wiki$': false + '(.*\.)?frwiki\.wiki$': false + '(.*\.)?zxc\.wiki$': false + '(www\.)?360wiki\.ru$': false + '(www\.)?sv\.abcdef\.wiki$': false + '(www\.)?buildwiki\.ru$': false + '(.*\.)?datewiki\.ru$': false + '(www\.)?encyclopaedia\.bid$': false + '(www\.)?gaz\.wiki$': false + '(www\.)?th\.hmong\.wiki$': false + '(www\.)?hmong\.ru$': false + '(www\.)?livepcwiki\.ru$': false + '(www\.)?enhancedwiki\.territorioscuola\.it$': false + '(www\.)?wiki-org\.ru$': false + '(www\.)?wiki2\.net$': false + '(www\.)?wiki2\.info$': false + '(www\.)?wiki2\.org$': false + '(www\.)?wiki\.cologne$': false + '(www\.)?wikidea\.ru$': false + '(www\.)?wiki2wiki\.ru$': false + '(www\.)?globalwikionline\.com$': false + '(www\.)?wikipe\.wiki$': false + '(www\.)?wikipedia\.tel$': false + '(www\.)?wikidark\.ru$': false + '(www\.)?wikiredia\.ru$': false + '(www\.)?wikipedia24\.ru$': false + '(www\.)?wikiwand\.com$': false + '(.*\.)?encyclopedia\.kz$': false + # https://github.com/rjaus/ublacklist-pinterest + # Pinterest + '(.*\.)?pinterest\.com$': false + '(www\.)?pinterest\.nz': false + '(www\.)?pinterest\.ph': false + 'investor\.pinterestinc\.com': false + '(www\.)?pinterestcareers\.com': false + '(www\.)?pinterest\.cl': false + '(www\.)?pinterest\.co\.uk': false + '(www\.)?pinterest\.at': false + '(www\.)?pinterest\.ie': false + '(www\.)?pinterest\.es': false + '(www\.)?pinterest\.com\.au': false + '(www\.)?pinterest\.com\.mx': false + '(www\.)?pinterest\.ca': false + '(www\.)?pinterest\.dk': false + '(www\.)?pinterest\.fr': false + '(www\.)?pinterest\.de': false + '(www\.)?pinterest\.ch': false + '(www\.)?pinterest\.it': false + '(www\.)?pinterest\.pt': false + '(www\.)?pinterest\.ru': false + '(www\.)?pinterest\.co\.kr': false + # https://github.com/franga2000/aliexpress-fake-sites + # AliExpress copycats + '(www\.)?fijet\.si': false + '(www\.)?advancedmarkets\.news': false + '(www\.)?si-ja\.si': false + '(www\.)?urejen-grob\.si': false + '(www\.)?electricoriginals\.news': false + '(www\.)?pouknaprostem\.si': false + '(www\.)?mart-bevasarlas\.cyou': false + '(www\.)?slovenska\.si': false + '(www\.)?premija-trgovina\.news': false + '(www\.)?skladisce-trgovina\.cam': false + '(www\.)?fashionmax\.news': false + '(www\.)?deshevoequip\.cam': false + '(www\.)?new-global\.news': false + '(www\.)?kingbrand\.cam': false + '(www\.)?selectsales\.news': false + '(www\.)?filmvilag2elozetesek\.eu': false + '(www\.)?branka\.si': false + '(www\.)?brandsforsalechoice\.news': false + '(www\.)?guide-bests\.news': false + '(www\.)?topespresso\.si': false + '(www\.)?store-depot\.cam': false + '(www\.)?eurocenter-sp\.si': false + '(www\.)?rockeriada\.si': false + '(www\.)?hitro-original\.news': false + '(www\.)?fitcat\.si': false + '(www\.)?eltec-petrol\.si': false + '(www\.)?fizioterapija-arka\.si': false + '(www\.)?escaperoom-carniola\.si': false + '(www\.)?butik-nagykereskedelem\.today': false + '(www\.)?productprice\.news': false + '(www\.)?erikasmrekar\.si': false + '(www\.)?trgovinanadom\.si': false + '(www\.)?originalpremija\.news': false + '(www\.)?bazar-branch\.cam': false + '(www\.)?kidix\.si': false + '(www\.)?toga\.si': false + '(www\.)?plesnicar-ps\.si': false + '(www\.)?izdelkovmoderno\.today': false + '(www\.)?cisteniebazenov\.eu': false + '(www\.)?coachingzdruzenje\.si': false + '(www\.)?zobozdrav-vestn\.si': false + '(www\.)?sharedluxuries\.cam': false + '(www\.)?restavracija-promenada\.si': false + '(www\.)?sunumi\.si': false + '(www\.)?nakupovanje-podruznica\.news': false + '(www\.)?bargainuniversal\.today': false + '(www\.)?raktarertekesites\.news': false + '(www\.)?trgovinavticnico\.news': false + '(www\.)?konoplano\.com': false + '(www\.)?productoutlet\.news': false + '(www\.)?inhomediscount\.news': false + '(www\.)?luxexpert\.news': false + '(www\.)?nagykereskedelem\.news': false + '(www\.)?trznica-moderno\.cam': false + '(www\.)?witshop\.ch': false + '(www\.)?bigshop\.si': false + '(www\.)?items-store\.cyou': false + '(www\.)?waldorfski-vrtec-celje\.si': false + '(www\.)?micrat-leasing\.si': false + '(www\.)?money-premium\.news': false + '(www\.)?supermarket-market\.cam': false + '(www\.)?functionalmovements\.si': false + '(www\.)?premiumpurchase\.news': false + '(www\.)?cheap-department\.news': false + '(www\.)?units-expo\.news': false + '(www\.)?kerakamin\.si': false + '(www\.)?order-world\.news': false + '(www\.)?enostavnokupcijo\.news': false + '(www\.)?trgovina-sveze\.cam': false + '(www\.)?anjajelovsek\.net': false + '(www\.)?hotel-toplice\.si': false + '(www\.)?eredetikonnyen\.news': false + '(www\.)?kedvezmeny-erme\.cam': false + '(www\.)?nakup-narocilo\.cam': false + '(www\.)?ecohouse\.si': false + '(www\.)?originaldepartment\.news': false + '(www\.)?expresspicker\.news': false + '(www\.)?izdelka-trgovina\.news': false + '(www\.)?premija-trgovina\.cam': false + '(www\.)?astrozdravljenje\.si': false + '(www\.)?nakupovanje-poceni\.cam': false + '(www\.)?market-cost\.cam': false + '(www\.)?pasarstvo-torkar\.si': false + '(www\.)?offerdeal\.news': false + '(www\.)?mob\.specials-wishes\.news': false + '(www\.)?inbound-marketing\.si': false + '(www\.)?zaloga-tovarna\.news': false + '(www\.)?fresh-collection\.cam': false + '(www\.)?davorin-caf\.si': false + '(www\.)?oknar\.si': false + '(www\.)?kupcijoprodajo\.news': false + '(www\.)?limited-view\.news': false + '(www\.)?offer-store\.co': false + '(www\.)?onlinepremium\.news': false + '(www\.)?offer-discount\.cam': false + '(www\.)?kulonuzlet\.news': false + '(www\.)?mihacisti\.si': false + '(www\.)?rimringz\.si': false + '(www\.)?vino-graben\.si': false + '(www\.)?ponudbe-oddelek\.cam': false + '(www\.)?ging\.si': false + '(www\.)?pdesign\.si': false + '(www\.)?plinsevnica\.si': false + '(www\.)?najnovejsioriginal\.news': false + '(www\.)?parkerpen\.si': false + '(www\.)?nicequality\.news': false + '(www\.)?majskeigre\.si': false + '(www\.)?unimarkets\.news': false + '(www\.)?ir-iu\.com': false + '(www\.)?onlyboutique\.news': false + '(www\.)?shoppingoriginal\.news': false + '(www\.)?podnart\.si': false + '(www\.)?dostavaoddelek\.news': false + '(www\.)?shop-ertekesites\.news': false + '(www\.)?showroom-fresh\.cam': false + '(www\.)?storeequipment\.news': false + '(www\.)?marka-uzlet\.news': false + '(www\.)?zbiranje-original\.cyou': false + '(www\.)?proracun-zacetek\.co': false + '(www\.)?shop-online\.cam': false + '(www\.)?egyetemesmarka\.news': false + '(www\.)?k\.optionsgrand\.news': false + '(www\.)?virs-primorske\.si': false + '(www\.)?mybags\.si': false + '(www\.)?zbiranjetrgovina\.news': false + '(www\.)?soroptimist-celje\.si': false + '(www\.)?ponudbe-izdelkov\.cam': false + '(www\.)?trgovinayorki\.si': false + '(www\.)?kingsellers\.news': false + '(www\.)?orle\.si': false + '(www\.)?predmetov-trgovina\.cam': false + '(www\.)?storesale\.news': false + '(www\.)?elekom\.si': false + '(www\.)?vasarlasvilag\.news': false + '(www\.)?supply-stock\.cam': false + '(www\.)?izdelkovuniverzalni\.news': false + '(www\.)?butikdirects\.news': false + '(www\.)?slowoodlife\.si': false + '(www\.)?fresh-store\.cyou': false + '(www\.)?products-value\.cam': false + '(www\.)?princesport\.si': false + '(www\.)?tovarna-poceni\.news': false + '(www\.)?trguzacetek\.news': false + '(www\.)?lattelife\.news': false + '(www\.)?ooz-radlje\.si': false + '(www\.)?center-isi\.si': false + '(www\.)?sasma\.si': false + '(www\.)?otok-hvar\.si': false + '(www\.)?trgovina-stroskov\.news': false + '(www\.)?britannia-tours\.si': false + '(www\.)?ramonportilla\.es': false + '(www\.)?brunarice-tomiles\.si': false + '(www\.)?online-delivery\.cam': false + '(www\.)?mart-sales\.cam': false + '(www\.)?cricek\.si': false + '(www\.)?bazar-modern\.cam': false + '(www\.)?friss-keszlet\.cam': false + '(www\.)?penzbevasarlas\.news': false + '(www\.)?join-gear\.news': false + '(www\.)?lesenimetuljcki\.si': false + '(www\.)?podskalco\.si': false + '(www\.)?dekani\.si': false + '(www\.)?start-bestseller\.me': false + '(www\.)?idea-geared\.news': false + '(www\.)?lookbrands\.news': false + '(www\.)?queenmarkets\.cam': false + '(www\.)?rendeles-kiskereskedelem\.news': false + '(www\.)?cenapodruznica\.news': false + '(www\.)?goodsluxuryes\.news': false + '(www\.)?orkester-loce\.si': false + '(www\.)?superstil\.si': false + '(www\.)?cena-najnovejsi\.cam': false + '(www\.)?izdelka-poceni\.news': false + '(www\.)?violetatomic\.si': false + '(www\.)?rebahan\.news': false + '(www\.)?4play\.si': false + '(www\.)?original-showroom\.cam': false + '(www\.)?chlorys\.si': false + '(www\.)?fashioninsider\.news': false + '(www\.)?podruznica-predmetov\.news': false + '(www\.)?koltsegvetes-uzlet\.co': false + '(www\.)?fundacijaum\.si': false + '(www\.)?ponudbe-original\.today': false + '(www\.)?univerzalni-premija\.cam': false + '(www\.)?po-sentjernej\.si': false + '(www\.)?recipella\.si': false + '(www\.)?big-collection\.news': false + '(www\.)?tetejere-ertek\.today': false + '(www\.)?shop-value\.cam': false + '(www\.)?nakupstroskov\.news': false + '(www\.)?moderno-ogrevanje\.si': false + '(www\.)?tiskarna-kaucic\.si': false + '(www\.)?luck-grand\.news': false + '(www\.)?free-dealer\.news': false + '(www\.)?naplazi\.si': false + '(www\.)?printdekor\.si': false + '(www\.)?shopsgoods\.news': false + '(www\.)?turizem-sevnica\.si': false + '(www\.)?dajrentaj\.si': false + '(www\.)?picerija-lesjak\.si': false + '(www\.)?tetejereosztaly\.news': false + '(www\.)?guidedelivery\.news': false + '(www\.)?ponudbeprodajo\.news': false + '(www\.)?specialmarket\.news': false + '(www\.)?nova24\.si': false + '(www\.)?kpc-svetijurij\.si': false + '(www\.)?petstrani\.si': false + '(www\.)?zbiranjeizdelka\.news': false + '(www\.)?salesupply\.news': false + '(www\.)?cena-hitro\.cam': false + '(www\.)?nasadomovina\.si': false + '(www\.)?svetu-sveze\.cam': false + '(www\.)?supermarket-trade\.cam': false + '(www\.)?moderno-nakup\.cam': false + '(www\.)?mart-bestseller\.today': false + '(www\.)?trgovina-zbiranje\.news': false + '(www\.)?dostavaskladisce\.news': false + '(www\.)?butiknaklik\.si': false + '(www\.)?shopspick\.news': false + '(www\.)?popustskladisce\.news': false + '(www\.)?mojapreventiva\.si': false + '(www\.)?trajnost\.si': false + '(www\.)?ultradelivery\.news': false + '(www\.)?cestra\.si': false + '(www\.)?dspm\.si': false + '(www\.)?meridian-sun\.si': false + '(www\.)?wolk\.si': false + '(www\.)?discountstore\.news': false + '(www\.)?vasarlaskonnyen\.news': false + '(www\.)?najnovejsitrgovina\.news': false + '(www\.)?gickmall\.news': false + '(www\.)?majazamlade\.si': false + '(www\.)?zaloga-zbiranje\.news': false + '(www\.)?dpsjl-p\.si': false + '(www\.)?ustavimokorono\.si': false + '(www\.)?dogovoritivrednost\.news': false + '(www\.)?thunderclass\.eu': false + '(www\.)?vina-babic\.si': false + '(www\.)?k2-taekwondo\.si': false + '(www\.)?orgon\.si': false + '(www\.)?rmv\.si': false + '(www\.)?zbiranje-vrednost\.cam': false + '(www\.)?ansambel-potep\.si': false + '(www\.)?klub-trmastih\.si': false + '(www\.)?zoldfal\.eu': false + '(www\.)?ponudbo-skladisce\.cyou': false + '(www\.)?ansat-tv\.si': false + '(www\.)?dinamik-celje\.si': false + '(www\.)?hawkeyealaska\.news': false + '(www\.)?purchasecollection\.news': false + '(www\.)?sales-offer\.cam': false + '(www\.)?newdiscountscollection\.news': false + '(www\.)?turistika-studio\.si': false + '(www\.)?asistemi\.si': false + '(www\.)?student-tomi\.si': false + '(www\.)?interadesign\.si': false + '(www\.)?marguc-sp\.si': false + '(www\.)?regenbuy\.news': false + '(www\.)?jadorephotography\.si': false + '(www\.)?tornado\.si': false + '(www\.)?ponudbo-novo\.cyou': false + '(www\.)?premierquality\.support': false + '(www\.)?saleforholiday\.vin': false + '(www\.)?profi-prices\.news': false + '(www\.)?goodyear20poti\.si': false + '(www\.)?onlinefactory\.news': false + '(www\.)?agencijamk2\.si': false + '(www\.)?shippingcollection\.news': false + '(www\.)?fairhotels\.si': false + '(www\.)?boutique-fast\.cam': false + '(www\.)?beligomon\.si': false + '(www\.)?gledalisce-zarja\.si': false + '(www\.)?izdelka-original\.cam': false + '(www\.)?ml-servis-velenje\.si': false + '(www\.)?dodatno-nakupovanje\.cam': false + '(www\.)?nlf\.si': false + '(www\.)?wearonoffers\.news': false + '(www\.)?equipmentselect\.news': false + '(www\.)?zbiranje-vticnico\.cam': false + '(www\.)?frenterenovador\.si': false + '(www\.)?psh-hrvaska\.si': false + '(www\.)?absoluteshopping\.news': false + '(www\.)?apok\.si': false + '(www\.)?safeprice\.news': false + '(www\.)?tanjasket\.si': false + '(www\.)?oset-sp\.si': false + '(www\.)?popusttrgovina\.news': false + '(www\.)?universal-start\.cam': false + '(www\.)?trgu-trgovina\.cam': false + '(www\.)?trznica-stroskov\.news': false + '(www\.)?idealni365\.si': false + '(www\.)?hitro-trgovina\.cam': false + '(www\.)?paktzamlade\.si': false + '(www\.)?plus-mart\.news': false + '(www\.)?dealbargain\.news': false + '(www\.)?pasjilajf\.si': false + '(www\.)?linksunique\.news': false + '(www\.)?factory-value\.cam': false + '(www\.)?uzlet-kulon\.cam': false + '(www\.)?zaceteknakupovanje\.news': false + '(www\.)?yearexpress\.news': false + '(www\.)?selection-tips\.news': false + '(www\.)?sdgreens31\.si': false + '(www\.)?denarja-trgovina\.cam': false + '(www\.)?trgovina-marija\.si': false + '(www\.)?pgd-zalog\.si': false + '(www\.)?unitsstore\.news': false + '(www\.)?outlet-mixed\.news': false + '(www\.)?zbiranje-univerzalni\.me': false + '(www\.)?onlinebazar\.news': false + '(www\.)?modern-shop\.cyou': false + '(www\.)?tamau\.si': false + '(www\.)?bemutatoterem-osztaly\.info': false + '(www\.)?expossales\.news': false + '(www\.)?vticnico-svetu\.cam': false + '(www\.)?sbk\.si': false + '(www\.)?advancegoods\.news': false + '(www\.)?kandare\.si': false + '(www\.)?depot-products\.cyou': false + '(www\.)?butik-zone\.news': false + '(www\.)?cvzu-dolenjska\.si': false + '(www\.)?kalista-cebelarstvo\.si': false + '(www\.)?zaloga-poceni\.today': false + '(www\.)?shop-deal\.news': false + '(www\.)?advicesperfects\.news': false + '(www\.)?edition-unique\.news': false + '(www\.)?klubsasa\.si': false + '(www\.)?discountexlusives\.news': false + '(www\.)?vticnicodogovoriti\.news': false + '(www\.)?vrednosttrgovina\.news': false + '(www\.)?dostava-zacetek\.cam': false + '(www\.)?tetejere-online\.cam': false + '(www\.)?pocenipodruznica\.news': false + '(www\.)?pgdzavrstnik\.si': false + '(www\.)?fizioterapija-skitek\.si': false + '(www\.)?ertek-bolt\.cam': false + '(www\.)?izdelkov-popust\.cam': false + '(www\.)?rendelesvilag\.today': false + '(www\.)?bargain-products\.news': false + '(www\.)?mestnalepotilnica\.si': false + '(www\.)?supermarketsvetu\.news': false + '(www\.)?idea-queen\.news': false + '(www\.)?supermarketvrh\.news': false + '(www\.)?mtbvv\.si': false + '(www\.)?elemeket-gyar\.today': false + '(www\.)?joga-kranj\.si': false + '(www\.)?ride-sport\.si': false + '(www\.)?dogovoriti-podruznica\.cyou': false + '(www\.)?yearly-wishes\.news': false + '(www\.)?ehc\.si': false + '(www\.)?za-sled\.si': false + '(www\.)?pgdpobegicezarji\.si': false + '(www\.)?ppdo\.si': false + '(www\.)?fitnavade\.si': false + '(www\.)?tdsticna\.si': false + '(www\.)?ajanlat-butik\.cam': false + '(www\.)?vitaminz\.si': false + '(www\.)?world-product\.cam': false + '(www\.)?safran\.si': false + '(www\.)?klh-trade\.si': false + '(www\.)?tinkarakovac\.si': false + '(www\.)?marketplace-new\.today': false + '(www\.)?krovstvo-vrbancic\.si': false + '(www\.)?valburglagotto\.com': false + '(www\.)?pocitnice-hrvaska-jadran\.si': false + '(www\.)?matejadereani\.si': false + '(www\.)?trgovina-ponudbo\.cam': false + '(www\.)?c\.offerprices\.news': false + '(www\.)?trgovina-edinstven\.cam': false + '(www\.)?osztaly-bazar\.news': false + '(www\.)?enostavno-supermarket\.cam': false + '(www\.)?kitana\.si': false + '(www\.)?afina\.si': false + '(www\.)?value-depot\.cyou': false + '(www\.)?lambda-group\.si': false + '(www\.)?zagras\.si': false + '(www\.)?rimage\.si': false + '(www\.)?sostanj-tourism\.si': false + '(www\.)?dramska-neptun\.si': false + '(www\.)?romanopralipe\.si': false + '(www\.)?erocket\.si': false + '(www\.)?kooncept\.si': false + '(www\.)?purchase-shop\.news': false + '(www\.)?dealunique\.news': false + '(www\.)?gyar-friss\.news': false + '(www\.)?izdelka-trgovina\.cam': false + '(www\.)?egyetemesertekesites\.news': false + '(www\.)?historial-skofjaloka\.si': false + '(www\.)?novo-nakupovanje\.cam': false + '(www\.)?start-unique\.cyou': false + '(www\.)?lpgmasaze\.si': false + '(www\.)?mamijedoma\.si': false + '(www\.)?piac-koltsegvetes\.today': false + '(www\.)?mbglass\.si': false + '(www\.)?doubledeffect\.news': false + '(www\.)?recnik\.si': false + '(www\.)?abs-stores\.news': false + '(www\.)?filacelje\.eu': false + '(www\.)?shopstop\.news': false + '(www\.)?zbiranjemoderno\.news': false + '(www\.)?glammy\.si': false + '(www\.)?cenakupcijo\.news': false + '(www\.)?sales-extra\.cam': false + '(www\.)?pritrehlipah\.si': false + '(www\.)?novodenarja\.today': false + '(www\.)?peleti1a\.si': false + '(www\.)?aikido-maribor\.si': false + '(www\.)?prodajopopust\.news': false + '(www\.)?neikid\.si': false + '(www\.)?keszlet-raktar\.today': false + '(www\.)?elkonto\.si': false + '(www\.)?rialto-collection\.cam': false + '(www\.)?versor\.si': false + '(www\.)?kereskedelmi-marka\.cam': false + '(www\.)?factory-sales\.cam': false + '(www\.)?gostisce-majolka\.si': false + '(www\.)?bestseller-price\.news': false + '(www\.)?trgovina-cena\.cam': false + '(www\.)?monume\.si': false + '(www\.)?pk-termeptuj\.si': false + '(www\.)?photocranneries\.dk': false + '(www\.)?onkel-madglad\.dk': false + '(www\.)?dinlokalehavemand\.dk': false + '(www\.)?gourmetconnection\.dk': false + '(www\.)?levade\.dk': false + '(www\.)?okocater\.dk': false + '(www\.)?nielshoejmark\.dk': false + '(www\.)?simplylove\.dk': false + '(www\.)?hlauridsen\.dk': false + '(www\.)?grundithem\.dk': false + '(www\.)?samas\.dk': false + '(www\.)?dostava-ledu\.si': false + '(www\.)?bj-volley\.dk': false + '(www\.)?ribus\.dk': false + '(www\.)?e-ciklus\.si': false + '(www\.)?sangteknik\.dk': false + '(www\.)?marquisspas\.dk': false + '(www\.)?vecertours\.si': false + '(www\.)?dyreredning\.dk': false + '(www\.)?basilicohaslev\.dk': false + '(www\.)?thanhnien\.dk': false + '(www\.)?qar\.dk': false + '(www\.)?verde\.dk': false + '(www\.)?lau-byg\.dk': false + '(www\.)?drengesomelskerdrenge\.dk': false + '(www\.)?tki-trgovina\.si': false + '(www\.)?zhou-vejle\.dk': false + '(www\.)?findlegepladsen\.dk': false + '(www\.)?hass-gin\.dk': false + '(www\.)?pleioneworld\.dk': false + '(www\.)?groendalspark\.dk': false + '(www\.)?bidsted\.dk': false + '(www\.)?larsandersenshop\.dk': false + '(www\.)?modern-items\.cam': false + '(www\.)?gonefishing\.dk': false + '(www\.)?orobio\.si': false + '(www\.)?appmatic\.dk': false + '(www\.)?items\.si': false + '(www\.)?kdmelamin\.si': false + '(www\.)?onmyoji\.si': false + '(www\.)?domkoptuj\.si': false + '(www\.)?avtokocjancic\.si': false + '(www\.)?mo-ve\.si': false + '(www\.)?skiro-servis\.siappmatic\.dk': false + '(www\.)?pizzerija-aleksandro\.si': false + '(www\.)?gmproplus\.si': false + '(www\.)?svicbowling\.si': false + '(www\.)?slovenijazlokalci\.si': false + '(www\.)?katrx\.si': false + '(www\.)?hitro-dogovoriti\.cam': false + '(www\.)?pgdkneza\.si': false + '(www\.)?laski\.si': false + '(www\.)?sunknzemlja\.si': false + '(www\.)?unirec\.si': false + '(www\.)?kscelje\.si': false + '(www\.)?akademija-dobre-voznje\.si': false + '(www\.)?bmx-racing\.si': false + '(www\.)?r-t-o\.si': false + '(www\.)?zveza-sup\.si': false + '(www\.)?prefer-malls\.vin': false + '(www\.)?maxiforall\.news': false + '(www\.)?world-coin\.cyou': false + '(www\.)?shido-sportshop\.si': false + '(www\.)?trgovina-oven\.si': false + '(www\.)?it-si\.si': false + '(www\.)?rotaract-ng\.si': false + '(www\.)?ponudbo-narocilo\.news': false + '(www\.)?gostilnica-katrca\.si': false + '(www\.)?kakoprodati\.si': false + '(www\.)?trok\.si': false + '(www\.)?skladisce-globalno\.news': false + '(www\.)?shardacropchem\.si': false + '(www\.)?sveze-vrh\.cyou': false + '(www\.)?horseresortstariha\.si': false + '(www\.)?slose\.si': false + '(www\.)?skiro-servis\.si': false + '(www\.)?kolikostanespletnastran\.si': false + '(www\.)?psihologija-sara\.si': false + '(www\.)?li-ce\.si': false + '(www\.)?sportnainformatika\.si': false + '(www\.)?jankocelje\.si': false + '(www\.)?frizerstvo-danica\.si': false + '(www\.)?dogovoriti-cena\.cam': false + '(www\.)?ribica-doo\.si': false + '(www\.)?gasilecpohiti\.si': false + '(www\.)?stroskov-trgovina\.cam': false + '(www\.)?ortopedska-amb\.si': false + '(www\.)?klub-kls\.si': false + '(www\.)?kampirajmoskupaj\.si': false + '(www\.)?kemicnacistilnica-mare\.si': false + '(www\.)?greatexcellent\.news': false + '(www\.)?slovenijahep\.si': false + '(www\.)?drustvo-zvezda\.si': false + '(www\.)?hranazaduso\.si': false + '(www\.)?ceh-stanko\.si': false + '(www\.)?crosulsnm\.ro': false + '(www\.)?era-digitala\.ro': false + '(www\.)?peachy-promising\.nl': false + '(www\.)?world-order\.cam': false + '(www\.)?accesoriisimargele\.ro': false + '(www\.)?targulescu\.ro': false + '(www\.)?montrelle\.ro': false + '(www\.)?topbrainstorm\.nl': false + '(www\.)?albertshop\.ro': false + '(www\.)?medicalshoes\.ro': false + '(www\.)?meangirls\.ro': false + '(www\.)?departament-bani\.cam': false + '(www\.)?romania-smart\.ro': false + '(www\.)?instalator-profesionist\.ro': false + '(www\.)?ozonrelive\.ro': false + '(www\.)?start-produs\.cam': false + '(www\.)?reginanoptii\.ro': false + '(www\.)?usipentrutine\.ro': false + '(www\.)?impachetatcustil\.ro': false + '(www\.)?amanetbkg\.ro': false + '(www\.)?casamadale\.ro': false + '(www\.)?primariamalucuflori\.ro': false + '(www\.)?banulpublic\.ro': false + '(www\.)?izolatii-industriale\.ro': false + '(www\.)?specialmariage\.ro': false + '(www\.)?cursuri-word\.ro': false + '(www\.)?profesionaldesign\.ro': false + '(www\.)?evrikapublishing\.ro': false + '(www\.)?magnifique-events\.ro': false + '(www\.)?3d-tineretului\.ro': false + '(www\.)?facemspitale\.ro': false + '(www\.)?foxyclothcreations\.com': false + '(www\.)?altstadtinvest\.ro': false + '(www\.)?masa-casa\.ro': false + '(www\.)?zenitybeauty\.ro': false + '(www\.)?transport-g-r-a-t-u-i-t\.ro': false + '(www\.)?magazin-bazar\.cam': false + '(www\.)?antalarpad\.ro': false + '(www\.)?aacsportmuntenia\.ro': false + '(www\.)?heroic\.ro': false + '(www\.)?presedepeleti\.ro': false + '(www\.)?edunews\.ro': false + '(www\.)?interventie-timpurie\.ro': false + '(www\.)?clustermechatrec\.ro': false + '(www\.)?service-auto-cde\.ro': false + '(www\.)?craiovabuzz\.ro': false + '(www\.)?relaxopedia\.ro': false + '(www\.)?incaltaminteamea\.ro': false + '(www\.)?biaproject\.ro': false + '(www\.)?ccfm-excellentia\.ro': false + '(www\.)?high-life-tavern\.ro': false + '(www\.)?wfmc\.ro': false + '(www\.)?partid-rezist\.ro': false + '(www\.)?detailingexpert\.ro': false + '(www\.)?crucearosiebistrita\.ro': false + '(www\.)?flexshop\.ro': false + '(www\.)?body-slim\.ro': false + '(www\.)?pcparty\.ro': false + '(www\.)?junuscoban\.ro': false + '(www\.)?cssad\.ro': false + '(www\.)?rezilienta\.ro': false + '(www\.)?athosparc\.ro': false + '(www\.)?servicetor\.ro': false + '(www\.)?burnfree\.ro': false + '(www\.)?bucuriabravo\.ro': false + '(www\.)?drrugina\.ro': false + '(www\.)?topograforadea\.ro': false + '(www\.)?ploiestibuzz\.ro': false + '(www\.)?meloritm\.ro': false + '(www\.)?javu\.ro': false + '(www\.)?cadouldiferit\.ro': false + '(www\.)?restaurantgiuliano\.ro': false + '(www\.)?bellaspa\.ro': false + '(www\.)?viessmannshop\.ro': false + '(www\.)?mergemlatine\.ro': false + '(www\.)?ingrijiripaliativebacau\.ro': false + '(www\.)?nusabugeac\.ro': false + '(www\.)?puturiapa-hidrogeofor\.ro': false + '(www\.)?omegazodiac\.ro': false + '(www\.)?ecopaper\.ro': false + '(www\.)?billshop\.ro': false + '(www\.)?balustradetop\.ro': false + '(www\.)?modern-boutique\.cam': false + '(www\.)?beatmort\.ro': false + '(www\.)?itp-sem\.ro': false + '(www\.)?thermopro\.ro': false + '(www\.)?huse-tesaturi\.ro': false + '(www\.)?preturi-apometre\.ro': false + '(www\.)?outlet-retail\.cyou': false + '(www\.)?creative-store\.ro': false + '(www\.)?partyfashion\.ro': false + '(www\.)?gpl-bucuresti\.ro': false + '(www\.)?forseda\.ro': false + '(www\.)?cernavoda-turistica\.ro': false + '(www\.)?ordinobiecte\.today': false + '(www\.)?profu112\.ro': false + '(www\.)?portaldemarketingase\.ro': false + '(www\.)?trade-money\.cam': false + '(www\.)?hlc-rezidential\.ro': false + '(www\.)?cautainfirmiera\.ro': false + '(www\.)?ltbmagazinsoul\.ro': false + '(www\.)?leagoo-romania\.ro': false + '(www\.)?infotravelbulgaria\.ro': false + '(www\.)?depora\.ro': false + '(www\.)?mesajefrumoase\.ro': false + '(www\.)?laur-food\.ro': false + '(www\.)?meniulzileibrasov\.ro': false + '(www\.)?infofizica\.ro': false + '(www\.)?vent-clima\.ro': false + '(www\.)?ww11\.prolinguaexpert\.ro': false + '(www\.)?ambasador-residence\.ro': false + '(www\.)?petfactor\.ro': false + '(www\.)?cursuri-outlook\.ro': false + '(www\.)?vreau-magazinonline\.ro': false + '(www\.)?telemarcu\.ro': false + '(www\.)?allgsmservice\.ro': false + '(www\.)?microdev\.ro': false + '(www\.)?netnews\.ro': false + '(www\.)?bestcleaningcenter\.ro': false + '(www\.)?baneasa-joyride\.ro': false + '(www\.)?ehremann-osteopatie\.ro': false + '(www\.)?justitie493\.ro': false + '(www\.)?vila-park\.ro': false + '(www\.)?rodicaionescu\.ro': false + '(www\.)?comunitatea-mahala\.ro': false + '(www\.)?rihoro\.ro': false + '(www\.)?infotravelungaria\.ro': false + '(www\.)?montessori-romania\.ro': false + '(www\.)?usagarajhormann\.ro': false + '(www\.)?turism-pausestimaglasi\.ro': false + '(www\.)?bibliotecascolara\.ro': false + '(www\.)?amintiridinromania\.ro': false + '(www\.)?competitionlaw\.ro': false + '(www\.)?hotebucatarie\.ro': false + '(www\.)?servicepst\.ro': false + '(www\.)?cumparare-modern\.cam': false + '(www\.)?dorobu\.ro': false + '(www\.)?iasipaintball\.ro': false + '(www\.)?prodatacons\.ro': false + '(www\.)?reumatologiestoicasimona\.ro': false + '(www\.)?pedorexpert\.ro': false + '(www\.)?marketbistrita\.ro': false + '(www\.)?dezbaterea\.ro': false + '(www\.)?crfpa-mehedinti\.ro': false + '(www\.)?universal-depozit\.cam': false + '(www\.)?pressedflowers\.ro': false + '(www\.)?qrcall\.ro': false + '(www\.)?confortbebe\.ro': false + '(www\.)?sportpentrusanatate\.ro': false + '(www\.)?isera\.ro': false + '(www\.)?culturepub\.ro': false + '(www\.)?anunturi-barlad-online\.ro': false + '(www\.)?brasovul-solidar\.ro': false + '(www\.)?apololighting\.ro': false + '(www\.)?cocostudio\.ro': false + '(www\.)?nostalgiciizborului\.ro': false + '(www\.)?top-mart\.cyou': false + '(www\.)?docartransport\.ro': false + '(www\.)?valizacool\.ro': false + '(www\.)?rokabarbeque\.ro': false + '(www\.)?startupnationromania\.ro': false + '(www\.)?clubulcelebritatilor\.ro': false + '(www\.)?indigo-shop\.ro': false + '(www\.)?apeleaza\.ro': false + '(www\.)?bestseller-stock\.cyou': false + '(www\.)?pastravariabologa\.ro': false + '(www\.)?depozit-mart\.cyou': false + '(www\.)?angro-afacere\.cam': false + '(www\.)?financeone\.ro': false + '(www\.)?concursurilecangurul\.ro': false + '(www\.)?aranjamentenuntaploiesti\.ro': false + '(www\.)?supermarket-magazin\.cam': false + '(www\.)?adidasisupra\.ro': false + '(www\.)?podoabacasei\.ro': false + '(www\.)?share-your-closet\.ro': false + '(www\.)?lumado\.ro': false + '(www\.)?topgadgets\.ro': false + '(www\.)?pnl-opv3\.ro': false + '(www\.)?tusidolo\.ro': false + '(www\.)?magazincompas\.ro': false + '(www\.)?harrogate-sulphur-soap\.ro': false + '(www\.)?fond-maraton\.ro': false + '(www\.)?alumanole\.ro': false + '(www\.)?roataelectrica\.ro': false + '(www\.)?pieseautobv\.ro': false + '(www\.)?99auto\.ro': false + '(www\.)?gazetaolteniei\.ro': false + '(www\.)?elinf\.ro': false + '(www\.)?\.meloritm\.ro': false + '(www\.)?sg12tm\.ro': false + '(www\.)?pensiuneaprigorel\.ro': false + '(www\.)?ww15\.lapusresidence\.ro': false + '(www\.)?centrulsanatatii\.ro': false + '(www\.)?trucurisanatate\.ro': false + '(www\.)?gramaticaengleza\.ro': false + '(www\.)?voteazacufurculita\.ro': false + '(www\.)?shido\.ro': false + '(www\.)?royalpark\.ro': false + '(www\.)?alex-stanciu\.ro': false + '(www\.)?ajutsieu\.ro': false + '(www\.)?datalibera\.ro': false + '(www\.)?maranteck\.ro': false + '(www\.)?universal-ordin\.cyou': false + '(www\.)?freemindtherapy\.ro': false + '(www\.)?1\.concert-trip\.ro': false + '(www\.)?clinicahipocrate2000\.ro': false + '(www\.)?minervaeps\.ro': false + '(www\.)?apaforaj\.ro': false + '(www\.)?geekzone\.ro': false + '(www\.)?priza-butic\.cyou': false + '(www\.)?deltatransilvaniei\.ro': false + '(www\.)?cursuri-dans-copii\.ro': false + '(www\.)?sunnyfood\.ro': false + +checker: + # disable checker when in debug mode + off_when_debug: true + + # use "scheduling: false" to disable scheduling + # scheduling: interval or int + + # to activate the scheduler: + # * uncomment "scheduling" section + # * add "cache2 = name=searxcache,items=2000,blocks=2000,blocksize=4096,bitmap=1" + # to your uwsgi.ini + + # scheduling: + # start_after: [300, 1800] # delay to start the first run of the checker + # every: [86400, 90000] # how often the checker runs + + # additional tests: only for the YAML anchors (see the engines section) + # + additional_tests: + rosebud: &test_rosebud + matrix: + query: rosebud + lang: en + result_container: + - not_empty + - ['one_title_contains', 'citizen kane'] + test: + - unique_results + + android: &test_android + matrix: + query: ['android'] + lang: ['en', 'de', 'fr', 'zh-CN'] + result_container: + - not_empty + - ['one_title_contains', 'google'] + test: + - unique_results + + # tests: only for the YAML anchors (see the engines section) + tests: + infobox: &tests_infobox + infobox: + matrix: + query: ["linux", "new york", "bbc"] + result_container: + - has_infobox + +categories_as_tabs: + general: + images: + videos: + news: + map: + music: + it: + science: + files: + social media: + +engines: + - name: apk mirror + engine: apkmirror + timeout: 4.0 + shortcut: apkm + disabled: true + + # Requires Tor + - name: ahmia + disabled: true + engine: ahmia + categories: onions + enable_http: true + shortcut: ah + + - name: ArchWiki + engine: archlinux + shortcut: aw + + - name: archive is + engine: xpath + disabled: true + search_url: https://archive.is/search/?q={query} + url_xpath: (//div[@class="TEXT-BLOCK"]/a)/@href + title_xpath: (//div[@class="TEXT-BLOCK"]/a) + content_xpath: //div[@class="TEXT-BLOCK"]/ul/li + categories: general + timeout: 7.0 + shortcut: ai + soft_max_redirects: 1 + about: + website: https://archive.is/ + wikidata_id: Q13515725 + official_api_documentation: https://mementoweb.org/depot/native/archiveis/ + use_official_api: false + require_api_key: false + results: HTML + + # - name: artic + # engine: artic + # shortcut: arc + # timeout: 4.0 + + - name: arxiv + engine: arxiv + shortcut: arx + categories: science + timeout: 4.0 + + # tmp suspended: dh key too small + # - name: base + # engine: base + # shortcut: bs + + # - name: bandcamp + # engine: bandcamp + # shortcut: bc + # categories: music + + - name: wikipedia + engine: wikipedia + shortcut: wiki + base_url: 'https://{language}.wikipedia.org/' + + - name: wikipedia DE + engine: wikipedia + shortcut: wikide + base_url: 'https://de.wikipedia.org/' + + - name: wikipedia EN + engine: wikipedia + shortcut: wikien + base_url: 'https://en.wikipedia.org/' + + - name: bing + engine: bing + disabled: true + shortcut: bi + + - name: bing images + engine: bing_images + shortcut: bii + + - name: bing news + engine: bing_news + disabled: true + shortcut: bin + + - name: bing videos + engine: bing_videos + disabled: true + shortcut: biv + + # - name: bitbucket + # engine: xpath + # paging: true + # search_url: https://bitbucket.org/repo/all/{pageno}?name={query} + # url_xpath: //article[@class="repo-summary"]//a[@class="repo-link"]/@href + # title_xpath: //article[@class="repo-summary"]//a[@class="repo-link"] + # content_xpath: //article[@class="repo-summary"]/p + # categories: [it, repos] + # timeout: 4.0 + # disabled: true + # shortcut: bb + # about: + # website: https://bitbucket.org/ + # wikidata_id: Q2493781 + # official_api_documentation: https://developer.atlassian.com/bitbucket + # use_official_api: false + # require_api_key: false + # results: HTML + + # - name: btdigg + # engine: btdigg + # shortcut: bt + + - name: ccc-tv + engine: xpath + paging: false + search_url: https://media.ccc.de/search/?q={query} + url_xpath: //div[@class="caption"]/h3/a/@href + title_xpath: //div[@class="caption"]/h3/a/text() + content_xpath: //div[@class="caption"]/h4/@title + categories: videos + shortcut: ccc + about: + website: https://media.ccc.de/ + wikidata_id: Q80729951 + official_api_documentation: https://github.com/voc/voctoweb + use_official_api: false + require_api_key: false + results: HTML + # We don't set language: de here because media.ccc.de is not just + # for a German audience. It contains many English videos and many + # German videos have English subtitles. + + - name: openverse + engine: openverse + categories: images + shortcut: opv + + # - name: core.ac.uk + # engine: core + # categories: science + # shortcut: cor + # # get your API key from: https://core.ac.uk/api-keys/register/ + # api_key: 'unset' + + - name: crossref + engine: json_engine + paging: true + search_url: https://search.crossref.org/dois?q={query}&page={pageno} + url_query: doi + title_query: title + title_html_to_text: true + content_query: fullCitation + content_html_to_text: true + categories: science + shortcut: cr + about: + website: https://www.crossref.org/ + wikidata_id: Q5188229 + official_api_documentation: https://github.com/CrossRef/rest-api-doc + use_official_api: false + require_api_key: false + results: JSON + + # - name: currency + # engine: currency_convert + # categories: general + # shortcut: cc + + - name: deezer + engine: deezer + shortcut: dz + + - name: deviantart + engine: deviantart + shortcut: da + timeout: 3.0 + + - name: ddg definitions + engine: duckduckgo_definitions + shortcut: ddd + weight: 2 + tests: *tests_infobox + + # cloudflare protected + # - name: digbt + # engine: digbt + # shortcut: dbt + # timeout: 6.0 + # disabled: true + + - name: docker hub + engine: docker_hub + shortcut: dhub + categories: [it, packages] + + # - name: erowid + # engine: xpath + # paging: true + # first_page_num: 0 + # page_size: 30 + # search_url: https://www.erowid.org/search.php?q={query}&s={pageno} + # url_xpath: //dl[@class="results-list"]/dt[@class="result-title"]/a/@href + # title_xpath: //dl[@class="results-list"]/dt[@class="result-title"]/a/text() + # content_xpath: //dl[@class="results-list"]/dd[@class="result-details"] + # categories: [] + # shortcut: ew + # disabled: true + # about: + # website: https://www.erowid.org/ + # wikidata_id: Q1430691 + # official_api_documentation: + # use_official_api: false + # require_api_key: false + # results: HTML + + # - name: elasticsearch + # shortcut: es + # engine: elasticsearch + # base_url: http://localhost:9200 + # username: elastic + # password: changeme + # index: my-index + # # available options: match, simple_query_string, term, terms, custom + # query_type: match + # # if query_type is set to custom, provide your query here + # #custom_query_json: {"query":{"match_all": {}}} + # #show_metadata: false + # disabled: true + + - name: wikidata + engine: wikidata + shortcut: wd + timeout: 3.0 + weight: 2 + tests: *tests_infobox + + - name: duckduckgo + engine: duckduckgo + shortcut: ddg + + - name: duckduckgo images + engine: duckduckgo_images + shortcut: ddi + timeout: 3.0 + disabled: true + + - name: tineye + engine: tineye + shortcut: tin + timeout: 9.0 + + # - name: etymonline + # engine: xpath + # paging: true + # search_url: https://etymonline.com/search?page={pageno}&q={query} + # url_xpath: //a[contains(@class, "word__name--")]/@href + # title_xpath: //a[contains(@class, "word__name--")] + # content_xpath: //section[contains(@class, "word__defination")] + # first_page_num: 1 + # shortcut: et + # categories: [dictionaries] + # disabled: false + # about: + # website: https://www.etymonline.com/ + # wikidata_id: Q1188617 + # official_api_documentation: + # use_official_api: false + # require_api_key: false + # results: HTML + + - name: ebay + engine: ebay + shortcut: eb + base_url: 'https://www.ebay.de' + disabled: true + timeout: 5 + + # - name: 1x + # engine: www1x + # shortcut: 1x + # timeout: 3.0 + # disabled: true + + - name: fdroid + engine: fdroid + shortcut: fd + + - name: flickr + categories: images + shortcut: fl + # You can use the engine using the official stable API, but you need an API + # key, see: https://www.flickr.com/services/apps/create/ + # engine: flickr + # api_key: 'apikey' # required! + # Or you can use the html non-stable engine, activated by default + engine: flickr_noapi + + - name: free software directory + engine: mediawiki + shortcut: fsd + categories: [it, software wikis] + base_url: https://directory.fsf.org/ + number_of_results: 5 + # what part of a page matches the query string: title, text, nearmatch + # * title - query matches title + # * text - query matches the text of page + # * nearmatch - nearmatch in title + search_type: title + timeout: 5.0 + about: + website: https://directory.fsf.org/ + wikidata_id: Q2470288 + + # - name: freesound + # engine: freesound + # shortcut: fnd + # disabled: true + # timeout: 15.0 + # API key required, see: https://freesound.org/docs/api/overview.html + # api_key: MyAPIkey + + - name: genius + engine: genius + shortcut: gen + + - name: gentoo + engine: gentoo + shortcut: ge + + - name: gitlab + engine: json_engine + paging: true + search_url: https://gitlab.com/api/v4/projects?search={query}&page={pageno} + url_query: web_url + title_query: name_with_namespace + content_query: description + page_size: 20 + categories: [it, repos] + shortcut: gl + timeout: 10.0 + about: + website: https://about.gitlab.com/ + wikidata_id: Q16639197 + official_api_documentation: https://docs.gitlab.com/ee/api/ + use_official_api: false + require_api_key: false + results: JSON + + - name: github + engine: github + shortcut: gh + + # This a Gitea service. If you would like to use a different instance, + # change codeberg.org to URL of the desired Gitea host. Or you can create a + # new engine by copying this and changing the name, shortcut and search_url. + + # - name: codeberg + # engine: json_engine + # search_url: https://codeberg.org/api/v1/repos/search?q={query}&limit=10 + # url_query: html_url + # title_query: name + # content_query: description + # categories: [it, repos] + # shortcut: cb + # disabled: true + # about: + # website: https://codeberg.org/ + # wikidata_id: + # official_api_documentation: https://try.gitea.io/api/swagger + # use_official_api: false + # require_api_key: false + # results: JSON + + - name: google + engine: google + lang: ['en', 'de'] + shortcut: g + # see https://docs.searxng.org/src/searx.engines.google.html#module-searx.engines.google + use_mobile_ui: false + # additional_tests: + # android: *test_android + + - name: google de + engine: google + disabled: true + shortcut: gde + language: de + # see https://docs.searxng.org/src/searx.engines.google.html#module-searx.engines.google + use_mobile_ui: false + + # - name: google italian + # engine: google + # shortcut: goit + # use_mobile_ui: false + # language: it + + # - name: google mobile ui + # engine: google + # shortcut: gomui + # use_mobile_ui: true + + - name: google images + engine: google_images + shortcut: gimg + # additional_tests: + # android: *test_android + # dali: + # matrix: + # query: ['Dali Christ'] + # lang: ['en', 'de', 'fr', 'zh-CN'] + # result_container: + # - ['one_title_contains', 'Salvador'] + + - name: google news + engine: google_news + disabled: true + lang: ['en', 'de'] + shortcut: gnews + # additional_tests: + # android: *test_android + + # - name: google videos + # engine: google_videos + # shortcut: gov + # # additional_tests: + # # android: *test_android + + - name: google scholar + engine: google_scholar + shortcut: gscholar + + - name: google play apps + engine: xpath + search_url: https://play.google.com/store/search?q={query}&c=apps + results_xpath: '//div[@class="ImZGtf mpg5gc"]' + title_xpath: './/div[@class="RZEgze"]//div[@class="kCSSQe"]//a' + url_xpath: './/div[@class="RZEgze"]//div[@class="kCSSQe"]//a/@href' + content_xpath: './/div[@class="RZEgze"]//a[@class="mnKHRc"]' + thumbnail_xpath: './/div[@class="uzcko"]/div/span[1]//img/@data-src' + categories: [files, apps] + shortcut: gplay + disabled: true + about: + website: https://play.google.com/ + wikidata_id: Q79576 + official_api_documentation: + use_official_api: false + require_api_key: false + results: HTML + + - name: hoogle + engine: xpath + paging: true + search_url: https://hoogle.haskell.org/?hoogle={query}&start={pageno} + results_xpath: '//div[@class="result"]' + title_xpath: './/div[@class="ans"]//a' + url_xpath: './/div[@class="ans"]//a/@href' + content_xpath: './/div[@class="from"]' + page_size: 20 + categories: [it, packages] + disabled: true + shortcut: ho + about: + website: https://hoogle.haskell.org/ + wikidata_id: Q34010 + official_api_documentation: https://hackage.haskell.org/api + use_official_api: false + require_api_key: false + results: JSON + + - name: imdb + engine: imdb + shortcut: imdb + timeout: 6.0 + disabled: true + + - name: invidious + engine: invidious + # Instanes will be selected randomly, see https://api.invidious.io/ for + # instances that are stable (good uptime) and close to you. + base_url: + - https://invidious.snopyta.org + - https://vid.puffyan.us + # - https://invidious.kavin.rocks # Error 1020 // Access denied by Cloudflare + - https://invidio.xamh.de + - https://inv.riverside.rocks + shortcut: iv + timeout: 3.0 + disabled: true + + - name: library genesis + engine: xpath + search_url: https://libgen.fun/search.php?req={query} + url_xpath: //a[contains(@href,"get.php?md5")]/@href + title_xpath: //a[contains(@href,"book/")]/text()[1] + content_xpath: //td/a[1][contains(@href,"=author")]/text() + categories: files + timeout: 7.0 + disabled: true + shortcut: lg + about: + website: https://libgen.fun/ + wikidata_id: Q22017206 + official_api_documentation: + use_official_api: false + require_api_key: false + results: HTML + + - name: z-library + engine: zlibrary + shortcut: zlib + disabled: true + categories: files + timeout: 3.0 + # choose base_url, otherwise engine will do it at initialization time + base_url: https://b-ok.cc + # base_url: https://de1lib.org + # base_url: https://booksc.eu # does not have cover preview + # base_url: https://booksc.org # does not have cover preview + + - name: library of congress + disabled: true + engine: loc + shortcut: loc + categories: images + + - name: lobste.rs + engine: xpath + search_url: https://lobste.rs/search?utf8=%E2%9C%93&q={query}&what=stories&order=relevance + results_xpath: //li[contains(@class, "story")] + url_xpath: .//a[@class="u-url"]/@href + title_xpath: .//a[@class="u-url"] + content_xpath: .//a[@class="domain"] + categories: it + shortcut: lo + timeout: 5.0 + disabled: true + about: + website: https://lobste.rs/ + wikidata_id: Q60762874 + official_api_documentation: + use_official_api: false + require_api_key: false + results: HTML + + - name: azlyrics + shortcut: lyrics + engine: xpath + timeout: 4.0 + disabled: true + categories: [music, lyrics] + paging: true + search_url: https://search.azlyrics.com/search.php?q={query}&w=lyrics&p={pageno} + url_xpath: //td[@class="text-left visitedlyr"]/a/@href + title_xpath: //span/b/text() + content_xpath: //td[@class="text-left visitedlyr"]/a/small + about: + website: https://azlyrics.com + wikidata_id: Q66372542 + official_api_documentation: + use_official_api: false + require_api_key: false + results: HTML + + - name: mixcloud + engine: mixcloud + shortcut: mc + + - name: npm + engine: json_engine + paging: true + first_page_num: 0 + search_url: https://api.npms.io/v2/search?q={query}&size=25&from={pageno} + results_query: results + url_query: package/links/npm + title_query: package/name + content_query: package/description + page_size: 25 + categories: [it, packages] + disabled: true + timeout: 5.0 + shortcut: npm + about: + website: https://npms.io/ + wikidata_id: Q7067518 + official_api_documentation: https://api-docs.npms.io/ + use_official_api: false + require_api_key: false + results: JSON + + # - name: archlinux man pages + # shortcut: man + # engine: xpath + # timeout: 4.0 + # categories: [it] + # paging: false + # search_url: https://man.archlinux.org/search?q={query}&lang={language} + # url_xpath: //ol[@start="1"]/dl/dt/a/@href + # title_xpath: //ol[@start="1"]/dl/dt/a/text() + # content_xpath: //ol[@start="1"]/dl/dd/text() + # about: + # website: https://man.archlinux.org + # official_api_documentation: + # use_official_api: false + # require_api_key: false + # results: HTML + + - name: mankier + engine: json_engine + search_url: https://www.mankier.com/api/v2/mans/?q={query} + results_query: results + url_query: url + title_query: name + content_query: description + categories: it + shortcut: man + about: + website: https://www.mankier.com/ + official_api_documentation: https://www.mankier.com/api + use_official_api: true + require_api_key: false + results: JSON + + - name: openstreetmap + engine: openstreetmap + shortcut: osm + + - name: openrepos + engine: xpath + paging: true + search_url: https://openrepos.net/search/node/{query}?page={pageno} + url_xpath: //li[@class="search-result"]//h3[@class="title"]/a/@href + title_xpath: //li[@class="search-result"]//h3[@class="title"]/a + content_xpath: //li[@class="search-result"]//div[@class="search-snippet-info"]//p[@class="search-snippet"] + categories: files + timeout: 4.0 + disabled: true + shortcut: or + about: + website: https://openrepos.net/ + wikidata_id: + official_api_documentation: + use_official_api: false + require_api_key: false + results: HTML + + - name: packagist + engine: json_engine + paging: true + search_url: https://packagist.org/search.json?q={query}&page={pageno} + results_query: results + url_query: url + title_query: name + content_query: description + categories: [it, packages] + disabled: true + timeout: 5.0 + shortcut: pack + about: + website: https://packagist.org + wikidata_id: Q108311377 + official_api_documentation: https://packagist.org/apidoc + use_official_api: true + require_api_key: false + results: JSON + + - name: pdbe + engine: pdbe + disabled: true + shortcut: pdb + # Hide obsolete PDB entries. Default is not to hide obsolete structures + # hide_obsolete: false + + - name: photon + engine: photon + disabled: true + shortcut: ph + + # - name: piratebay + # engine: piratebay + # shortcut: tpb + # # You may need to change this URL to a proxy if piratebay is blocked in your + # # country + # url: https://thepiratebay.org/ + # timeout: 3.0 + + # Required dependency: psychopg2 + # - name: postgresql + # engine: postgresql + # database: postgres + # username: postgres + # password: postgres + # limit: 10 + # query_str: 'SELECT * from my_table WHERE my_column = %(query)s' + # shortcut : psql + + - name: pubmed + engine: pubmed + shortcut: pub + categories: science + timeout: 3.0 + + - name: pypi + shortcut: pypi + engine: xpath + paging: true + search_url: https://pypi.org/search?q={query}&page={pageno} + results_xpath: /html/body/main/div/div/div/form/div/ul/li/a[@class="package-snippet"] + url_xpath: ./@href + title_xpath: ./h3/span[@class="package-snippet__name"] + content_xpath: ./p + suggestion_xpath: /html/body/main/div/div/div/form/div/div[@class="callout-block"]/p/span/a[@class="link"] + first_page_num: 1 + categories: [it, packages] + about: + website: https://pypi.org + wikidata_id: Q2984686 + official_api_documentation: https://warehouse.readthedocs.io/api-reference/index.html + use_official_api: false + require_api_key: false + results: HTML + + - name: qwant + engine: qwant + shortcut: qw + categories: [general, web] + disabled: true + additional_tests: + rosebud: *test_rosebud + + - name: qwant news + engine: qwant + shortcut: qwn + categories: news + disabled: true + network: qwant + + - name: qwant images + engine: qwant + shortcut: qwi + categories: [images, web] + disabled: false + network: qwant + + - name: qwant videos + engine: qwant + shortcut: qwv + categories: [videos, web] + disabled: true + network: qwant + + # - name: library + # engine: recoll + # shortcut: lib + # base_url: 'https://recoll.example.org/' + # search_dir: '' + # mount_prefix: /export + # dl_prefix: 'https://download.example.org' + # timeout: 30.0 + # categories: files + # disabled: true + + # - name: recoll library reference + # engine: recoll + # base_url: 'https://recoll.example.org/' + # search_dir: reference + # mount_prefix: /export + # dl_prefix: 'https://download.example.org' + # shortcut: libr + # timeout: 30.0 + # categories: files + # disabled: true + + - name: reddit + engine: reddit + shortcut: re + page_size: 25 + + # Required dependency: redis + # - name: myredis + # shortcut : rds + # engine: redis_server + # exact_match_only: false + # host: '127.0.0.1' + # port: 6379 + # enable_http: true + # password: '' + # db: 0 + + # tmp suspended: bad certificate + # - name: scanr structures + # shortcut: scs + # engine: scanr_structures + # disabled: true + + - name: sepiasearch + engine: sepiasearch + shortcut: sep + + - name: soundcloud + engine: soundcloud + shortcut: sc + + - name: stackoverflow + engine: stackexchange + shortcut: st + api_site: 'stackoverflow' + categories: [it, q&a] + + - name: askubuntu + engine: stackexchange + shortcut: ubuntu + api_site: 'askubuntu' + categories: [it, q&a] + + - name: superuser + engine: stackexchange + shortcut: su + api_site: 'superuser' + categories: [it, q&a] + + - name: searchcode code + engine: searchcode_code + shortcut: scc + disabled: true + + - name: framalibre + engine: framalibre + shortcut: frl + disabled: true + + - name: semantic scholar + engine: semantic_scholar + disabled: true + shortcut: se + categories: science + + # Spotify needs API credentials + # - name: spotify + # engine: spotify + # shortcut: stf + # api_client_id: ******* + # api_client_secret: ******* + + # - name: solr + # engine: solr + # shortcut: slr + # base_url: http://localhost:8983 + # collection: collection_name + # sort: '' # sorting: asc or desc + # field_list: '' # comma separated list of field names to display on the UI + # default_fields: '' # default field to query + # query_fields: '' # query fields + # enable_http: true + + # - name: springer nature + # engine: springer + # # get your API key from: https://dev.springernature.com/signup + # # working API key, for test & debug: "a69685087d07eca9f13db62f65b8f601" + # api_key: 'unset' + # shortcut: springer + # categories: science + # timeout: 6.0 + + - name: startpage + engine: startpage + shortcut: sp + timeout: 6.0 + disabled: true + additional_tests: + rosebud: *test_rosebud + + - name: tokyotoshokan + engine: tokyotoshokan + shortcut: tt + timeout: 6.0 + disabled: true + + # - name: solidtorrents + # engine: solidtorrents + # shortcut: solid + # timeout: 4.0 + # disabled: false + # base_url: + # - https://solidtorrents.net + # - https://solidtorrents.eu + # - https://solidtorrents.to + # - https://bitsearch.to + + # For this demo of the sqlite engine download: + # https://liste.mediathekview.de/filmliste-v2.db.bz2 + # and unpack into searx/data/filmliste-v2.db + # Query to test: "!demo concert" + # + # - name: demo + # engine: sqlite + # shortcut: demo + # categories: general + # result_template: default.html + # database: searx/data/filmliste-v2.db + # query_str: >- + # SELECT title || ' (' || time(duration, 'unixepoch') || ')' AS title, + # COALESCE( NULLIF(url_video_hd,''), NULLIF(url_video_sd,''), url_video) AS url, + # description AS content + # FROM film + # WHERE title LIKE :wildcard OR description LIKE :wildcard + # ORDER BY duration DESC + # disabled: false + + # Requires Tor + # - name: torch + # engine: xpath + # paging: true + # search_url: + # http://xmh57jrknzkhv6y3ls3ubitzfqnkrwxhopf5aygthi7d6rplyvk3noyd.onion/cgi-bin/omega/omega?P={query}&DEFAULTOP=and + # results_xpath: //table//tr + # url_xpath: ./td[2]/a + # title_xpath: ./td[2]/b + # content_xpath: ./td[2]/small + # categories: onions + # enable_http: true + # shortcut: tch + + # torznab engine lets you query any torznab compatible indexer. Using this + # engine in combination with Jackett (https://github.com/Jackett/Jackett) + # opens the possibility to query a lot of public and private indexers directly + # from SearXNG. + # - name: torznab + # engine: torznab + # shortcut: trz + # base_url: http://localhost:9117/api/v2.0/indexers/all/results/torznab + # enable_http: true # if using localhost + # api_key: xxxxxxxxxxxxxxx + # # https://github.com/Jackett/Jackett/wiki/Jackett-Categories + # torznab_categories: # optional + # - 2000 + # - 5000 + + # tmp suspended - too slow, too many errors + - name: urbandictionary + engine: xpath + search_url: https://www.urbandictionary.com/define.php?term={query} + url_xpath: //*[@class="word"]/@href + title_xpath: //*[@class="def-header"] + content_xpath: //*[@class="meaning"] + shortcut: ud + disabled: true + + - name: unsplash + engine: unsplash + shortcut: us + + - name: yahoo + engine: yahoo + shortcut: yh + disabled: true + + - name: yahoo news + engine: yahoo_news + shortcut: yhn + + - name: youtube + shortcut: yt + # You can use the engine using the official stable API, but you need an API + # key See: https://console.developers.google.com/project + # + # engine: youtube_api + # api_key: 'apikey' # required! + # + # Or you can use the html non-stable engine, activated by default + engine: youtube_noapi + + - name: dailymotion + engine: dailymotion + shortcut: dm + + - name: vimeo + engine: vimeo + shortcut: vm + + - name: wiby + engine: json_engine + search_url: https://wiby.me/json/?q={query} + url_query: URL + title_query: Title + content_query: Snippet + categories: [general, web] + shortcut: wib + disabled: true + about: + website: https://wiby.me/ + + - name: alexandria + engine: json_engine + shortcut: alx + categories: general + paging: true + search_url: https://api.alexandria.org/?a=1&q={query}&p={pageno} + results_query: results + title_query: title + url_query: url + content_query: snippet + timeout: 1.5 + disabled: true + about: + website: https://alexandria.org/ + official_api_documentation: https://github.com/alexandria-org/alexandria-api/raw/master/README.md + use_official_api: true + require_api_key: false + results: JSON + + - name: wikibooks + engine: mediawiki + shortcut: wb + categories: general + base_url: "https://{language}.wikibooks.org/" + number_of_results: 5 + search_type: text + disabled: true + about: + website: https://www.wikibooks.org/ + wikidata_id: Q367 + + - name: wikinews + engine: mediawiki + shortcut: wn + categories: news + base_url: "https://{language}.wikinews.org/" + number_of_results: 5 + search_type: text + disabled: true + about: + website: https://www.wikinews.org/ + wikidata_id: Q964 + + - name: wikiquote + engine: mediawiki + shortcut: wq + categories: general + base_url: "https://{language}.wikiquote.org/" + number_of_results: 5 + search_type: text + disabled: true + additional_tests: + rosebud: *test_rosebud + about: + website: https://www.wikiquote.org/ + wikidata_id: Q369 + + - name: wikisource + engine: mediawiki + shortcut: ws + categories: general + base_url: "https://{language}.wikisource.org/" + number_of_results: 5 + search_type: text + disabled: true + about: + website: https://www.wikisource.org/ + wikidata_id: Q263 + + - name: wiktionary + engine: mediawiki + shortcut: wt + categories: [dictionaries] + base_url: "https://{language}.wiktionary.org/" + number_of_results: 5 + search_type: text + disabled: false + about: + website: https://www.wiktionary.org/ + wikidata_id: Q151 + + - name: wikiversity + engine: mediawiki + shortcut: wv + categories: general + base_url: "https://{language}.wikiversity.org/" + number_of_results: 5 + search_type: text + disabled: true + about: + website: https://www.wikiversity.org/ + wikidata_id: Q370 + + - name: wikivoyage + engine: mediawiki + shortcut: wy + categories: general + base_url: "https://{language}.wikivoyage.org/" + number_of_results: 5 + search_type: text + disabled: true + about: + website: https://www.wikivoyage.org/ + wikidata_id: Q373 + + - name: wolframalpha + shortcut: wa + # You can use the engine using the official stable API, but you need an API + # key. See: https://products.wolframalpha.com/api/ + # + # engine: wolframalpha_api + # api_key: '' + # + # Or you can use the html non-stable engine, activated by default + engine: wolframalpha_noapi + timeout: 6.0 + categories: [] + + - name: dictzone + engine: dictzone + shortcut: dc + + - name: mymemory translated + engine: translated + shortcut: tl + timeout: 5.0 + disabled: false + # You can use without an API key, but you are limited to 1000 words/day + # See: https://mymemory.translated.net/doc/usagelimits.php + # api_key: '' + + # Required dependency: mysql-connector-python + # - name: mysql + # engine: mysql_server + # database: mydatabase + # username: user + # password: pass + # limit: 10 + # query_str: 'SELECT * from mytable WHERE fieldname=%(query)s' + # shortcut: mysql + + # - name: 1337x + # engine: 1337x + # shortcut: 1337x + # disabled: true + + - name: duden + engine: duden + shortcut: du + disabled: true + + - name: seznam + shortcut: szn + engine: seznam + disabled: true + + - name: mojeek + shortcut: mjk + engine: xpath + paging: true + categories: [general, web] + search_url: https://www.mojeek.com/search?q={query}&s={pageno} + results_xpath: //a[@class="ob"] + url_xpath: ./@href + title_xpath: ./.. + content_xpath: ../../p[@class="s"] + suggestion_xpath: /html/body//div[@class="top-info"]/p[@class="top-info spell"]/a + first_page_num: 0 + page_size: 10 + disabled: true + about: + website: https://www.mojeek.com/ + wikidata_id: Q60747299 + official_api_documentation: https://www.mojeek.com/services/api.html/ + use_official_api: false + require_api_key: false + results: HTML + + - name: rubygems + shortcut: rbg + engine: xpath + paging: true + search_url: https://rubygems.org/search?page={pageno}&query={query} + results_xpath: /html/body/main/div/a[@class="gems__gem"] + url_xpath: ./@href + title_xpath: ./span/h2 + content_xpath: ./span/p + suggestion_xpath: /html/body/main/div/div[@class="search__suggestions"]/p/a + first_page_num: 1 + categories: [it, packages] + disabled: true + about: + website: https://rubygems.org/ + wikidata_id: Q1853420 + official_api_documentation: https://guides.rubygems.org/rubygems-org-api/ + use_official_api: false + require_api_key: false + results: HTML + + - name: mediathekviewweb + engine: mediathekviewweb + shortcut: mvw + disabled: true + + # - name: yacy + # engine: yacy + # shortcut: ya + # base_url: 'http://localhost:8090 + # required if you aren't using HTTPS for your local yacy instance' + # enable_http: true + # number_of_results: 5 + # timeout: 3.0 + + - name: wordnik + engine: wordnik + shortcut: def + base_url: https://www.wordnik.com/ + categories: [dictionaries] + timeout: 5.0 + disabled: false + + - name: woxikon.de synonyme + engine: xpath + shortcut: woxi + categories: [dictionaries] + timeout: 5.0 + disabled: true + search_url: https://synonyme.woxikon.de/synonyme/{query}.php + url_xpath: //div[@class="upper-synonyms"]/a/@href + content_xpath: //div[@class="synonyms-list-group"] + title_xpath: //div[@class="upper-synonyms"]/a + about: + website: https://www.woxikon.de/ + wikidata_id: # No Wikidata ID + use_official_api: false + require_api_key: false + results: HTML + language: de + + - name: słownik języka polskiego + engine: sjp + shortcut: sjp + base_url: https://sjp.pwn.pl/ + timeout: 5.0 + disabled: true + + # wikimini: online encyclopedia for children + # The fulltext and title parameter is necessary for Wikimini because + # sometimes it will not show the results and redirect instead + - name: wikimini + engine: xpath + shortcut: wkmn + search_url: https://fr.wikimini.org/w/index.php?search={query}&title=Sp%C3%A9cial%3ASearch&fulltext=Search + url_xpath: //li/div[@class="mw-search-result-heading"]/a/@href + title_xpath: //li//div[@class="mw-search-result-heading"]/a + content_xpath: //li/div[@class="searchresult"] + categories: general + disabled: true + about: + website: https://wikimini.org/ + wikidata_id: Q3568032 + use_official_api: false + require_api_key: false + results: HTML + language: fr + + - name: brave + shortcut: brave + engine: xpath + disabled: true + paging: true + first_page_num: 0 + search_url: https://search.brave.com/search?q={query}&offset={pageno}&spellcheck=1 + url_xpath: //a[@class="result-header"]/@href + title_xpath: //span[@class="snippet-title"] + content_xpath: //p[1][@class="snippet-description"] + suggestion_xpath: //div[@class="text-gray h6"]/a + categories: [general, web] + about: + website: https://brave.com/search/ + wikidata_id: Q107355971 + use_official_api: false + require_api_key: false + results: HTML + + - name: petalsearch + shortcut: pts + engine: xpath + paging: true + search_url: https://petalsearch.com/search?query={query}&pn={pageno} + results_xpath: //div[@class="webpage-content"]/div[@class="title-cont"]/a + url_xpath: ./@href + title_xpath: . + content_xpath: ../../div[@class="webpage-text"] + suggestion_xpath: //div[@class="related-search-items"]/a + first_page_num: 1 + disabled: true + about: + website: https://petalsearch.com/ + wikidata_id: Q104399280 + use_official_api: false + require_api_key: false + results: HTML + + - name: petalsearch images + engine: petal_images + shortcut: ptsi + disabled: true + timeout: 3.0 + + - name: petalsearch news + shortcut: ptsn + categories: news + engine: xpath + paging: true + search_url: https://petalsearch.com/search?channel=news&query={query}&pn={pageno} + results_xpath: //div[@class="news-container"]/div/div/div/a + url_xpath: ./@href + title_xpath: ./div + content_xpath: ../div[@class="news-text"] + thumbnail_xpath: ../../../../img/@src + first_page_num: 1 + disabled: true + about: + website: https://petalsearch.com/ + wikidata_id: Q104399280 + use_official_api: false + require_api_key: false + results: HTML + +# Doku engine lets you access to any Doku wiki instance: +# A public one or a privete/corporate one. +# - name: ubuntuwiki +# engine: doku +# shortcut: uw +# base_url: 'https://doc.ubuntu-fr.org' + +# Be careful when enabling this engine if you are +# running a public instance. Do not expose any sensitive +# information. You can restrict access by configuring a list +# of access tokens under tokens. +# - name: git grep +# engine: command +# command: ['git', 'grep', '{{QUERY}}'] +# shortcut: gg +# tokens: [] +# disabled: true +# delimiter: +# chars: ':' +# keys: ['filepath', 'code'] + +# Be careful when enabling this engine if you are +# running a public instance. Do not expose any sensitive +# information. You can restrict access by configuring a list +# of access tokens under tokens. +# - name: locate +# engine: command +# command: ['locate', '{{QUERY}}'] +# shortcut: loc +# tokens: [] +# disabled: true +# delimiter: +# chars: ' ' +# keys: ['line'] + +# Be careful when enabling this engine if you are +# running a public instance. Do not expose any sensitive +# information. You can restrict access by configuring a list +# of access tokens under tokens. +# - name: find +# engine: command +# command: ['find', '.', '-name', '{{QUERY}}'] +# query_type: path +# shortcut: fnd +# tokens: [] +# disabled: true +# delimiter: +# chars: ' ' +# keys: ['line'] + +# Be careful when enabling this engine if you are +# running a public instance. Do not expose any sensitive +# information. You can restrict access by configuring a list +# of access tokens under tokens. +# - name: pattern search in files +# engine: command +# command: ['fgrep', '{{QUERY}}'] +# shortcut: fgr +# tokens: [] +# disabled: true +# delimiter: +# chars: ' ' +# keys: ['line'] + +# Be careful when enabling this engine if you are +# running a public instance. Do not expose any sensitive +# information. You can restrict access by configuring a list +# of access tokens under tokens. +# - name: regex search in files +# engine: command +# command: ['grep', '{{QUERY}}'] +# shortcut: gr +# tokens: [] +# disabled: true +# delimiter: +# chars: ' ' +# keys: ['line'] + +doi_resolvers: + oadoi.org: 'https://oadoi.org/' + doi.org: 'https://doi.org/' + doai.io: 'https://dissem.in/' + sci-hub.se: 'https://sci-hub.se/' + sci-hub.do: 'https://sci-hub.do/' + scihubtw.tw: 'https://scihubtw.tw/' + sci-hub.st: 'https://sci-hub.st/' + sci-hub.bar: 'https://sci-hub.bar/' + sci-hub.it.nf: 'https://sci-hub.it.nf/' + +default_doi_resolver: 'oadoi.org' +{% endraw %} diff --git a/compose/03_search/uwsgi.ini b/compose/03_search/uwsgi.ini new file mode 100644 index 0000000..7574799 --- /dev/null +++ b/compose/03_search/uwsgi.ini @@ -0,0 +1,49 @@ +[uwsgi] +# Who will run the code +uid = searxng +gid = searxng + +# Number of workers (usually CPU count) +workers = %k +threads = 4 + +# The right granted on the created socket +chmod-socket = 666 + +# Plugin to use and interpretor config +single-interpreter = true +master = true +plugin = python3 +lazy-apps = true +enable-threads = true + +# Module to import +module = searx.webapp + +# Virtualenv and python path +pythonpath = /usr/local/searxng/ +chdir = /usr/local/searxng/searx/ + +# automatically set processes name to something meaningful +auto-procname = true + +# Disable request logging for privacy +disable-logging = true +log-5xx = true + +# Set the max size of a request (request-body excluded) +buffer-size = 8192 + +# No keep alive +# See https://github.com/searx/searx-docker/issues/24 +add-header = Connection: close + +# uwsgi serves the static files +# expires set to one year since there are hashes +static-map = /static=/usr/local/searxng/searx/static +static-expires = /* 31557600 +static-gzip-all = True +offload-threads = %k + +# Cache +cache2 = name=searxngcache,items=2000,blocks=2000,blocksize=4096,bitmap=1 diff --git a/compose/03_syncthing/.env b/compose/03_syncthing/.env new file mode 100644 index 0000000..3bb6558 --- /dev/null +++ b/compose/03_syncthing/.env @@ -0,0 +1 @@ +COMPOSE_PROJECT_NAME=syncthing diff --git a/compose/03_syncthing/config/cert.pem b/compose/03_syncthing/config/cert.pem new file mode 100644 index 0000000..859bc71 --- /dev/null +++ b/compose/03_syncthing/config/cert.pem @@ -0,0 +1,45 @@ +$ANSIBLE_VAULT;1.2;AES256;secrets +33356661663637323832343435656464323766303832363037333663393064336439663165313637 +6461393832613137623663353337333232616135663938340a666566366335326565613738613930 +38373066313664616665633337616138303530343637636162346535633339626236303237393561 +3731366337323033310a386562326238663133653666396434663465313936313738313363613762 +65643662396237316663306163366636646338663365666632373830363930623534376338396336 +30313135623038386564373131613835316166326662313066303061393536613136353065363163 +33343438613562336235626437666661346363363933616132353764336633343739616230333438 +30333736383434346465666437346137343437366164323964353437643733333066626531383439 +35353233376164303336626661366662383535613430363439633131643838333535353833396131 +38383530666232643461623565363865323438666333626338313139656563616465626262636639 +33653965663166323630373938643638373362313832363331356339353265626262303761316664 +30303264386630363530643363346162613539623839653934646330373438396530666436376462 +34653365353961663065323730383935396666336163626337633561613139343139316665333839 +65656665353436313538636137376633633032383438366665373133396337306138393931653362 +66386465336363643035343530376437323064643861363535623135353265393034653936323437 +63353537343538383930366334316237376364613730396534356565313135633331663265323030 +35646563303031366130383131316637623131396531663862333561396162663361666536306132 +32393564383330623739393730386261333038343362626438336462616638616132343035393265 +62336338643639333366613163393332336462613230346366616333396234366231636361623838 +39373565646131636333393663356130646537356432316261616664356531373063393430653539 +30346464656535323164613236303361653033613738333235346230343238623166663462353965 +66313632646431346565633339663864613333383432616536386533313863616232323235306165 +66376238306537383966373464333532313166393735313535393365616337383034396538343463 +38386235326233343132306164376432373361383939633161656232613033363538636435393061 +37343837396362653736303436356666666138353735653134336563373430643636356665373236 +64373035626461386132666339646466396563623266326637333435633165343034646566326430 +66356666626539373462653536313636366530313463313530363538623862626537366639636266 +32653137636331616536343934356662656262623762333930653238663563646239643637386165 +63613662363235656432313666656331346461343432316530633163303331366239333666633534 +64393865366139343135303062366333363332376565646437356164306232643130356261656534 +63303339633765373136323665376137376139363265633162653563356262353162643164306430 +30306133663565386237373131353232623936623237373739623837643564386131373132316331 +31663062363133636335303966356562333438376333356330373166366531393461303037363936 +63346630333130303566383264303436393462313431623237373063393033346438633966643062 +38396163356265363363396164623664343530383937653663663864626566353365646462666535 +36303936653933363964663131376236333965313431653937626332383834373833343462333036 +30343537366462376562343865633162383263313365633332396366336238613132313630653763 +64343035366561313339316463323134643664616565663331643036306639383163373831376265 +66646336316632323034653866653532323934636639383634316163336566383830376238376433 +37653137363939643461373538623032613731383731353639313534376466303930363765303637 +37626532313430653239663835323633326263656536353330636437376237376339663336666234 +39396138323836616432396265626236333134323462623138656534333966613338636132393665 +38343662646238363735666564643336383633393963633662333262663131616163643765353232 +63613764346437663666 diff --git a/compose/03_syncthing/config/config.xml b/compose/03_syncthing/config/config.xml new file mode 100644 index 0000000..99f943c --- /dev/null +++ b/compose/03_syncthing/config/config.xml @@ -0,0 +1,583 @@ +$ANSIBLE_VAULT;1.2;AES256;secrets +34363438323537333064623839643261623339326430646533356163656136613639643430333361 +6663386637643333613864366634653831386133663664300a343933316435636339393232306535 +65343163323064356134333266643431373662353966663435363034323438626133626632663531 +3438313765323130380a336537663964383031356232383963636131343063343565643362623333 +38343566356564303962303334326234626533656132663537616334323738643965393234643537 +38646135363432616435353138363439333662656465396334613538663564613661616430653933 +36626338636432303965333364666631396239353331613664613235366363396561356436623237 +33396631663866643330333163613430326437343264666538366531376563396163333332306234 +31636366656665313732636661333263383235343264356366383565643636373764363138363534 +61326231643738386565313637646465343566323963653933376266313430386465613138323634 +30393738383833346162623430366331666463376266303637313839356366373361623530366631 +37626337376366646335316163373834653461356331346537326262653234656238653466343135 +32376637633437626432313966633166313535363233316332313736303838616665303634366266 +37383233656134366261383366643235313335363331386336646164333666323166363032633562 +35616265643764386535653162316566353033633130303338613632343136366135343436656431 +34623532643765666237373765663833323164383865643930393262633863616130363561353038 +62666632323164366466653731303733323139376665663065313933303662393664643262643938 +39623132393164626530383463396261613336303032303932306434633562396633613263386563 +66336639636361303735323539616263323062653531303534303661386337646566636161653865 +30613434626165653861633833393236383837323732633236333339373766626465373838626164 +39646466656262376663656432323336303031323266356366303531353532376636636337643538 +61383539343436316165333331333461353336613532666635643231643563323061663764373231 +65336433356138623439646561623339353231646236353761393731636666653761343162383831 +30313861613934636139393461316462313664656434666165313563316161346232653465663033 +64653838643864643762353265363235633333613561386432613164373830643233393065626364 +34303366346265666138343835343239366331613435396165323734666366313261396134303531 +31313339623536313530663930356239343864323365393438663665613162626266626332353966 +36666230316638353532366135373431303434336165343932613034616665306465333964643130 +65666163323630616363323731336130393363303262343232653135353031376236663330613736 +64656562353261393363323433383463323538646332336330633565373461333562646665353166 +38663564386465623837623334663363656439373838303465356539373233373763353633356564 +31316530303739306430336266346435326265643764653332323633343338616232306233653138 +32323638353466663665613939313730363362363234656235323061643137363761633333383539 +35343965343962303439616337363238333636343537353431303662306637383761656366636131 +64323936306238303530323336643565376563396337306238333634396239393161306133353433 +61623736336639613331393765626465663036343638323833626134393335316339323766323734 +35663234626330666432643835333135613766326364383138616332346434363732616235343731 +38376335633537393731373633336236363838326462653764663531646639306266646637653230 +64353365333266633338326335356437363034316361663631376563656365643162653637366339 +39643235303832656133633063383639633930353433333436363439376463393639663038353933 +61643430316439376131666330663165616233333333653732313265313338363939366366636433 +39306664613931356531323839353733306630393435383332366336636537653233363230653235 +62313264373666613866353634336266373339336336653036356266346631366231356635316136 +61303666313737353739336535336164316265666630346133323935626131643839643139366565 +37356133653339653662316433643561316634343934343762643932306364313132393732366638 +66626236373638346561373532613464343731633731316264663837653966363565656466326339 +61646530313334353833336335376232353935356331653236633839393038333735326238333438 +66653631633463333432383262643065383363616433323163396663663537346639663135646637 +33383237326637623064626566323830303766613861333530613135616634323633353832306661 +36666137626366663033663339303236333361613934383732663363383661386162386665613037 +61313334306538623166663836393932313562333465653034333634663061373538326630303437 +36313636373036303731643662383036306133383630333030303635333634623430333332323938 +36613265633362303363376530643934373437663939393238363165313163346534613930386664 +37353436396564343037616132323734376331303065363838393264656531343034666136623634 +38636135666135646561316239646632373865343334616239393636353263663538613066333163 +66393539623764316166336437373033343936303230653362393131386334393262656231396432 +65333837363837316635303962343239613835653564333536366331633933643035383131656264 +65323033626461396332663031336534653862653432386661626166656532326236613665313465 +31653265386666633436643239353133376466353461343932343638343139363133643231343937 +30343862323435623265343831626561613263346365346139343638396262333535333263323930 +63373536636664353732613661336566313766386335653739346632333136623764633434653936 +62373730313731663334663435623438333134396437353866663062343238633832656130396539 +38633535326364613531663962623465303836366565636530346538356534363237626138363137 +36343933376461346364396535343039373139616531616331366163346463623962636266643863 +30663437643363383131656464613164386263626233623330376463306435393166346131393639 +61353331363066666462393531393931333631323130616338613138333838353739666463373266 +32666461633064343330636565326132366334393732646330666261613666666533656662353139 +37353661636132343564646364653535306664373430313661346635613262366266336666666166 +30663666666539636538613030353737326336376530353365646662666534663537303337626436 +64353933343166363032633731653330663833626264376232666562623836303137663137373331 +35316361363436653634636430313366306262333235396466306437643337306134636462303135 +64303739616330666635633333303061633338323935386463653338353964306366643832663964 +64623336643832643638306662646139663562393735363338656537336238353739363539333332 +32333337626433356233653731633532356238323163636264633462623062343936396663323265 +63616432363735653063356563343436626431353430376262363135633161373231326632306134 +37623831363135316162663331316365326163646530366364363239306362373661363438643262 +39633161613537663032656131346139613732326435393363303238653434616636666234396439 +34336265643436633162356361303238666235663433353130363732393466323434373332366564 +66373665376335666366393233386262386132386236616663313166316538653262343064333738 +35613461346233323934393231646461386665326332336566623934353538396262306139313666 +31333432383934656664343364393562666262636433373030323339376431353232373166376238 +63616639356266663336626535643230303963636232613665623561616635613434356239343165 +38306637666661633563333863626563326333323261656530626232396363363635363131653432 +37653237653163393134353638323436356264376334613231303064393634363961396132366632 +65643836356139353366643464363566353835383033643735363334663031356263626635346166 +38643532616631366662373366366435356264653563623538656264306432373731383333613630 +32653134626264353636336130643338306662343634633962656261633239316233323366323965 +36663933623065336538383261663437336639613231333461626161303331373735616130626534 +35383031663531366634366539396530653165326434653234643465316237316463343438633737 +62393037333838316230333761336439336139343934373863336263346164373932343839396636 +64303666373166623465353463643333663032613661316138643636646236373030303062626530 +37633430613736373961393131316339303536376536633833663737303763386637643766343062 +65313837326330333231613566653338376238386134323030613866313065393839303137656336 +31663664373232373963646632646535343133303536303864636238326264616437306332643866 +32343232643363613736306236336163636537323062356262663265326233343434613931313731 +39653436346131646130383265326166626238396336373131383061393033653037346462316334 +33316639366561336334326637383130396132323132666635343732646338616338613634666236 +38313261393938633732636163643339393166666234306239636434633935313031363636656334 +64333064396135646438623261383039303531623535323938643532643235613164356232323463 +63326261313334343039323533373731383939373866313865633963633834633861343365316261 +35316334303663313862666530346237613831346331306238396332326366666134623361383635 +37323733666562383837636138393164343465616263656663623361643533303738646133306463 +65306237393733613632633633356266313066333034313332623632623431383332373934323931 +36373062646531343635353933663763626566353463666331376561316233326537623235613438 +35356136616466323932623962646536376466613563303839323562363465366139666464393138 +37313065396561396334363364373961363532663539393434313135303933613636373931376431 +33396638366434646531336230313861376133393032386336633035363063613736616362643136 +33303061386462333331643166303263663863656661303766343364373264613835373330383263 +63373636353334616364333234613530333334663737333564333135643336646639346466353463 +30316136396534383831363562663130343831343666643161346437636332623535663931323466 +39326636643639623562396263313837666631366135623035363062643538316634616332663662 +34656135666562353539316164346235306366343039646139363731346336623635613862636435 +38383039306636613936363337376536366461613462333736356334333030356136666538623532 +61396632303366333964636435303933643938633831623434653063616537376634393434336338 +62633236663136636163613164346164613233356230393262306230383265323061396533373235 +64353838653134373639643563656562326237383030313834656464346330626530633565666563 +38366133396634646536333137313935626434656266376136613266393132383531376637653430 +62656464636333366536323135323138393434306637656161343139313832376265386334383433 +31373665313336636631636361303461616338653664386431663539653435656666636332383066 +31383135643138303166356633396137653064633939646264613266373037343532303461636438 +66316663303861623333613537626433623930623135336436313266393032633231326631393533 +35343334383836386332373234353166366437666232343633613936653066386264383364633962 +35373932313335376437343066316139386632303735356164613465663734616130616532386265 +34303561646639363636633966323563323164353665393962333036323862626637316232353464 +36366163663966616531383034373030336335326334636261313338323962663931646531363531 +34623761313833306464356532356561633639653266383933613938353836323638626664336536 +36333236663466623061363165343037653733316264336633323761356433613839616565643631 +33633937376631643465613165623636666335373032366266653832386131646366626137623263 +33313538643734363364363532633366376662663634653536396131323830316630386534666338 +36346666373161313464313239643438366537316237653130396234353435633231626630656361 +31666339316437373933343632393532356634356362663065613039633563623835633139643238 +30383930356634643933623236353564643231373837363630386566616531303364613336366365 +66663863643631633331343830623665316633303035383065353966303061306263666661613331 +37646332313332613161656162623532626466376232323433323063303731613332663231393831 +33663063306562653465326433343762616131626561356335313266333762346638646136613139 +39313266663533363161356461333336396436623136643161373331353565623164626635363961 +39313937393564356530326334323832303238353136326330633435306537356664633037663730 +31306435366439316332393764346435396638653038393362326663363566373263333031616266 +65383539613233643362316365366633343066386131333166353662646665353732313963353931 +30643938323335313935383638343936623666393032396364306161663938373638343732393937 +61306465383263386463366335613034396633343038653438663431363331306235356431353232 +33306666363835366636376431646236323034646634663935323636373366303633653636653237 +39353137643131323261333161623136613238323464623739313939336562366537643466626262 +31303261393161373039653861353731643862623065656430633930656131323562383066363765 +34636466663065623734633739396261306438323036303134613062343662643139653430343035 +65613161353836386130643037326133326238356564306630643339633265373864303830393731 +31626334356361393464653564623536323862393662323936616362353863623065656333656332 +64303464663062623132656439316132323631633933356333316331396135376663373563636631 +61373338613532333435656265356633663138653463323731333365386336393065613030616130 +66386238663331613037373863306533303233346531303462646635366139613237626566326531 +33323039343338313663303237643037646264626539663532623338633861666565343038346639 +62373035623562633532653563643339366462653832356334373665346432313363383561366364 +37323732313366363064343632636531343232373134646435363637656132323061613635623932 +39353264363837643530333037373065356137303964613637336435346363343266346665323761 +30656337333939346530653161386138643438313762373536343131333664373465333533366265 +30373365623863656535313638656338303835366361313836373661393539653961336564653031 +35393761653863373736663863393734346636353338363964306465383364323164316232663235 +38613137663835343965613333373362323839616430653761376430643466333838383831633764 +31346363376262663439646639623261626264643030326162616437633761653166303562336562 +66336162666438626166393665363230613737363936636531376662613834326533326631616337 +63383530346337356133666336666263303935613539656238313363303133656631656132343266 +38333035366466386631306338346330653132343130636165363365313535633233363739613830 +63363732366537663336336461646134383166653435396234383337356461336132633965663032 +64333235653335663031323535323639336334356338616431323666663461396136333532343531 +64333964353633313036623335636437346333306161343532393063336635386230623933613132 +35613030326237653337393237633037633536633737313133363537313033363264363139623861 +33386262343564306661633932643937393930383462663363356534636562393561626139323431 +33326638633166393561373638363961363961306165343235616462386164643831313439613037 +34656336653134666232383363336536666564653936316366383734343633353631393261383135 +36626232386431306637336263666232333362343165623737623262623231616536393535366265 +63383830373431313935346362316264383333633737613932623063363161363466633533333561 +64656530336337653338616434636663656663663265393564373838303836663734613536363536 +65346635366231336231353264353061363133616161633032623131666331643638643236313635 +35643738326266633566386232393736393064666264346434326138616361633032343034336361 +65663764633264303437373932613038616438366339303738373731666264396139626132646439 +64643839383565633338623230636535633338646437636364373161616362303665336264633439 +32363166373735326239643130316165353934363263386532626362383839366565313135376137 +30313864646262303862616237393335653438396262306237646235326637623238343532336434 +32393231633165306232313065623166333335656138376365656333383039666266383263303932 +30303764663231383765656266393265376262636165356330613333336239663161303138653664 +62343734383262616335353166633635373162336238623433353831343335353862363138376630 +37393462663831373335663863376230643837323864643262623831643731336234623066346166 +31643035383634663265653039303130326136653834383765356437386334373135353634633464 +63663838373834643762396235386431666265316263613937613666353963633363643866646531 +64616337353565306264336239373565396638633966343136386430613135303265343238666331 +33316635656132653331303630323461643230306436653132306230326666363338633134323732 +63616238323366623030323630666134303963663663623238336533663465653634643662343836 +39626330393865663830353535343430336263633737636466396163613837386536303639623833 +32383439383638633537363263393032646434623338343965326365373330663034303863393138 +35356462353139653963383361623062633633366235306230303633653863353761626331366532 +62366435363633326531343231373334346336393539373035303237396333326466363732306431 +65343633386238353265613466636262646438373061343830306565373762333661313039376366 +35306164643034353530363033623461653763616431396436303034383134613838336330313537 +66326632613334663133316464393662356264396134373531336437633265626165646532303134 +61646631353739306530393666333831346565333532376639343338393033326530363065343534 +32386566343463336636646464323463666363313863366339333931353135366263303831663638 +33353832656637376139346336663064343839323665336139656163356165306237393865613665 +63396561633035656634323866646362653837303565393838353235316663313932393035323561 +61613462326432366332396134386137633036623630663461323261653065343635376664396663 +36396664313163306335666131643164386563336362363631366562316263303538623966663739 +34343638393963353262653961643331373037653365653934336337663166333262343866306161 +31386438616637626165313738616164303137636632653233346337376633396439646638666135 +62393562353337376333306634303864383335663632623762656463623765303335326430303863 +62653334393962653430623161626337633063666338653432363136303166393661623733633165 +37333535346334343232636130336539366239623739663965316165333065373131383736366461 +32356361396330306362636434393830646139653137343432316433353731666564363430666163 +64336236313035633033303730646564373931653231376262396466613533366231353064636337 +62373836623762316266636233353762643435653265343433666632643530313435343036323730 +61363764303736346664316466363566363330323431343034613231383138343839346662313732 +65306631613265646531626466366632303930386666323563626466646330373539373764316637 +64646331356332313738306334306264333737346536633434353430336239313937656664663738 +61373435663838383765383336656661613833303331356561303032373866356439363561643963 +34653061326637383132353064633938633337646235343663626235366631343231363037363461 +65656331616636346634396239656430326133353935326334356666666133356434636161386266 +37306135373865643636333364613265626266373763306266666531353961326336646237376534 +34373839306138383032366135666538633936383435333131666332646361653031313065316165 +66316333663436343638306437353365316361616265316165306435656235636664643261356431 +39666332626630626433626665373533663334643634346266326436636533323736393439643966 +65336264616336376431343565666637343863646365393561336130643834663264396139393538 +63353238653366366134343331396364333330376165633236393933343732343237656635643930 +38643936353637646539626439623236363036366139333566653837396232663363346434396337 +63616634396633343466353535396531316464383136363032633763386261653064353763333432 +64616435633332376363356138633338343933626538393562353631626164656131643262326633 +36363165306261373930313232333836633664643838326161633963323132373361323964313531 +62653137366666383732373134333935306135663364373037343333333565383261663064653135 +35383632636664656466383462623962376339363035616461613830623834363934323635343665 +62363732663635396565383733396335613534303464643035663039323066396561323838663061 +31343862636638393730623864623161323631336433653832353139303638626264616238316339 +63313035303239666236623165663830666366356462303365363933376263353735373364643633 +38613139633439386231376337653861623563306337343932663261636664383335323034626663 +66386165316135323836346531303736363534313766666234346635376165393262386531653139 +36313238323132343163313735386139323734333063313836653964343566303937383163336164 +61373436613434373534376630323335623834303337373133336532626539616336613536313538 +39363835353635333962366166356137386533646665393430343030383565343338346132373366 +34333231343138313237383734653435333338326433633635666338333337306635646635623563 +37353563343233343933626333323764393735393264623161623237336339326464326131663731 +64326264383335376333633539636634326466353037323837616262393037666663343766323537 +61666635626164653736616231633465396363323833333165626465316235313132346133366435 +62313231313533356566393538363434313066393062383364303832393731653065336531643265 +64653733373264346231393765343831363433396539613263343466356365383034666264326663 +38356632623335383833346363393436616666663433613133336163653730663766633434643833 +66303338303033323631633161613432343336613730326630666336636639653464316334616134 +63393764363335336564316237376631383636633938393436353838656564633539623862393436 +38623334666236343461353633303166376634376336356238633361363438623733366532386231 +62656366306563303464383139633630333730323537656631303038303939383033626266333164 +37363132323834633561643361333738653662353332376537633633313832323930393162386539 +62313265333064666531353438303834366366663934303732633231666661626566383630653234 +33326139373135346135356563663563333766663237643161633361386462656564346336396465 +63623739393837386330623961623437323335653038386338396433363438666334336436303261 +38636562313961336264613139336635336135393531303839613733323232393736323230343130 +39656133626332323631636134666439336332393736653837333764306132343930623839333635 +33313031383334633866333762663266313037313661383035366361303331623930666433366465 +65386665356363623430656631333763616665353666383161353665613832393235303735656230 +66623665313236396133656436343930323063656362303265663537333061313930303037616235 +62613264376132356437316136343961356238653733303932303436313335633039663435653934 +32383563373965393662643934373963346231306562666536626335383838333036303764656336 +64333237363733363163633037343736356635636263376537616362373761373966373061363036 +62363631613261363466646561333566323364386237333962366636616663343437636538316331 +66633665363535646538626633333039636636663338323330363632306533333862303931333762 +65323738306538653866626562666264616233313030663863336164613561353865336461663230 +38633863633734363637626661653638356631336137623563656263636537643365323331663035 +61643537643634636131303434323162343137633466386435643264343034363133326630326364 +31643739633634323664373733613936326138633230313737386331373838326462373330346131 +66313139653134323764656135343333623165353133323337326637653238333132373438333562 +36663030323034356362623735333838306537313064373137336432626264626131623361353033 +36376333363465653237663764366566303261656462386166653936323665323363303066316635 +32373537383165323337393235633163666538613462366536303963653231653264313931366237 +39336339613130623039313565316565353265346535383133663432346461333138666536383562 +31636266386137366130303263633238316336643036393764643937623732366563313262653236 +32636663333166643839356166333033366631643762326633323639316331313335646562643161 +32636234313261353766396162623562323037646139303239313366626564316561396537663438 +38336436353338363239343631326335343335386533376533373864363762636237303337373962 +39333763346561336363353465653963326236633561306664343234366239356663616532633864 +34333231303765333966623839396533393465623839316434663039303339303265636231663432 +66616565326339336338303661386663383739633436343530656534643433663237316463663639 +65386161646535306133333134383530353439316430666564626362326133386366613161643135 +33376563313234393266663437643963366432393263383239663931626361333664343735666539 +37356335656561353333653166366239326332313437356231656235633366653035666436396638 +36323361663038376436366631356331313863333030646335353634613937316530316534306365 +38666138303034386661316563363462643734633232663237323537353735383664383331663133 +65393333336332616238613565386365646265643434326532316562623334353066643635666261 +62333336313064323562623264323465316565626236633866616136343663356131663638333265 +31613961613861373135613138636634643439343461663039653537633336653333356633656563 +35626238656664323938336562623030323763626564323137313464303565613963626333383463 +37313761356437626535343133316336376131303632393031383662343938633235623631353562 +65333631623837326630333730626432656639663335633537343732343637333233303365646637 +36666465343335393931616664643531666639336436346566623563353465396438333333333034 +65653833346134316430383037396131346637306362626665383262343037353231343463633432 +64323463366465613230633035303963663966386439623436633935653961363562623030393464 +63633330626264613366613164396366646563343563646566663263336233636635323138656437 +30353336303563363965646436643836353335386261343739333866623835303562346264323732 +61656532656238353361646464386230643734633463303163633162386563623664306539336262 +30663066373163333535343337633363326461306235633263666366643363623132643964306362 +61386634623463313634623762643761656536376130383964366134356662643132376564666365 +63643466326234316137623963383033353939333262363931643033393439663838663263356435 +35636634333233636530326332323365313462333136316534346232343432623630313236303833 +31353433343633363438663361323130646165663465356635373632333131356561393262303938 +34633536343265383233323866333032663134316363663062343965616561363364343266613838 +38613133383763323966383933663339373331626564343839616432353366323836303565313735 +63303362316232383539313538303331313534356135633130313566323337636362383363623739 +38343261396230393838353734626337643262393132323165633938346630376664326363376662 +65643433323734643235393831386364663266653432386231656537303239373932346630323263 +64613834383138373132323630373564396330633334633161663465333365616338353262663038 +61376130346663303964376264626431636665326131643436303635393733636566613665643532 +31623162313865353231333431646534666364366438313861653139613830623931663735396536 +31333434353463646434353866623863626564373037623265346161346234653338373732396364 +61626636333338636638346133393739303461353433333134316462656261373836636332303238 +32653464626431356435323237336431636439353837613861323161313233326131366163313665 +33353930633061356334383762656366626631643930316134623939333464633638353433323261 +39353561386134323961666364653535396631633737313363643235366239623636656266383932 +39656261373036643866373965653333616332343836626238616532353662303437623262333165 +62326162666439666334313531346662383031663736303365376230396662633830633930373738 +31663031363865663734643336373461323635623963616432326336636562646635373339353837 +39396334306566393662366566656131386138356162653164313066346261326261663562326466 +36663131633631656333613665376634336231336530643666323562636338323233386139616434 +65613130626161313435396532323563313034663339333761373865333461356265653834373361 +35616462326633653735636333616237626334343836623330363236323831396632343363366532 +65633434393836373035376262633566633830346631303465336639623332616632383331383438 +35376538343634303239373939613131333131353064313436373831613434326238353833663463 +61613362663539656533653537613631633064363530323462653365353031333539373664366532 +66333463396666646465616465623766373965623564313637383139356264353163343964383838 +35666335623235666232633762313538613066623935346164386633626338666665626431376331 +33393134643733633934376431656131326332623237383335666331643638386333353830363936 +34323866323630366265663033353033383338633932323064326334353664363165646230623935 +31356563653463343261373664373464336663343235656434323631373636623266383061386164 +39376465383966666235316563373836653832393634316630316231346661633235383636313238 +37303434666565626132633531393931366438633532343264623631623564336665323762613533 +61356638666634303739333331373434306339653335386566613031346630313638633336663537 +32306465623931386263336239336230333037313836646439336238613564363531386162363138 +34323834313666616430643465343737633230313032336135643930396263613365386565373562 +64356639663766366365356532626631373330656539393861623931643337663561376236343632 +34303234613332313134623832643732383664623236633237383466373063343832656538663133 +39353836646338636666656638623137333137616263323265653137623131316131616338646636 +36346162646264336235306338653561393438633161326462643363613834623431653861613131 +39626131323135376362343531353038343363373535306436303432393761303939366434316533 +64346333373032343833663739633030333838363163666366633432663932633334633037366233 +65356662363631376363356365353166613865346433623961633938643838666235386162346466 +66396466663961626237636265353230303831313731386633386533363162323164376261353938 +64623362346230376534653038613863613661373134376233613166333462623736386139316262 +63366364613864633865626361366437663862613731643962303065613338396535633933353663 +34643435396333343537613762646233323337613265386437653762376461626638653664386266 +61666633346333323330653764653464326162363062386630303239656230386530326334653662 +61366439363065363566346338366134313838393565626433313661393461333231373565376532 +35303336306264663437393736393762353666346635383165393161626534646535306138303266 +30393539313664653339313733306266326564303534346535343233313861356139386465616462 +35313933623761323833623936613038346165633561643132333662333862353138383762363038 +30663132393565356462333337303836396436653031663932366537333163613765386335623866 +64313033366365396166376365653932643630353465653433343036383761633663333532323464 +61383334343964636465383038303366623934393036633762313230383139336232663461626333 +62303234336230643431326333663466396438636561356262366331336161626266353634323035 +66653164626662303765336331643737616530386536316236643630663837386531363661323530 +62376664323633353966623764373236376631383335323636633137386363633566356562616162 +65313462383334623465643265353839333433343866613632636364636163323136316136636266 +63643566373234383033343032663334393234386534643066373266616264313962363433306336 +32303165653662366161663136356537366632326639626530346436396462393135616233333634 +39373265633132306461646463383531343662663734356334333661383738373161656164666339 +62623230383366346562313935356638626261343266306239303837333263643633336536653634 +64316435343237306137356239353832303563366331383365643666613239383933356236313861 +32316166343764666432393738336565353665386665613839626233373865376163393939303234 +37666636656439333530613039393437383736316335613666353837383937343731346239646261 +36346431666637393537353834333661666566623839663539383731653030666264346465613233 +35656234303432323965356138373336396135663061396335366331633534646530623033363532 +63643735633763323035363035346238316266373233396639383536623634616436646264373832 +38643862646430386366613336666539616336333236343935646165313834303133303662366361 +31343564336438336237353638643837656462633839306536666232346663333761666436663062 +32643236393162313939386164363263636431396263616530656161363361353564383931303738 +39653136376666663965363936356435343437663634306536613363343231653430323466333734 +37333862343632306666343437623836663766393035303432633063323033383137373662313139 +66623930306438386434353063613065656438306561366139303335336634353864383733646436 +38636638633762633566373536663233646337306539636533333534383735646436636232303566 +66613532386466323332613339343538323465323963326330323830333536616232613437373563 +37656263326665343532356165623735383139346263333537393730613262346433303865363434 +39383130346633343263393931343462396239653564613530303732326532393466363162633363 +62643265303331313763653131376535636333653934303366653963653061333362613464323534 +37373838393633346665373833336439666231636466333165666566336335383063646430383831 +63613334323363313135366664663965333566396563363262346562313131333366343834326565 +39396663386539376535643662376266313264366663613539663238343731643339343365666463 +66663434663938626332383963306237373435313562643035643566613064336166373137613835 +61653230326536633365383464343862356430343265653835623264646438323333303066356364 +36306266626432313431393133363966333437633734353732356332356231343632663935663437 +62383131316534323737323233646431623539663438326365343533626531643066643936383764 +39363061323133386664313331346563343031306134336530633061626462393565633865383166 +30666465376635636366386463376435646130633336616463376462653734623134303735326637 +62613133353163326530353464666333633865323134666233643432396636313730356332333837 +30343062393430646461396235373136303435313737383835373266656631383265323039623163 +33373461386665353031663665653135366533666262653039653534653566646432343762353766 +36333234373261653733383837323363373132306533656339393563663934303737623131303361 +66376637373333363232666663656534626537666430343961376364343638353365626332366562 +34653163633564373533333861333762613934666633653961663337343361363439306434303636 +36623536653562376235356564656437643338366565653734323735326465303366363637313731 +62393834326534373261653461373663376665346263613132646263323966316463646566376265 +39643833346130373665323763346138653037623066326533353537366166373065613830653261 +65386437646633363763363235623537656335356138336564613434613334353562353133316265 +30363036643937623964393738613833633032316431313231376533353534356537323265306530 +33353265623633333664346264343064373638313238316666613534353537623135306632333662 +61663664653533616364343732653134343338346164303936323136316232653061613533306166 +37356133383564393436343031373832383761363062356136613434393431313261373339663230 +65383163653464306334663939646262323262386131333064353738356263663165646337306230 +33323838386433616135613466356337306234343132653762353263646366353839633765646166 +65323437346332643465313832383534343538346631316237643536343032376465393836626562 +32393939383836643166376662373931613738303633623264653435663131323261316339363439 +66656463653232323538633931303131323933373135316437623836653031343865393530323933 +39666661666535616638626231616337643962653163343762353230393161303637356661366236 +30346335613662363266353861346131333463623138646535623933376637383837633330336462 +63656362636331313163323532393131366637306134363464643730373636623933333664336134 +36333731666462653037363536333535623034626435366135363137656466356337353431323432 +30346665663563633564323065303264376439653639626131383264396436393039396635383938 +66393137373535336430343361656133383962373031663833336634323932333830633331333033 +37343937303939643839393761363433613966313163326466653232393561313966386264306662 +34353061656461313462306163353266333731343965326239656261633431396334336637363035 +66333539616439646363333564656635326262653234343332306434383862326438666364393435 +33633961373232386135346431366661336566356232386563323263323466353033666337613537 +32653237336638336637646533383564663630643463333666623532363365343237656237613138 +30613232326436383137306566623632363266636533386132373337663934623331333734376135 +33323564323035313534336239636166656235356661376662353738346232653835333737346436 +32663833613032326133646663613031343066343765623137356632353234663733313138316663 +38343532353932326664656139623566656563623066366132653938633433613036623261356530 +65633637333864393031316430316163336531326562366232376135373430383930386332323131 +32373463383636333861393830343866316166373136333134353766306662313032643362376662 +34613332653439313233346335613035383234376661396661646465373533356664333635663462 +31633536653863653661613136626565333036383638646537366266373937383937386565623035 +31626562383934386239653531386165306237626263643834313130633835663934623061363762 +65613263303139666536303136383065303662363538333761663463343639363531613462363534 +64306265363263396132323466326432656335326433316166373639343237363139333039373631 +39613532626535383932373033666365346561373936333738303137333139643338346635396133 +39646163393133343963376438333938643662306339663962346161626130656436653737623261 +62346332313031336234303461376336666561323130383565343761316463623137613161363862 +31326630626439306564326635656630383262623538383538646634373131616362333565623566 +32343534313664343333306438626466316435653233613431376231393764386339326566363634 +39623433356433643435626231646137316364346437393235313930636166316139333137303030 +31306166643733646337323930326464343430313165626237323539326230616466663632336239 +37643239303863663736386132323565313832613737373337306130316532306534346136613166 +62346264393539373533336262336432343335303331663861333062316239323165636435313236 +38336239623765336131663061636430646133396530633639383830326664616266616462366664 +32396363653934613331653534396662326434336662656436613134633439316161656263363937 +38653861376232303137323135346134656661623233323030323034623132663362336363366661 +34656238373138663465333432353730306133613261316430363062323633613137363837383738 +34666365363663613930373561363234613463613864306463306339353066306139363238363538 +39336239303066623865363935626434333335353235633766303564633335653131663036303832 +30393362336632343638373966623734623533316636383263623031656436343639633262633461 +66643934643165393132303763663931376435666661666434666162636566636530303334616430 +37663133333836613066353161666363313265323666633162653966366637323239633435366136 +62376134303533663637313063633461343061386239633130363662663335333335613630636238 +32623461393237663333636537326636363565386537393765643964633361616161623230663133 +38666631393634333763373166633161316133613865323462303866333837636132336461643431 +31353766323364396530663035356535373331303036366662383133336333623732656235363939 +66626638383164356337383733353333633837313035633834653437356562326465636565386234 +64636162316664646237623464626534376466636331666664626262353466373930653463643163 +38623163646366663139386261363635346164363739666339626335306136366636336632623464 +39376165623034326237353434643431366530343733386432356564343863393166363433633964 +38316437653462303936303162326563393832393036666133653533383432306338323132383634 +32323733616462353834633731303066313634303065653665386634316563393636653936353136 +38613437386662383332323131636235366131656433333537346565616261623639646138616230 +31336236653537316563383765303063366165363834393662346131353463326464663038623661 +39653361373763626635363238623633353135313431316531336238653562636564346661376439 +39326362353537383062353639663061316236376636353736646331646633326139383939393636 +30653764306336353966323461656363366262633065643436643430616362363564313538336661 +38336464373361633863656234666537373530613638616165343037646234373038303635356431 +65323938613235633930643930373565656530353766336235346537316563333733363765643262 +66646536313431653530373666613162333337383765333838633265343935613263613936363339 +37623665393937633437343466646561376630303639636230653430376563316463386535303862 +65666561626366313564666630356334323563303636326361636636363735343464393030623736 +39346563343765653131663563363633636566316666376239306633306463306634336237393764 +61386332356337626230626330613162643132396164343164373736643764326338356535336661 +31653865383762383838303364636430373164343733356564373534346636663965363865303965 +63333336626233626233373065326461336162663061373336353536356539326331373437333633 +31326632626132616332653361616139643037333734613235373133353262633135613938316666 +33383633346265386365636331313730623565386235313638373330626530336264303963313064 +35646663393039353038366331306364616165396532396630633334326364306231623431323034 +36626136396532336163373535346262363738386533396337643339663465393230653436333633 +65306632336162366634323632346634383834663736656261393564623965626362376161636631 +35396266623930363534643664666665326664373935666338323461373030333761353138353630 +32346538623136346534343565303565633865326331343530376636303233323130616233643930 +30656666656334366631303365386366633138316239376265643965313736666633663130646666 +64626566343064373837343465626333626462353236663232346362633734393564613434363163 +33386133383232613935613562626163643863653264343637366662633464326632636134353465 +34363165323837386362393634613932373432666339623936306162653531636164353061396462 +31633166323039343361373137653035313037343365663838353536366162383336306631323137 +37663739366461356438623761343632383863393866323837656138623635623263393433323736 +63326335343533333838653534613761393262366564613166663838346164616563376435636230 +32326663336163653238636638623961386636363163653062613532393630396135336135643166 +63336134386464326265376534613439646462623466653864396137386165653131663735386561 +66356362626466643330326337653462396639613861303765373264396137663466386235663036 +30393563393836396265646366643233336134623137613261646266343533323562663266623734 +35333665633833333363336634333865386335653063316534356237373539373432373366313862 +37343836396333626163386135643563646439376362333137386530333166646563666639306537 +35633066663031613436396330376339343465333631643361366261363665653131333361653864 +37656365663163373561386566303433386138613033623764313966356365613161646562303739 +34633437386337313836646238666365613731343232633334613366326237333063663664643566 +33343734623063636332343563353932616133383661303337623066326461323436616535313836 +64666433383432313939336530653038336231663531663937386138633239646439386636666661 +35633332396261646134373765616361323934643835383938336563373965373461663638333965 +66346338393732373231623863653465363866623733373635343533313866633834393530613233 +37373830386537336636346436643561363363643435373637343863623534346438303461363635 +62656263613263653134316432663130386337623766396530663064383437623231613461656432 +61396538626166396464616135353933663337333534316137663035383336326535333832396463 +31303561383465383638623265346164346531653736393133393633326430616132313361653461 +64643666303764363733373735636365666131323034626663343830643464666532623562373261 +64623738366435333563643161396634373865333631633538306266363437323663383062313538 +35303831633364353531336561643366393134623631623435316639363266323436343164633633 +62633831306465356534316561626331613739636563376365336430646532303864383031333066 +39383664663231333937653139303231323432333834323235616565356238666334326437623962 +36643462616534653062326564643537646663323932306264346663396663383935363632623535 +31643039373131613339383162363862333465663932653539363631656637393961653933376230 +33363134663963343530376363323762666138663837306632336538316534313536366165643432 +39326332336535363862633463336163303233656364313333646632633636343236303039343539 +38656138636534303135616362666539346430363961343538393639613162373439373766643862 +61386662306130656131383236353266623134323538343035323634383464653465326161666136 +33323361363864303265363037306438386435653638353561383366386432633531336437663339 +39353438373361656561633035326664353439653564333762396337323331613665643436306338 +63353836643534663862306530303434643430396334613734663634643635303130303964313762 +64343731633162643661353536323335636462336265653334316564323230336365316562623866 +38383432623737313238326631663865616462323334653038643261313837393165323431353865 +37653961636335363766326334623636643165313464326235316634383266313630316338333461 +31336135303635363937643739616438336430626637393734346562643531643966376232343430 +31353530353864623664323062343731333836336635393035386264373338653733656331643132 +38633430346438363332353135623663313466646333313037393239326635343838623038633933 +30303233653366616231643638323036393937643238643262313238663537396162666138353339 +32653637313737393964353964343331656331333862393864666637316330313762316163323235 +32363566336430316538636263313366386465663161393965636161393763353437663036363862 +65666533636239363866653836386336613066613063306432613734646630636639393461336563 +31376337613334333566623936303165353639346639646238393231336566326431333534336262 +30353938396539336434393061623961396231353866633965376263383461383365393033363237 +37343532343337393239666435313738663766636239643739623365343739633961326162643264 +62636634326564623963303066323866393432343737373162396233306639663862643439383533 +31633336343633636262636633626463623763386633383665303965353030613832313063646634 +35313939313738306566356433333364393462336239396265373564613365353735346639353539 +30316531343630613864623239323433323363373438363363373139306531363738376336613964 +65663562396338656534626134633837386163626466616133656632653733633761666132306634 +34613136653464393037343466666331373635353939363939336431353063653632373539623637 +66663033346231353731323333376666323131346537343835653930396632363265396634633331 +36313466373263306664633966643430626362323134323962346638376665363833646562356237 +34653638653733306265653431353536616161366531643233323931306366343463373266643464 +39306638623035353765616462633965316534626137623165383739393539336433663336326437 +33323938343165326662626137646331623937366230623435623636366539323730623635346439 +64613239643939363931393235636332303439643937396132363434386139643734366639316236 +31313363316562373437623639623265613431653038633637333433353936326234633734346532 +61396333393439613538313636653836646533363765666134626432626230643133626531363835 +39373635346134626535323938616537663462313635616234363565333132636233656164663365 +35383263366331623432633561663837656239393264656364626530623637633434386231306235 +33366436366639326566303564346333316164383530393061316535356434623061376165613934 +32613931306164613839383636346133623234643736333266353938366132376234613431326533 +63316634386463303635386337643066373666396363666331366337353132306365383864643566 +38343664623734653264393065336464333633383238363531316361383736383436336466663132 +37393663336463343962626239326162313665323163356263336166376461306635363062653464 +31323438373462393961373562646430316461326466383864633463376232663931616562323733 +35376463343236356332313036393463663837323939663130636532643263633130353432363363 +30393865366661323338663637336637623961353666343063633933376136393234376565666566 +64326434373230373461393162376236323835366136666263366361366561363434646232356636 +36346139623062353932646462636265643566666666336236646531666535303933306437386136 +37323939376435666466393938633530363163393063656265626336633436343433653435313531 +61616361663733303264613662346337393131366134343963653762386134666139663763623936 +64643264393631373464333461376537656334656665643537623234326530666362663731363563 +35383235363665333232616364363238623433306464333762313966653662663634613238366136 +63616663626362656361646163633534633631393931366134623739623231356239636163313763 +38366164623730613865666462313631633536306133656462636163356365373038343030643930 +38376236623965636663633135323538373066343632303730613132646231653365306563393636 +32373964333664313138616530653661316266326337363231643438386534656364653637306637 +63353833316461366563613537373063396333626266303031326135303130313031333239346664 +39373533363731356437376438323238616531663264653965373935663261633261383234353864 +65343035643465643966356439623334633866643431326265643839646464363439623765376339 +65353165666262363832393433313931626335333135646638363433663731623364313537616266 +31656432663234396539396464633665346663623466376435623036643531653764336537366438 +35623138646162313935366636643262643739323236646161353733336466323365386463323433 +37303561323937653538316337643530353537313133353563373833306134663636356538353561 +63343837613234393762383063633133373533323964643034373138633163333765363332616635 +36326430316664323339376462356263616365663631626663666538666235653136616630353937 +31383136373437653366626362333066346235313930663238376338653563616433653066643237 +33303530353636623530626338303331313462656639653337653637343037333562643935383963 +63626235326538363533326566613130636136623834303539643530393238326661656230376461 +61663737303931626633653461663134663462313830343732666266303464323362323738343463 +38656234376137653238323636366164396162613730323037396135323230316364613961313563 +34643663633236343533613938343033313937626665306464376531316539353761373230613266 +34306338646537393763653732623364643464386563626365343639613136333132643866346135 +32346165393432393132333535363531373766656163323336343736326366666634336362343861 +64626464323734303566623066653361363731656439643230653430323335646262396364323538 +38326138633831396163646139346532326537633239626131333835353131633965663837636632 +33373865306339643961376462363838666261653464636132323436646365393462393961323931 +39616265623439356531376266653732393763653338643062343239383539393130616138313865 +63636262353762353861343063313766393232393538666232383762393363306564653463633836 +39383766626231303333373464353462306635343539653965396231633830356535646132386436 +3437383537636636356433316566373861346535336335663431 diff --git a/compose/03_syncthing/config/key.pem b/compose/03_syncthing/config/key.pem new file mode 100644 index 0000000..02664c9 --- /dev/null +++ b/compose/03_syncthing/config/key.pem @@ -0,0 +1,20 @@ +$ANSIBLE_VAULT;1.2;AES256;secrets +30383836353130323131653139643365346335633063343362656530663538393435663335613132 +3533343531333434376632333630343364313061633066330a373263393966336430616530386564 +32313530333939333035393863623932666261316664666132366331626561306230306238323733 +3230396463303764300a643831633734393964363534343932303039323161373239363766643037 +35333362666332346133363063363466343338653963353333376162373331316433326436353738 +63323339346134626131316136663736313737653866393135356262363832613262316139613963 +32646532343639303732643432306239656135663363643263393832383936373837626665616662 +37373865303364373035363832633932323233396336363863336338613237623637323665386536 +37313164646266663135336432363963643630366434356230626663343534376330343461366664 +33623261313662663636346361386332343630396164616137303364643661643736653462323062 +32613335653732373365646566393930666561383465376665383531393037343638633763633563 +38613164373332306237373737623839386336613166333139656264336131326631343438373235 +31343739363366396464623662373539613433346438626335303765623738393930666430303139 +66386264623666393234623032386135323231653965393466656634353532616530306265306666 +62663039333231316130353061313233666639633563346635623464363135383863666532323432 +63376664343630633631393232636364633036636230663864323437636439623961613634613638 +38626161646166336138373931393464633030323338663763383135316665346137646139333530 +61386233373538636433363832363537313766363566623961346336353532303761313664383032 +646138346562616433343462303065306236 diff --git a/compose/03_syncthing/docker-compose.yml b/compose/03_syncthing/docker-compose.yml new file mode 100644 index 0000000..2c1c161 --- /dev/null +++ b/compose/03_syncthing/docker-compose.yml @@ -0,0 +1,25 @@ +version: '3.9' + +services: + syncthing: + image: syncthing/syncthing:1 + restart: unless-stopped + ports: + - 127.0.0.1:8384:8384 # Make GUI available via SSH + - 22000:22000/tcp + - 22000:22000/udp + volumes: + - syncthing-data:/var/syncthing + - ./config/cert.pem:/var/syncthing/config/cert.pem:ro,z + - ./config/key.pem:/var/syncthing/config/key.pem:ro,z + - ./config/config.xml:/var/syncthing/config/config.xml:ro,z + hostname: "Netcup" + labels: + - "com.centurylinklabs.watchtower.scope=update" + environment: + - PUID=0 + - PGID=0 + - TZ=Europe/Berlin + +volumes: + syncthing-data: diff --git a/compose/04_blog/.env b/compose/04_blog/.env new file mode 100644 index 0000000..c135932 --- /dev/null +++ b/compose/04_blog/.env @@ -0,0 +1 @@ +COMPOSE_PROJECT_NAME=blog diff --git a/compose/04_blog/docker-compose.yml b/compose/04_blog/docker-compose.yml new file mode 100644 index 0000000..c70769f --- /dev/null +++ b/compose/04_blog/docker-compose.yml @@ -0,0 +1,18 @@ +version: "3.4" + +services: + tobiasmanske.de: + image: registry.tobiasmanske.de/tobiasmanske.de:latest + labels: + - "traefik.enable=true" + - "traefik.http.routers.tobiasmanskede.rule=Host(`tobiasmanske.de`) || Host(`www.tobiasmanske.de`)" + - "traefik.http.routers.tobiasmanskede.entryPoints=websecure" + - "traefik.http.services.tobiasmanskede.loadbalancer.server.port=80" + - "com.centurylinklabs.watchtower.scope=http" + restart: always + networks: + - gateway + +networks: + gateway: + external: true diff --git a/compose/05_watchtower/.env b/compose/05_watchtower/.env new file mode 100644 index 0000000..7940205 --- /dev/null +++ b/compose/05_watchtower/.env @@ -0,0 +1 @@ +COMPOSE_PROJECT_NAME=watchtower diff --git a/compose/05_watchtower/docker-compose.yml b/compose/05_watchtower/docker-compose.yml new file mode 100644 index 0000000..b8fc621 --- /dev/null +++ b/compose/05_watchtower/docker-compose.yml @@ -0,0 +1,34 @@ +--- +services: + default: + image: containrrr/watchtower:latest + privileged: true + environment: + DOCKER_CONFIG: /config + WATCHTOWER_POLL_INTERVAL: 86400 + WATCHTOWER_CLEANUP: 1 + WATCHTOWER_ROLLING_RESTART: 1 + WATCHTOWER_SCOPE: update + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - /home/core/.docker:/config + restart: always + labels: + - "com.centurylinklabs.watchtower.scope=update" + + http: + image: containrrr/watchtower:latest + privileged: true + environment: + DOCKER_CONFIG: /config + WATCHTOWER_POLL_INTERVAL: 900 + WATCHTOWER_CLEANUP: 1 + WATCHTOWER_ROLLING_RESTART: 1 + WATCHTOWER_SCOPE: http + volumes: + - /home/core/.docker/:/config/ + - /var/run/docker.sock:/var/run/docker.sock + restart: always + labels: + - "com.centurylinklabs.watchtower.scope=http" +... diff --git a/docker-config.json b/docker-config.json new file mode 100644 index 0000000..87c9111 --- /dev/null +++ b/docker-config.json @@ -0,0 +1,11 @@ +$ANSIBLE_VAULT;1.2;AES256;secrets +32643032393961616163376565363738383166373031393037306436383037663736613439326166 +6439663833356435653161636132616133663062333063640a373137646539616561376535313739 +31373932393934666133356332646237636563623631316233303962393637386534313966353839 +6164343438666539390a643032333839633737336162383830386436653462363963643639616164 +66656233643639613639663962383261356661343232663365353031623533643238303838373764 +35633838383533666662636263656562633865396330653733616366386232353162656362626161 +32383830346363313536336632656265636437323665316362303966366439316533333934373039 +36633531383831363533323734373936633339373562633563663863623733346662613435636664 +36633233333961396633313234303962376535616139323062316137616536326235346231666238 +6231363536663534653466633730316637313162303837626366 diff --git a/inventory.yaml b/inventory.yaml new file mode 100644 index 0000000..bb6bf0d --- /dev/null +++ b/inventory.yaml @@ -0,0 +1,12 @@ +--- +all: + hosts: + host.nc.chaoswg.org: + # ansible_host: 192.168.0.52 + # ansible_host: 185.216.177.198 + ansible_user: core + network_interface: ens3 + children: + unprovisioned: + hosts: + # host.nc.chaoswg.org: null diff --git a/playbook.yaml b/playbook.yaml new file mode 100644 index 0000000..e78e0cc --- /dev/null +++ b/playbook.yaml @@ -0,0 +1,202 @@ +--- + +- name: Render compose files + hosts: localhost + tags: template + vars: + render_path: "./render/compose" + render_blacklist: + - EMPTY + tasks: + - name: Read Variables + include_vars: + dir: vars + extensions: + - 'yml' + - 'yaml' + - file: + state: directory + dest: '{{ render_path }}/{{ item.path }}' + with_filetree: './compose' + when: item.state == 'directory' + - name: Template Compose structure + ansible.builtin.template: + src: "{{ item.src }}" + dest: "{{ render_path }}/{{ item.path }}" + force: true + with_filetree: './compose' + when: item.state == 'file' and item.path not in render_blacklist + - name: Copy blacklisted files + copy: + src: "{{ item.src }}" + dest: "{{ render_path }}/{{ item.path }}" + force: true + with_filetree: './compose' + when: item.state == 'file' and item.path in render_blacklist + +- name: Provision Volumes from Snapshots + hosts: unprovisioned + # hosts: all + gather_facts: true + tasks: + - block: + - name: Gather file names + delegate_to: 127.0.0.1 + find: + paths: ./backups + file_type: file + register: snapshot_files + - name: Filter names + set_fact: + volumes_to_provision: "{{ snapshot_files.files | selectattr('path', 'regex', '^.*-latest.tar.gz') | map(attribute='path') | map('regex_replace', '^backups/([a-zA-Z0-9_]+)-.*$', '\\1') }}" + - name: Print + ansible.builtin.debug: + var: volumes_to_provision + verbosity: 0 + - ansible.builtin.file: + path: /home/core/backups + owner: core + state: directory + mode: '0755' + - name: Copy backups to host + copy: + src: "./backups/{{ item }}-latest.tar.gz" + dest: "/home/core/backups/{{ item }}-latest.tar.gz" + with_items: "{{ volumes_to_provision }}" + - name: Initialize Volumes + community.docker.docker_volume: + name: "{{ item }}" + state: present + with_items: "{{ volumes_to_provision }}" + + - name: Provision Volume using alpine + community.docker.docker_container: + name: "restore-{{ item }}" + image: "alpine:latest" + state: started + volumes: + - "{{ item }}:/backup/{{ item }}" + - "/home/core/backups/{{ item }}-latest.tar.gz:/restore.tar.gz:ro,z" + auto_remove: true + entrypoint: + - tar + - -C + - / + - -xvf + - /restore.tar.gz + with_items: "{{ volumes_to_provision }}" + + - set_fact: + provisioned: true + cacheable: true + when: ansible_facts['provisioned'] is undefined + +- name: Backup + hosts: all + tasks: + - name: Read Variables + include_vars: + dir: vars + extensions: + - 'yml' + - 'yaml' + - name: Install backup script + become: true + ansible.builtin.template: + src: backup.sh + dest: /root/backup.sh + mode: '0750' + owner: root + +- name: Setup Registry credentials + hosts: all + tasks: + - ansible.builtin.file: + path: /home/core/.docker + owner: core + state: directory + mode: '0700' + - ansible.builtin.copy: + src: docker-config.json + dest: /home/core/.docker/config.json + mode: '0600' + owner: core + +- name: Docker-Compose + hosts: all + tasks: + - name: Gather local Config + delegate_to: 127.0.0.1 + find: + paths: ./render/compose + recurse: true + file_type: file + register: local_compose_files + - name: Gather Remote Config + find: + paths: /home/core/compose + recurse: true + file_type: file + register: remote_compose_files + - ansible.builtin.debug: + var: local_compose_files + verbosity: 2 + - ansible.builtin.debug: + var: remote_compose_files + verbosity: 2 + + - ansible.builtin.set_fact: + compose_dirs_tainted: "{{ remote_compose_files.files | map(attribute='path') | difference(local_compose_files.files | map(attribute='path') | map('regex_replace', '^render/', '/home/core/')) | map('dirname') }}" + - ansible.builtin.debug: + var: compose_dirs_tainted + verbosity: 2 + + - name: Stop tainted Compose Services + community.docker.docker_compose: + project_src: "{{ item }}" + state: absent + loop: "{{ compose_dirs_tainted }}" + + - name: Copy Compose files + ansible.posix.synchronize: + src: ./render/compose + dest: /home/core/ + archive: false + checksum: true + delete: true + recursive: true + mode: push + # directory_mode: "0750" + # mode: "0640" + # owner: core + register: compose_files + + - ansible.builtin.debug: + var: compose_files + verbosity: 2 + + - name: Restart Compose projects + vars: + docker_restart: "{{ lookup('env', 'DOCKER_RESTART') | default('false', true) | bool }}" + block: + - find: + paths: /home/core/compose + recurse: false + file_type: directory + register: compose_directories + - ansible.builtin.debug: + var: compose_directories + verbosity: 2 + - name: Restart Compose Projects + community.docker.docker_compose: + project_src: "{{ item }}" + state: present + restarted: true + recreate: smart + build: true + remove_orphans: true + loop: "{{ compose_directories.files | map(attribute='path') | sort }}" + when: compose_files.changed or docker_restart + + +... diff --git a/setup.bu b/setup.bu new file mode 100644 index 0000000..3d30715 --- /dev/null +++ b/setup.bu @@ -0,0 +1,100 @@ +--- +variant: fcos +version: 1.4.0 +systemd: + units: + # Installing vim as a layered package with rpm-ostree + - name: rpm-ostree-install-pkg.service + enabled: true + contents: | + [Unit] + Description=Layer packages with rpm-ostree + Wants=network-online.target + After=network-online.target + # We run before `zincati.service` to avoid conflicting rpm-ostree + # transactions. + Before=zincati.service + # Otherwise vagrant will try to run the playbook before we got python + Before=sshd.service + ConditionPathExists=!/var/lib/%N.stamp + + [Service] + Type=oneshot + RemainAfterExit=yes + # `--allow-inactive` ensures that rpm-ostree does not return an error + # if the package is already installed. This is useful if the package is + # added to the root image in a future Fedora CoreOS release as it will + # prevent the service from failing. + ExecStart=/usr/bin/rpm-ostree install --apply-live --allow-inactive vim python docker-compose borgbackup + ExecStart=/bin/touch /var/lib/%N.stamp + + [Install] + WantedBy=multi-user.target + # Make sure docker is actually starting without a call to the socket. + - name: docker.service + enabled: true + - name: borgbackup.service + contents: | + [Unit] + Description=Run Backup of /var/lib/docker + + [Service] + ExecStart=/usr/bin/bash /root/backup.sh + + [Install] + WantedBy=multi-user.target + - name: borgbackup.timer + enabled: true + contents: | + [Unit] + Description=Daily backup + + [Timer] + OnCalendar=daily + Persistent=true + + [Install] + WantedBy=timers.target +storage: + filesystems: + - device: /dev/disk/by-partlabel/root + wipe_filesystem: true + format: ext4 + label: root + files: + # Set vim as default editor + # We use `zz-` as prefix to make sure this is processed last in order to + # override any previously set defaults. + - path: /etc/profile.d/zz-default-editor.sh + overwrite: true + contents: + inline: | + export EDITOR=vim + - path: /etc/hostname + mode: 0644 + contents: + inline: host.nc.chaoswg.org + - path: /etc/zincati/config.d/55-updates-strategy.toml + contents: + inline: | + [updates] + strategy = "periodic" + [[updates.periodic.window]] + days = [ "Fri", "Sat" ] + start_time = "23:30" + length_minutes = 60 + links: + - path: /etc/localtime + target: /usr/share/zoneinfo/Europe/Berlin +passwd: + users: + - name: core + groups: + - docker + ssh_authorized_keys: + - cert-authority,principals="rad4day,rad4day@chaoswg.org" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKUN/Ik3CqhsVLGEkl2rJLUhC0AXFmVp6BgETaqgVKq5 user-ca@chaoswg.org + - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKhzs4vCOhy3yH2TF2bO5Qalt2P4WG4nDYTLarPKFrdM ansible@provisioner + - name: borgbackup + ssh_authorized_keys: + - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEeiXrwUxnzo/MLn3PdT3shFIJu7zia8uwlcQhyPautw borgbackup@remote +... diff --git a/vagrant.bu b/vagrant.bu new file mode 100644 index 0000000..fe21dbf --- /dev/null +++ b/vagrant.bu @@ -0,0 +1,7 @@ +variant: fcos +version: 1.4.0 +ignition: + config: + merge: + - local: ./vagrant_INSECURE.ign + - local: ./setup.ign diff --git a/vagrant_INSECURE.ign b/vagrant_INSECURE.ign new file mode 100644 index 0000000..7d4b9ad --- /dev/null +++ b/vagrant_INSECURE.ign @@ -0,0 +1 @@ +{"ignition":{"version":"3.0.0"},"passwd":{"users":[{"name":"core","sshAuthorizedKeys":["ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key"]}]}} diff --git a/vars/vault.yaml b/vars/vault.yaml new file mode 100644 index 0000000..c81a89a --- /dev/null +++ b/vars/vault.yaml @@ -0,0 +1,90 @@ +$ANSIBLE_VAULT;1.2;AES256;secrets +36613830363562323032396439303962393331373532303230633031383936646463373037383234 +3765663463646631353530633465633463663435623661610a646435303037343066383262633733 +62633135346233626663336364666639633939326630313565333739353533653238666332666565 +3765666461356363370a636665353031383064383839613061336639343534623562623434323537 +37653637636333633730653339366536376236386337303163336563396436323930323363386537 +63353434333866343461386634656132633162316634313265313966393238343066336663623630 +38633534393534646135633239353335323139333038336164396334656532653633626334656534 +62656663633836343139363863616136346538313131393165613331623231366636356134363765 +37316331666636643162613830313035626239613566333965363530333562376137663864303164 +64323735383036626161323561316334643931623739346539393539323161623634316639343736 +39323666306539663938303966346464653464613230633833643832393030623866616362353632 +65366539623636383738326339623764363364393434623663336632653437663438626463323264 +34313630613030666538393637323236373937376366653932383933316134373133663436376465 +66656365613864323366326638626337616433613731633861326436666635643134666461316465 +33333463393966393266323235323236343231323136336130623938633534633365656463386333 +35643366653961643330373033383935636637366463363466306133646261646234353835326134 +31306534336362663034636230386235376133393534643033323935303364643832323736656236 +33396338303833336566613233306436616334316538646631366564376134366332643939363039 +65353834303439373736353630653063616537393464333666393563663833383736346436616430 +39323964323362633135326133363233653666363562613264376161326335636235303436356364 +62623539636332363065343965393635613063326661386265643563326463653632326232383538 +63363035613466323038343935333730636434393433633235646134313366656132353939346536 +38333139613132366636323935636439613162613034343034643261393363636466663938646134 +32343763646561626630333964333165663538313735666336653565646638363636316136356363 +31323431303862383039393232613365616464356636333033663037363131623735643265313936 +33653933323563396131643561363531323130323435653237653633623232343762386164383430 +30393936656639346330333133343234336335313134613134303464333430623261343439653165 +34343338653564383539623366633235643761646138376236323833303538323431343632386536 +64326338383434666434643761633465653235306239363937306332396537616362303662656239 +65666465373531343937396365663239653138656537323735363766333361633130316239626631 +65363639356333376337346463313939306132623931346333656334396163363437336633363062 +39353433656238306535393265333462366439663161396439336435386338653736386335376663 +63373934653636636338656230353232343035313931373865376162613336363338646263383561 +31666534313266363338363461626363326336383261333034363365633633326535623936326339 +34396337383630316364336532303862396436373239346239366563326230613761656338363936 +33363866643634666662393261326138373338376435366338323335623138306662356430663239 +37363130626562363039343532336639313062316264653063303866616138613630623435393131 +62343133316332623963653432366539366536623766333866303635636561313539313061643139 +61316632356563363032653663366535346433666138633531313939633966376265386563316363 +31326636373134386162303966303964616261376330666265343863353831313266663138343461 +31646432656330613166316437393661353337626633613937393837643938636337636135626265 +38386366333565386135633234366630366663353263613332386639313733326631313635326134 +30626266653063663835346431613135643663333735393761373930353831333836386539666130 +65343732363037633764356233383365653062653336303239303732323634623032653736656134 +34326532343735626166356533306263346333653965306666343732346630316137613832653331 +33316530366135396262613935366436323735633530363832623137326535616165303232396638 +35646633326235343435343036356466653866623766623433633261353332306534643331386130 +35313533633663396232616331343664636461613366326166663563316639356165326165306430 +38393165383733653439623138376134303639323736386366643836393562383133663761343264 +31656637666262353562613365336638323865353637366435373261353064666638646563653066 +65313164396236363861393536313437363766613132616161633639313936353263643662346335 +30643831336562623838386233663766346664663462623733396261613637363132623965396161 +32366437623162373031643931643064616261306133653735663565323539656562393764306435 +66313165346432663339656663303833346634376162313739376361353130613464303266643038 +35383032626164326330303537396139366633613730656232386632373162306531376432356533 +38356538623830306530323431343432663230376231383139656232376535336339656365666165 +65306638396430633962336434663438613239336533383633396361386565383235366336346233 +34346332626637376131613061303134393065316137383564353335343135373136643265333865 +61303832613365663662613833633764613665343338373666663236643336303534323664326266 +30616666376538356539613632643463323036346664393830376434363561666232353432643039 +64623233306336346434643133366337666661303666363832303831346137383033636637396536 +61346263336566383838386262353637396334326161343866623733366537353934363639343163 +34663264616364636261336335653731346137623161313434343763646435616665303938386130 +65373435303731626531383961343663633935393239343761336462363063386234303832303630 +36613430613365646366383830643566366135303061373536306662313634383333633334353661 +63366235613533396337653462616638333639306263633035313363336266343662356335336639 +37366633316334623237393733636263626339623337643931653363643865636331313863666234 +64336439383037386232313066396337393833663965306462366366376237663634643764646635 +38313864623232616136656533363133353630373038626164653236363662363530333566373035 +39633932383831316161343265623438626439353534346161623935666635633035386435316331 +31383566646237666563366163393261623638306432613330356363623439303334623662396133 +61613761656461323933363161386332663465336439333163303434373533313735303235303262 +32393563336332313830386632643731643639323030333535633038613462646536333366613730 +30636563653462313730653863303938333236353938346139666438653461353238306334376133 +64613866323537313632663634636261336563313366393865303233383232306239613130663761 +66616338333830353835373962393266636238326536663138653166613565653864616562626333 +30366435663337663738633835623034323438363631643332346538393463366662666430376666 +62343738666563326232316438613661316361643264376661656161613061356264623362633530 +32666162386534373363636664613132366239666431653463333762313231386337356363353234 +36393965663564316438393864363237363530643731323966363861386465346166346364386635 +39386637623533366637653437366364363638646635346236386166313864313438393165663933 +33393561303763386565643364623262376461343831623238393834363433656336313665323931 +31396132313961646637326162386531626364643261666436633666323461373466613764343533 +30326530343537663237626130653163653636396139343736313366323864306164643738356532 +31636665393931366538656465373238376562626364396461613037343333653136383238623963 +37346163626465383238373836653130663030663234653537386434653331313863653339303331 +32383034306131623930376138656131636462333166373632306530316536346131616333343661 +65333638393139633630386263356236373333623830643139373637323662623862396161336361 +31646533383061353466623663313732356165653433316266303138356536383433 diff --git a/vars/wireguard-peers.yaml b/vars/wireguard-peers.yaml new file mode 100644 index 0000000..8d68343 --- /dev/null +++ b/vars/wireguard-peers.yaml @@ -0,0 +1,74 @@ +$ANSIBLE_VAULT;1.2;AES256;secrets +65623539363936656339663865666138346433666366633339663438626338313163636435383339 +3938613366653432313166383936633462666433623738390a313439376163303332623939303430 +39353034643536326635613935643430323332336265316666326537613662313531633131326564 +3831643134623131380a353561333330643666333232656438353364623738663835313832663634 +61666537386439323130623630663037303837316138373837393961653532643864303862633933 +63366132393664663230396661303964633366623761663961646638626265356665613035383431 +61663865336232633935383562626332376464343263303831366435303833323638643436633264 +66323266373966366432306562306266306362613330366333616531313233373236346461316236 +63396231373064313934633132633738623333373138663765386432376137333835653862613865 +35623738366531303263313463396531316439663230363635343035663364343039376664666136 +61326463663739646138646464663931653034333830383565343230653534303839653561653934 +38643432653339643963363164663961323065316239356533653033646465353731336339663538 +62366231356237393461613938396534346234653139336333373537333336373937323934306330 +38613337643564343833306536303563376132636331333731353531333836643039656132626333 +33376231326666323962303764393836623330316564316432363066343338396463646265333935 +63376633613330313936626336653934306637643431643465333765353662663335366237623539 +36643431363632373166663165346364363136333738303731346461623438323231643732623666 +31663065356164383431633662623766316530366336316238646533376435393834303232333630 +63633531313737663631363033653435393263323763656438376336373033343834646330313434 +31326436643836653663383166626534323931616564343734313235373633353061353835623035 +35636339633033323763343563653062386166333934656161313465343866306565626536633361 +38653535613463343366373436356535616664343965386361353335613731633633323666666462 +36303035663561643839323339316562363630376230333630633636623536653064303966633964 +62303539633763363933303837313366653063383537393935316635303630316563336562616336 +34333038643762653238373861343062313731353434386434343665346231396165303733663465 +63306437333864613561373566326466356130656537623137623230643263316633383430663661 +30666330333438316365306161616532663136376464363062386539646434653565643961653861 +37353362653132376233303561363861383739323631613131303363623734623830313637346531 +66313764386564646230333264616139383463666635666637353637303132623766393761306662 +38366166326438326435383634663834623833663231373834633964623332333633613130333666 +35303932613462616332376234663663383232313064613130633062613532396466663764316638 +36333036653766636133306663613765346234393063353861323738356435623831356461613534 +30613039363864323864373662396633653430363165366337353530653961653334346635656234 +62373631323632313561366539373433343238366266363562376162646263353864656133653437 +66333432356364343730393439633037333862386164343563373031333635323661653763386639 +63396566303163343336313766333936313863343138646232616531386437643961363661373937 +65303030386236613738313333313864326362363464373530383031626432316461626464666463 +31633065313966373938646633633839333331356332336363373763653839623137643966373865 +35393437383362626534373930393831636233393865653438636636656265623763383835623037 +32336661313732313337633237356263393030656666366430646334373233323433366435633334 +30353735303437386666323964303865613334393036383532643563363237376633313031383130 +38643165313834306465656430613834646333666334353836613435613135643639363665653232 +62376435336630616632386130386136356537663734303932333366343563326261623139303839 +32643834373766383066396261623236393166383539303263323932643366373439613234313134 +31663761396332343436363665393363373563356165363366316466306137303630383762613331 +30646262616661373361393932353263633235363431306361346266353863613339613530346264 +35383865616532363366393736353366626338306634663263666336636466373762303337336466 +35666433343264386130333463643931306338363063373765646436313632653733343162666331 +30653434346266663131373531393966326162653566646536356533356262336632653736353336 +30656535356430313661356137383166386337613163643731646164636664386531326563303537 +34333663396265663435396261383534383633346239366632323462386334323233333664343930 +34653765326339333265616538363164643932366464353066356433633330323763633862353239 +35313062363864363132393464653663386239323062656235313361383933366266313666623135 +62333936366261303831363931306434343330386632623638653566356538376335663961343735 +38656436623364363438366533306463633234316639656564326165643065366565383261623165 +33323134663530633865643462663131333664653365666134373434386139613034663964353065 +63646561316139383163313332316238326132363661666566666233626536396365376634613433 +34306231626361326636653034646239643466393838363166663639323835386633666632356461 +33633766303364326464383061333664666232326338313863653334666365646230326630303435 +38633237393138363730313736386662373631393631376461323937363737656464316237386336 +37336330626438643166363131623030386235653537336133356264613634323537303464303962 +65626334323834316666643564343233346535393165323534326539653938363735336636353534 +34336539626134373963303737663431306266363766666363383532386438393366376464623763 +35363732306631333032373065393933663130613639326331613763646136383235636433623964 +39383331633465383033653434386562393030633034313365336366313430326265323038346663 +34356635386466393439636434323464613639616261363037326234346130653938373330636531 +34633130316632326335346434613834356630656162393739306561623166363436316161613566 +61376465393932373934386466306462366133363933633839623764343330313561333666386333 +65623739663665653466396461646433373434663766663430306363646666653763353762366639 +38616661326334383737623064323234316134313537363333653666636238303061356132303533 +63303639386535376166656431623937343661376632343232396537613565643235336631336235 +66313139373562613338383564363830343638346439306430356534656635346163306137623966 +30346165373236313831396363333535303038373431316231316134343531653137