Изменения в контейнере
Как уже отмечалось в начале, после остановки контейнера все изменения сделанные в нем удаляются. Это не совсем удобно, что же делать если нам нужно сохранить изменения? Для этого мы можем создать собственный контейнер взяв за основу уже готовый. Запустив интерактивный сеанс, мы можем работать в контейнере как на обычной Linux-машине и вносить любые необходимые изменения, например, устанавливать нужные пакеты. Допустим, нам требуется контейнер Ubuntu с сервером Nginx. Установим необходимые для этого программы:
apt-get install nano apt-get install nginx apt-get install build-essential apt-get install php5
Теперь нужно сохранить эти изменения, чтобы в следующий раз у нас был контейнер, где уже есть все необходимое. Для этого сначала нужно выйти из контейнера, выполнив команду exit, а затем подтвердить сделанные изменения командой commit:
# docker commit идентификатор new-template
Где идентификатор – это тот идентификатор, который использовался для первоначального запуска, а new-template – назначенное нами имя нового образа. Теперь он будет виден, если выполнить команду docker images:
# docker images
Созданный нами новый образ готов к использованию со всеми сделанными изменениями. Кроме того, мы можем отправить его в Docker Hub, чтобы при необходимости загружать его в других местах. Для этого войдите в свою учетную запись и воспользуйтесь командой push:
docker login docker push имя_пользователя/new-template
где имя_пользователя – имя, соответствующее вашему аккаунту.
Автозагрузка контейнеров
Часто встречается ситуация, когда контейнеры останавливаются вследствие определенных факторов. Простейший пример – произошла перезагрузка сервера. Чтобы избавиться от необходимости вручную запускать их, можно настроить автозапуск контейнеров. Для этого следует создать текстовые файлы со специальным форматом для сервиса systemcmd. Рассмотрим пример их создания на примере контейнера my-db, введя в терминал команду:
cat /etc/systemd/system/my-db.service
В пустой файл необходимо добавить следующий код и сохранить его:
Description=MY DB (PG) docker container Requires=docker.service After=docker.service Restart=always ExecStart=/usr/bin/docker start -a my-db ExecStop=/usr/bin/docker stop -t 2 my-db TimeoutSec=30 WantedBy=multi-user.target
После этого остается перезапустить демон systemcmd и включить автозагрузку контейнера mydb, набрав в терминале поочередно команды:
systemctl daemon-reload
systemctl start my-db.service
systemctl enable my-db.service
Что такое CI/CD?
Аббревиатура CI/CD расшифровывается как «continuous integration/continuous deployment» — «непрерывная интеграция/непрерывное развёртывание».
▍Непрерывная интеграция
Непрерывная интеграция — это процесс, в ходе которого разработчики делают коммиты в главное хранилище исходного кода проекта (обычно в ветку ). При этом качество кода обеспечивается путём проведения автоматизированного тестирования.
▍Непрерывное развёртывание
Непрерывное развёртывание — это частое автоматизированное развёртывание кода в продакшне. Вторая часть аббревиатуры CI/CD иногда раскрывается как «continuous delivery» («непрерывная доставка»). Это, в целом, то же самое, что и «непрерывное развёртывание», но «непрерывная доставка» подразумевает необходимость ручного подтверждения изменений перед запуском процесса развёртывания проекта.
4: Выполнение команд на хосте Docker через SSH
На данный момент у вас есть все необходимые данные о хосте. Однако Docker предоставляет гораздо больше возможностей. К примеру, вы можете выполнять на хосте Docker встроенные команды Linux. Это делается с помощью подкоманды ssh в локальной системе.
Данный раздел научит вас пользоваться этой подкомандой и запускать сессии SSH на хостах Docker.
Если на удалённом хосте используется операционная система CentOS, выполните в локальной системе следующую команду, чтобы обновить пакеты системы удалённого хоста.
Чтобы узнать, какое ядро использует удалённый хост, введите:
Также команда ssh позволяет выполнить авторизацию на хосте Docker:
После этого командная строка должна измениться:
Чтобы закрыть удалёный хост, введите:
Цели
Не скажу, что эта статья может безоговорочно называться «учебным руководством». Это — скорее документ, в котором я рассказываю о том, что узнала, и описываю устраивающий меня процесс тестирования и развёртывания кода в продакшне, выполняемый за один автоматизированный проход.
Вот каким в итоге получился мой рабочий процесс.
Для кода, отправленного в любую ветку репозитория, кроме , производятся такие действия:
- Запускается сборка проекта на Travis CI.
- Выполняются все модульные, интеграционные и сквозные тесты.
Только для кода, который попадает в , выполняется следующее:
- Всё то, о чём сказано выше, плюс…
- Сборка образа Docker на основании текущего кода, настроек и окружения.
- Размещение образа на Docker Hub.
- Подключение к продакшн-серверу.
- Загрузка образа с Docker Hub на сервер.
- Остановка текущего контейнера и запуск нового, основанного на новом образе.
Если вы совершенно ничего не знаете о Docker, об образах и контейнерах — не беспокойтесь. Я об этом всём вам расскажу.
Контейнерная связь с использованием только докера без compose:
У вас есть контейнер «app» и «mysql», вы хотите иметь возможность доступа к «app» на локальном хосте и хотите, чтобы «app» могла подключаться к mysql. Как ты собираешься это сделать? 1. Вам нужно выставить порт для «приложения» контейнера, чтобы мы могли получить к нему доступ на локальном хосте. Контейнеры Docker имеют собственную внутреннюю сеть, и она закрыта для вас, если вы не открываете некоторые порты с помощью Docker.
- Вам необходимо связать контейнер «mysql» с «app», не открывая порты «mysql» остальному миру.
Этот конфиг должен работать для того, чего вы хотите достичь:
Теперь вы можете просто начать с:
Если вы запустили это раньше, просто убедитесь, что запустили это перед запуском docker-compose:
Сообщите мне, если это поможет.
4: Выполнение команд на хосте Docker через SSH
На данный момент у вас есть все необходимые данные о хосте. Однако Docker предоставляет гораздо больше возможностей. К примеру, вы можете выполнять на хосте Docker встроенные команды Linux. Это делается с помощью подкоманды ssh в локальной системе.
Данный раздел научит вас пользоваться этой подкомандой и запускать сессии SSH на хостах Docker.
Если на удалённом хосте используется операционная система Ubuntu, выполните в локальной системе следующую команду, чтобы обновить пакеты системы удалённого хоста.
Вы можете внедрить доступные обновления с помощью команды:
Чтобы узнать, какое ядро использует удалённый хост, введите:
Также команда ssh позволяет выполнить авторизацию на удаленном хосте Docker:
После этого командная строка должна измениться, и вы увидите:
Чтобы закрыть удалённый хост, введите:
3: Команды Docker Machine
Для создания нового хоста используется команда:
Параметр –d задаёт драйвер.
При помощи субкоманды ls можно просмотреть список доступных хостов:
Команда вернёт список хостов (в списке указывается имя хоста, его состояние, URL-адрес и другие данные о хосте).
Чтобы получить подробную информацию о хосте Docker, используйте подкоманду inspect:
Команда вернёт следующий результат. В строке Image указан текущий дистрибутив Linux:
Чтобы вывести на экран настройки соединения хоста, введите:
Последняя строка результата данной команды отображает IP-адрес хоста. Также узнать IP можно с помощью следующей команды:
Чтобы отключить удалённый хост, используйте:
Чтобы убедиться, что удалённый хост был отключен, запросите список доступных хостов:
Чтобы запустить удалённый хост, введите:
Проверить его состояние можно в списке доступных хостов:
Чтобы удалить хост, используйте команду:
SSH into Running Docker Containers with docker exec
In the previous section, you learned how to run SSH commands when starting a new Docker container. But what if you need to SSH into Docker containers that are already running? You run the command.
The command creates a Bash shell inside a running container and is a great way to send SSH commands into a container.
To SSH into a running Docker container with :
1. Open a terminal on your local machine.
2. Next, run the command to start the container. Be sure to specify the flag to run the container in the background to keep it alive until you remove it. The command below starts a container called .
Creating and running the new container using docker run command
3. Now, run the docker ps command to verify the container is running. The command will list all the running containers running on the Docker host.
listing all the running containers
4. Finally, run , as shown below, to SSH into the running container called . In the below code snippet:
- command runs () to get a Bash shell in the container.
- flag allows you to run a container in interactive mode, that is, you can execute commands inside the container while it is still running.
- is the name of the container.
ssh into an already running container
3 ответа
Лучший ответ
В прошлом я заставил это работать без явной настройки сетевой части хоста в Docker Compose. Поскольку Docker изображения внутри файла Docker Compose помещаются в Docker Network друг с другом, вы на самом деле не нужно ничего делать, чтобы заставить это работать: по умолчанию вы должны иметь возможность подключаться к контейнеру для вашего приложения Spring и иметь возможность и заставить его работать.
1
RyanWilcox
13 Апр 2018 в 01:49
Хост БД должен быть или
dave
12 Апр 2018 в 21:48
MySQL работает в контейнере, поэтому здесь следует рассмотреть две вещи:
-
Если mysql запущен в контейнере, вам нужно будет связать контейнер приложения с контейнером mysql. Это позволит им поговорить с друг с другом, используя док-контейнерную коммуникацию. Контейнеры общаются друг с другом, используя имена хостов для разрешения своих соответствующих внутренних IP-адресов. Позже в моем ответе я покажу вам, как заставить эти два контейнера взаимодействовать друг с другом с помощью составного файла.
-
Контейнер mysql должен использовать том докера для хранения базы данных. Это позволит вам хранить базу данных и связанные файлы в файловой системе хоста (сервера или машины, на которой работают контейнеры). Том докера будет затем подключен как каталог в контейнере. Таким образом, контейнер теперь может читать и записывать в каталог на компьютере, на котором запущены контейнеры Docker. Это означает, что даже если все контейнеры будут удалены или удалены, данные базы данных сохранятся. Вот хорошая статья для начинающих о томах докеров и их использовании с MySQL:
Контейнерная связь с использованием только докера без compose:
У вас есть контейнер «app» и «mysql», вы хотите иметь возможность доступа к «app» на локальном хосте и хотите, чтобы «app» могла подключаться к mysql. Как ты собираешься это сделать? 1. Вам нужно выставить порт для «приложения» контейнера, чтобы мы могли получить к нему доступ на локальном хосте. Контейнеры Docker имеют собственную внутреннюю сеть, и она закрыта для вас, если вы не открываете некоторые порты с помощью Docker.
- Вам необходимо связать контейнер «mysql» с «app», не открывая порты «mysql» остальному миру.
Этот конфиг должен работать для того, чего вы хотите достичь:
Теперь вы можете просто начать с:
Если вы запустили это раньше, просто убедитесь, что запустили это перед запуском docker-compose:
Сообщите мне, если это поможет.
2
OpenBSDNinja
13 Апр 2018 в 09:37
Основы ENTRYPOINT && CMD
Перед началом нужно кратко вспомнить, что это такое и чем отличается. Эти две директивы в Dockerfile наверняка всем известны – обе запускают процессы в контейнере. Как правило, в entrypoint используется какой-либо скрипт или команда для запуска процесса внутри контейнера, а в cmd – параметры, которые передаются в entrypoint.
Если указывать параметры в квадратных скобках, т.е. в формате exec, то внутри контейнера будет выполняться лишь процесс, который указан для запуска, и никаких оболочек запущено не будет. Это значит, что замена (substitution) переменных и их обработка невозможны – это также предпочтительный вариант для простого запуска какого-либо процесса. О более сложных моментах будет рассказано далее.
Если же указать команду для запуска без фигурных скобок, то внутри контейнера можно будет увидеть, что процесс запущен через форму shell и процесс внутри будет вида sh -c “ping ya.ru”.
Грубый пример Dockerfile для демонстрации работы exec формы:
После сборки образа с именем “ping” и дальнейшего запуска контейнера из него будет выполняться команда “/bin/ping it-lux.ru”. Домен можно переопределить, указав его при запуске контейнера, например:
Тем самым выполняется переопределение значения из параметра CMD в Dockerfile, что очень удобно – из одного образа можно запускать команды с различными аргументами. Такой способ я использовал для выполнения крон-задач в отдельном докер-контейнере, указывая на хосте в crontab через аргументы путь к скриптам при запуске docker run, которые принимал для выполнения php.
Настройка доступа SSH для контейнеров Docker [от среднего до эксперта]
Если вас не интересует, как это работает, вы можете игнорировать этот раздел. Мы собираемся показать вам контейнер-пустышку. Вы можете следовать инструкциям на практике.
Запустить контейнер
Во-первых, вам нужно запустить контейнер Docker. В alpine:latest пока будем использовать очень маленькое изображение. Запустите контейнер с помощью этой команды:
docker run --rm --name ssh-test -it -p 22:7655 alpine:latest ash
Некоторые заметные моменты, касающиеся параметров командной строки, следующие:
- С опцией –rm вам не нужно впоследствии явно удалять контейнер.
- Здесь есть параметры -it, позволяющие получить рабочую интерактивную оболочку контейнера.
- Наконец, вы привязываете порт 22 контейнера к номеру порта хоста 7655 (или любому другому номеру порта, который еще не используется демоном SSH в вашей хост-системе). Помните, какой порт вы используете.
Настройте демон SSH в контейнере
Теперь вам нужно установить ssh-сервер внутри контейнера. В Alpine Linux вы можете использовать следующие команды:
apk update; apk add openssh-server
Затем вам нужно быстро изменить параметр конфигурации, чтобы разрешить вход в систему с правами root. Вы можете сделать это вручную, отредактировав файл /etc/ssh/sshd_config или используя эту команду:
sed -E 's/^#(PermitRootLogin )no/\1yes/' /etc/ssh/sshd_config -i
Сгенерируйте ключи хоста с помощью:
ssh-keygen -A
Наконец, запустите ssh-сервер, запустите /usr/sbin/sshd &. Проверьте, не пробегает ли он ps aux.
Установите пароль для учетной записи root вашего контейнера
По умолчанию у корневой учетной записи вашего контейнера нет пароля. Если вы открываете к нему SSH-доступ, вы должны установить пароль для учетной записи root.
Вы можете использовать команду passwd без каких-либо параметров и следовать инструкциям на экране:
passwd
Войдите в контейнер через SSH
С другого хоста попробуйте войти в контейнер сейчас.
ssh root@IP_address_of_host_server -p port_number
Вам не нужна опция -p, если вы ранее были привязаны к порту 22. В качестве IP используйте IP-адрес хост-сервера (а не контейнера).
Когда вы запустите команду, вы должны увидеть результат, подобный этому:
debdut@shinchan:/mnt/data/documents/AndreyEx/container-ssh$ ssh root@domain.com root@domain.com's password: Welcome to Alpine! The Alpine Wiki contains a large amount of how-to guides and general information about administrating Alpine systems. See <http://wiki.alpinelinux.org/>. You can setup the system with the command: setup-alpine You may change this message by editing /etc/motd. c4585d951883:~#
Как это работает?
Это можно лучше понять визуально. Взгляните на следующую диаграмму:
Думайте о контейнерах как о виртуальной машине, порт 22 которой склеен с портом хоста 7655 (или тем, который вы выбрали). Это позволяет вам иметь два разных процесса ssh, запущенных на одном компьютере, привязанных к разным портам.
Допустим, вы используете какой-то другой порт для SSH в хост-системе и склеиваете порт 22 с портом контейнера. Теперь, если кто-то попытается подключиться к хост-серверу, используя SSH-порт по умолчанию 22, окажется в корневой файловой системе контейнера.
3: Команды Docker Machine
Для создания нового хоста используется команда:
Параметр –d задаёт драйвер.
При помощи субкоманды ls можно просмотреть список доступных хостов:
Команда вернёт список хостов (в списке указывается имя хоста, его состояние, URL-адрес и другие данные о хосте).
Чтобы получить подробную информацию о хосте Docker, используйте подкоманду inspect:
Команда вернёт следующий результат. В строке Image указан текущий дистрибутив Linux:
Чтобы вывести на экран настройки соединения хоста, введите:
Команда вернет:
Последняя строка результата данной команды отображает IP-адрес хоста. Также узнать IP можно с помощью следующей команды:
Чтобы отключить удалённый хост, используйте:
Чтобы убедиться, что удалённый хост был отключен, запросите список доступных хостов:
Чтобы запустить удалённый хост, введите:
Проверить его состояние можно в списке доступных хостов:
Сервер 1С
Внимание! Данный образ предназначен только для тестов. Для того, чтобы информация о наших кластерах сохранялась на локальном компьютере и ее можно было подключить в другой контейнер, создадим папку c:\srvinfo
Для того, чтобы информация о наших кластерах сохранялась на локальном компьютере и ее можно было подключить в другой контейнер, создадим папку c:\srvinfo
Выполним команду powershell
Все готово. Вот тут меня ждал сюрприз. Я давно использовал mssql в контейнере на тестовой машине и всегда обращался к нему по localhost. Сейчас это или поломали, или звезды так сошлись, но работать так перестало. Здесь и здесь можно почитать почему. Так что пока это чинят, либо пробрасываем контейнер в нашу сеть(при запуске контейнера указываем —network host в место кучи портов), либо определяем ip выданные внутри сети и подключаемся к ним. Для этого нужно выполнить две простых команды. В примере я буду показывать вместе с выводом
Первая команда выводит список контейнеров, вторая получает ip адрес контейнера по его id.
Итак, адреса у нас есть. Теперь открываем консоль администрирования и добавим нашу базу как обычно.
3 ответа
Лучший ответ
Из комментариев видно, что служба докеров не была настроена для автоматического запуска при загрузке. Docker — это клиент-серверное приложение, и сервер запускается из systemd с отдельной службой для сокета докера, используемого клиентом для связи с сервером. Следовательно, любой вызов с помощью команды docker может вызвать запуск сервера путем нажатия на сокет докера.
Состояние службы в systemd можно проверить с помощью:
Или вы можете проверить:
Его можно запустить вручную с помощью:
И его можно включить для начала:
Все вышеперечисленные команды необходимо запускать от имени пользователя root.
BMitch
16 Ноя 2020 в 23:41
Это политика перезапуска контейнера. перезапустите контейнер, если он остановится. Если он остановлен вручную, он будет перезапущен только при перезапуске демона Docker или при перезапуске самого контейнера вручную. Проверьте эту ссылку .
-1
Taybur Rahaman
2 Ноя 2020 в 11:28
Всегда перезапускайте контейнер, если он останавливается. Если он остановлен вручную, он перезапускается только при перезапуске демона Docker или при перезапуске самого контейнера вручную.
Аналогично , за исключением того, что когда контейнер останавливается (вручную или иначе), он не перезапускается даже после перезапуска демона Docker.
Если у вас уже был запущенный контейнер, для которого вы хотели изменить политику перезапуска, вы можете использовать , чтобы изменить это, и приведенная ниже команда гарантирует, что все запущенные в данный момент контейнеры будут перезапущены, если они не остановлены.
ПРИМЕЧАНИЕ. При использовании политик перезапуска помните следующее .
-
Политика перезапуска вступает в силу только после успешного запуска контейнера. В этом случае успешный запуск означает, что контейнер работает не менее 10 секунд и Docker начал его мониторинг. Это предотвращает переход контейнера, который вообще не запускается, в цикл перезапуска.
-
Если вы остановите контейнер вручную, его политика перезапуска игнорируется до перезапуска демона Docker или до перезапуска контейнера вручную. Это еще одна попытка предотвратить цикл перезапуска.
-
Политики перезапуска применяются только к контейнерам. Политики перезапуска для служб Swarm настроены иначе
Ashok
16 Ноя 2020 в 17:45
Setting up an OpenSSH Server and Connecting with a Dockerfile
Until now, the tutorial has assumed you’re connecting to a container that already has some SSH server installed. But what if it doesn’t? Perhaps the image you’re using doesn’t already have OpenSSH installed, and you need to configure it first?
Using a Dockerfile, you can configure all of the tasks necessary to not only SSH into Docker containers but set up an OpenSSH server from scratch too.
Assuming you still have your local terminal open:
1. Optionally create a directory to store the Dockerfile. This tutorial will use the ~/DockerFileContainerTest directory.
2. Open your favorite text editor, copy/paste the below Dockerfile inside and save the file as Dockerfile inside the ~/DockerFileContainerTest directory. This Dockerfile contains all the commands and configurations to build a new Docker image on top of any base image and set up OpenSSH.
The DockerFile below contains various steps/instructions that will build the container:
- – Defines the base image to use.
- – Executes commands in a new layer on the top of the base image.
- – CMD allows you to run the commands. There are two ways in which commands are executed either via exec or using shell formats.
EXPOSE – Informs Docker that the container listens on the specified network ports at runtime. The container will be exposed on pot 22.
3. Next, run the command to create the Docker image. The flag tags the image and allows Docker to pick all the necessary files from the present working directory.
Building the Docker Image on top of ubuntu image
4. Now, run the command to inspect the created image. Note the REPOSITORY attribute. This attribute is the tag created with the flag in the previous step.
Run Docker images command
5. Run to create and run the container from the image telling Docker to run the image in the background (),
The command below instructs Docker to create and run the container called in the background (), using the newly built image that you created in step 3 and to publish all ports defined in the Dockerfile as random ports.
After the successful execution of the Docker run command, you will see that the container ID is generated below.
Running the container using the newly built image.
6. Run to verify SSH connectivity between the Docker host and the container. The command list’s the port mappings or a specific mapping for the container.
You should see the output of , which indicates the container’s port 22 is mapped to the external port .
Running the docker port command.
7. Next, find the IP address of the container. To do that, run the command. The command queries Docker information and renders the results in JSON array using a parameter.
You’ll see the parameter argument below uses the attribute to find the container’s IP address by checking in →→ .
format parameter argument
IP address
8. Finally, now that you have the IP address to SSH to, try to SSH to the container, and it should work!
try to SSH the container
Некоторые вещи, на которые стоит обратить внимание
Возможно, когда вы подключитесь к серверу по SSH из Travis CI, вы увидите предупреждение, которое не позволит продолжить установку, так как система будет ждать реакции пользователя.
Я узнала о том, что строковой ключ можно закодировать в base64 для того, чтобы сохранить её в таком виде, в котором с ней можно будет удобно и надёжно работать. На стадии установки можно декодировать публичный ключ и записать его в файл для того, чтобы избавиться от вышеописанной ошибки.
На практике эта команда может выглядеть так:
А вот как выглядит то, что она выдаёт — строка в кодировке base64:
Вот команда, о которой говорилось выше
Тот же подход можно использовать с приватным ключом при установлении соединения, так как вам, для доступа к серверу, вполне может понадобится приватный ключ. При работе с ключом вам лишь нужно обеспечить его безопасное хранение в переменной окружения Travis CI, и то, чтобы он нигде не выводился бы.
Ещё одна вещь, на которую стоит обратить внимание, это то, что вам может понадобиться запустить весь скрипт развёртывания, представленный в виде одной строки, например — с помощью. Это может потребовать некоторых дополнительных усилий
dockerfile
Этот файл представляет из себя файл с шагами для построения нашего контейнера.
Для начала просто попробуем построить и запустить наш контейнер. Для этого собираем все наши файлы в один каталог. Создаем там dockerfile с таким содержимым
Разберем его детально
Указываем контейнер, который берем за основу. Это windows server core. По умолчанию берется образ с тегом latest. Вы можете попробовать последнюю версию, она занимает значительно меньший объем. Я использовал эту, так как контейнер mssql построен на нем же, а в этом случае это кусок не качался заново.
Указываем в качестве командной строки powershell вместо cmd
Создаем файл prepare.ps1. В нем устанавливаем 1C и настраиваем службу.
Обратите внимание на последнюю строчку. Для службы сервера в зависимостях указана служба «Сервер», которая не работает в контейнерах
Не знаю для чего ее добавили, но сервер 1С прекрасно работает без нее. Поэтому просто уберем ее из зависимостей, для того чтобы наша служба корректно загрузилась.
Теперь в окне powershell переходим в папку с файлами и вводим
После завершения построения запускаем (в вашем случае первые две колонки будут пустые).
После этих операций, наш контейнер будет работать. Но есть небольшие нюансы. Мы не можем ни включить логирование, ни воспользоваться отладкой на сервере, ни поменять порты. Поэтому чуть доработаем наш dockerfile
Здесь добавились описание переменных, которые мы можем задавать при запуске контейнера. Так же мы копируем подготовленные файл для включения логов в 1С logcfg.xml и доработанный скрипт для запуска
Теперь в качестве точки запуска используется скрипт, в котором мы можем задать порты, включить отладку и логирование, указать путь для хранения информации о кластерах
Следующие шаги
К настоящему моменту мы убедились в том, что приложение, в виде контейнера Docker, работает локально. Мы загрузили контейнер на Docker Hub. Всё это значит, что мы уже очень неплохо продвинулись к цели. Теперь надо решить ещё два вопроса:
- Настройка CI-инструмента для тестирования и развёртывания кода.
- Настройка продакшн-сервера так, чтобы он мог бы загружать и запускать наш код.
В нашем случае в качестве CI/CD-решения используется . В качестве сервера — .
Надо отметить, что здесь можно воспользоваться и другой комбинацией сервисов. Например, вместо Travis CI можно воспользоваться CircleCI или Github Actions. А вместо DigitalOcean — AWS или Linode.
Мы решили работать с Travis CI, а в этом сервисе у меня уже кое-что настроено. Поэтому сейчас я кратко расскажу о том, как подготовить его к работе.