Mainly add searx/searx-checker

- Add searx/searx-checker image with automatic check everyday. Result https://${HOSTNAME}/status
- Cache /static files
- Add start.sh, stop.sh, update.sh
This commit is contained in:
Dalf 2019-07-09 18:05:05 +02:00
parent 4023196f54
commit 86f1f7e22d
10 changed files with 183 additions and 46 deletions

11
.env
View File

@ -1,10 +1,13 @@
# hostname and protocol # hostname and protocol (empty except for localhost, set to "https://")
SEARX_HOSTNAME=localhost SEARX_HOSTNAME=localhost
# empty unless SEARX_HOSTNAME is localhost in this case "https://"
SEARX_PROTOCOL=https:// SEARX_PROTOCOL=https://
SEARX_TLS=self_signed
# Let's Encrypt : email provided # automaticaly update settings to the new version
# comment this line if you made / will make some modifications to the settings
SEARX_COMMAND=-f
# Let's encrypt contact information
LETSENCRYPT_EMAIL=email@example.com LETSENCRYPT_EMAIL=email@example.com
# Do you agree Let's Encrypt TOS https://letsencrypt.org/repository/ # Do you agree Let's Encrypt TOS https://letsencrypt.org/repository/

View File

@ -1,5 +1,5 @@
{$SEARX_PROTOCOL}{$SEARX_HOSTNAME} { {$SEARX_PROTOCOL}{$SEARX_HOSTNAME} {
tls self_signed tls {$SEARX_TLS}
gzip { gzip {
not /morty not /morty
} }
@ -48,8 +48,18 @@
-Pragma -Pragma
} }
cache {
match_path /static
status_header X-Cache-Status
default_max_age 12h
path /tmp/caddy-cache
}
rewrite /status /searx-checker/status.json
proxy / 127.0.0.1:4040 { proxy / 127.0.0.1:4040 {
transparent transparent
except /searx-checker/status.json
} }
basicauth /filtron {$FILTRON_USER} {$FILTRON_PASSWORD} basicauth /filtron {$FILTRON_USER} {$FILTRON_PASSWORD}
@ -57,7 +67,6 @@
without /filtron without /filtron
} }
proxy /morty 127.0.0.1:3000 proxy /morty 127.0.0.1:3000
limits { limits {
@ -66,4 +75,6 @@
body /morty 5MB body /morty 5MB
} }
# ratelimit * /morty 150 300 hour
} }

View File

