21

Re: Пару запитань новачка у docker

kisilam
Дякую.

Поки що відзвітував про результати проведеного аналізу. Запропонував скачати docker image з проду і запустити локально. Якраз заранити локально було ціллю. Дадуть доступи - зроблю.

Рефакторинг - довше, пекельніше, але правильніше. Але ж треба побачити спершу, як воно взагалі виглядає. Воно ж таке нещасне, що без джаваскриптових бібліотек взагалі нічого не відображає.

22

Re: Пару запитань новачка у docker

Goodluck
:)

23

Re: Пару запитань новачка у docker

Угу. В мене є більш пріоритетні завдання, але схоже що й "ось це" мене врешті не мине теж. З суто спортивного інтересу мені досить непогано було б у цьому розібратися. Тоді можна буде сміливо писати в резюме "фулстек" )))

24

Re: Пару запитань новачка у docker

Де можна онлайн розгорнути свій docker безкоштовно або ж недорого?

25

Re: Пару запитань новачка у docker

Пробую клауд від IBM. Поки їхнє секуріті думало хто я такий, я вже розгорнув середовище на virtualbox. Опісля прийшло погодження від IBM - мабуть все ж скористаюся, бо дають спершу free tier.

26 Востаннє редагувалося frz (26.05.2023 13:28:52)

Re: Пару запитань новачка у docker

Маю вкрай близькі інтимні стосунки із зниканням даних з бази (mysql) в контейнері після рестарту

/usr/local/bin/docker-compose down
/usr/local/bin/docker-compose up -d

пробував

docker commit [назва контейнера]

не допомогло - після рестарту звертаюся до бази, вона взагалі відсутня, але створюється за допомогою init.sh

#!/bin/bash

set -e

MYSQL_USER=$(echo "${MYSQL_USER}")
MYSQL_ROOT_PASSWORD=$(echo "${MYSQL_ROOT_PASSWORD}")
MYSQL_PASSWORD=$(echo "${MYSQL_PASSWORD}")
MYSQL_DB=$(echo "${MYSQL_DB}")

echo "CREATE USER IF NOT EXISTS '${MYSQL_USER}'@'%' IDENTIFIED BY '${MYSQL_PASSWORD}';" | mysql -u root --password=${MYSQL_ROOT_PASSWORD}
echo "CREATE DATABASE IF NOT EXISTS \`$MYSQL_DB\`;" | mysql -u root --password=${MYSQL_ROOT_PASSWORD}
echo "GRANT ALL PRIVILEGES ON ${MYSQL_DB}.* TO '${MYSQL_USER}'@'%';" | mysql -u root --password=${MYSQL_ROOT_PASSWORD}
echo "FLUSH PRIVILEGES;" | mysql -u root --password=${MYSQL_ROOT_PASSWORD}

шматок з docker-compose.yml

services:
  db:
    image: mysql:8.0.33
    command: mysqld --default-authentication-plugin=mysql_native_password
    restart: always
    env_file:
      - manual/.env
    ports:
      - 33306:3306
    volumes:
      - db:/var/lib/mysql
    networks:
      recommender:
        ipv4_address: 179.20.0.10

volumes:
  db:
    external: true

ґпт поки що не допоміг


----

Upd: пробую

/usr/local/bin/docker-compose stop

замість

/usr/local/bin/docker-compose down

тепер після запуску

/usr/local/bin/docker-compose up -d

якщо встигнути тут же зробити селект, то на мить можна побачити дані з минулого запуску, потім база каже що такої назви бази нема, потім що нема таблиці, а потім - що таблиця порожня.

Якась фігня.

27

Re: Пару запитань новачка у docker

Я так глибоко не докопувався, щоб розбиратися в усіх тонкощах... але мені чомусь оцей шматочок впав у око:

frz написав:

шматок з docker-compose.yml

volumes:
  db:
    external: true

Гугління видало щось таке:
https://stackoverflow.com/questions/474 … t-be-found

Вибачайте, якщо пальцем в небо... Дивився власні приклади, які я використовував, коли розбирався з докером, то в мене отого external: true немає і все працювало прекрасно без нього.

28

Re: Пару запитань новачка у docker

bvn

Нічого не виходило, поки не став на коліна для молитви. Вже працює. Як саме - навіть не знаю. Точніше, буду знати коли закомічу ввечері і подивлюся diff.

