суббота, 14 июня 2025 г.

dict config

 


Docker

 Установка и наcтройка


Команда нициализации запуска контейнера (docker run) с аргументом debian (debian - имя образа или image)
$ docker run debian echo 'Hello World'

Подключиться к интерактивной оболочке  контейнера и выполнить какую-нибудь команду:

$ docker run -i -t debian bash

 Запуск контейнера, дав имя хосту:

$ docker run -h HOST -i -t debian bash

 По умолчанию команда docker ps показывает только запущенные контейнеры. С аргументом  -а (docker ps -a) показывает все контейнеры, включая остановленные:

docker ps

 Docker diff — команда, которая отслеживает изменения в файловой системе контейнера Docker. Она показывает, какие файлы были добавлены, изменены или удалены внутри работающего или остановленного контейнера.

$ docker diff practical_nightingale

 Всё что было записано в stdout и  stderr контейнера во время его работы:

$ docker logs practical_nightingale

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

$ docker rm practical_nightingale

 Статьи:

Почти все, что вы хотели бы знать про Docker

Шпаргалка с командами Docker

Dockerfile



Сборка образа

Переходим в директорию с Dockerfile и вызываем следующую команду (Используется флаг -t что значит тэг, позволяет дать имя образу который мы собираем. Через точку в конце команды мы говорим доккеру использовать Dockerfile внутри директории ) :
$ docker build -t test_app .

Теперь мы можем запустить наше приложение:

$ docker run test_app python /app/app.py 

Запуск приложения с аргументом -p, который принимает два числа разделенных двоеточием. Первое число - какой порт хоста использовать для связи с портом внутри контейнера, второе число - на какой порт внутри контейнера перенаправлять запросы с порта хоста

$ docker run -p5050:5000 test_app python /app/app.py 


 Проверяем, что все работает:


Добавляем в Dockerfile команды, которые выполнятся в момент запуска контейнера, что избавит нас от необходимости в команде запуска стартовать приложение собственноручно(WORKDIR и ENTRYPOINT): 

Правило: помещать на верх Dockerfile такие команды, которые будут выполнятся редко, а вниз которые будут запускаться чаще. 


Снова собираем:

$ docker build -t test_app .

Снова запускаем контейнер(-e - передать переменные в окружение контейнера) 

$ docker run -p5050:5000 -e "SERVICE_NAME=service1" test_app

 (было  $ docker run -p5050:5000 test_app python /app/app.py)

Само приложение:


requirements.txt


Сайт для регистрации:

Логин через консоль:
$ docker login

 Список образов:

$ docker images

Для последнего успешного билда укажем репозиторий:

$ docker tag my_app muertecivil/test_app

Загрузка образа в репозиторий:

$ docker push muertecivil/test_app 

Загрузка образа из репозитория:

 $ docker pull muertecivil/test_app

Ссылки: 

docker container exec Start containers automatically

пятница, 13 июня 2025 г.

Удаленный сервер

SSH


Проверяем установлен ли SSH:
$ ssh -V
Генерируем открытый и закрытый ключи типа rsa размером 2048 бит с комментарием ("TimeWeb Machine") и именем файла (timeweb):
$ ssh-keygen -t rsa -b 2048 -C "TimeWeb Machine" -f timeweb

Смотрим как выглядит наш открытый ключ:

$ cat timeweb.pub 

Устанавливаем права доступа к файлу приватного ключа:
$ chmod 600 <путь_к_ключу>

Подключение к серверу через SSH:

$ ssh -i <путь_к_ключу> <имя_пользователя>@<публичный_ip> 

 Начало работы по SSH

Создание пользователя:
# adduser user

Даем пользователю права администратора добавив пользователя 'user' в группу 'sudo':

# usermod -aG sudo user 

Переключаемся на пользователя 'user':

# su - user 

С помощью команда exit или сочетания клавиш ctrl+d выходим из под user и отключаемся от сервера.

Заходим в систему под user в систему:

$ ssh -i <путь_к_ключу> user@<публичный_ip> 

Переходим в домашнюю папку:

$ cd ~ 

Создаем директорию '.ssh':

$ mkdir -p .ssh 

Изменяем права на папку:

$ chmod 700 .ssh 

Записываем открытый ключ в файл в папке .ssh:

$ echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC71WE1Yt+fivi8MFJM6or0ReikTNmGbX1ae3RY5FmgJr5ni5vPiVyoErDkJWzlYzAbZYbvtY5Se34mZhl5KUId/facOo0J0sLXKNc8P1SXoVIMYIXxu5ajYEw7K/xB2KDzzJ1k3Y3wldA1eyUSS4khkvM0IlqZvdycEnsXrcv3CFCh2TmtgG7eyF8/OxXl7EYtk/csmdnHRjru1QGvVVNMh2S1aoJiOgViOqkSkV0suq0cWyaSYexVIEej/eU3XgB8aebuICliqYe+myRq0SsxaNdNUmRlgDMzj8uQ/6JiYq/Do9AfpYqLW7Lpc5WKj9BEfhffewZDXI6Ax6chHsxp TimeWeb Machine" >> ~/.ssh/authorized_keys

Проверяем, что файл создался:

$ cat  ~/.ssh/authorized_keys

Файл конфигурации SSH:

$ sudo nano /etc/ssh/sshd_config

    $ sudo systemctl reload sshd.service 



Настройка python проекта

Заходим на машину: 
$ ssh -i <путь_к_ключу> user@<публичный_ip>

Проверяем версию python:

$ python3 -V 

Устанавливаем модуль virtualenv:

$ sudo apt install python3-virtualenv 

Создаём рабочую папку:

$ mkdir workspace

$ cd workspace

Создаем виртуальное окружение:

 $ python3 -m virtualenv -p python3 venv

Активируем виртуальное окружение:

$ source venv/bin/activate 

Устанавливаем flask:

 $ pip install flask

Создаем простенький файл с flask-сервисом:
$ touch app.py

Открываем его в текстовом редакторе и пишем приложение:

$ vim app.py 

 Сохраняем, закрываем файл и стартуем сервер указав публичный IP адрес сервера :

$ flask run -h 193.188.23.138


Статья про Vim 

rsync

rsync -e "ssh -i timeweb" -Praz /home/projects/python_advanced/module_08_deploy/materials/new_year_application/app.py user@193.188.23.138:/home/user/workspace/new_year_application