Add deploy files
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
env.toml
|
||||||
14
ex-env.toml
Normal file
14
ex-env.toml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
git_server_url = https://questia.dev/git/
|
||||||
|
git_username = TODO
|
||||||
|
git_password = TODO
|
||||||
|
|
||||||
|
repo_path = TODO
|
||||||
|
|
||||||
|
docker_username = TODO
|
||||||
|
docker_password = TODO
|
||||||
|
docker_registry = TODO
|
||||||
|
|
||||||
|
home_dir = /home/ubuntu-server/docker
|
||||||
|
|
||||||
|
host = questia.dev
|
||||||
106
start_docker_branches.py
Normal file
106
start_docker_branches.py
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
import requests
|
||||||
|
import configparser
|
||||||
|
import docker
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
# Get config
|
||||||
|
config = configparser.ConfigParser()
|
||||||
|
config.read("env.toml")
|
||||||
|
git_server_url = config["DEFAULT"]["git_server_url"]
|
||||||
|
git_server_user = config["DEFAULT"]["git_username"]
|
||||||
|
git_server_pass = config["DEFAULT"]["git_password"]
|
||||||
|
|
||||||
|
repo_path = config["DEFAULT"]["repo_path"]
|
||||||
|
|
||||||
|
docker_username = config["DEFAULT"]["docker_username"]
|
||||||
|
docker_password = config["DEFAULT"]["docker_password"]
|
||||||
|
docker_registry = config["DEFAULT"]["docker_registry"]
|
||||||
|
|
||||||
|
home_dir = config["DEFAULT"]["home_dir"]
|
||||||
|
|
||||||
|
host = config["DEFAULT"]["host"]
|
||||||
|
|
||||||
|
# Get branches
|
||||||
|
branches = requests.get(f"{git_server_url}/api/v1/repos/{repo_path}/branches")
|
||||||
|
branch_names = [branch["name"] for branch in branches.json()]
|
||||||
|
|
||||||
|
# Get docker registry images
|
||||||
|
client = docker.DockerClient(base_url="unix://var/run/docker.sock")
|
||||||
|
creds = client.login(username=docker_username, password=docker_password, registry=docker_registry)
|
||||||
|
|
||||||
|
all_images = client.images.pull(f"{docker_registry}/test/test", auth_config=creds, all_tags=True)
|
||||||
|
registry_images = [i.attrs["RepoTags"][0] for i in all_images if len(i.attrs["RepoTags"])]
|
||||||
|
|
||||||
|
# Map all branch names into images
|
||||||
|
branch_reg_map = {name: branch for name in branch_names
|
||||||
|
for branch in registry_images
|
||||||
|
if branch.split(":")[-1] == name}
|
||||||
|
|
||||||
|
print(branch_reg_map)
|
||||||
|
|
||||||
|
def generate_service_str(branch_name, image_path):
|
||||||
|
return f"""
|
||||||
|
{branch_name}:
|
||||||
|
image: "{image_path}"
|
||||||
|
container_name: "{branch_name}"
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.{branch_name}.rule=Host(`{host}`) && PathPrefix(`/branch/{branch_name}`)"
|
||||||
|
- "traefik.http.routers.{branch_name}.entrypoints=web"
|
||||||
|
- "traefik.http.routers.{branch_name}.tls=false"
|
||||||
|
- "traefik.http.middlewares.{branch_name}-strip.stripprefix.prefixes=/branch/{branch_name}"
|
||||||
|
- "traefik.http.middlewares.{branch_name}-strip.stripprefix.forceslash=false"
|
||||||
|
- "traefik.http.routers.{branch_name}.middlewares={branch_name}-strip"
|
||||||
|
environment:
|
||||||
|
PERSEUS_BASE_PATH: "/branch/{branch_name}"
|
||||||
|
PERSEUS_PORT: "80"
|
||||||
|
PERSEUS_HOST: "0.0.0.0"
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Generate docker config
|
||||||
|
compose_str = f"""
|
||||||
|
version: "3.8"
|
||||||
|
|
||||||
|
services:
|
||||||
|
|
||||||
|
traefik:
|
||||||
|
image: "traefik:v2.10"
|
||||||
|
container_name: "traefik"
|
||||||
|
command:
|
||||||
|
- "--api.insecure=true"
|
||||||
|
- "--providers.docker=true"
|
||||||
|
- "--providers.docker.exposedbydefault=false"
|
||||||
|
- "--entrypoints.web.address=:80"
|
||||||
|
- "--accesslog=true"
|
||||||
|
- "--accesslog.fields.defaultmode=keep"
|
||||||
|
- "--log.level=DEBUG"
|
||||||
|
ports:
|
||||||
|
- "80:80"
|
||||||
|
- "8080:8080"
|
||||||
|
volumes:
|
||||||
|
- "/var/run/docker.sock:/var/run/docker.sock:ro"
|
||||||
|
"""
|
||||||
|
|
||||||
|
for name, image in branch_reg_map.items():
|
||||||
|
compose_str += generate_service_str(name, image)
|
||||||
|
|
||||||
|
# Write the docker compose
|
||||||
|
with open(f"{home_dir}/docker-compose.yaml", "w") as text_file:
|
||||||
|
text_file.write(compose_str)
|
||||||
|
|
||||||
|
# Bring docker compose down and up
|
||||||
|
try:
|
||||||
|
out = subprocess.run("docker compose down", shell=True, check=True, cwd=f"{home_dir}")
|
||||||
|
print(out)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
out = subprocess.run("docker compose pull", shell=True, check=True, cwd=f"{home_dir}")
|
||||||
|
print(out)
|
||||||
|
|
||||||
|
out = subprocess.run("docker compose up -d", shell=True, check=True, cwd=f"{home_dir}")
|
||||||
|
print(out)
|
||||||
|
|
||||||
|
exit(0)
|
||||||
Reference in New Issue
Block a user