From 27051d3afb97e63bfe411b0edfe6a3bf85e2a990 Mon Sep 17 00:00:00 2001 From: thest1tch Date: Sat, 10 Jun 2023 01:54:26 +0500 Subject: [PATCH] update --- docs/docker-compose.md | 26 +++++++- docs/docker-compose/motioneye.md | 109 +++++++++++++++++++++++++++++++ docs/docker-compose/redis.md | 83 +++++++++++++++++++++++ mkdocs.yml | 2 + 4 files changed, 219 insertions(+), 1 deletion(-) create mode 100644 docs/docker-compose/motioneye.md create mode 100644 docs/docker-compose/redis.md diff --git a/docs/docker-compose.md b/docs/docker-compose.md index 37592a4..78f607a 100755 --- a/docs/docker-compose.md +++ b/docs/docker-compose.md @@ -73,4 +73,28 @@ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin Хотя это может быть незначительным риском для безопасности, все должно быть в порядке, если применяются другие [меры безопасности Docker](https://www.smarthomebeginner.com/traefik-docker-security-best-practices/) . -`sudo timedatectl set-timezone America/New\_York` \ No newline at end of file +`sudo timedatectl set-timezone America/New\_York` + +# Команды Docker + +Существует множество команд docker и docker compose, и их описание не является целью этого поста. Вы можете увидеть все возможные команды, используя следующую команду: + +`docker` + +Но вот несколько команд **docker** и **docker compose** для начала: + +- `sudo docker info` — информация об установке докера. +- `sudo docker search IMAGE_NAME `— поиск определенных образов/контейнеров. +- `sudo docker start CONTAINER_NAME` — запустить один или несколько контейнеров. +- `sudo docker stop CONTAINER_NAME` — остановить один или несколько контейнеров. +- `sudo docker restart CONTAINER_NAME` — перезапустить один или несколько контейнеров. +- `sudo docker top CONTAINER_NAME` — просмотр запущенных процессов контейнера. +- `sudo docker rm CONTAINER_NAME` — удалить один или несколько контейнеров. +- `sudo docker pull CONTAINER_NAME` — извлекать обновленные образы из Docker Hub. +- `sudo docker network ls` — просмотреть все определенные сети докеров. +- `sudo docker ps -a` — просмотреть все запущенные контейнеры. +- `sudo docker logs CONTAINER_NAME` — просмотр журналов одного, нескольких или всех контейнеров. +- `sudo docker-compose up -d CONTAINER_NAME` — запустить определенные или все службы, определенные в docker-compose.yml. +- `sudo docker-compose down CONTAINER_NAME` — остановить определенные или все службы, определенные в docker-compose.yml. + +Обратите внимание, что в большинстве случаев **CONTAINER\_NAME** не является обязательным, и команда применяется ко всем возможным контейнерам, если имя контейнера не указано. \ No newline at end of file diff --git a/docs/docker-compose/motioneye.md b/docs/docker-compose/motioneye.md new file mode 100644 index 0000000..0ff8d8a --- /dev/null +++ b/docs/docker-compose/motioneye.md @@ -0,0 +1,109 @@ +[Github](https://github.com/motioneye-project/motioneye) + +Docker-compose: + +```yaml + # Login: admin / *no password* + motioneye: + image: ccrisan/motioneye:master-amd64 + container_name: motioneye + restart: always + networks: + - traefik_net + ports: + - "8081:8081" + - "8082:8082" + - "8765:8765" + security_opt: + - no-new-privileges:true + volumes: + - $DOCKERDIR_APP/motioneye/etc:/etc/motioneye + - /opt/cloud/motioneye:/var/lib/motioneye + - /etc/localtime:/etc/localtime:ro + environment: + - PUID=$PUID + - PGID=$PGID + - TZ=$TZ + labels: + - "traefik.enable=true" + ## HTTP Routers + - "traefik.http.routers.motioneye-rtr.entrypoints=https" + - "traefik.http.routers.motioneye-rtr.rule=Host(`motioneye.$DOMAINNAME`)" + ## Middlewares + - "traefik.http.routers.motioneye-rtr.middlewares=secure-chain@file" + ## HTTP Services + - "traefik.http.routers.motioneye-rtr.service=motioneye-svc" + - "traefik.http.services.motioneye-svc.loadbalancer.server.port=8765" +``` + +Docker-file: + +```docker +FROM debian:buster-slim +LABEL maintainer="Marcus Klein " + +ARG BUILD_DATE +ARG VCS_REF +LABEL org.label-schema.build-date=$BUILD_DATE \ + org.label-schema.docker.dockerfile="extra/Dockerfile" \ + org.label-schema.license="GPLv3" \ + org.label-schema.name="motioneye" \ + org.label-schema.url="https://github.com/ccrisan/motioneye/wiki" \ + org.label-schema.vcs-ref=$VCS_REF \ + org.label-schema.vcs-type="Git" \ + org.label-schema.vcs-url="https://github.com/ccrisan/motioneye.git" + +# By default, run as root. +ARG RUN_UID=0 +ARG RUN_GID=0 + +COPY . /tmp/motioneye + +RUN echo "deb http://snapshot.debian.org/archive/debian/$(date +%Y%m%d) buster contrib non-free" >>/etc/apt/sources.list && \ + apt-get update && \ + DEBIAN_FRONTEND="noninteractive" apt-get -t buster --yes --option Dpkg::Options::="--force-confnew" --no-install-recommends install \ + curl \ + ffmpeg \ + libmicrohttpd12 \ + libpq5 \ + lsb-release \ + mosquitto-clients \ + python-jinja2 \ + python-pil \ + python-pip \ + python-pip-whl \ + python-pycurl \ + python-setuptools \ + python-tornado \ + python-tz \ + python-wheel \ + v4l-utils \ + motion \ + default-libmysqlclient-dev && \ + # Change uid/gid of user/group motion to match our desired IDs. This will + # make it easier to use execute motion as our desired user later. + sed -i -e "s/^\(motion:[^:]*\):[0-9]*:[0-9]*:\(.*\)/\1:${RUN_UID}:${RUN_GID}:\2/" /etc/passwd && \ + sed -i -e "s/^\(motion:[^:]*\):[0-9]*:\(.*\)/\1:${RUN_GID}:\2/" /etc/group && \ + pip install /tmp/motioneye && \ + # Cleanup + rm -rf /tmp/motioneye && \ + apt-get purge --yes python-setuptools python-wheel && \ + apt-get autoremove --yes && \ + apt-get --yes clean && rm -rf /var/lib/apt/lists/* && rm -f /var/cache/apt/*.bin + +ADD extra/motioneye.conf.sample /usr/share/motioneye/extra/ + +# R/W needed for motioneye to update configurations +VOLUME /etc/motioneye + +# Video & images +VOLUME /var/lib/motioneye + +CMD test -e /etc/motioneye/motioneye.conf || \ + cp /usr/share/motioneye/extra/motioneye.conf.sample /etc/motioneye/motioneye.conf ; \ + # We need to chown at startup time since volumes are mounted as root. This is fugly. + chown motion:motion /var/run /var/log /etc/motioneye /var/lib/motioneye /usr/share/motioneye/extra ; \ + su -g motion motion -s /bin/bash -c "/usr/local/bin/meyectl startserver -c /etc/motioneye/motioneye.conf" + +EXPOSE 8765 +``` \ No newline at end of file diff --git a/docs/docker-compose/redis.md b/docs/docker-compose/redis.md new file mode 100644 index 0000000..c68d0ac --- /dev/null +++ b/docs/docker-compose/redis.md @@ -0,0 +1,83 @@ +Redis - как пишут на википедии, **Redis** (от англ. **remote dictionary server**) — резидентная система управления базами данных класса NoSQL с открытым исходным кодом, работающая со структурами данных типа «ключ — значение». Используется как для баз данных, так и для реализации кэшей, брокеров сообщений. + +Простыми словами, Redis это размещаемое в памяти хранилище ключ-значение, обычно используемое для кэшей и подобных механизмов ускорения сетевых приложений. + +Redis быстр. Когда я говорю быстр, я имею в виду Быстр с заглавной буквы Б. Это по существу *memcached* с более продуманными типами данных, нежели просто строковые значения. Даже некоторые продвинутые операции такие, как пересечение множеств, выборка диапазонов zset, ослепительно быстры. Есть все поводы использовать Redis для быстроменяющихся активно запрашиваемых данных. Он довольно часто используется в качестве кэша, который может быть перестроен по данным из резервной базы данных. Это мощная замена memcached предоставляющая более продвинутое кэширование для различных видов хранимых вами данных. + +## Создание сети + +Создать сеть в docker можно с помощью нескольких способов. Я предпочитаю явно через консоль ввести все параметры, тк эту сеть будут использовать и другие контейнеры, а так же, возможно, другие стеки. Создаем базовую сеть `direct_net` со следующими параметрами:  + + +| --- | --- | +| Name | redis\_network | +| Subnet | 172.18.5.0/24 | +| Gateway | 172.18.5.254 | + +Команда для создания через консоль: + +`docker network create --gateway 172.18.1.254 --subnet 172.18.1.0/24 direct_net` + +Создаем файл .env, где будем хранить переменные.  + +`nano .env` + +Заполняем его + +```plaintext +$DOCKERDIR_APP=/opt/docker/appdata +``` + +Создаем файл docker-compose.yml  + +`nano docker-compose.yml` + +Заполняем его + +```yaml +version: "3.7" + +networks: + direct_net: + external: true + +services: + ## Redis - Key-value Store + redis: + container_name: redis + image: redis:latest + restart: always + entrypoint: redis-server --appendonly yes + networks: + - direct_net +# ports: +# - "6379:6379" + security_opt: + - no-new-privileges:true + sysctls: + net.core.somaxconn: '65535' + volumes: + - $DOCKERDIR_APP/redis/data:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro +``` + +в дополнение, можем добавить сервис для управления нашим redis - rediscommander: + +```yaml +## Redis Commander - Redis Management Tool + rediscommander: + container_name: rediscommander + image: rediscommander/redis-commander:latest + restart: always + depends_on: + - redis + networks: + - direct_net + ports: + - "8081:8081" + security_opt: + - no-new-privileges:true + environment: + - REDIS_HOST=redis +``` \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 77a9e4a..5d896b2 100755 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -9,6 +9,8 @@ nav: - Install Docker Compose: docker-compose.md - Linx Server: docker-compose/linx-server.md - Samba: docker-compose/samba.md + - Redis: docker-compose/redis.md + - MotionEye: docker-compose/motioneye.md - Media Server: - Plex: docker-compose/plex.md - Plex Meta Manager: docker-compose/plex-mm.md