This commit is contained in:
parent
f24d7c0f47
commit
505bbe363b
97
.env
97
.env
@ -1 +1,96 @@
|
|||||||
# Template
|
#
|
||||||
|
# postgres
|
||||||
|
#
|
||||||
|
POSTGRES_IMAGE_TAG=postgres:15.6-alpine
|
||||||
|
POSTGRE_DB_NAME=semaphore_db
|
||||||
|
POSTGRE_DB_USER=semaphore_user
|
||||||
|
POSTGRE_DB_PASSWORD=P@ssword!Here!123456
|
||||||
|
POSTGRE_DB_DATA=/var/lib/postgresql/data/semaphore
|
||||||
|
|
||||||
|
#
|
||||||
|
# semaphore
|
||||||
|
#
|
||||||
|
SEMAPHORE_VERSION=latest
|
||||||
|
|
||||||
|
POSTGRE_DB_NAME=semaphore_db
|
||||||
|
POSTGRE_DB_USER=semaphore_user
|
||||||
|
POSTGRE_DB_PASS=P@ssword!Here!123456
|
||||||
|
|
||||||
|
SEMAPHORE_ADMIN=administrateur
|
||||||
|
SEMAPHORE_ADMIN_PASSWORD=P@ssword!Here!123456
|
||||||
|
SEMAPHORE_ADMIN_NAME=Administrateur
|
||||||
|
SEMAPHORE_ADMIN_EMAIL=admin@tips-of-mine.fr
|
||||||
|
|
||||||
|
SEMAPHORE_PORT=3000
|
||||||
|
|
||||||
|
SEMAPHORE_TMP_PATH=/tmp/semaphore
|
||||||
|
SEMAPHORE_WEB_ROOT=https://semaphore.tips-of-mine.com
|
||||||
|
MAX_TASK_DURATION_SEC=60
|
||||||
|
SEMAPHORE_MAX_PARALLEL_TASKS=10
|
||||||
|
SEMAPHORE_PASSWORD_LOGIN_DISABLED=False
|
||||||
|
|
||||||
|
#
|
||||||
|
# Runner
|
||||||
|
#
|
||||||
|
SEMAPHORE_USE_REMOTE_RUNNER=True
|
||||||
|
SEMAPHORE_RUNNER_REGISTRATION_TOKEN=H1wDyorbg6gTSwJlVwle2Fne
|
||||||
|
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
SEMAPHORE_NON_ADMIN_CAN_CREATE_PROJECT=False
|
||||||
|
SEMAPHORE_MAX_TASKS_PER_TEMPLATE=60
|
||||||
|
|
||||||
|
#
|
||||||
|
# Email
|
||||||
|
#
|
||||||
|
SEMAPHORE_EMAIL_ALERT=True
|
||||||
|
SEMAPHORE_EMAIL_SENDER=hostinfo@tips-of-mine.fr
|
||||||
|
SEMAPHORE_EMAIL_HOST=semaphore-msmtpd
|
||||||
|
SEMAPHORE_EMAIL_PORT=2500
|
||||||
|
SEMAPHORE_EMAIL_SECURE=False}
|
||||||
|
|
||||||
|
#
|
||||||
|
# local
|
||||||
|
#
|
||||||
|
SEMAPHORE_LDAP_ENABLE=False
|
||||||
|
|
||||||
|
#
|
||||||
|
# Active Directory
|
||||||
|
#
|
||||||
|
#SEMAPHORE_LDAP_ACTIVATED: 'yes'
|
||||||
|
#SEMAPHORE_LDAP_HOST: dc01.local.tips-of-mine.local
|
||||||
|
#SEMAPHORE_LDAP_PORT: '636'
|
||||||
|
#SEMAPHORE_LDAP_NEEDTLS: 'yes'
|
||||||
|
#SEMAPHORE_LDAP_DN_BIND: 'uid=bind_user,cn=users,cn=accounts,dc=tips-of-mine,dc=local'
|
||||||
|
#SEMAPHORE_LDAP_PASSWORD: 'ldap_bind_account_password'
|
||||||
|
#SEMAPHORE_LDAP_DN_SEARCH: 'dc=tips-of-mine,dc=local'
|
||||||
|
#SEMAPHORE_LDAP_SEARCH_FILTER: "(\u0026(uid=%s)(memberOf=cn=ipausers,cn=groups,cn=accounts,dc=tips-of-mine,dc=local))"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Authentik
|
||||||
|
#
|
||||||
|
#SEMAPHORE_LDAP_ACTIVATED: "yes"
|
||||||
|
#SEMAPHORE_LDAP_SERVER: "ldap:3389"
|
||||||
|
#SEMAPHORE_LDAP_NEEDTLS:
|
||||||
|
#SEMAPHORE_LDAP_BIND_DN: "cn=ldapservice,ou=users,dc=ldap,dc=goauthentik,dc=io"
|
||||||
|
#SEMAPHORE_LDAP_PASSWORD: 'ldap_bind_account_password'
|
||||||
|
#SEMAPHORE_LDAP_SEARCH_DN: "ou=users,dc=ldap,dc=goauthentik,dc=io"
|
||||||
|
#SEMAPHORE_LDAP_SEARCH_FILTER: "(&(objectClass=inetOrgPerson)(cn=%s))"
|
||||||
|
#SEMAPHORE_NON_ADMIN_CAN_CREATE_PROJECT: "yes"
|
||||||
|
#SEMAPHORE_LDAP_MAPPING_DN: "dn"
|
||||||
|
#SEMAPHORE_LDAP_MAPPING_MAIL: "mail"
|
||||||
|
#SEMAPHORE_LDAP_MAPPING_UID: "uid"
|
||||||
|
#SEMAPHORE_LDAP_MAPPING_CN: "cn"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Gotify
|
||||||
|
#
|
||||||
|
SEMAPHORE_GOTIFY_ALERT=False
|
||||||
|
SEMAPHORE_GOTIFY_URL=https://gotify.tips-of-mine.com/#/applicationsd
|
||||||
|
SEMAPHORE_GOTIFY_TOKEN=AARDW0DNlz.eb1cd
|
||||||
|
|
||||||
|
#
|
||||||
|
# Ansible
|
||||||
|
#
|
||||||
|
ANSIBLE_HOST_KEY_CHECKING=False
|
62
.pre-commit-config.yaml
Normal file
62
.pre-commit-config.yaml
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
repos:
|
||||||
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||||
|
rev: v4.6.0
|
||||||
|
hooks:
|
||||||
|
- id: trailing-whitespace
|
||||||
|
- id: end-of-file-fixer
|
||||||
|
- id: check-yaml
|
||||||
|
- id: check-added-large-files
|
||||||
|
- id: detect-private-key
|
||||||
|
- id: check-merge-conflict
|
||||||
|
- id: double-quote-string-fixer
|
||||||
|
- id: check-ast
|
||||||
|
- id: detect-aws-credentials
|
||||||
|
name: detect-aws-credentials
|
||||||
|
entry: detect-secrets
|
||||||
|
types: [file]
|
||||||
|
language: python
|
||||||
|
additional_dependencies: [detect-secrets==1.4.0]
|
||||||
|
files: .aws/credentials
|
||||||
|
|
||||||
|
- repo: https://github.com/psf/black
|
||||||
|
rev: 24.4.2
|
||||||
|
hooks:
|
||||||
|
- id: black
|
||||||
|
|
||||||
|
- repo: https://github.com/PyCQA/isort
|
||||||
|
rev: 5.13.2
|
||||||
|
hooks:
|
||||||
|
- id: isort
|
||||||
|
args: [--profile=black]
|
||||||
|
|
||||||
|
- repo: https://github.com/Yelp/detect-secrets
|
||||||
|
rev: v1.5.0
|
||||||
|
hooks:
|
||||||
|
- id: detect-secrets
|
||||||
|
args: ["--baseline", ".secrets.baseline"]
|
||||||
|
exclude: package.lock.json
|
||||||
|
|
||||||
|
- repo: https://github.com/PyCQA/flake8
|
||||||
|
rev: 7.1.0
|
||||||
|
hooks:
|
||||||
|
- id: flake8
|
||||||
|
|
||||||
|
- repo: https://github.com/Lucas-C/pre-commit-hooks-safety
|
||||||
|
rev: v1.3.3
|
||||||
|
hooks:
|
||||||
|
- id: python-safety-dependencies-check
|
||||||
|
|
||||||
|
- repo: https://github.com/adrienverge/yamllint.git
|
||||||
|
rev: "v1.35.1" # Remplacez par la version actuelle de yamllint
|
||||||
|
hooks:
|
||||||
|
- id: yamllint
|
||||||
|
|
||||||
|
- repo: https://github.com/ansible/ansible-lint
|
||||||
|
rev: "v24.6.1" # Remplacez par la version actuelle d'ansible-lint
|
||||||
|
hooks:
|
||||||
|
- id: ansible-lint
|
||||||
|
|
||||||
|
- repo: https://github.com/biozz/ansible-pre-commit-hooks
|
||||||
|
rev: v0.0.1
|
||||||
|
hooks:
|
||||||
|
- id: ansible-vault-encrypted
|
171
.secrets.baseline
Normal file
171
.secrets.baseline
Normal file
@ -0,0 +1,171 @@
|
|||||||
|
{
|
||||||
|
"version": "1.5.0",
|
||||||
|
"plugins_used": [
|
||||||
|
{
|
||||||
|
"name": "ArtifactoryDetector"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "AWSKeyDetector"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "AzureStorageKeyDetector"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Base64HighEntropyString",
|
||||||
|
"limit": 4.5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "BasicAuthDetector"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "CloudantDetector"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "DiscordBotTokenDetector"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "GitHubTokenDetector"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "GitLabTokenDetector"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "HexHighEntropyString",
|
||||||
|
"limit": 3.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "IbmCloudIamDetector"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "IbmCosHmacDetector"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "IPPublicDetector"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "JwtTokenDetector"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "KeywordDetector",
|
||||||
|
"keyword_exclude": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MailchimpDetector"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "NpmDetector"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "OpenAIDetector"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "PrivateKeyDetector"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "PypiTokenDetector"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SendGridDetector"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SlackDetector"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SoftlayerDetector"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SquareOAuthDetector"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "StripeDetector"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "TelegramBotTokenDetector"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "TwilioKeyDetector"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"filters_used": [
|
||||||
|
{
|
||||||
|
"path": "detect_secrets.filters.allowlist.is_line_allowlisted"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "detect_secrets.filters.common.is_baseline_file",
|
||||||
|
"filename": ".secrets.baseline"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "detect_secrets.filters.common.is_ignored_due_to_verification_policies",
|
||||||
|
"min_level": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "detect_secrets.filters.heuristic.is_indirect_reference"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "detect_secrets.filters.heuristic.is_likely_id_string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "detect_secrets.filters.heuristic.is_lock_file"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "detect_secrets.filters.heuristic.is_not_alphanumeric_string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "detect_secrets.filters.heuristic.is_potential_uuid"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "detect_secrets.filters.heuristic.is_prefixed_with_dollar_sign"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "detect_secrets.filters.heuristic.is_sequential_string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "detect_secrets.filters.heuristic.is_swagger_file"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "detect_secrets.filters.heuristic.is_templated_secret"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"results": {
|
||||||
|
"docker-compose.yml": [
|
||||||
|
{
|
||||||
|
"type": "Secret Keyword",
|
||||||
|
"filename": "docker-compose.yml",
|
||||||
|
"hashed_secret": "fb360f9c09ac8c5edb2f18be5de4e80ea4c430d0",
|
||||||
|
"is_verified": false,
|
||||||
|
"line_number": 9
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Secret Keyword",
|
||||||
|
"filename": "docker-compose.yml",
|
||||||
|
"hashed_secret": "61a4f51eb85a16603bd63347ef7cc8b7779b5963",
|
||||||
|
"is_verified": false,
|
||||||
|
"line_number": 12
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Secret Keyword",
|
||||||
|
"filename": "docker-compose.yml",
|
||||||
|
"hashed_secret": "fa9beb99e4029ad5a6615399e7bbae21356086b3",
|
||||||
|
"is_verified": false,
|
||||||
|
"line_number": 26
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Secret Keyword",
|
||||||
|
"filename": "docker-compose.yml",
|
||||||
|
"hashed_secret": "fc544380162745e4826f7040176ce443d4d345b9",
|
||||||
|
"is_verified": false,
|
||||||
|
"line_number": 38
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"hosts.yml": [
|
||||||
|
{
|
||||||
|
"type": "Secret Keyword",
|
||||||
|
"filename": "hosts.yml",
|
||||||
|
"hashed_secret": "b3a5425f7ebac5a1b19d0d34418ce0a4f64a7a51",
|
||||||
|
"is_verified": false,
|
||||||
|
"line_number": 11
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"generated_at": "2024-07-05T02:45:41Z"
|
||||||
|
}
|
2
ansible.cfg
Normal file
2
ansible.cfg
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
[privilege_escalation]
|
||||||
|
become_ask_pass = true
|
@ -2,41 +2,162 @@
|
|||||||
networks:
|
networks:
|
||||||
traefik_front_network:
|
traefik_front_network:
|
||||||
external: true
|
external: true
|
||||||
back_network_:
|
back_network_semaphore:
|
||||||
driver: bridge
|
driver: bridge
|
||||||
attachable: true
|
attachable: true
|
||||||
|
|
||||||
#### SERVICES
|
#### SERVICES
|
||||||
services:
|
services:
|
||||||
### hello_world
|
### semaphore
|
||||||
hello_world:
|
semaphore:
|
||||||
container_name: gitea-app
|
container_name: semaphore-app
|
||||||
hostname: gitea-app
|
hostname: semaphore-app
|
||||||
image: hello-world
|
image: docker.io/semaphoreui/semaphore:${SEMAPHORE_VERSION:-latest}
|
||||||
environment:
|
|
||||||
restart: always
|
restart: always
|
||||||
networks:
|
environment:
|
||||||
# - back_network_gitea
|
SEMAPHORE_DB_DIALECT: postgres
|
||||||
- traefik_front_network
|
SEMAPHORE_DB_HOST: semaphore-postgres
|
||||||
|
SEMAPHORE_DB_NAME: ${POSTGRE_DB_NAME:-semaphore_db}
|
||||||
|
SEMAPHORE_DB_USER: ${POSTGRE_DB_USER:-semaphore_user}
|
||||||
|
SEMAPHORE_DB_PASS: ${POSTGRE_DB_PASS:-P@ssword!Here!123456}
|
||||||
|
|
||||||
|
SEMAPHORE_ADMIN: ${SEMAPHORE_ADMIN:-administrateur}
|
||||||
|
SEMAPHORE_ADMIN_PASSWORD: ${SEMAPHORE_ADMIN_PASSWORD:-P@ssword!Here!123456}
|
||||||
|
SEMAPHORE_ADMIN_NAME: ${SEMAPHORE_ADMIN_NAME:-Administrateur}
|
||||||
|
SEMAPHORE_ADMIN_EMAIL: ${SEMAPHORE_ADMIN_EMAIL:-admin@tips-of-mine.fr}
|
||||||
|
|
||||||
|
SEMAPHORE_PORT: ${SEMAPHORE_PORT:-3000}
|
||||||
|
|
||||||
|
SEMAPHORE_TMP_PATH: ${SEMAPHORE_TMP_PATH:-/tmp/semaphore}
|
||||||
|
SEMAPHORE_WEB_ROOT: ${SEMAPHORE_WEB_ROOT:-https://semaphore.tips-of-mine.com}
|
||||||
|
MAX_TASK_DURATION_SEC: ${MAX_TASK_DURATION_SEC:-60}
|
||||||
|
SEMAPHORE_MAX_PARALLEL_TASKS: ${SEMAPHORE_MAX_PARALLEL_TASKS:-10}
|
||||||
|
SEMAPHORE_PASSWORD_LOGIN_DISABLED: ${SEMAPHORE_PASSWORD_LOGIN_DISABLED:-False}
|
||||||
|
|
||||||
|
SEMAPHORE_USE_REMOTE_RUNNER: ${SEMAPHORE_USE_REMOTE_RUNNER:-True}
|
||||||
|
SEMAPHORE_RUNNER_REGISTRATION_TOKEN: ${SEMAPHORE_RUNNER_REGISTRATION_TOKEN:-H1wDyorbg6gTSwJlVwle2Fne}
|
||||||
|
|
||||||
|
SEMAPHORE_NON_ADMIN_CAN_CREATE_PROJECT: ${SEMAPHORE_NON_ADMIN_CAN_CREATE_PROJECT:-False}
|
||||||
|
SEMAPHORE_MAX_TASKS_PER_TEMPLATE: ${SEMAPHORE_MAX_TASKS_PER_TEMPLATE:-60}
|
||||||
|
|
||||||
|
SEMAPHORE_EMAIL_ALERT: ${SEMAPHORE_EMAIL_ALERT:-True}
|
||||||
|
SEMAPHORE_EMAIL_SENDER: $SEMAPHORE_EMAIL_SENDER:-hostinfo@tips-of-mine.fr}
|
||||||
|
SEMAPHORE_EMAIL_HOST: ${SEMAPHORE_EMAIL_HOST:-semaphore-msmtpd}
|
||||||
|
SEMAPHORE_EMAIL_PORT: ${SEMAPHORE_EMAIL_PORT:-2500}
|
||||||
|
SEMAPHORE_EMAIL_SECURE: ${SEMAPHORE_EMAIL_SECURE:-False}
|
||||||
|
|
||||||
|
SEMAPHORE_LDAP_ENABLE: ${:-False}
|
||||||
|
SEMAPHORE_LDAP_BIND_DN: ${SEMAPHORE_LDAP_BIND_DN:-}
|
||||||
|
SEMAPHORE_LDAP_BIND_PASSWORD: ${SEMAPHORE_LDAP_BIND_PASSWORD:-}
|
||||||
|
SEMAPHORE_LDAP_SERVER: ${SEMAPHORE_LDAP_SERVER:-}
|
||||||
|
SEMAPHORE_LDAP_SEARCH_DN: ${SEMAPHORE_LDAP_SEARCH_DN:-}
|
||||||
|
SEMAPHORE_LDAP_SEARCH_FILTER: ${SEMAPHORE_LDAP_SEARCH_FILTER:-}
|
||||||
|
SEMAPHORE_LDAP_NEEDTLS: ${SEMAPHORE_LDAP_NEEDTLS:-}
|
||||||
|
SEMAPHORE_LDAP_MAPPING_DN: ${SEMAPHORE_LDAP_MAPPING_DN:-}
|
||||||
|
SEMAPHORE_LDAP_MAPPING_MAIL: ${SEMAPHORE_LDAP_MAPPING_MAIL:-}
|
||||||
|
SEMAPHORE_LDAP_MAPPING_UID: ${SEMAPHORE_LDAP_MAPPING_UID:-}
|
||||||
|
SEMAPHORE_LDAP_MAPPING_CN: ${SEMAPHORE_LDAP_MAPPING_CN:-}
|
||||||
|
|
||||||
|
SEMAPHORE_GOTIFY_ALERT: ${SEMAPHORE_GOTIFY_ALERT:-False}
|
||||||
|
SEMAPHORE_GOTIFY_URL: ${SEMAPHORE_GOTIFY_URL:-https://gotify.tips-of-mine.com/#/applicationsd}
|
||||||
|
SEMAPHORE_GOTIFY_TOKEN: ${SEMAPHORE_GOTIFY_TOKEN:-AARDW0DNlz.eb1cd}
|
||||||
|
|
||||||
|
ANSIBLE_HOST_KEY_CHECKING: ${ANSIBLE_HOST_KEY_CHECKING:-False}
|
||||||
|
depends_on:
|
||||||
|
postgres:
|
||||||
|
condition: service_healthy
|
||||||
|
restart: true
|
||||||
|
msmtpd:
|
||||||
|
condition: service_healthy
|
||||||
|
restart: true
|
||||||
volumes:
|
volumes:
|
||||||
|
- ./data:/var/lib/semaphore
|
||||||
|
- ./config:/etc/semaphore
|
||||||
|
- ./tmp:/tmp/semaphore
|
||||||
|
networks:
|
||||||
|
- back_network_semaphore
|
||||||
|
- traefik_front_network
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.docker.network=traefik_front_network"
|
- "traefik.docker.network=traefik_front_network"
|
||||||
# HTTP
|
# HTTP
|
||||||
- "traefik.http.routers.hello-world-http.rule=Host(`hello-world.tips-of-mine.com`)"
|
- "traefik.http.routers.semaphore-http.rule=Host(`semaphore.tips-of-mine.com`)"
|
||||||
- "traefik.http.routers.hello-world-http.entrypoints=http"
|
- "traefik.http.routers.semaphore-http.entrypoints=http"
|
||||||
- "traefik.http.routers.hello-world-http.priority=49"
|
- "traefik.http.routers.semaphore-http.priority=49"
|
||||||
# HTTPS
|
# HTTPS
|
||||||
- "traefik.http.routers.hello-world-https.rule=Host(`hello-world.tips-of-mine.com`)"
|
- "traefik.http.routers.semaphore-https.rule=Host(`semaphore.tips-of-mine.com`)"
|
||||||
- "traefik.http.routers.hello-world-https.entrypoints=https"
|
- "traefik.http.routers.semaphore-https.entrypoints=https"
|
||||||
- "traefik.http.routers.hello-world-https.tls=true"
|
- "traefik.http.routers.semaphore-https.tls=true"
|
||||||
- "traefik.http.routers.hello-world-https.priority=50"
|
- "traefik.http.routers.semaphore-https.priority=50"
|
||||||
- "traefik.http.routers.gitea.service=gitea-https-service"
|
- "traefik.http.routers.semaphore.service=semaphore-https-service"
|
||||||
# Middleware
|
# Middleware
|
||||||
# Service
|
# Service
|
||||||
# - "traefik.http.services.gitea-https-service.loadbalancer.server.port=3000"
|
- "traefik.http.services.semaphore-https-service.loadbalancer.server.port=3000"
|
||||||
# - "traefik.http.services.gitea-https-service.loadbalancer.server.scheme=https"
|
# - "traefik.http.services.semaphore-https-service.loadbalancer.server.scheme=https"
|
||||||
# - "traefik.http.services.gitea-https-service.loadbalancer.healthcheck.hostname=gitea.traefik.me"
|
# - "traefik.http.services.semaphore-https-service.loadbalancer.healthcheck.hostname=semaphore.traefik.me"
|
||||||
# - "traefik.http.services.gitea-https-service.loadbalancer.healthcheck.method=foobar"
|
# - "traefik.http.services.semaphore-https-service.loadbalancer.healthcheck.method=foobar"
|
||||||
# - "traefik.http.services.gitea-https-service.loadbalancer.healthcheck.timeout=10"
|
# - "traefik.http.services.semaphore-https-service.loadbalancer.healthcheck.timeout=10"
|
||||||
# - "traefik.http.services.gitea-https-service.loadbalancer.healthcheck.interval=30"
|
# - "traefik.http.services.semaphore-https-service.loadbalancer.healthcheck.interval=30"
|
||||||
|
|
||||||
|
### runner
|
||||||
|
runner:
|
||||||
|
container_name: semaphore-runner
|
||||||
|
hostname: semaphore-runner
|
||||||
|
image: docker.io/semaphoreui/runner:${SEMAPHORE_VERSION:-latest}
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
SEMAPHORE_WEB_ROOT: ${SEMAPHORE_WEB_ROOT:-http://server:3000}
|
||||||
|
SEMAPHORE_RUNNER_API_URL: ${SEMAPHORE_RUNNER_API_URL:-http://server:3000/internal}
|
||||||
|
SEMAPHORE_RUNNER_REGISTRATION_TOKEN: ${SEMAPHORE_RUNNER_REGISTRATION_TOKEN:-H1wDyorbg6gTSwJlVwle2Fne}
|
||||||
|
networks:
|
||||||
|
- back_network_semaphore
|
||||||
|
|
||||||
|
### postgres
|
||||||
|
postgres:
|
||||||
|
container_name: semaphore-postgres
|
||||||
|
hostname: semaphore-postgres
|
||||||
|
image: ${POSTGRES_IMAGE_TAG}
|
||||||
|
environment:
|
||||||
|
PGDATA: ${POSTGRE_DB_DATA}
|
||||||
|
POSTGRES_DB: ${POSTGRE_DB_NAME:-semaphore_db}
|
||||||
|
POSTGRES_PASSWORD: ${POSTGRE_DB_PASSWORD:-P@ssword!Here!123456}
|
||||||
|
POSTGRES_USER: ${POSTGRE_DB_USER:-semaphore_user}
|
||||||
|
TZ: Europe/Paris
|
||||||
|
networks:
|
||||||
|
- back_network_semaphore
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 10
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- ./data:/var/lib/postgresql/data:rw
|
||||||
|
|
||||||
|
###
|
||||||
|
msmtpd:
|
||||||
|
container_name: semaphore-msmtpd
|
||||||
|
hostname: semaphore-msmtpd
|
||||||
|
image: crazymax/msmtpd:latest
|
||||||
|
networks:
|
||||||
|
- back_network_semaphore
|
||||||
|
environment:
|
||||||
|
- "TZ=Europe/Paris"
|
||||||
|
- "PUID=1500"
|
||||||
|
- "PGID=1500"
|
||||||
|
- "SMTP_HOST=10.0.4.52"
|
||||||
|
- "SMTP_PORT=587"
|
||||||
|
- "SMTP_TLS=on"
|
||||||
|
- "SMTP_STARTTLS=on"
|
||||||
|
- "SMTP_TLS_CHECKCERT=off"
|
||||||
|
- "SMTP_AUTH=on"
|
||||||
|
- "SMTP_USER=hostinfo@tips-of-mine.fr"
|
||||||
|
- "SMTP_PASSWORD=P@ssw0rd!12345+"
|
||||||
|
- "SMTP_DOMAIN=localhost"
|
||||||
|
- "SMTP_FROM=hostinfo@tips-of-mine.fr"
|
||||||
|
restart: always
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "echo EHLO localhost"]
|
||||||
|
interval: 5s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
13
hosts.yml
Normal file
13
hosts.yml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
all:
|
||||||
|
vars:
|
||||||
|
ansible_user: ubuntu
|
||||||
|
ansible_ssh_common_args: '-o StrictHostKeyChecking=no'
|
||||||
|
prod:
|
||||||
|
hosts:
|
||||||
|
client:
|
||||||
|
ansible_host: 52.90.84.191
|
||||||
|
vars:
|
||||||
|
env: production
|
||||||
|
ansible_password: centos
|
||||||
|
red_color: "red"
|
||||||
|
blue_color: "blue"
|
37
playbook.yml
Normal file
37
playbook.yml
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
---
|
||||||
|
- name: Deploy Docker containers with different colors
|
||||||
|
hosts: prod
|
||||||
|
become: true
|
||||||
|
tasks:
|
||||||
|
- name: Deploy web-color container with default color
|
||||||
|
community.docker.docker_container:
|
||||||
|
name: web-color
|
||||||
|
image: "kodekloud/webapp-color"
|
||||||
|
env:
|
||||||
|
APP_COLOR: "{{ default_color | default('') }}"
|
||||||
|
ports:
|
||||||
|
- "8080:8080"
|
||||||
|
tags:
|
||||||
|
- deploy
|
||||||
|
|
||||||
|
- name: Deploy web-color container with red color
|
||||||
|
community.docker.docker_container:
|
||||||
|
name: web-red-color
|
||||||
|
image: "kodekloud/webapp-color"
|
||||||
|
env:
|
||||||
|
APP_COLOR: "{{ red_color }}"
|
||||||
|
ports:
|
||||||
|
- "80:8080"
|
||||||
|
tags:
|
||||||
|
- red_color
|
||||||
|
|
||||||
|
- name: Deploy web-color container with yellow color
|
||||||
|
community.docker.docker_container:
|
||||||
|
name: web-blue-color
|
||||||
|
image: "kodekloud/webapp-color"
|
||||||
|
env:
|
||||||
|
APP_COLOR: "{{ blue_color }}"
|
||||||
|
ports:
|
||||||
|
- "443:8080"
|
||||||
|
tags:
|
||||||
|
- blue_color
|
Loading…
x
Reference in New Issue
Block a user