Развертывание ABCLib/WWWLib с помощью docker и docker-compose

Как "поднять" ABCLib/WWWLib с помощью docker и docker-compose

 

Вначале я хотел сформировать виртуальную машину в VMWare Player или в VirtualBox, установить на нее приложение со всей оснасткой, затем запаковать в zip или ovf/ova и выложить для скачивания. Идея, конечно, так себе, потому что даже в запакованном виде размер обещал быть не менее полутора гигабайт. Впрочем, в конечном итоге, я бы так и поступил, но появилась идея посвежее.

Поскольку я все равно для развертывания приложения собираюсь применять docker, то почему бы и конечному пользователю не воспользоваться этим же инструментом. Тем более, что пара экспериментальных попыток развертывания на различных операционных системах была вполне успешной.

     О "железе"

Нет необходимости в использовании "навороченного" железа. Для экспериментов я создавал виртуальную среду на основе CentOS 7 и Debian 9.5 с 4 GB оперативки и виртуальным жестким диском с "зарезервированным" объемом 40 GB. Жесткий диск я поделил на разделы:

  Назначение   Размер   Точка монтирования
  boot   512 MB   /boot
  root   16 GB   /
  swap   4 GB   swap
 opt   20 GB   /opt

 Деление чисто условное, просто мне так привычно. Вы можете поделить пространство любым удобным для вас образом. Учитывайте, что раздел /opt самый большой, потому что сюда попадают книги перед тем, как будут отданы пользователю и именно здесь находится всё "хозяйство" с приложением и докерами.

Сразу хочу оговориться, что намеренно опускаю вопрос с местом хранения самих коллекций. В моём случае это внешнее хранилище объемом в 3 TB с доступом по сети. Все zip-файлы коллекций сайтов lib.rus.ec и flibusta.org, скачанные в разное время с торрент-трекеров, занимают около 2 TB - это файлы с книгами как fb2-формата, так и usr-формата. Внешнее хранилище монтируется по протоколу NFS в папку /mnt/lib. В архиве с данными по развертыванию приложения есть текстовый файл с содержимым папки /mnt/lib, представленным в виде "дерева" и перечнем zip-файлов коллекций с сайтов lib.rus.ec и flibusta.org.

     docker и docker-compose

 Итак, нам потребуется компьютер с предустановленной операционной системой, полагаю, подойдет любая, за исключением Windows. Впрочем, если вы используете Windows, то наличие VMWare Player или VirtualBox так же поможет решить проблему.

Установите в вашу систему docker и docker-compose. Если вы используете вашу ОС достаточно длительное время, то это не будет для вас проблемой. Обычно я использую CentOS, гораздо реже Ubuntu. Когда я попытался воспользоваться Ubuntu 18.04 LTS в последний раз, у меня возникли трудности с установкой пакетов. Прекрасно понимаю, что это не проблема Ubuntu, это проблема моих знаний и хронического недостатка времени. Я отложил Ubuntu "на потом" и просто воспользовался Debian 9.5, где все у меня прекрасно "срослось".

     Скачивание

Скачайте на свой компьютер один из двух архивов, представленных ниже:

 Какой вариант выбрать решайте сами. Я бы посоветовал попробовать для начала второй вариант. Если возникнут проблемы, то вернуться к первому. Результат будет одинаков.

По окончании установки объем используемого дискового пространства уведичится до 3 гигабайт. Большая часть этого обьема - базы данных MariaDB сервера, восстановленные из дампов. Дампы, кстати, после установки можно удалить.

В качестве бонуса рекомендую скачать небольшое дополнение, призванное слегка облегчить работу с часто набираемыми командами docker. Ничего особенного, но возможность сократить команду

docker ps -q | xargs docker inspect --format '{{ .Config.Image }} - {{ .Config.Hostname }} - {{ .NetworkSettings.IPAddress }}'

 до

drip

 согласитесь, многого стоит.

Скопируйте содержимое папки bin в папку /bin вашей системы, только проверьте предварительно, чтобы наименования команд в исходной и конечной папке не совпадали.

     Установка

 Распакуйте содержимое скачанного архива в папку /opt компьютера.

Должна получиться приблизительно следующая картина:

