В каждом коммите будет полный набор рабочих файлов для конкретного шага.
- Установленный docker
- Установленный docker-compose
- Установленный python на хостовой машине (опционально, потребуется в 1 шаге для проверки)
- Открытые и незанятые порты 80 и 443
- Внешний IP
- DNS имя, настроенное на внешний IP
В папке simple-server лежит файл с простым веб приложением, которое поднимается на 8000 порту.
Запустим python3 simple-server/main.py и зайдём в браузере по локальному адресу http://127.0.0.1:8000. Должно отобразиться сообщение Hello!.
Или через curl: curl http://127.0.0.1:8000
Добавим в папку simple-server Dockerfile. Соберём docker build -t simple-server simple-server.
Запустим docker run -d --name simple-server -p 8000:8000 simple-server, проверим в браузере по локальному адресу http://127.0.0.1:8000. Видим то же сообщение Hello!.
Удалим запущенный контейнер docker rm -f simple-server.
Сделаем конфиг nginx по пути production/data/nginx.conf и docker-compose файл по пути production/docker-compose.yml.
Перейдём в папку production и запустим контейнеры docker-compose up -d, проверим в браузере по локальному адресу на 80 порту http://127.0.0.1.
Отлично, у нас есть всё необходимое для перевода нашего приложение на работу по HTTPS.
В папку production добавим скрипт init-letsencrypt.sh. В нём требуется поменять значения domains и email на нужные. Добавляем в конфиг nginx нужные поля для получения сертификата. Обновляем docker-compose.yml.
Делаем тестовый прогон скрипта ./init-letsencrypt.sh, если всё прошло успешно, то меняем значение параметра staging на 0 и запускаем опять.
Обновляем конфиг nginx: добавляем пути к сертификатам (не забудьте поправить <URL> на ваш), слушаем на 443 порту, добавляем конфига letsencrypt, делаем редирект с http на https.
Пробрасываем 443 порт для nginx и добавляем команду перезапуска nginx для обновления сертификатов в docker-compose-yml. Запускаем получившуюся конфигурацию docker-compose up -d. Заходим в браузере по адресу http://<ваш_URL>, должно перебросить на страницу https://<ваш_URL> и отобразить Hello!.
Обновляем конфиг nginx c учётом требований TeamCity и docker-compose.yml.
Обратите внимание, что в конфиге nginx обязательно надо добавить server_name. Не забудьте поменять все заглушки <URL> на верное DNS имя.
Запускаем docker-compose up -d. Заходим в браузере по DNS имени и настраиваем TeamCity.
Добавить агента, который находится "в любой точке мира": docker run -dt -e SERVER_URL="https://<URL>" --name teamcity-agent-instance jetbrains/teamcity-agent:2021.1
Допустим, у нас есть защищённая сеть предприятия, в которой находятся сервер TemCity и агент. У агента нет выхода в интернет, но мы хотим на нём собирать билды.
Тогда немного видоизменяем конфиг nginx и команду запуска агента: docker run -dt -e SERVER_URL="http://<LOCAL_IP>" --name teamcity-agent-instance jetbrains/teamcity-agent:2021.1