ай ти арт про logo

Качественное I.T. - сайты, приложения, продвижение

Содержание статьи

Что делать разработчику если РОСКОМНАДЗОР в край офанареет и закроет доступ к репозиториям Docker? Или может офанареть США и отрубить западный сегмент интернета от нас/всё заблокировать/нагадить. Немного подготовившись, вы можете принести все необходимое на USB-накопителе и установить полностью функциональный стек Docker в автономном режиме. В этом руководстве вы узнаете, как предварительно загрузить Docker Engine (с помощью Docker Compose) для системы Debian Linux, взять несколько общих образов и настроить всё это на сервере Debian с воздушной загрузкой. Давайте приступим!


Шаг 1: Предварительная загрузка Docker Engine и Compose (на машине с Интернетом)

Во-первых, вам нужны Docker Engine и Docker Compose, готовые к установке в автономном режиме. Мы загрузим их на машину Debian с интернетом, а затем упакуем.


1. Установите движок Docker на подготовительную машину

На системе Debian с интернетом выполните эти команды для установки Docker:


sudo apt update

sudo apt install -y curl

curl -fsSL https://get.docker.com -o get-docker.sh

sudo sh get-docker.sh

Это установит движок Docker Engine. Проверьте, работает ли он:
sudo docker --version


2. Скачать Docker Compose

Docker Compose - это отдельный инструмент. Возьмите бинарный файл:

sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.6/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

Проверьте c `docker-compose --version`

3. Упакуйте Docker для автономного использования

Экспорт установленных пакетов Docker: `sudo apt-get download docker.io docker-doc`


Это создаст .deb файлы (например, docker.io_*.deb) в вашем текущем каталоге.

Скопируйте бинарный файл Compose: `cp /usr/local/bin/docker-compose .`


Поместите эти файлы (docker.io_*.deb, docker-doc_*.deb, docker-compose) на USB-накопитель в папку, например, docker_install.



Шаг 2: Предварительная загрузка образов Docker


Далее возьмите необходимые образы: golang:alpine, postgres:alpine, dpage/pgadmin4, traefik, humenius/traefik-certs-dumper:latest, portainer/portainer-ce, и alpine:latest. Делайте это на той же машине с интернетом.


1 Извлеките образы

Выполните эти команды:

docker pull golang:alpine

docker pull postgres:alpine

docker pull dpage/pgadmin4

docker pull traefik:latest

docker pull humenius/traefik-certs-dumper:latest

docker pull portainer/portainer-ce

docker pull alpine:latest

2 Сохраняйте изображения в файлы

Экспортируйте каждый образ в файл .tar:

docker save -o golang_alpine.tar golang:alpine

docker save -o postgres_alpine.tar postgres:alpine

docker save -o pgadmin4.tar dpage/pgadmin4

docker save -o traefik.tar traefik:latest

docker save -o traefik_certs_dumper.tar humenius/traefik-certs-dumper:latest

docker save -o portainer_ce.tar portainer/portainer-ce

docker save -o alpine.tar alpine:latest

Загрузите эти .tar-файлы на USB-накопитель в папку docker_images.


Шаг 3: Создайте самоподписные сертификаты

Поскольку для Let's Encrypt нет интернета, мы будем использовать самоподписанные сертификаты для HTTPS. Сделайте это на подготовительной машине:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes -subj "/CN=mywebsite.local"

Это создаст cert.pem (сертификат) и key.pem (закрытый ключ), действительные в течение года. Скопируйте их на USB в папку certs.

Шаг 4: Подготовьте файл Docker Compose

Создайте файл docker-compose.yml, чтобы связать все воедино. Вот простой пример:

version: "3"