@ -5,26 +5,42 @@ See https://github.com/asciimoo/searx/issues/1561 )
Do not use it for now : this is a work in progress and there is no antibot feature. Do not use it for now : this is a work in progress and there is no antibot feature.
## What is included ?
- [Caddy](https://github.com/abiosoft/caddy-docker) as a reverse proxy (create a LetsEncrypt certificate automaticaly)
- [filtron](https://github.com/asciimoo/filtron): See [#4](https://github.com/asciimoo/filtron/pull/4) to build the docker image.
- [searx](https://github.com/asciimoo/searx): See [#1629](https://github.com/asciimoo/searx/pull/1629) to build the docker image.
- [morty](https://github.com/asciimoo/morty): clone the project, then "make build" to create the docker image
## How to use it ## How to use it
- [Install docker](https://docs.docker.com/install/) - [Install docker](https://docs.docker.com/install/)
- [Install docker-compose](https://docs.docker.com/compose/install/) - [Install docker-compose](https://docs.docker.com/compose/install/)
- Get searx-docker - Get searx-docker
```sh ```sh
mkdir -p /opt cd /usr/local
cd /opt
git clone https://github.com/searx/searx-docker.git git clone https://github.com/searx/searx-docker.git
cd searx-docker
``` ```
- Configure the .env file - Edit the .env file according to your need
- Check using ```docker-compose up``` - Check everything is working: ```./start.sh```,
- If everything is working, then : - ```cp searx-docker.service.template searx-docker.service```
- edit the content of ```WorkingDirectory``` in the ```searx-docker.service``` file (only if the installation path is different from /usr/local/searx-docker)
- Install the systemd unit :
```sh ```sh
cp /opt/searx-docker/searx-docker.service /etc/systemd/system systemctl enable $(pwd)/searx-docker.service
systemctl start searx-docker.service systemctl start searx-docker.service
``` ```
## What is included ? ## Custom docker-compose.yaml
- [Caddy](https://github.com/abiosoft/caddy-docker) as a reverse proxy (take care to call LetsEncrypt) Do not modify docker-compose.yaml otherwise you won't be able to update easily from the git repository.
- [filtron](https://github.com/asciimoo/filtron): See [#4](https://github.com/asciimoo/filtron/pull/4) to build the docker image.
- [searx](https://github.com/asciimoo/searx): See [#1629](https://github.com/asciimoo/searx/pull/1629) to build the docker image. It is possible to the [extend feature](https://docs.docker.com/compose/extends/) of docker-compose :
- [morty](https://github.com/asciimoo/morty): clone the project, then "make build" to create the docker image - stop the service : ```systemctl stop searx-docker.service```
- create a new docker-compose-extend.yaml, check with ```start.sh```
- update searx-docker.service (see SEARX_DOCKERCOMPOSEFILE)
- restart the servie : ```systemctl restart searx-docker.service```
## How to update ?
- Check the content of ```update.sh```

View File

@ -11,12 +11,14 @@ services:
network_mode: host network_mode: host
command: -email ${LETSENCRYPT_EMAIL} -agree=${LETSENCRYPT_AGREE} -log stdout -host ${SEARX_HOSTNAME} -conf /etc/Caddyfile command: -email ${LETSENCRYPT_EMAIL} -agree=${LETSENCRYPT_AGREE} -log stdout -host ${SEARX_HOSTNAME} -conf /etc/Caddyfile
volumes: volumes:
- ./Caddyfile:/etc/Caddyfile - ./Caddyfile:/etc/Caddyfile:rw
- ./caddy:/root/.caddy - ./caddy:/root/.caddy:rw
- ./srv:/srv - ./srv:/srv:rw
- searx-checker:/srv/searx-checker:rw
environment: environment:
- SEARX_HOSTNAME=${SEARX_HOSTNAME} - SEARX_HOSTNAME=${SEARX_HOSTNAME}
- SEARX_PROTOCOL=${SEARX_PROTOCOL} - SEARX_PROTOCOL=${SEARX_PROTOCOL:-}
- SEARX_TLS=${SEARX_TLS:-}
- FILTRON_USER=${FILTRON_USER} - FILTRON_USER=${FILTRON_USER}
- FILTRON_PASSWORD=${FILTRON_PASSWORD} - FILTRON_PASSWORD=${FILTRON_PASSWORD}
cap_drop: cap_drop:
@ -43,14 +45,15 @@ services:
searx: searx:
container_name: searx container_name: searx
image: searx image: asciimoo/searx
hostname: searx hostname: searx
restart: always restart: always
networks: networks:
searx: searx:
ipv4_address: 10.10.10.4 ipv4_address: 10.10.10.4
command: ${SEARX_COMMAND:-}
volumes: volumes:
- ./searx:/etc/searx - ./searx:/etc/searx:rw
environment: environment:
- BIND_ADDRESS=10.10.10.4:8080 - BIND_ADDRESS=10.10.10.4:8080
- BASE_URL=https://${SEARX_HOSTNAME}/ - BASE_URL=https://${SEARX_HOSTNAME}/
@ -74,7 +77,7 @@ services:
networks: networks:
searx: searx:
ipv4_address: 10.10.10.5 ipv4_address: 10.10.10.5
command: -listen 10.10.10.5:3000 -timeout 3 -ipv6 command: -listen 10.10.10.5:3000 -timeout 6 -ipv6
environment: environment:
- MORTY_KEY=${MORTY_KEY} - MORTY_KEY=${MORTY_KEY}
logging: logging:
@ -83,9 +86,24 @@ services:
cap_drop: cap_drop:
- ALL - ALL
searx-checker:
container_name: searx-checker
image: searx/searx-checker
hostname: searx-checker
restart: always
networks:
searx:
ipv4_address: 10.10.10.6
command: -cron -o html/data/status.json http://10.10.10.4:8080
volumes:
- searx-checker:/usr/local/searx-checker/html/data:rw
networks: networks:
searx: searx:
ipam: ipam:
driver: default driver: default
config: config:
- subnet: 10.10.10.0/24 - subnet: 10.10.10.0/24
volumes:
searx-checker:

View File

@ -1,22 +0,0 @@
[Unit]
Description=searx-docker service
Requires=docker.service
After=docker.service
[Service]
Restart=always
WorkingDirectory=/opt/searx-docker/
# Remove old containers, images and volumes
ExecStartPre=/usr/local/bin/docker-compose down -v
ExecStartPre=/usr/local/bin/docker-compose rm -fv
# Compose up
ExecStart=/usr/bin/docker-compose up
# Compose down, remove containers and volumes
ExecStop=/usr/local/bin/docker-compose down -v
[Install]
WantedBy=multi-user.target

View File

@ -0,0 +1,17 @@
<[Unit]
Description=searx service
Requires=docker.service
After=docker.service
[Service]
Restart=always
Environment=SEARX_DOCKERCOMPOSEFILE=docker-compose.yaml
WorkingDirectory=/usr/local/searx-docker
ExecStart=/bin/sh -c "start.sh"
ExecStop=/bin/sh -c "stop.sh"
[Install]
WantedBy=multi-user.target

21
start.sh Executable file
View File

@ -0,0 +1,21 @@
#!/bin/sh
. ./util.sh
if grep -q "MORTY_KEY=RemplaceWithARealKey!" .env; then
echo "In the .env file, you must configure MORTY_KEY" 1>&2
CANT_START=1
fi
if grep -q "FILTRON_PASSWORD=password" .env; then
echo "In the .env file, you must configure FILTRON_PASSWORD" 1>&2
CANT_START=1
fi
if [ $CANT_START ]; then
exit 1
fi
$DOCKERCOMPOSE -f $DOCKERCOMPOSEFILE down -v
$DOCKERCOMPOSE -f $DOCKERCOMPOSEFILE rm -fv
$DOCKERCOMPOSE -f $DOCKERCOMPOSEFILE up

5
stop.sh Executable file
View File

@ -0,0 +1,5 @@
#!/bin/sh
. ./util.sh
$DOCKERCOMPOSE -f $DOCKERCOMPOSEFILE down -v

40
update.sh Executable file
View File

@ -0,0 +1,40 @@
#!/bin/sh
. ./util.sh
if [ ! -x "${which systemctl}" ]; then
echo "systemctl not found" 1>&2
exit 1
fi
if [ ! -x "${which git}" ]; then
echo "git not found" 1>&2
exit 1
fi
# stop the systemd service
systemctl stop searx-docker.service
# save local modification
git stash push
# update only if fast forward can be used, saver than "git pull --rebase"
git pull --ff-only || {
git stash pop
echo "The local and remote branches have diverged. Please update manually."
echo "Use\n systemctl start searx-docker.service\nto restart searx"
exit 1
}
# re-apply local modification
git stash pop
# update docker images
docker-compose pull
# update searx configuration
source ./.env
docker-compose run searx ${SEARX_COMMAND} -d
# let the user see
echo "Use\n systemctl start searx-docker.service\nto restart searx"

28
util.sh Normal file
View File

@ -0,0 +1,28 @@
BASE_DIR="$(dirname -- "`readlink -f -- "$0"`")"
cd -- "$BASE_DIR"
set -e
DOCKERCOMPOSE=$(which docker-compose || echo "/usr/local/bin/docker-compose")
DOCKERCOMPOSEFILE="${DOCKERCOMPOSEFILE:-docker-compose.yaml}"
echo "use ${DOCKERCOMPOSEFILE}"
if [ ! -x "$(which docker)" ]; then
echo "docker not found" 1>&2
exit 1
fi
if ! docker version > /dev/null 2>&1; then
echo "can't execute docker (current user: $(whoami))" 1>&2
exit 1
fi
if [ ! -x "${DOCKERCOMPOSE}" ]; then
echo "docker-compose not found" 1>&2
exit 1
fi
if [ ! -f "${DOCKERCOMPOSEFILE}" ]; then
echo "${DOCKERCOMPOSEFILE} not found" 1>&2
exit 1
fi