1
0

Перенес код деплоя в основной скрипт

This commit is contained in:
Anton Vakhrushev 2024-05-25 18:30:59 +03:00
parent ea43f571ae
commit c44b1322cf
Signed by: av
GPG Key ID: 581F7473F7A21FA2
5 changed files with 41 additions and 51 deletions

View File

@ -5,6 +5,8 @@
## Требования ## Требования
- [ansible](https://docs.ansible.com/ansible/latest/getting_started/index.html) - [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-ключ. - Для доступа используется ssh-ключ.
- Докер используется для запуска и изоляции приложений. Для загрузки образов настраивается Yandex Docker Registry. - Докер используется для запуска и изоляции приложений. Для загрузки образов настраивается Yandex Docker Registry.
- Выход во внешнюю сеть через proxy-server Caddy. - Выход во внешнюю сеть через proxy server Caddy.
- Чувствительные данные в `ansible/vars/vars.yaml` зашифрованы с помощью Ansible Vault. - Чувствительные данные в `ansible/vars/vars.yaml` зашифрованы с помощью Ansible Vault.
- Для мониторинга за сервером устанавливается [netdata](https://github.com/netdata/netdata). - Для мониторинга за сервером устанавливается [netdata](https://github.com/netdata/netdata).

View File

@ -4,12 +4,13 @@ version: '3'
vars: vars:
USER_ID: USER_ID:
sh: id -u sh: 'id -u'
GROUP_ID: GROUP_ID:
sh: id -g sh: 'id -g'
HOSTS_FILE: 'ansible/hosts_prod'
REMOTE_USER: 'major' REMOTE_USER: 'major'
REMOTE_HOST: REMOTE_HOST:
sh: cat ./ansible/hosts_prod | xargs sh: 'cat {{.HOSTS_FILE}} | xargs'
tasks: tasks:
ssh: ssh:
@ -26,7 +27,7 @@ tasks:
cmds: cmds:
- >- - >-
ansible-playbook ansible-playbook
--inventory="ansible/hosts_prod" --inventory="{{.HOSTS_FILE}}"
--list-tags --list-tags
ansible/configuration.yml ansible/configuration.yml
@ -37,9 +38,9 @@ tasks:
cmds: cmds:
- >- - >-
ansible-playbook ansible-playbook
--user="{{.REMOTE_USER}}"
--become --become
--inventory="ansible/hosts_prod" --user="{{.REMOTE_USER}}"
--inventory="{{.HOSTS_FILE}}"
--extra-vars="ansible_python_interpreter=/usr/bin/python3" --extra-vars="ansible_python_interpreter=/usr/bin/python3"
{{.TAGS}} {{.TAGS}}
-vvv -vvv

View File

@ -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"
)

View File

@ -1,3 +1,6 @@
import os
import shlex
import fabric
from invoke import task from invoke import task
SERVER_HOST_FILE = "../ansible/hosts_prod" SERVER_HOST_FILE = "../ansible/hosts_prod"
@ -6,22 +9,43 @@ DOKER_REGISTRY = "cr.yandex/crplfk0168i4o8kd7ade"
@task(name="deploy:gitea") @task(name="deploy:gitea")
def deploy_gitea(context): def deploy_gitea(context):
from gitea.deploy import deploy deploy("gitea", dirs=["data"])
deploy(context, "gitea", ssh_host("gitea"))
@task(name="deploy:wiki") @task(name="deploy:wiki")
def deploy_wiki(context): def deploy_wiki(context):
from wiki.deploy import deploy deploy("wiki")
deploy(context, "wiki", ssh_host("wiki"))
def read_host(): def read_host():
with open("../ansible/hosts_prod") as f: with open(SERVER_HOST_FILE) as f:
return f.read().strip() return f.read().strip()
def ssh_host(app_name): def ssh_host(app_name):
return f"{app_name}@{read_host()}" 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.")

View File

@ -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"
)