29 Востаннє редагувалося Droid 77 (26.05.2023 15:30:36)

Re: Пару запитань новачка у docker

Пан frz

Цитоване повідомлення
frz написав:

Маю вкрай близькі інтимні стосунки із зниканням даних з бази (mysql) в контейнері після рестарту

/usr/local/bin/docker-compose down
/usr/local/bin/docker-compose up -d

пробував

docker commit [назва контейнера]

не допомогло - після рестарту звертаюся до бази, вона взагалі відсутня, але створюється за допомогою init.sh

#!/bin/bash

set -e

MYSQL_USER=$(echo "${MYSQL_USER}")
MYSQL_ROOT_PASSWORD=$(echo "${MYSQL_ROOT_PASSWORD}")
MYSQL_PASSWORD=$(echo "${MYSQL_PASSWORD}")
MYSQL_DB=$(echo "${MYSQL_DB}")

echo "CREATE USER IF NOT EXISTS '${MYSQL_USER}'@'%' IDENTIFIED BY '${MYSQL_PASSWORD}';" | mysql -u root --password=${MYSQL_ROOT_PASSWORD}
echo "CREATE DATABASE IF NOT EXISTS \`$MYSQL_DB\`;" | mysql -u root --password=${MYSQL_ROOT_PASSWORD}
echo "GRANT ALL PRIVILEGES ON ${MYSQL_DB}.* TO '${MYSQL_USER}'@'%';" | mysql -u root --password=${MYSQL_ROOT_PASSWORD}
echo "FLUSH PRIVILEGES;" | mysql -u root --password=${MYSQL_ROOT_PASSWORD}

шматок з docker-compose.yml

services:
  db:
    image: mysql:8.0.33
    command: mysqld --default-authentication-plugin=mysql_native_password
    restart: always
    env_file:
      - manual/.env
    ports:
      - 33306:3306
    volumes:
      - db:/var/lib/mysql
    networks:
      recommender:
        ipv4_address: 179.20.0.10

volumes:
  db:
    external: true

ґпт поки що не допоміг


----

Upd: пробую

/usr/local/bin/docker-compose stop

замість

/usr/local/bin/docker-compose down

тепер після запуску

/usr/local/bin/docker-compose up -d

якщо встигнути тут же зробити селект, то на мить можна побачити дані з минулого запуску, потім база каже що такої назви бази нема, потім що нема таблиці, а потім - що таблиця порожня.

Якась фігня.

Можливо не туди. Та Ваша база стартує від адміна, а контейнер то щось ізольоване. Можливо це і є та несумісність в Вашому випадку?

30 Востаннє редагувалося frz (26.05.2023 17:37:14)

Re: Пару запитань новачка у docker

Droid 77
Щодо адміна в цілому напрямок думок вірний, бо задля секурності потрібно максимально обмежити використання адмінських прав, натомість створювати спеціалізованих користувачів і виділяти їм вузькі права. Я в принципі в цьому напрямку рухаюся, принаймні для щоденних операцій в мене створено окремого користувача; також планую створити окремого користувача для backup/restore. А те що взагалі база раниться під лінуксовим рут - про це ще не думав як саме пофіксити.

Але сама проблема зі збереженням даних в базі між вимкненням і увімкненням контейнерів вже вирішена
https://replace.org.ua/post/183072/#p183072

31 Востаннє редагувалося Droid 77 (26.05.2023 17:50:03)

Re: Пару запитань новачка у docker

Не те мав на увазі.
Коли використовуємо контейнер, треба той sql поміщати в контейнер.
Бо інакше доступ до БД буде як доступ від клієнта до бази, без адмін прав.

P. S.
І молитва в даному випадку, таке-собі хоббі.

32

Re: Пару запитань новачка у docker

В мене база SQL (MySQL) в окремому контейнері в тому ж докер-проекті.

В даному випадку молився, коли вже не було ідей, а трушно вважаю молитися перед тим, як взагалі починати робити.

33 Востаннє редагувалося Droid 77 (26.05.2023 20:28:57)

Re: Пару запитань новачка у docker

Та де-ж воно в окремому як все від прав адміна:

Цитата повідомлення
frz написав:

Маю вкрай близькі інтимні стосунки із зниканням даних з бази (mysql) в контейнері після рестарту

/usr/local/bin/docker-compose down
/usr/local/bin/docker-compose up -d

пробував

docker commit [назва контейнера]

