From c44b1322cf067a0fd9e41ae11fe9ab22d2829b6c Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Sat, 25 May 2024 18:30:59 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BD=D0=B5=D1=81=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=B4=20=D0=B4=D0=B5=D0=BF=D0=BB=D0=BE=D1=8F=20?= =?UTF-8?q?=D0=B2=20=D0=BE=D1=81=D0=BD=D0=BE=D0=B2=D0=BD=D0=BE=D0=B9=20?= =?UTF-8?q?=D1=81=D0=BA=D1=80=D0=B8=D0=BF=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +++- Taskfile.yml | 13 +++++++------ app/gitea/deploy.py | 19 ------------------- app/tasks.py | 38 +++++++++++++++++++++++++++++++------- app/wiki/deploy.py | 18 ------------------ 5 files changed, 41 insertions(+), 51 deletions(-) delete mode 100644 app/gitea/deploy.py delete mode 100644 app/wiki/deploy.py diff --git a/README.md b/README.md index b0a717b..af5128d 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,8 @@ ## Требования - [ansible](https://docs.ansible.com/ansible/latest/getting_started/index.html) +- [invoke](https://www.pyinvoke.org/) +- [task](https://taskfile.dev/) ## Установка @@ -18,7 +20,7 @@ $ ansible-galaxy install --role-file ansible/requirements.yml - Для каждого приложения создается свой пользователь. - Для доступа используется ssh-ключ. - Докер используется для запуска и изоляции приложений. Для загрузки образов настраивается Yandex Docker Registry. -- Выход во внешнюю сеть через proxy-server Caddy. +- Выход во внешнюю сеть через proxy server Caddy. - Чувствительные данные в `ansible/vars/vars.yaml` зашифрованы с помощью Ansible Vault. - Для мониторинга за сервером устанавливается [netdata](https://github.com/netdata/netdata). diff --git a/Taskfile.yml b/Taskfile.yml index 00d9131..72ca9ff 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -4,12 +4,13 @@ version: '3' vars: USER_ID: - sh: id -u + sh: 'id -u' GROUP_ID: - sh: id -g + sh: 'id -g' + HOSTS_FILE: 'ansible/hosts_prod' REMOTE_USER: 'major' REMOTE_HOST: - sh: cat ./ansible/hosts_prod | xargs + sh: 'cat {{.HOSTS_FILE}} | xargs' tasks: ssh: @@ -26,7 +27,7 @@ tasks: cmds: - >- ansible-playbook - --inventory="ansible/hosts_prod" + --inventory="{{.HOSTS_FILE}}" --list-tags ansible/configuration.yml @@ -37,9 +38,9 @@ tasks: cmds: - >- ansible-playbook - --user="{{.REMOTE_USER}}" --become - --inventory="ansible/hosts_prod" + --user="{{.REMOTE_USER}}" + --inventory="{{.HOSTS_FILE}}" --extra-vars="ansible_python_interpreter=/usr/bin/python3" {{.TAGS}} -vvv diff --git a/app/gitea/deploy.py b/app/gitea/deploy.py deleted file mode 100644 index b847098..0000000 --- a/app/gitea/deploy.py +++ /dev/null @@ -1,19 +0,0 @@ -from fabric import Connection -import os -import shlex - - -def deploy(context, app_name, ssh_host): - docker_compose = os.path.join(os.path.dirname(__file__), "docker-compose.yml") - print("Deploy app from", docker_compose) - print("Start setup remote host", ssh_host) - with Connection(ssh_host) as c: - c.put( - local=docker_compose, - remote=f"/home/{app_name}/docker-compose.yml", - ) - c.run("cp .env .env.prod") - c.run("mkdir -p data") - c.run( - f"docker-compose --project-name {shlex.quote(app_name)} --env-file=.env.prod up --detach --remove-orphans" - ) diff --git a/app/tasks.py b/app/tasks.py index a83704f..9c86e8d 100644 --- a/app/tasks.py +++ b/app/tasks.py @@ -1,3 +1,6 @@ +import os +import shlex +import fabric from invoke import task SERVER_HOST_FILE = "../ansible/hosts_prod" @@ -6,22 +9,43 @@ DOKER_REGISTRY = "cr.yandex/crplfk0168i4o8kd7ade" @task(name="deploy:gitea") def deploy_gitea(context): - from gitea.deploy import deploy - - deploy(context, "gitea", ssh_host("gitea")) + deploy("gitea", dirs=["data"]) @task(name="deploy:wiki") def deploy_wiki(context): - from wiki.deploy import deploy - - deploy(context, "wiki", ssh_host("wiki")) + deploy("wiki") def read_host(): - with open("../ansible/hosts_prod") as f: + with open(SERVER_HOST_FILE) as f: return f.read().strip() def ssh_host(app_name): return f"{app_name}@{read_host()}" + + +def deploy(app_name: str, dirs=None): + docker_compose = os.path.join(app_name, "docker-compose.yml") + assert os.path.exists(docker_compose) + conn_str = ssh_host(app_name) + dirs = dirs or [] + print("Deploy app from", docker_compose) + print("Start setup remote host", conn_str) + with fabric.Connection(conn_str) as c: + print("Copy docker compose file to remote host") + c.put( + local=docker_compose, + remote=f"/home/{app_name}/docker-compose.yml", + ) + print("Copy environment file") + c.run("cp .env .env.prod") + for d in dirs: + print("Create remote directory", d) + c.run(f"mkdir -p {d}") + print("Up services") + c.run( + f"docker-compose --project-name {shlex.quote(app_name)} --env-file=.env.prod up --detach --remove-orphans" + ) + print("Done.") diff --git a/app/wiki/deploy.py b/app/wiki/deploy.py deleted file mode 100644 index 46a8a94..0000000 --- a/app/wiki/deploy.py +++ /dev/null @@ -1,18 +0,0 @@ -from fabric import Connection -import os -import shlex - - -def deploy(context, app_name, ssh_host): - docker_compose = os.path.join(os.path.dirname(__file__), "docker-compose.yml") - print("Deploy app from", docker_compose) - print("Start setup remote host", ssh_host) - with Connection(ssh_host) as c: - c.put( - local=docker_compose, - remote=f"/home/{app_name}/docker-compose.yml", - ) - c.run("cp .env .env.prod") - c.run( - f"docker-compose --project-name {shlex.quote(app_name)} --env-file=.env.prod up --detach --remove-orphans" - )