apache | ||
api | ||
banner | ||
data | ||
docker | ||
icons | ||
lib | ||
oracles | ||
scraper | ||
static | ||
template | ||
.gitignore | ||
about.php | ||
admin.php | ||
api.txt | ||
audio_sc.php | ||
audio.php | ||
captcha.php | ||
docker-compose.yaml | ||
Dockerfile | ||
favicon.ico | ||
favicon.php | ||
images.php | ||
index.php | ||
music.php | ||
news.php | ||
opensearch.xml | ||
proxy.php | ||
README.md | ||
robots.txt | ||
settings.php | ||
sitemap.xml | ||
videos.php | ||
web.php |
4get
4get is a metasearch engine that doesn't suck (they live in our walls!)
About 4get
Try it out
Supported websites
-
Web
- DuckDuckGo
- Brave
- Yandex
- Mojeek
- Marginalia
- wiby
-
Images
- DuckDuckGo
- Yandex
- Brave
- Yep
- Imgur
- FindThatMeme
-
Videos
- YouTube
- DuckDuckgo
- Brave
- Yandex
-
News
- DuckDuckGo
- Brave
- Mojeek
-
Music
- SoundCloud
-
Autocompleter
- Brave
- DuckDuckGo
- Yandex
- Qwant
- Yep
- Marginalia
- YouTube
- SoundCloud
More scrapers are coming soon. I currently want to add Google web/video/news search, HackerNews (durr orange site!!) and Qwant. A shopping and files tab is also in my todo list.
Setup
This section is still to-do. You will need to figure shit out for some of the apache2 and nginx stuff. Everything else should be OK.
Apache
Login as root.
apt install apache2 certbot php-dom php-imagick imagemagick php-curl curl php-apcu git libapache2-mod-php python3-certbot-apache
service apache2 start
a2enmod rewrite
For all of the files in /etc/apache2/sites-enabled/
, you must apply the following changes:
- Uncomment
ServerName
directive, put your domain name there - Change
ServerAdmin
to your email - Change
DocumentRoot
to/var/www/html/4get
- Change
ErrorLog
andCustomLog
directives to log stuff out to/dev/null/
Now open /etc/apache2/apache2.conf
and change ErrorLog
and CustomLog
directives to have /dev/null/
as a value
This should disable logging completely, but I'm not 100% sure since I sort of had to troubleshoot alot of shit while writing this. So after we're done check if /var/log/apache2/*
contains any personal info, and if it does, call me retarded trough email exchange.
Blindly run the following shit
cd /var/www/html
git clone https://git.lolcat.ca/lolcat/4get
cd 4get
mkdir icons
chmod 777 -R icons/
Restart the service for good measure... service apache2 restart
NGINX
Login as root.
Create a file in /etc/nginx/sites-avaliable/
called 4get.conf
or any name you want and put this into the file:
server {
# DO YOU REALLY NEED TO LOG SEARCHES?
access_log /dev/null;
error_log /dev/null;
# Change this if you have 4get in other folder.
root /var/www/4get;
# Change yourdomain by your domain lol
server_name www.yourdomain.com yourdomain.com;
location @php {
try_files $uri.php $uri/index.php =404;
# Change the unix socket address if it's different for you.
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
# Change this to `fastcgi_params` if you use a debian based distro.
include fastcgi.conf;
fastcgi_intercept_errors on;
}
location / {
try_files $uri @php;
}
location ~* ^(.*)\.php$ {
return 301 $1;
}
listen 80;
}
That is a very basic config so you will need to adapt it to your needs in case you have a more complicated nginx configuration. Anyways, you can see a real world example here
After you save the file you will need to do a symlink of the 4get.conf
file to /etc/nignx/sites-enabled/
, you can do it with this command:
ln -s /etc/nginx/sites-available/4get.conf /etc/nginx/sites-available/4get.conf
Now test the nginx config with nginx -t
, if it says that everything is good, restart nginx using systemctl restart nginx
Setup encryption
I'm schizoid (as you should) so I'm gonna setup 4096bit key encryption. To complete this step, you need a domain or subdomain in your possession. Make sure that the DNS shit for your domain has propagated properly before continuing, because certbot is a piece of shit that will error out the ass once you reach 5 attempts under an hour.
Apache
certbot --apache --rsa-key-size 4096 -d www.yourdomain.com -d yourdomain.com
When it asks to choose a vhost, choose the option with "HTTPS" listed. Don't setup HTTPS for tor, we don't need it (it doesn't even work anyways with let's encrypt)
Edit 000-default-le-ssl.conf
Add this at the end:
<Directory /var/www/html/4get>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule (.*) $1.php [L]
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Now since this file is located in /etc/apache2/sites-enabled/
, you must change all of the logging shit as to make it not log anything, like we did earlier.
Restart again
service apache2 restart
NGINX
Generate a certificate for the domain using:
certbot --nginx --key-type ecdsa -d www.yourdomain.com -d yourdomain.com
(Remember to install the nginx certbot plugin!!!)
After doing that certbot should deploy the certificate automatically into your 4get nginx config file. It should be ready to use at that point.
Captcha
Right now the setup for this shit is absolutely awful.
Edit line 190 in lib/captcha_gen.php
and specify your image sets. You can't disable the captcha right now lol. Just use a previous commit if you want to do that. Call me a shitcoder all you want I've had no energy lately. Images must be stored in data/captcha
. Create a folder for each category. All files in there should be named from 1.png
to 321839.png
, for example.
Tor Setup
- Install tor.
- Open
/etc/tor/torrc
- Go to the line that contains
HiddenServiceDir
andHiddenServicePort
- Uncomment those 2 lines and set them like this:
HiddenServiceDir /var/lib/tor/4get HiddenServicePort 80 127.0.0.1:80
- Start the tor service using
systemctl start tor
- Wait some seconds...
- Login as root and execute this command:
cat /var/lib/tor/4get/hostname
- That is your onion address.
After you get your onion address you will need to configure your Apache or Nginx config or you will get 404 errors.
I don't know to configure this shit on Apache so here is the NGINX one.
NGINX
Open your current 4get NGINX config (that is under /etc/nginx/sites-available/
) and append this to the end of the file:
server {
access_log /dev/null;
error_log /dev/null;
listen 80;
server_name <youronionaddress>;
root /var/www/4get;
location @php {
try_files $uri.php $uri/index.php =404;
# Change the unix socket address if it's different for you.
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
# Change this to `fastcgi_params` if you use a debian based distro.
include fastcgi.conf;
fastcgi_intercept_errors on;
}
location / {
try_files $uri @php;
}
location ~* ^(.*)\.php$ {
return 301 $1;
}
}
Obviously replace <youronionaddress>
by the onion address of /var/lib/tor/4get/hostname
and then check if the nginx config is valid with nginx -t
if yes, then restart the nginx service and try opening the onion address into the Tor Browser. You can see a real world example here
Docker Install
docker run -d -p 80:80 -e FOURGET_SERVER_NAME="4get.ca" -e FOURGET_SERVER_ADMIN_EMAIL="you@example.com" luuul/4get:latest
With SSL
docker run -d -p 443:443 -e FOURGET_SERVER_NAME="4get.ca" -e FOURGET_SERVER_ADMIN_EMAIL="you@example.com" -v /etc/letsencrypt/live/domain.tld:/etc/4get/certs luuul/4get:latest
replace enviroment variables FOURGET_SERVER_NAME and FOURGET_SERVER_ADMIN_EMAIL with relevant values
if the certificate files are not mounted to /etc/4get/certs the service listens to port 80
the certificate directory expects files named cert.pem
, chain.pem
, privkey.pem
Docker compose
copy docker-compose.yaml
create a directory with images named banners
for example and mount to /var/www/html/4get/banner
to serve custom banners
version: "3.7"
services:
fourget:
image: luuul/4get:latest
restart: always
environment:
- FOURGET_SERVER_NAME=4get.ca
- FOURGET_SERVER_ADMIN_EMAIL="you@example.com"
ports:
- "80:80"
- "443:443"
volumes:
- /etc/letsencrypt/live/domain.tld:/etc/4get/certs
- ./banners:/var/www/html/4get/banner
Replace relevant values and start with docker-compose up -d