cds
cds copied to clipboard
Pipeline requirements - nginx/php stack - service link
I have a specific pipeline configuration where i need to have some inter services communication. Indeed, I need to use a nginx / php-fpm stack for my Symfony application and the Nginx service uses the PHP service as an upstream.
As such, I need to know (and use) the PHP service name (or IP address) for the Nginx configuration in an environment variable.
Here is my pipeline code:
version: v1.0
name: deploy-backend
description: Deploy the application backend
jobs:
- job: Setup the application package
steps:
- artifactDownload:
path: Download installable package
pattern: epr-backend-api
tag: '{{.cds.version}}'
- script:
- # Test that I get my application home page
- curl -X GET http://nginx-api:80
- echo "Result $?"
requirements:
- model: epr-PHP
- service:
name: mailer
value: '{{.cds.proj.DOCKER_REGISTRY}}{{.cds.proj.DOCKER_REGISTRY_PREFIX}}epr-backend_mailer:{{.cds.proj.IMAGE_TAG_MAILER}} APP_ENV={{.cds.env.APP_ENV}}'
- service:
name: mariadb
value: '{{.cds.proj.DOCKER_REGISTRY}}{{.cds.proj.DOCKER_REGISTRY_PREFIX}}epr-backend_db:{{.cds.proj.IMAGE_TAG_DB}} APP_ENV={{.cds.env.APP_ENV}} MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=false MARIADB_ROOT_PASSWORD={{.cds.env.DATABASE_ROOT_PASSWORD}} MARIADB_DATABASE={{.cds.env.DATABASE_NAME}} MARIADB_USER={{.cds.env.DATABASE_USER}} MARIADB_PASSWORD={{.cds.env.DATABASE_PASSWORD}}'
- service:
name: nginx-api
value: '{{.cds.proj.DOCKER_REGISTRY}}{{.cds.proj.DOCKER_REGISTRY_PREFIX}}epr-backend_nginx:{{.cds.proj.IMAGE_TAG_NGINX}} HOSTNAME=nginx-api APP_ENV={{.cds.env.APP_ENV}} NGINX_PHP_UPSTREAM_HOST=php-api NGINX_PHP_UPSTREAM_PORT=9000 NGINX_PHP_UPSTREAM_COMMENT=n/a'
- service:
name: php-api
value: '{{.cds.proj.DOCKER_REGISTRY}}{{.cds.proj.DOCKER_REGISTRY_PREFIX}}epr-backend_php:{{.cds.proj.IMAGE_TAG_PHP}} HOSTNAME=php-fpm APP_ENV={{.cds.env.APP_ENV}}'
With this configuration the nginx-api
service fails to start because it cannot reach the php-api
container.
When I replace php-api
with 127.0.0.1
(or 172.17.0.1
, or any pingable ip address) in the NGINX_PHP_UPSTREAM_HOST
environment variable, the nginx-api
starts correctly but my curl script fails because of a bad gateway.
Is there a solution to have the real address (or better, the hostname) of my php-api
service container ?
**[edit]**indeed, one solution to get the service container hostname would be to be able to use the worker model name as a variable; see #5988