diff --git a/setups/setup-4get.yml b/setups/setup-4get.yml new file mode 100644 index 0000000..99c9785 --- /dev/null +++ b/setups/setup-4get.yml @@ -0,0 +1,7 @@ + - name: Setup config.php.j2 + template: + src: "conf/config.php.j2" + dest: "{{ docker_dir }}/4get/config.php" + owner: 1000 + group: 1000 + mode: 0755 \ No newline at end of file diff --git a/templates/compose/4get.yaml.j2 b/templates/compose/4get.yaml.j2 index 8bb3c4b..ad484a2 100644 --- a/templates/compose/4get.yaml.j2 +++ b/templates/compose/4get.yaml.j2 @@ -14,6 +14,8 @@ services: - TZ=Asia/Singapore - FOURGET_SERVER_NAME=4g.opnxng.com - FOURGET_SERVER_ADMIN_EMAIL=opnxng@tuta.io + volumes: + - {{ docker_dir }}/4get/config.php:/data/config.php #restart: unless-stopped ports: - '8907:80' diff --git a/templates/conf/Caddyfile.j2 b/templates/conf/Caddyfile.j2 index bc5075f..14c2a66 100755 --- a/templates/conf/Caddyfile.j2 +++ b/templates/conf/Caddyfile.j2 @@ -529,6 +529,11 @@ @4g host 4g.{$HOSTNAME} handle @4g { encode zstd gzip + @notstatic { + not path /static/* /android-chrome* /favicon* /robots.txt /banner/* /site.webmanifest + } + rate_limit @notstatic {remote.ip} 2r/s 60000 500 + rate_limit @notstatic {remote.ip} 45r/m 300000 500 reverse_proxy { to {{ oracle1_private_ip }}:8907 to {{ oracle2_private_ip }}:8907 diff --git a/templates/conf/config.php.j2 b/templates/conf/config.php.j2 new file mode 100644 index 0000000..1573ff5 --- /dev/null +++ b/templates/conf/config.php.j2 @@ -0,0 +1,103 @@ + tag on home page + const SERVER_SHORT_DESCRIPTION = "They live in our walls!"; + + // Will be shown in server list ping (null for no description) + const SERVER_LONG_DESCRIPTION = null; + + // Add your own themes in "static/themes". Set to "Dark" for default theme. + // Eg. To use "static/themes/Cream.css", specify "Cream". + const DEFAULT_THEME = "Dark"; + + // Enable the API? + const API_ENABLED = false; + + // Bot protection + // 4get.ca has been hit with 250k bot reqs every single day for months + // you probably want to enable this if your instance is public... + // 0 = disabled + // 1 = ask for image captcha (requires image dataset & imagick 6.9.11-60) + // @TODO: 2 = invite only (users needs a pass) + const BOT_PROTECTION = 0; + + // if BOT_PROTECTION is set to 1, specify the available datasets here + // images should be named from 1.png to X.png, and be 100x100 in size + // Eg. data/captcha/birds/1.png up to 2263.png + const CAPTCHA_DATASET = [ + // example: + // ["birds", 2263], + // ["fumo_plushies", 1006], + // ["minecraft", 848] + ]; + + // List of domains that point to your servers. Include your tor/i2p + // addresses here! Must be a valid URL. Won't affect links placed on + // the homepage. + const ALT_ADDRESSES = [ + //"https://4get.alt-tld", + //"http://4getwebfrq5zr4sxugk6htxvawqehxtdgjrbcn2oslllcol2vepa23yd.onion" + ]; + + // Known 4get instances. MUST use the https protocol if your instance uses + // it. Is used to generate a distributed list of instances. + // To appear in the list of an instance, contact the host and if everyone added + // eachother your serber should appear everywhere. + const INSTANCES = [ + "https://4get.ca", + "https://4get.zzls.xyz", + "https://4get.silly.computer", + "https://4g.opnxng.com", + "https://4get.konakona.moe" + ]; + + // Default user agent to use for scraper requests. Sometimes ignored to get specific webpages + // Changing this might break things. + const USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0"; + + // Proxy pool assignments for each scraper + // false = Use server's raw IP + // string = will load a proxy list from data/proxies + // Eg. "onion" will load data/proxies/onion.txt + const PROXY_DDG = false; // duckduckgo + const PROXY_BRAVE = false; + const PROXY_FB = false; // facebook + const PROXY_GOOGLE = false; + const PROXY_MARGINALIA = false; + const PROXY_MOJEEK = false; + const PROXY_SC = false; // soundcloud + const PROXY_WIBY = false; + const PROXY_YT = false; // youtube + const PROXY_YEP = false; + const PROXY_PINTEREST = false; + const PROXY_FTM = false; // findthatmeme + const PROXY_IMGUR = false; + const PROXY_YANDEX_W = false; // yandex web + const PROXY_YANDEX_I = false; // yandex images + const PROXY_YANDEX_V = false; // yandex videos + + // + // Scraper-specific parameters + // + + // SOUNDCLOUD + // Get these parameters by making a search on soundcloud with network + // tab open, then filter URLs using "search?q=". (No need to login) + const SC_USER_ID = "143860-454480-469473-289775"; + const SC_CLIENT_TOKEN = "qwfvRfz8PCoa2NldZALK7hhZFIH24Wyx"; + + // MARGINALIA + // Get an API key by contacting the Marginalia.nu maintainer. The "public" key + // works but is almost always rate-limited. + const MARGINALIA_API_KEY = "public"; +} diff --git a/vars/services.yml b/vars/services.yml index d39baef..7107595 100644 --- a/vars/services.yml +++ b/vars/services.yml @@ -1,10 +1,24 @@ setup: + oracle1: + - 4get + oracle2: + - 4get + oracle3: + - 4get oracle4: - - paulgo + - 4get + - caddy compose: + oracle1: + - 4get + oracle2: + - 4get + oracle3: + - 4get oracle4: - - paulgo + - 4get + - caddy # ----------------------------------------------------------------------------------------------------