diff --git a/group_vars/all.yml b/group_vars/all.yml index f154eab..dcbb36b 100644 --- a/group_vars/all.yml +++ b/group_vars/all.yml @@ -28,4 +28,13 @@ base_packages: system_scripts: [] custom_directories: - /opt/scripts - - /etc/apt/keyrings \ No newline at end of file + - /etc/apt/keyrings + +# Docker services variables +npm_base_dir: "/opt/npm" +npm_data_dir: "/opt/npm/data" +npm_letsencrypt_dir: "/opt/npm/letsencrypt" + +heimdall_base_dir: "/opt/heimdall" +heimdall_config_dir: "/opt/heimdall/config" +heimdall_port: "45131" \ No newline at end of file diff --git a/olimp-deploy.yml b/olimp-deploy.yml index d043834..ed5b8f9 100644 --- a/olimp-deploy.yml +++ b/olimp-deploy.yml @@ -1,4 +1,13 @@ --- - hosts: all roles: - - {role: base_setup, tags: deploy_base } \ No newline at end of file + - {role: base_setup, tags: deploy_base }--- +- hosts: all + roles: + - { role: base_setup, tags: deploy_base } + +- hosts: gateway + roles: + - { role: docker, tags: [docker, deploy_docker] } + - { role: npm, tags: [npm, deploy_npm] } + - { role: heimdall, tags: [heimdall, deploy_heimdall] } \ No newline at end of file diff --git a/roles/docker/tasks/main.yml b/roles/docker/tasks/main.yml new file mode 100644 index 0000000..794c412 --- /dev/null +++ b/roles/docker/tasks/main.yml @@ -0,0 +1,63 @@ +--- +- name: Install Docker dependencies + apt: + name: + - apt-transport-https + - ca-certificates + - curl + - gnupg + - lsb-release + state: present + update_cache: yes + +- name: Add Docker GPG key + apt_key: + url: https://download.docker.com/linux/ubuntu/gpg + state: present + +- name: Add Docker repository + apt_repository: + repo: "deb [arch=amd64] https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable" + state: present + +- name: Install Docker + apt: + name: + - docker-ce + - docker-ce-cli + - containerd.io + state: present + update_cache: yes + +- name: Install Docker Compose + apt: + name: docker-compose-plugin + state: present + +- name: Start and enable Docker service + systemd: + name: docker + state: started + enabled: yes + +- name: Wait for Docker to start + pause: + seconds: 5 + +- name: Verify Docker installation + command: docker --version + register: docker_version + changed_when: false + +- name: Show Docker version + debug: + msg: "Docker version: {{ docker_version.stdout }}" + +- name: Verify Docker Compose installation + command: docker compose version + register: docker_compose_version + changed_when: false + +- name: Show Docker Compose version + debug: + msg: "Docker Compose version: {{ docker_compose_version.stdout }}" \ No newline at end of file diff --git a/roles/heimdall/handlers/main.yml b/roles/heimdall/handlers/main.yml new file mode 100644 index 0000000..3c3e2de --- /dev/null +++ b/roles/heimdall/handlers/main.yml @@ -0,0 +1,5 @@ +--- +- name: restart heimdall + community.docker.docker_compose: + project_src: "{{ heimdall_base_dir }}" + state: restarted \ No newline at end of file diff --git a/roles/heimdall/tasks/main.yml b/roles/heimdall/tasks/main.yml new file mode 100644 index 0000000..fc5e2d7 --- /dev/null +++ b/roles/heimdall/tasks/main.yml @@ -0,0 +1,33 @@ +--- +- name: Create directories for Heimdall + file: + path: "{{ item }}" + state: directory + mode: 0755 + loop: + - "{{ heimdall_base_dir }}" + - "{{ heimdall_config_dir }}" + +- name: Deploy Heimdall docker-compose.yml + template: + src: docker-compose.yml.j2 + dest: "{{ heimdall_base_dir }}/docker-compose.yml" + mode: 0644 + +- name: Pull and start Heimdall container + community.docker.docker_compose: + project_src: "{{ heimdall_base_dir }}" + state: present + +- name: Wait for Heimdall to start + pause: + seconds: 10 + +- name: Check Heimdall container status + community.docker.docker_container_info: + name: heimdall + register: heimdall_status + +- name: Show Heimdall status + debug: + msg: "Heimdall status: {{ heimdall_status.container.Status }}" \ No newline at end of file diff --git a/roles/heimdall/templates/docker-compose.yml.j2 b/roles/heimdall/templates/docker-compose.yml.j2 new file mode 100644 index 0000000..c50ad9c --- /dev/null +++ b/roles/heimdall/templates/docker-compose.yml.j2 @@ -0,0 +1,14 @@ +version: '3.8' +services: + heimdall: + image: lscr.io/linuxserver/heimdall:latest + container_name: heimdall + restart: unless-stopped + ports: + - "{{ heimdall_port }}:80" + volumes: + - {{ heimdall_config_dir }}:/config + environment: + - PUID=1000 + - PGID=1000 + - TZ={{ timezone }} \ No newline at end of file diff --git a/roles/npm/handlers/main.yml b/roles/npm/handlers/main.yml new file mode 100644 index 0000000..a1f6f9e --- /dev/null +++ b/roles/npm/handlers/main.yml @@ -0,0 +1,5 @@ +--- +- name: restart npm + community.docker.docker_compose: + project_src: "{{ npm_base_dir }}" + state: restarted \ No newline at end of file diff --git a/roles/npm/tasks/main.yml b/roles/npm/tasks/main.yml new file mode 100644 index 0000000..2d81743 --- /dev/null +++ b/roles/npm/tasks/main.yml @@ -0,0 +1,34 @@ +--- +- name: Create directories for NPM + file: + path: "{{ item }}" + state: directory + mode: 0755 + loop: + - "{{ npm_base_dir }}" + - "{{ npm_data_dir }}" + - "{{ npm_letsencrypt_dir }}" + +- name: Deploy NPM docker-compose.yml + template: + src: docker-compose.yml.j2 + dest: "{{ npm_base_dir }}/docker-compose.yml" + mode: 0644 + +- name: Pull and start NPM container + community.docker.docker_compose: + project_src: "{{ npm_base_dir }}" + state: present + +- name: Wait for NPM to start + pause: + seconds: 10 + +- name: Check NPM container status + community.docker.docker_container_info: + name: npm + register: npm_status + +- name: Show NPM status + debug: + msg: "NPM status: {{ npm_status.container.Status }}" \ No newline at end of file diff --git a/roles/npm/templates/docker-compose.yml.j2 b/roles/npm/templates/docker-compose.yml.j2 new file mode 100644 index 0000000..28c7c3a --- /dev/null +++ b/roles/npm/templates/docker-compose.yml.j2 @@ -0,0 +1,13 @@ +version: '3.8' +services: + npm: + image: jc21/nginx-proxy-manager:latest + container_name: npm + restart: unless-stopped + ports: + - "80:80" + - "443:443" + - "81:81" + volumes: + - {{ npm_data_dir }}:/data + - {{ npm_letsencrypt_dir }}:/etc/letsencrypt \ No newline at end of file