/opt.
└──/ abc
    ├── /abclib
    │   ├── /abcapp
    │   │   ├── abclib.ini
    │   │   ├── abclib_wsgi
    │   │   ├── abclib.wsgi
    │   │   ├── /apps            # собственно, сам код приложения
    │   │   ├── /cache           # осталось от предыдущих версий
    │   │   ├── config.py
    │   │   ├── init_abc.sh
    │   │   ├── manage.py
    │   │   ├── requirements.txt
    │   │   ├── /tmp
    │   │   ├── /translate
    │   │   ├── wsgi.py
    │   │   ├── wwwlib.ini
    │   │   └── wwwlib.wsgi
    │   └── Dockerfile             # для сборки докера с программой
    ├── create_all.sh
    ├── docker-compose.yml
    ├── dumps_abc.sh
    ├── libenv                     # (каталог с книгами - изначально почти пуст)
    │   ├── /flibusta-all
    │   ├── /flibusta-fb2 -> flibusta-all
    │   ├── /librusec-all
    │   ├── /librusec-fb2 -> librusec-all
    │   ├── /service
    │   └── /zip
    ├── /mariadb                   # базы данных - папка изначально пуста
    ├── mntlib_tree
    ├── /nginx
    │   ├── /conf.d
    │   │   └── abclib.conf
    │   └── nginx.conf
    ├── /opt
    │   ├── abc_dumps.sh │   ├── abc_restore.sh │   ├── create_databases.sh │   ├── drop_databases.sh │   └── /dumps # дампы баз данных │   ├── abc-09-09-2018.sql │   ├── fa-09-09-2018.sql │   ├── fb-09-09-2018.sql │   ├── la-09-09-2018.sql │   └── lb-09-09-2018.sql └── restore_abc.sh 

 Прежде чем мы начнем, следует проделать следующее действие.

Откройте для редактирования файл nginx/conf.d/abclib.conf и измените свойство server_name. Впишите вместо приведенных данных ip-адрес компьютера с вашей будущей библиотекой.