не допомогло - після рестарту звертаюся до бази, вона взагалі відсутня, але створюється за допомогою init.sh

#!/bin/bash

set -e

MYSQL_USER=$(echo "${MYSQL_USER}")
MYSQL_ROOT_PASSWORD=$(echo "${MYSQL_ROOT_PASSWORD}")
MYSQL_PASSWORD=$(echo "${MYSQL_PASSWORD}")
MYSQL_DB=$(echo "${MYSQL_DB}")

echo "CREATE USER IF NOT EXISTS '${MYSQL_USER}'@'%' IDENTIFIED BY '${MYSQL_PASSWORD}';" | mysql -u root --password=${MYSQL_ROOT_PASSWORD}
echo "CREATE DATABASE IF NOT EXISTS \`$MYSQL_DB\`;" | mysql -u root --password=${MYSQL_ROOT_PASSWORD}
echo "GRANT ALL PRIVILEGES ON ${MYSQL_DB}.* TO '${MYSQL_USER}'@'%';" | mysql -u root --password=${MYSQL_ROOT_PASSWORD}
echo "FLUSH PRIVILEGES;" | mysql -u root --password=${MYSQL_ROOT_PASSWORD}

шматок з docker-compose.yml

services:
  db:
    image: mysql:8.0.33
    command: mysqld --default-authentication-plugin=mysql_native_password
    restart: always
    env_file:
      - manual/.env
    ports:
      - 33306:3306
    volumes:
      - db:/var/lib/mysql
    networks:
      recommender:
        ipv4_address: 179.20.0.10

volumes:
  db:
    external: true

ґпт поки що не допоміг


----

Upd: пробую

/usr/local/bin/docker-compose stop

замість

/usr/local/bin/docker-compose down

тепер після запуску

/usr/local/bin/docker-compose up -d

якщо встигнути тут же зробити селект, то на мить можна побачити дані з минулого запуску, потім база каже що такої назви бази нема, потім що нема таблиці, а потім - що таблиця порожня.

Якась фігня.

SQL був встановлений безпосередньо в контейнер?

34 Востаннє редагувалося frz (26.05.2023 21:13:41)

Re: Пару запитань новачка у docker

Ну бо ось це база

services:
  db:

а інший сервіс - це сама аплікація

...
  app-server:

Два різних контейнери в рамках одного docker-compose.yml

35

Re: Пару запитань новачка у docker

закомітив, глянув diff, походу ось це допомогло:

docker/start_app.sh

- docker-compose up --build --remove-orphans --force-recreate -d
+ docker-compose up -d

Тобто якщо я не хочу білдити з нуля, то достатньо лише підняти сервіси.

36

Re: Пару запитань новачка у docker

usermod -aG docker Your_USER|
Дозволить вам працювати з докером з під простого користувача, без рута

Подякували: leofun011

37

Re: Пару запитань новачка у docker

Звідки взяти TLS_CERTIFICATE_CRT і TLS_KEY?

# .github/workflows/build-production.yml

      - name: Build and push production image
        uses: docker/build-push-action@v2.9.0
        with:
          context: .
          tags: myprogram:latest, myprogram:sandbox0001tag
          push: true
          #secrets: |
          #  "tls_crt=${{ secrets.TLS_CERTIFICATE_CRT }}"
          #  "tls_key=${{ secrets.TLS_KEY }}"

38

Re: Пару запитань новачка у docker

Доброго дня. Це у вас Github actions, це означає, що сертифікати мають бути збережені в сховищі secrets самого репозиторію settings-Actions secrets and variables.

Подякували: leofun011

39

Re: Пару запитань новачка у docker

kisilam написав:

Доброго дня. Це у вас Github actions, це означає, що сертифікати мають бути збережені в сховищі secrets самого репозиторію settings-Actions secrets and variables.

Доброго дня, це зрозуміло; запитання було звідки їх взяти щоб покласти в secrets. Але з часу публікації запитання розібрався, що це залежить від того, куди в кінцевому результаті потрібно деплоїти, в даному випадку це Azure, куди поки нема доступу (написав у внутрішньому тікеті).

40 Востаннє редагувалося kisilam (08.06.2023 14:23:59)

Re: Пару запитань новачка у docker

Як звідки взяти?
Це могли бути самопідписний сертфиікат, куплений сертифікат або той же летсенкріпт, але його потрібно попереньо отримати і обновляти вчасно.

Подякували: leofun011