diff --git a/ansible/roles/deploy_container_localai/defaults/main.yml b/ansible/roles/deploy_container_localai/defaults/main.yml new file mode 100644 index 0000000..5aaa37b --- /dev/null +++ b/ansible/roles/deploy_container_localai/defaults/main.yml @@ -0,0 +1,5 @@ +########### +# LocalAI # +########### +container_localai_version: v3.5.0-aio-cpu # https://hub.docker.com/r/localai/localai/tags?name=cpu +container_localai_domain: localai.example.com \ No newline at end of file diff --git a/ansible/roles/deploy_container_localai/files/.gitkeep b/ansible/roles/deploy_container_localai/files/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/ansible/roles/deploy_container_localai/handlers/main.yml b/ansible/roles/deploy_container_localai/handlers/main.yml new file mode 100644 index 0000000..e69de29 diff --git a/ansible/roles/deploy_container_localai/meta/main.yml b/ansible/roles/deploy_container_localai/meta/main.yml new file mode 100644 index 0000000..e69de29 diff --git a/ansible/roles/deploy_container_localai/tasks/main.yml b/ansible/roles/deploy_container_localai/tasks/main.yml new file mode 100644 index 0000000..9f56e65 --- /dev/null +++ b/ansible/roles/deploy_container_localai/tasks/main.yml @@ -0,0 +1,25 @@ +- name: Ensure data directories exist + ansible.builtin.file: + path: "{{ container_base_dir }}/data/{{ item }}" + state: directory + mode: '0755' + loop: + - "models" + become: false + +- name: Deploy Docker Compose and .env files + ansible.builtin.template: + src: "{{ item.src }}" + dest: "{{ container_base_dir }}/{{ item.dest }}" + mode: '0644' + loop: + - { src: 'docker-compose.yml.j2', dest: 'docker-compose.yml' } + - { src: '.env.j2', dest: '.env' } + become: false + +- name: Start Container + community.docker.docker_compose_v2: + project_src: "{{ container_base_dir }}" + pull: always + docker_host: "unix:///run/user/1000/docker.sock" + become: false diff --git a/ansible/roles/deploy_container_localai/templates/.env.j2 b/ansible/roles/deploy_container_localai/templates/.env.j2 new file mode 100644 index 0000000..2f07e5c --- /dev/null +++ b/ansible/roles/deploy_container_localai/templates/.env.j2 @@ -0,0 +1,2 @@ +LOCALAI_VERSION={{ container_localai_version }} +LOCALAI_DOMAIN={{ container_localai_domain }} \ No newline at end of file diff --git a/ansible/roles/deploy_container_localai/templates/docker-compose.yml.j2 b/ansible/roles/deploy_container_localai/templates/docker-compose.yml.j2 new file mode 100644 index 0000000..0b46142 --- /dev/null +++ b/ansible/roles/deploy_container_localai/templates/docker-compose.yml.j2 @@ -0,0 +1,32 @@ +--- +services: + api: + image: localai/localai:${LOCALAI_VERSION} + container_name: localai + networks: + - traefik + volumes: + - ./data/models:/models:cached + environment: + - DEBUG=true + labels: + - "traefik.enable=true" + - "traefik.docker.network=traefik" + - "traefik.http.routers.localai.entrypoints=http" + - "traefik.http.routers.localai.rule=Host(`${LOCALAI_DOMAIN}`)" + - "traefik.http.middlewares.localai-https-redirect.redirectscheme.scheme=https" + - "traefik.http.routers.localai.middlewares=localai-https-redirect" + - "traefik.http.routers.localai-secure.entrypoints=https" + - "traefik.http.routers.localai-secure.rule=Host(`${LOCALAI_DOMAIN}`)" + - "traefik.http.routers.localai-secure.tls=true" + - "traefik.http.routers.localai-secure.service=localai" + - "traefik.http.services.localai.loadbalancer.server.port=8080" + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8080/readyz"] + interval: 1m + timeout: 20m + retries: 5 + +networks: + traefik: + external: true \ No newline at end of file diff --git a/ansible/roles/deploy_container_localai/vars/main.yml b/ansible/roles/deploy_container_localai/vars/main.yml new file mode 100644 index 0000000..8ea93b4 --- /dev/null +++ b/ansible/roles/deploy_container_localai/vars/main.yml @@ -0,0 +1 @@ +container_base_dir: /opt/docker/localai \ No newline at end of file