# abclib.conf
server {
listen 80;
# ваш_ip_адрес;
server_name 192.168.0.224;
. . .

Сохраните изменения, убедитесь в наличии доступа к интернету и запустите на выполнение скрипт create_all.sh.

 Процесс установки в варианте "Только исходники" займет около 10 минут. За это время ваш компьютер скачает из интернета несколько базовых образов, и один образ создаст из Dockerfile непосредственно на месте. В процессе будут развернуты четыре контейнера, восстановлены из дампов базы данных MariaDB, создано виртуальное окружение для Python 3.6, запустится вначале сервер uWSGI и, наконец, веб-сервер nginx. Следует иметь ввиду, что результат проявится не сразу, последние три действия будут выполняться после запуска контейнера abclib, т.е. после того, как "видимая" часть работы будет завершена.

Подождите пару минут и откройте в браузере ссылку http://ваш_ip_адрес. Если все нормально, то сайт с приложением заработает сразу.

В случае с "Полным вариантом" все произойдет приблизительно вдвое быстрее, поскольку базы данных уже сформированы, а виртуальное окружение Python-а готово заранее.

     Коротко о командах docker и docker-compose

Некоторые команды выполняются инструментом docker, другие инструментом docker-compose. Правильно будет выролнять их из каталога, в котором расположен файл docker-compose.yml.

Просмотр списка скачанных и сформированных образов:

# docker images

Прсмотр списка запущенных контейнеров:

# docker ps -a

 Остановить работающий контейнер:

# docker-compose stop abclib

 Остановить все контейнеры, перечисленные в docker-compose.yml:

# docker-compose stop

Запустить неактивные контейнеры:

# docker-compose start abclib adminer

Запустить все контейнеры, перечисленные в docker-compose.yml:

# docker-compose start

Удалить контейнер:

# docker rm abclib

Удалить работающий контейнер:

# docker rm -f abclib

 "Убить" все контейнеры:

# docker-compose kill && docker-compose down

Удалить образ:

# docker rmi -f IMAGE_ID

 Удалить несколько образов:

# docker rmi -f IMAGE_ID [IMAGE_ID] ...

     Решение проблем

Ниже приведён пример "успешного" развертывания:

# лог процесса развертывания 
[email protected]:/opt/dockers/abclib# ./create_all.sh        # запуск
Init MariaDB server with docker-compose
Creating mariadb ... done
Creating adminer ... done
Sleeping 5 seconds
Starting MariaDB server
Stopping adminer ... done
Sleeping 5 seconds
Creating databases for ABCLib
Running the start mysql function.
+-------+-----------+
| user  | host      |
+-------+-----------+
| admin | %         |
| root  | %         |
| admin | localhost |
| root  | localhost |
+-------+-----------+
Sleeping 5 seconds
Uploading databases from dumps
Uploading abclib
Uploading fa
Uploading fb
Uploading la
Uploading lb
Sleeping 5 seconds
Init abclib and nginx
Building abclib
Step 1/9 : FROM centos:centos7
 ---> 5182e96772bf
Step 2/9 : MAINTAINER The CentOS Project with sshd <[email protected]>
 ---> Using cache
 ---> a73bb2968e3b
Step 3/9 : RUN yum -y update; yum -y install gcc gcc-c++ kernel-devel mariadb mariadb-devel; yum clean all
 ---> Using cache
 ---> ae41ba298164
Step 4/9 : RUN yum install -y https://centos7.iuscommunity.org/ius-release.rpm
 ---> Using cache
 ---> 9176c4cc4293
Step 5/9 : RUN yum install -y python36u python36u-libs python36u-devel python36u-pip; yum clean all
 ---> Using cache
 ---> eb6e4b1246d3
Step 6/9 : RUN mkdir /opt/abc -p; mkdir /opt/libenv; mkdir /mnt/lib
 ---> Using cache
 ---> a0222aa41358
Step 7/9 : COPY ./abcapp/init_abc.sh /opt/abc
 ---> Using cache
 ---> 0834c69dfea8
Step 8/9 : WORKDIR /opt/abc
 ---> Using cache
 ---> d8f8db6a3f83
Step 9/9 : CMD /opt/abc/init_abc.sh
 ---> Using cache
 ---> f82ea11ff3df
Successfully built f82ea11ff3df
Successfully tagged abclib_abclib:latest
mariadb is up-to-date
Creating abclib ... done
Creating nginx  ... done
Sleeping 5 seconds

[email protected]:/opt/dockers/abclib# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                NAMES
7c5262bf6b84        nginx:latest        "nginx -g 'daemon ..."   2 minutes ago       Up 2 minutes               0.0.0.0:80->80/tcp   nginx
af3dab4b24f9        abclib_abclib       "/opt/abc/init_abc.sh"   2 minutes ago       Up 2 minutes                                    abclib
eacea0bffd6a        adminer             "entrypoint.sh doc..."   6 minutes ago       Exited (0) 6 minutes ago                        adminer
28a8d11227b3        mariadb             "docker-entrypoint..."   6 minutes ago       Up 6 minutes               3306/tcp             mariadb

[email protected]:/opt/dockers/abclib# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
abclib_abclib       latest              f82ea11ff3df        22 hours ago        667MB
adminer             latest              571854511c81        31 hours ago        81.6MB
mariadb             latest              199cc294e316        7 days ago          363MB
nginx               latest              06144b287844        8 days ago          109MB
centos              centos7             5182e96772bf        5 weeks ago         200MB
[email protected]:/opt/dockers/abclib# 

 В случае возникновения проблем и необходимости повторного развертывания вначале проверяем запущенные контейнеры, затем "убиваем" и удаляем их.

# лог остановки всех контейнеров и удаления образов 
[email protected]:/opt/dockers/abclib# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                NAMES
7c5262bf6b84        nginx:latest        "nginx -g 'daemon ..."   11 minutes ago      Up 11 minutes               0.0.0.0:80->80/tcp   nginx
af3dab4b24f9        abclib_abclib       "/opt/abc/init_abc.sh"   11 minutes ago      Up 11 minutes                                    abclib
eacea0bffd6a        adminer             "entrypoint.sh doc..."   15 minutes ago      Exited (0) 15 minutes ago                        adminer
28a8d11227b3        mariadb             "docker-entrypoint..."   15 minutes ago      Up 15 minutes               3306/tcp             mariadb
[email protected]:/opt/dockers/abclib# docker-compose kill
Killing nginx   ... done
Killing abclib  ... done
Killing mariadb ... done
[email protected]:/opt/dockers/abclib# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
7c5262bf6b84        nginx:latest        "nginx -g 'daemon ..."   12 minutes ago      Exited (137) 10 seconds ago                       nginx
af3dab4b24f9        abclib_abclib       "/opt/abc/init_abc.sh"   12 minutes ago      Exited (137) 10 seconds ago                       abclib
eacea0bffd6a        adminer             "entrypoint.sh doc..."   16 minutes ago      Exited (0) 15 minutes ago                         adminer
28a8d11227b3        mariadb             "docker-entrypoint..."   16 minutes ago      Exited (137) 10 seconds ago                       mariadb
[email protected]:/opt/dockers/abclib# docker-compose down
Removing nginx   ... done
Removing abclib  ... done
Removing adminer ... done
Removing mariadb ... done
[email protected]:/opt/dockers/abclib# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

 Возможно, нет необходимости проделывать то же самое с образами.

Но, предположим, нужно все удалить:

[email protected]:/opt/dockers/abclib# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
abclib_abclib       latest              f82ea11ff3df        22 hours ago        667MB
adminer             latest              571854511c81        31 hours ago        81.6MB
mariadb             latest              199cc294e316        7 days ago          363MB
nginx               latest              06144b287844        8 days ago          109MB
centos              centos7             5182e96772bf        5 weeks ago         200MB
[email protected]:/opt/dockers/abclib# docker rmi -f f82ea11ff3df 571854511c81 199cc294e316 06144b287844 5182e96772bf
Untagged: abclib_abclib:latest
Deleted: sha256:f82ea11ff3df054d0cb48700da21d5bf6c93809d045436fbf5da5c77552f262f
Deleted: sha256:d8f8db6a3f837dba19da94339d132e0aed326f1a1d4104304952bce56d5bb56f
Deleted: sha256:0834c69dfea82889954220c7e20c97c80cb72fcad40bf72e4519d3a6d0230c66
Deleted: sha256:8f878d7652452345c7153663ad23fdc4f9158b8b3083f6bcd6359c944472110a
Deleted: sha256:a0222aa413586265618af55aaded13ee15bb72a96348c056f907bc438884b740
Deleted: sha256:6cc94b10107aafde134fc91d10d509d74cc4695afda46ff4e30d884a7cd43e55
Deleted: sha256:eb6e4b1246d32fc842a0e3c666ab24ff2e17cf28b1d5d4c3675dc3dbdf3c84bb
Deleted: sha256:79c526aa20920a2533f2ad2954e39a71c974ea41e67c4783967bfc25fb7916ab
Deleted: sha256:9176c4cc4293648e9ff5be5d68eef877dd46c1726e672c015d9940b6d4b90227
Deleted: sha256:8ad3f227968a7f5f737158599889faf90781b18cd0e5f3d14f7856058c203371
Deleted: sha256:ae41ba2981646d833f8a2662f0f40023578985ad9c2a7efbb110d504a55cbe29
Deleted: sha256:7e8a88b4541f7ca6464079f6c38538abf28efda961793fdf91115a021e4595cb
Deleted: sha256:a73bb2968e3b57c5da4a6fcef7a3a36f0ababa882f5118d7430b01d8aa9e4f2d
Untagged: adminer:latest
Untagged: [email protected]:3cb167f74f4c822175a4e5e84062a2eef60ac5c2453e22f342d4185935b4d885
Deleted: sha256:571854511c81e715f7c4a3f5776879c59a4b340b59a155426b540eb05e3bee5a
Deleted: sha256:fb8b5cbdd07156e45e3969c1b220b6df8573bdb8b3b93f0c4ad1ffda157cc50d
Deleted: sha256:db0a1302b4cb1885eb4ea63b551ed7f0231cf2a95ccb6e2e57a97dea6b99d698
Deleted: sha256:48a0c306726055fa3af1f59f593dca58487acb6e77a59808aa79e201c06a3073
Deleted: sha256:b2e789c504ca23732e0f8cbc703cee7420c106e769a8b20332ddf1a1c11d806b
Deleted: sha256:f6f3cf855fda79704d7261cb2a740b2cb12feb073f664ca5fa50927e46a30a91
Deleted: sha256:36a58687b8437d17c185bf95180d26302bd0858c1ab4917f5e97bcc8679434bf
Deleted: sha256:49ef8ae06dbd682a088a42520064fa933c636cd50a972714c6996ab7606bad42
Deleted: sha256:cdd7d6f1a7c3089119fe44e7e8f0e17a365fc3db18c1cb2ee7d29c4ce2040cf8
Deleted: sha256:0eacf83813c795a9caab09e7e96b711117c090f58f65627098c5f785d2443fd6
Deleted: sha256:26304c07b01c0350fca5c2820baa469550263462d7d9df99e76a3d77919189cd
Deleted: sha256:a9fcba27d39f66c362f3e1d7d05cb9867aadc075d73d539b45d4b2ce756ecf0d
Deleted: sha256:c08dcfc6515da5b32cbc3b527dbed30c63e48680ae581c0584c0aeedeacc1f56
Deleted: sha256:52660490b816d36960ee958851acb45e7db70bbd1d0a6c218767c0b11719c7a4
Deleted: sha256:962ea6483089895a40823eeb397023e0d72a2a86439e8aca569f3903aacded18
Deleted: sha256:a56dbdd7f3a285e745f684be44887a469f6fca24b392546e03363c12ac9d3e55
Deleted: sha256:df64d3292fd6194b7865d7326af5255db6d81e9df29f48adde61a918fbd8c332
Untagged: mariadb:latest
Untagged: [email protected]:b7894bd08e5752acdd41fea654cb89467c99e67b8293975bb5d787b27e66ce1a
Deleted: sha256:199cc294e3168cac8c8f5499649d258a9d5fbd6700d7c899d9dded911d0b1c58
Deleted: sha256:39804f3f47afd4f3fa243de79d204de281d694222a0bfc05393cca3e06703db3
Deleted: sha256:16ff082f69b487a40c645a65df1badf28500df13b00c3250539592dd4b0be3fe
Deleted: sha256:cb7db56c3f7b7537aca51c352b39e80f92a527fed0f7ac16b58f2fc1c6501a23
Deleted: sha256:eb39f8c814726205140d5fa0860318818a85d1ab1ea447fd53ab5cc1208679ff
Deleted: sha256:608032e661f8edf0e25048587bbc907e2137b76d5a99e53b0f9cbee4ac73af64
Deleted: sha256:0841bbe1be7526defa0a8abd0f0e1e65cd76032378edc96da34d905c7f2f780a
Deleted: sha256:fb3efac08438692b42a884f136c2c276f3b32e4c68854068a555ca17877afd0e
Deleted: sha256:2e7455fe419598db8cae61e958478119d9ee676500fb3fb82c1fe7ec6b26e016
Deleted: sha256:f2b7f8dda7a4e16426350a3f65a0e14032c816885bd2da9279005ebcbe99c013
Deleted: sha256:33b6e49777fd6a6a9db5c1fd37de5205d631c448b5d323bfa6bdbd23b26b76e1
Deleted: sha256:2416e906f135eea2d08b4a8a8ae539328482eacb6cf39100f7c8f99e98a78d84
Deleted: sha256:7f8291c73f3ecc4dc9317076ad01a567dd44510e789242368cd061c709e0e36d
Deleted: sha256:4b3d88bd6e729deea28b2390d1ddfdbfa3db603160a1129f06f85f26e7bcf4a2
Deleted: sha256:f51700a4e396a235cee37249ffc260cdbeb33268225eb8f7345970f5ae309312
Deleted: sha256:a30b835850bfd4c7e9495edf7085cedfad918219227c7157ff71e8afe2661f63
Untagged: nginx:latest
Untagged: [email protected]:24a0c4b4a4c0eb97a1aabb8e29f18e917d05abfe1b7a7c07857230879ce7d3d3
Deleted: sha256:06144b2878448774e55577ae7d66b5f43a87c2e44322b3884e4e6c70d070b262
Deleted: sha256:824a442ee3c96744d75be3737a22cc6a47aebad1b30be67f3c2f8f29cb0aa879
Deleted: sha256:8e3d1e9e4945f930c93c30617512998437f6edafd86676770d29b1581f2520bb
Deleted: sha256:8b15606a9e3e430cb7ba739fde2fbb3734a19f8a59a825ffa877f9be49059817
Untagged: centos:centos7
Untagged: [email protected]:6f6d986d425aeabdc3a02cb61c02abb2e78e57357e92417d6d58332856024faf
Deleted: sha256:5182e96772bf11f4b912658e265dfe0db8bd314475443b6434ea708784192892
Deleted: sha256:1d31b5806ba40b5f67bde96f18a181668348934a44c9253b420d5f04cfb4e37a
[email protected]:/opt/dockers/abclib# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
[email protected]:/opt/dockers/abclib#

 Кажется, все...

--------------------------------------------------------------------------------------

     Пароли и настройка "под себя"

Для упрощения я везде использовал пароль "SecretKey".

Для доступа к MariaDB-серверу используются следующие данные:

  • Логин:  root
  • Пароль: SecretKey

Для доступа к базам данных MariaDB из кода приложения:

  • Логин:  admin
  • Пароль: SecretKey

Для веб-доступа к административной части приложения:

    

    Случай, когда вы еще не запускали процесс установки

Здесь все просто.

Прежде всего необходимо изменить пароль доступа к MariaDB-серверу и к базам данных. Для этого откройте docker-compose.yml, найдите в секции mariadb раздел environment и измените содержимое MYSQL_ROOT_PASSWORD с "SecretKey" на что-то другое:

...
    environment:
      # mariadb
      MYSQL_ROOT_PASSWORD: SecretKey
      MYSQL_ROOT_USER: root
...

Зайдите в папку opt, откройте попеременно все скрипты инициализации и измените пароль "SecretKey" на что-либо другое. Различайте пароли: root - для сервера MariaDB и admin - для баз данных. В нашем примере они одинаковы, в вашем случае они могут различаться.

Если вы еще не запускали процесс развертывания, то сейчас самое время сделать это. Перейдите в папку, где расположен файл docker-compose.yml и запустите скрипт create_all.sh.

     Случай, когда процесс установки уже выполнен

Когда все уже заработало, можно воспользоваться прямым подключением к контейнеру. Не вдаваясь в различия, можно воспринимать контейнеры как виртуальные машины. В грубом приближении так оно и есть. И, соответственно, существуют инструменты для подключения к ним.

Для начала убедитесь, что необходимые нам контейнеры активны:

# docker ps -a
CONTAINER ID   IMAGE           COMMAND                  CREATED       STATUS                    PORTS                    NAMES
48561b72110e   nginx:latest    "nginx -g 'daemon ..."   20 hours ago  Exited (0) 20 hours ago                            nginx
e5340b0cba0f   abclib_abclib   "/opt/abc/init_abc.sh"   20 hours ago  Up About an hour                                   abclib
c3ef7fdc3474   adminer         "entrypoint.sh doc..."   21 hours ago  Up 3 hours                0.0.0.0:8080->8080/tcp   adminer
841d443bb3b7   mariadb         "docker-entrypoint..."   21 hours ago  Up 3 hours                3306/tcp                 mariadb

 Обратите внимание, контейнер nginx у нас неактивен. Это указано в колонке STATUS, значение которой в строке nginx явно говорит "Exited (0) 20 hours ago". Остальные активны, поскольку в колонке STATUS указано значение "Up". В том числе активен контейнер mariadb, к которому подключаемся следующей командой:

# docker exec -it mariadb /bin/bash
[email protected]:/# ls
bin   dev                         docker-entrypoint.sh  home  lib64  mnt  proc  run   srv  tmp  var
boot  docker-entrypoint-initdb.d  etc                   lib   media  opt  root  sbin  sys  usr
[email protected]:/#

 Итак, мы подключились к контейнеру mariadb, который является сервером MySQL. Подключаемся к серверу MySQLи выполняем все манипуляции по изменению прав доступа к самому серверу и базам данных:

# mysql -u root -pSecretKey
MariaDB [(none)]> USE mysql; MariaDB [(none)]> UPDATE user SET password=PASSWORD('NewPassword') WHERE User='root' AND Host = 'localhost'; MariaDB [(none)]> FLUSH PRIVILEGES;

 Затем последовательно подключаемся ко всем базам данных и меняем пароль для admin:

MariaDB [(none)]> use abclib;
MariaDB [(none)]> SET PASSWORD FOR 'abclib'@'localhost' = PASSWORD('NewPassword'); MariaDB [(none)]> use fa;
MariaDB [(none)]> SET PASSWORD FOR 'fa'@'localhost' = PASSWORD('NewPassword'); MariaDB [(none)]> use fb;
MariaDB [(none)]> SET PASSWORD FOR 'fb'@'localhost' = PASSWORD('NewPassword'); MariaDB [(none)]> use la;
MariaDB [(none)]> SET PASSWORD FOR 'la'@'localhost' = PASSWORD('NewPassword'); MariaDB [(none)]> use lb;
MariaDB [(none)]> SET PASSWORD FOR 'lb'@'localhost' = PASSWORD('NewPassword'); MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> \q Bye [email protected]:/# exit exit #

И, наконец, выходим из редактирования MySQL и контейнера. Проделанное нами сейчас, по сути дублирует вариант, когда мы еще не запускали процесс установки.

 

Следующий шаг - настройка доступа из приложения. Для этого перейдите в папку abclib/abcapp, откройте файл config.py и в самом конце файла измените пароль доступа к базам данных - параметр MYSQL_PASSWORD. Здесь же стоит сразу обратить внимание на MAIL_USERNAME и MAIL_PASSWORD. Если у вас есть почтовый аккаунт на gmail.com, то введите здесь ваши учетные данные. В этом случае gmail.com будет выступать в качестве посредника между приложением и конечным пользователем.

И, наконец, настройка веб-доступа к административной части приложения. Эту часть следует выполнять после завершения развертывания.

Необходимо инициализировать таблицы базы данных abclib со списком пользователей и ролей и внести в неё пользователя с правами администратора.

Вначале необходимо отредактивать файл abclib/abcapp/manage.py. Отыщите в модуле init_db() строки, начинающиеся с "admin = User(firstname..." и измените информацию, содержащуюся в них. Обычно я вписываю сюда пользователя с email фактически несуществующего почтового сервера, вида "[email protected]", главное, чтобы пароль был достаточно сложным. Согласитесь, сложно взломать почтовый ящик несуществующего пользователя.

Теперь мы должны удалить таблицы с пользовательскими данными. Проверяем, что контейнер abclib активен

# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                   PORTS                NAMES
5c9792fb095f        nginx:latest        "nginx -g 'daemon ..."   12 hours ago        Up 2 hours               0.0.0.0:80->80/tcp   nginx
66e9ff10cb23        abclib_abclib       "/opt/abc/init_abc.sh"   12 hours ago        Up 2 hours                                    abclib
c3ef7fdc3474        adminer             "entrypoint.sh doc..."   41 hours ago        Exited (0) 2 hours ago                        adminer
841d443bb3b7        mariadb             "docker-entrypoint..."   41 hours ago        Up 2 hours               3306/tcp             mariadb

 и подключаемся к нему

# docker exec -it abclib /bin/bash
[[email protected] abc]#

 Ранее мы подключадись к контейнеру mariadb и уже изнутри подключались к серверу MySQL командой mysql -u root -p. Сразу скажу, что в этом случае подобный финт не прокатит, поскольку контейнер другой. Здесь применим вариант команды MySQL, учитывающий подключение к сервису удаленного компьютера:

# mysql --protocol=tcp --host=mariadb --user=root --password=SecretKey
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 27
Server version: 10.3.9-MariaDB-1:10.3.9+maria~bionic mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

Подключаемся к базе данных, смотрим список таблиц и удаляем roles_users, role и user.

MariaDB [(none)]> use abclib;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [abclib]> show tables;
+------------------+
| Tables_in_abclib |
+------------------+
| favorite         |
| popular          |
| role             |
| roles_users      |
| service          |
| session          |
| user             |
+------------------+
7 rows in set (0.00 sec)

MariaDB [abclib]> drop table roles_users;
Query OK, 0 rows affected (0.07 sec)

MariaDB [abclib]> drop table role;
Query OK, 0 rows affected (0.06 sec)

MariaDB [abclib]> drop table user;
Query OK, 0 rows affected (0.03 sec)

MariaDB [abclib]> \q
Bye
[[email protected] abc]#

 И выходим из редактирования MySQL, но пока остаемся приаттачеными к контейнеру abclib. Вспоминаем python-овский virtualenv:

[[email protected] abc]# cd /opt/abc
(env) [[email protected] abc]# env/bin/python manage.py create_db
(env) [[email protected] abc]# env/bin/python manage.py init_db 
(env) [[email protected] abc]# exit
exit
#

 С помощью первой команды переходим в каталог /opt/abc. Второй - создаем заново удаленные таблицы. С помощью третьей - инициализируем таблицы новыми данными учетки администратора.

Теперь можно перейти в браузер по адресу http://ваш_ip_адрес и войти в программу с правами администратора.

--------------------------------------------------------------------------------------

PS.

Это надо сделать обязательно, иначе новые пользователи не смогут регистрироваться.

Найдите файл abclib/abcapp/env/lib/python3.6/site-packages/flask_security/views.py, найдите в нем модуль register()  и измените его в соответствии с приведенной ниже информацией.

. . .
@anonymous_user_required def register(): """View function which handles a registration request.""" if _security.confirmable or request.is_json: # было так
if request.is_json:  # надо так

. . .

 Вот теперь все!