services:


  traefik:

    image: traefik:latest

    ports:

      - "80:80"

      - "443:443"

    volumes:

      - ./traefik.yml:/etc/traefik/traefik.yml

      - ./cert.pem:/etc/traefik/cert.pem

      - ./key.pem:/etc/traefik/key.pem

      - /var/run/docker.sock:/var/run/docker.sock


  postgres:

    image: postgres:alpine

    environment:

      - POSTGRES_PASSWORD=mysecretpassword


  pgadmin:

    image: dpage/pgadmin4

    labels:

      - "traefik.http.routers.pgadmin.rule=Host(`pgadmin.local`)"

      - "traefik.http.services.pgadmin.loadbalancer.server.port=80"

      - "traefik.http.routers.pgadmin.tls=true"

    environment:

      - PGADMIN_DEFAULT_EMAIL=admin@local.com

      - PGADMIN_DEFAULT_PASSWORD=admin


  goapp:

    image: golang:alpine

    command: sh -c "echo 'Hello from Go' && sleep 3600"

    labels:

      - "traefik.http.routers.goapp.rule=Host(`goapp.local`)"

      - "traefik.http.services.goapp.loadbalancer.server.port=8080"

      - "traefik.http.routers.goapp.tls=true"


  certs-dumper:

    image: humenius/traefik-certs-dumper:latest

    volumes:

      - ./certs:/output


  portainer:

    image: portainer/portainer-ce

    volumes:

      - /var/run/docker.sock:/var/run/docker.sock

    labels:

      - "traefik.http.routers.portainer.rule=Host(`portainer.local`)"

      - "traefik.http.services.portainer.loadbalancer.server.port=9000"

      - "traefik.http.routers.portainer.tls=true"


  alpine:

    image: alpine:latest

    command: sh -c "echo 'Alpine is here' && sleep 3600"

Также создайте файл traefik.yml:

http:

  routers:

    to-https:

      rule: "Host(`mywebsite.local`)"

      entryPoints:

        - http

      middlewares:

        - https-redirect

  middlewares:

    https-redirect:

      redirectScheme:

        scheme: https

entryPoints:

  http:

    address: ":80"

  https:

    address: ":443"

tls:

  certificates:

    - certFile: /etc/traefik/cert.pem

      keyFile: /etc/traefik/key.pem

providers:

  docker:

    exposedByDefault: false

Сохраните оба файла на USB в папке compose.


Шаг 5: Настройка сервера Debian с воздушной загрузкой

Теперь отнесите USB на сервер с воздушной завесой и настройте его.

1. Установите движок Docker Engine

Скопируйте папку docker_install с USB на сервер (например, /home/user/docker_install). Затем:

cd /home/user/docker_install

sudo dpkg -i *.deb

sudo apt-get install -f # Fixes any missing dependencies already in Debian

Проверьте: `sudo docker --version`


2. Установите Docker Compose

Скопируйте docker-compose с USB на сервер:

sudo cp /path/to/usb/docker_install/docker-compose /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

Проверьте: `docker-compose --version`

3. Загрузите образы Docker

Скопируйте папку docker_images на сервер (например, /home/user/docker_images). Загрузите каждый образ:

cd /home/user/docker_images

sudo docker load -i golang_alpine.tar

sudo docker load -i postgres_alpine.tar

sudo docker load -i pgadmin4.tar

sudo docker load -i traefik.tar

sudo docker load -i traefik_certs_dumper.tar

sudo docker load -i portainer_ce.tar

sudo docker load -i alpine.tar


4. Настройка сертификатов и файлов композиции

Скопируйте папки certs и compose на сервер (например, /home/user/app):

mkdir /home/user/app

cp -r /path/to/usb/certs /home/user/app/

cp -r /path/to/usb/compose/* /home/user/app/

5. Начните все

Перейдите в папку с приложением и запустите его:

cd /home/user/app

sudo docker-compose up -d


Шаг 6: Проверка

После запуска протестируйте свои службы локально:

- Используйте curl http://localhost или curl https://localhost (с параметром --insecure для самоподписанных сертификатов).

- Добавьте записи в /etc/hosts на сервере (например, 127.0.0.1 pgadmin.local), чтобы проверить маршрутизацию на основе домена.

- Зайдите на portainer.local:9000 в браузере (если у вас есть графический интерфейс), чтобы управлять Docker.


Примчание:
Фиксированные IP-адреса: Если IP-адреса контейнеров меняются, используйте пользовательскую сеть Docker в файле docker-compose.yml:

networks:

  mynet:

    ipam:

      config:

        - subnet: "172.20.0.0/16"


Вот и все! У вас есть стек Docker, работающий в среде с воздушной завесой, с маршрутизацией Traefik и HTTPS. Он портативен, прост и готов к работе - просто возьмите с собой USB и следуйте за ним.