mirror of
https://github.com/jcwimer/startup-infrastructure
synced 2026-03-24 22:34:42 +00:00
Used dos2unix to convert all files in repo to unix and set up Traefik service
This commit is contained in:
@@ -21,9 +21,9 @@
|
|||||||
|
|
||||||
- import_playbook: swarm.yml
|
- import_playbook: swarm.yml
|
||||||
|
|
||||||
# - name: Deploy startup-infrastructure swarm stack
|
- name: Deploy startup-infrastructure swarm stack
|
||||||
# hosts: bootstrap
|
hosts: bootstrap
|
||||||
# user: root
|
user: root
|
||||||
# serial: 100%
|
serial: 100%
|
||||||
# tasks:
|
tasks:
|
||||||
# - include: ../roles/startup-infrastructure/tasks/main.yml
|
- include: ../roles/startup-infrastructure/tasks/main.yml
|
||||||
@@ -1,6 +1,20 @@
|
|||||||
---
|
---
|
||||||
|
- name: Create appnet
|
||||||
|
shell: >
|
||||||
|
docker network ls | grep "appnet" ||
|
||||||
|
{
|
||||||
|
docker network create --driver overlay appnet
|
||||||
|
}
|
||||||
|
become: true
|
||||||
|
|
||||||
|
|
||||||
- name: Place the compose file
|
- name: Place the compose file
|
||||||
template: src=../roles/startup-infrastructure/templates/docker-compose.yml.j2 dest=/data/startup-infrastructure.yml
|
template:
|
||||||
|
src: ../roles/startup-infrastructure/templates/docker-compose.yml.j2
|
||||||
|
dest: /data/startup-infrastructure.yml
|
||||||
|
mode: 0600
|
||||||
|
become: true
|
||||||
|
|
||||||
- name: Run stack deploy
|
- name: Run stack deploy
|
||||||
shell: cd /data && docker stack deploy -c startup-infrastructure.yml startup-infrastructure
|
shell: cd /data && docker stack deploy -c startup-infrastructure.yml startup-infrastructure
|
||||||
|
become: true
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
version: '3.1'
|
version: '3.1'
|
||||||
networks:
|
networks:
|
||||||
appnet:
|
appnet:
|
||||||
|
external: true
|
||||||
wekan:
|
wekan:
|
||||||
driver: bridge
|
driver: bridge
|
||||||
|
|
||||||
@@ -14,166 +15,12 @@ services:
|
|||||||
networks:
|
networks:
|
||||||
- appnet
|
- appnet
|
||||||
volumes:
|
volumes:
|
||||||
- ./traefik.toml:/etc/traefik/traefik.toml
|
|
||||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
|
command: --docker --docker.swarmMode --docker.domain=traefik --docker.watch --api --ping
|
||||||
|
# --acme --acme.email='test@test.com' --acme.storage='acme.json' --acme.entrypoint='https'
|
||||||
deploy:
|
deploy:
|
||||||
mode: replicated
|
mode: replicated
|
||||||
replicas: 1
|
replicas: 1
|
||||||
placement:
|
placement:
|
||||||
constraints:
|
constraints:
|
||||||
- node.role == manager
|
- node.role == manager
|
||||||
|
|
||||||
portainer:
|
|
||||||
image: portainer/portainer
|
|
||||||
networks:
|
|
||||||
- appnet
|
|
||||||
volumes:
|
|
||||||
- portainer_data:/data
|
|
||||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
|
||||||
deploy:
|
|
||||||
labels:
|
|
||||||
- "traefik.frontend.entryPoints=http"
|
|
||||||
- "traefik.protocol=http"
|
|
||||||
- "traefik.backend=portainer"
|
|
||||||
- "traefik.port=9000"
|
|
||||||
- "traefik.docker.network=appnet"
|
|
||||||
- "traefik.frontend.rule=Host:portainer.{{ root_domain }}"
|
|
||||||
mode: replicated
|
|
||||||
replicas: 1
|
|
||||||
{% if {{ groups['workers'] | length }} > 0 %}
|
|
||||||
placement:
|
|
||||||
constraints:
|
|
||||||
- node.role == worker
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
bitwarden:
|
|
||||||
image: mprasil/bitwarden
|
|
||||||
networks:
|
|
||||||
- appnet
|
|
||||||
volumes:
|
|
||||||
- bitwarden_data:/data
|
|
||||||
deploy:
|
|
||||||
labels:
|
|
||||||
- "traefik.frontend.entryPoints=http"
|
|
||||||
- "traefik.protocol=http"
|
|
||||||
- "traefik.backend=bitwarden"
|
|
||||||
- "traefik.port=80"
|
|
||||||
- "traefik.docker.network=appnet"
|
|
||||||
- "traefik.frontend.rule=Host:bitwarden.{{ root_domain }}"
|
|
||||||
mode: replicated
|
|
||||||
replicas: 1
|
|
||||||
{% if {{ groups['workers'] | length }} > 0 %}
|
|
||||||
placement:
|
|
||||||
constraints:
|
|
||||||
- node.role == worker
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
gitea:
|
|
||||||
image: gitea/gitea:latest
|
|
||||||
environment:
|
|
||||||
- USER_UID=1000
|
|
||||||
- USER_GID=1000
|
|
||||||
networks:
|
|
||||||
- appnet
|
|
||||||
volumes:
|
|
||||||
- gitea_data:/data
|
|
||||||
ports:
|
|
||||||
- "2222:22"
|
|
||||||
deploy:
|
|
||||||
labels:
|
|
||||||
- "traefik.frontend.entryPoints=http"
|
|
||||||
- "traefik.protocol=http"
|
|
||||||
- "traefik.backend=git"
|
|
||||||
- "traefik.port=3000"
|
|
||||||
- "traefik.docker.network=appnet"
|
|
||||||
- "traefik.frontend.rule=Host:git.{{ root_domain }}"
|
|
||||||
mode: replicated
|
|
||||||
replicas: 1
|
|
||||||
{% if {{ groups['workers'] | length }} > 0 %}
|
|
||||||
placement:
|
|
||||||
constraints:
|
|
||||||
- node.role == worker
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
dokuwiki:
|
|
||||||
image: mprasil/dokuwiki
|
|
||||||
networks:
|
|
||||||
- appnet
|
|
||||||
volumes:
|
|
||||||
- dokuwiki_data:/dokuwiki
|
|
||||||
deploy:
|
|
||||||
labels:
|
|
||||||
- "traefik.frontend.entryPoints=http"
|
|
||||||
- "traefik.protocol=http"
|
|
||||||
- "traefik.backend=dokuwiki"
|
|
||||||
- "traefik.port=80"
|
|
||||||
- "traefik.docker.network=appnet"
|
|
||||||
- "traefik.frontend.rule=Host:dokuwiki.{{ root_domain }}"
|
|
||||||
mode: replicated
|
|
||||||
replicas: 1
|
|
||||||
{% if {{ groups['workers'] | length }} > 0 %}
|
|
||||||
placement:
|
|
||||||
constraints:
|
|
||||||
- node.role == worker
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
wekandb:
|
|
||||||
# All Wekan data is stored in MongoDB. For backup and restore, see:
|
|
||||||
# https://github.com/wekan/wekan/wiki/Export-Docker-Mongo-Data
|
|
||||||
image: mongo:3.2.21
|
|
||||||
command: mongod --smallfiles --oplogSize 128
|
|
||||||
networks:
|
|
||||||
- wekan
|
|
||||||
volumes:
|
|
||||||
- wekan-db:/data/db
|
|
||||||
- wekan-db-dump:/dump
|
|
||||||
deploy:
|
|
||||||
mode: replicated
|
|
||||||
replicas: 1
|
|
||||||
{% if {{ groups['workers'] | length }} > 0 %}
|
|
||||||
placement:
|
|
||||||
constraints:
|
|
||||||
- node.role == worker
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
wekan:
|
|
||||||
image: quay.io/wekan/wekan
|
|
||||||
networks:
|
|
||||||
- wekan
|
|
||||||
- appnet
|
|
||||||
environment:
|
|
||||||
- ROOT_URL=http://{{ root_domain }}
|
|
||||||
- MONGO_URL=mongodb://wekandb:27017/wekan
|
|
||||||
#- MAIL_URL=smtp://user:pass@mailserver.example.com:25/
|
|
||||||
#- MAIL_FROM='Example Wekan Support <support@example.com>'
|
|
||||||
- WITH_API=true
|
|
||||||
deploy:
|
|
||||||
labels:
|
|
||||||
- "traefik.frontend.entryPoints=http"
|
|
||||||
- "traefik.protocol=http"
|
|
||||||
- "traefik.backend=wekan"
|
|
||||||
- "traefik.port=8080"
|
|
||||||
- "traefik.docker.network=appnet"
|
|
||||||
- "traefik.frontend.rule=Host:wekan.{{ root_domain }}"
|
|
||||||
mode: replicated
|
|
||||||
replicas: 1
|
|
||||||
{% if {{ groups['workers'] | length }} > 0 %}
|
|
||||||
placement:
|
|
||||||
constraints:
|
|
||||||
- node.role == worker
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% set docker_volumes = ['portainer_data','bitwarden_data','gitea_data','dokuwiki_data','wekan-db','wekan-db-dump'] %}
|
|
||||||
volumes:
|
|
||||||
{% for volume in docker_volumes %}
|
|
||||||
{{ volume }}:
|
|
||||||
{% if storage_type == 'nfs' %}
|
|
||||||
driver: local
|
|
||||||
driver_opts:
|
|
||||||
type: nfs
|
|
||||||
o: "addr={{ nfs_address }},soft,nolock,rw"
|
|
||||||
device: ":{{ nfs_root_path }}/{{ volume }}"
|
|
||||||
{% elif storage_type == 'local' %}
|
|
||||||
driver: local
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
154
roles/startup-infrastructure/templates/old-code.yml
Normal file
154
roles/startup-infrastructure/templates/old-code.yml
Normal file
@@ -0,0 +1,154 @@
|
|||||||
|
portainer:
|
||||||
|
image: portainer/portainer
|
||||||
|
networks:
|
||||||
|
- appnet
|
||||||
|
volumes:
|
||||||
|
- portainer_data:/data
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
|
deploy:
|
||||||
|
labels:
|
||||||
|
- "traefik.frontend.entryPoints=http"
|
||||||
|
- "traefik.protocol=http"
|
||||||
|
- "traefik.backend=portainer"
|
||||||
|
- "traefik.port=9000"
|
||||||
|
- "traefik.docker.network=appnet"
|
||||||
|
- "traefik.frontend.rule=Host:portainer.{{ root_domain }}"
|
||||||
|
mode: replicated
|
||||||
|
replicas: 1
|
||||||
|
{% if {{ groups['workers'] | length }} > 0 %}
|
||||||
|
placement:
|
||||||
|
constraints:
|
||||||
|
- node.role == worker
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
bitwarden:
|
||||||
|
image: mprasil/bitwarden
|
||||||
|
networks:
|
||||||
|
- appnet
|
||||||
|
volumes:
|
||||||
|
- bitwarden_data:/data
|
||||||
|
deploy:
|
||||||
|
labels:
|
||||||
|
- "traefik.frontend.entryPoints=http"
|
||||||
|
- "traefik.protocol=http"
|
||||||
|
- "traefik.backend=bitwarden"
|
||||||
|
- "traefik.port=80"
|
||||||
|
- "traefik.docker.network=appnet"
|
||||||
|
- "traefik.frontend.rule=Host:bitwarden.{{ root_domain }}"
|
||||||
|
mode: replicated
|
||||||
|
replicas: 1
|
||||||
|
{% if {{ groups['workers'] | length }} > 0 %}
|
||||||
|
placement:
|
||||||
|
constraints:
|
||||||
|
- node.role == worker
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
gitea:
|
||||||
|
image: gitea/gitea:latest
|
||||||
|
environment:
|
||||||
|
- USER_UID=1000
|
||||||
|
- USER_GID=1000
|
||||||
|
networks:
|
||||||
|
- appnet
|
||||||
|
volumes:
|
||||||
|
- gitea_data:/data
|
||||||
|
ports:
|
||||||
|
- "2222:22"
|
||||||
|
deploy:
|
||||||
|
labels:
|
||||||
|
- "traefik.frontend.entryPoints=http"
|
||||||
|
- "traefik.protocol=http"
|
||||||
|
- "traefik.backend=git"
|
||||||
|
- "traefik.port=3000"
|
||||||
|
- "traefik.docker.network=appnet"
|
||||||
|
- "traefik.frontend.rule=Host:git.{{ root_domain }}"
|
||||||
|
mode: replicated
|
||||||
|
replicas: 1
|
||||||
|
{% if {{ groups['workers'] | length }} > 0 %}
|
||||||
|
placement:
|
||||||
|
constraints:
|
||||||
|
- node.role == worker
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
dokuwiki:
|
||||||
|
image: mprasil/dokuwiki
|
||||||
|
networks:
|
||||||
|
- appnet
|
||||||
|
volumes:
|
||||||
|
- dokuwiki_data:/dokuwiki
|
||||||
|
deploy:
|
||||||
|
labels:
|
||||||
|
- "traefik.frontend.entryPoints=http"
|
||||||
|
- "traefik.protocol=http"
|
||||||
|
- "traefik.backend=dokuwiki"
|
||||||
|
- "traefik.port=80"
|
||||||
|
- "traefik.docker.network=appnet"
|
||||||
|
- "traefik.frontend.rule=Host:dokuwiki.{{ root_domain }}"
|
||||||
|
mode: replicated
|
||||||
|
replicas: 1
|
||||||
|
{% if {{ groups['workers'] | length }} > 0 %}
|
||||||
|
placement:
|
||||||
|
constraints:
|
||||||
|
- node.role == worker
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
wekandb:
|
||||||
|
# All Wekan data is stored in MongoDB. For backup and restore, see:
|
||||||
|
# https://github.com/wekan/wekan/wiki/Export-Docker-Mongo-Data
|
||||||
|
image: mongo:3.2.21
|
||||||
|
command: mongod --smallfiles --oplogSize 128
|
||||||
|
networks:
|
||||||
|
- wekan
|
||||||
|
volumes:
|
||||||
|
- wekan-db:/data/db
|
||||||
|
- wekan-db-dump:/dump
|
||||||
|
deploy:
|
||||||
|
mode: replicated
|
||||||
|
replicas: 1
|
||||||
|
{% if {{ groups['workers'] | length }} > 0 %}
|
||||||
|
placement:
|
||||||
|
constraints:
|
||||||
|
- node.role == worker
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
wekan:
|
||||||
|
image: quay.io/wekan/wekan
|
||||||
|
networks:
|
||||||
|
- wekan
|
||||||
|
- appnet
|
||||||
|
environment:
|
||||||
|
- ROOT_URL=http://{{ root_domain }}
|
||||||
|
- MONGO_URL=mongodb://wekandb:27017/wekan
|
||||||
|
#- MAIL_URL=smtp://user:pass@mailserver.example.com:25/
|
||||||
|
#- MAIL_FROM='Example Wekan Support <support@example.com>'
|
||||||
|
- WITH_API=true
|
||||||
|
deploy:
|
||||||
|
labels:
|
||||||
|
- "traefik.frontend.entryPoints=http"
|
||||||
|
- "traefik.protocol=http"
|
||||||
|
- "traefik.backend=wekan"
|
||||||
|
- "traefik.port=8080"
|
||||||
|
- "traefik.docker.network=appnet"
|
||||||
|
- "traefik.frontend.rule=Host:wekan.{{ root_domain }}"
|
||||||
|
mode: replicated
|
||||||
|
replicas: 1
|
||||||
|
{% if {{ groups['workers'] | length }} > 0 %}
|
||||||
|
placement:
|
||||||
|
constraints:
|
||||||
|
- node.role == worker
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% set docker_volumes = ['portainer_data','bitwarden_data','gitea_data','dokuwiki_data','wekan-db','wekan-db-dump'] %}
|
||||||
|
volumes:
|
||||||
|
{% for volume in docker_volumes %}
|
||||||
|
{{ volume }}:
|
||||||
|
{% if storage_type == 'nfs' %}
|
||||||
|
driver: local
|
||||||
|
driver_opts:
|
||||||
|
type: nfs
|
||||||
|
o: "addr={{ nfs_address }},soft,nolock,rw"
|
||||||
|
device: ":{{ nfs_root_path }}/{{ volume }}"
|
||||||
|
{% elif storage_type == 'local' %}
|
||||||
|
driver: local
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
@@ -1,8 +1,12 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Putting test_rsa.pub into root and vagrant authorized keys
|
||||||
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDYa9zstumlg7XkKoNrJMlIN/zteqMA9J4GjuZA7r0xfMPrz4CglxzYKd/BhBpwp/HhU+vSR6vBa15kRODHdPZ+T1oXzMXAmMT3R2ZJRqF280Hsx9sK0X+FZWM84e4a1zQUrxuWyWJ4kKIiaX6DBAmhy8zHNvQ0c4Nk1exfwRicojaze71qrexSas4FHWaI4usC/g3mMKfiML/QX0UWW/G+D8qrg3cK3zClG916XlY/p1h9SWantqz75ea33TtmDNW6iCraKSjVeDGfzhshJsmQ7+/Rr/L4/s7hdpwTqdjSlJTIi61eBxcpDfMWBmsHOMZgnsTZ3wrdYXo70k44moA7 vagrant@test" >> /home/vagrant/.ssh/authorized_keys
|
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDYa9zstumlg7XkKoNrJMlIN/zteqMA9J4GjuZA7r0xfMPrz4CglxzYKd/BhBpwp/HhU+vSR6vBa15kRODHdPZ+T1oXzMXAmMT3R2ZJRqF280Hsx9sK0X+FZWM84e4a1zQUrxuWyWJ4kKIiaX6DBAmhy8zHNvQ0c4Nk1exfwRicojaze71qrexSas4FHWaI4usC/g3mMKfiML/QX0UWW/G+D8qrg3cK3zClG916XlY/p1h9SWantqz75ea33TtmDNW6iCraKSjVeDGfzhshJsmQ7+/Rr/L4/s7hdpwTqdjSlJTIi61eBxcpDfMWBmsHOMZgnsTZ3wrdYXo70k44moA7 vagrant@test" >> /home/vagrant/.ssh/authorized_keys
|
||||||
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDYa9zstumlg7XkKoNrJMlIN/zteqMA9J4GjuZA7r0xfMPrz4CglxzYKd/BhBpwp/HhU+vSR6vBa15kRODHdPZ+T1oXzMXAmMT3R2ZJRqF280Hsx9sK0X+FZWM84e4a1zQUrxuWyWJ4kKIiaX6DBAmhy8zHNvQ0c4Nk1exfwRicojaze71qrexSas4FHWaI4usC/g3mMKfiML/QX0UWW/G+D8qrg3cK3zClG916XlY/p1h9SWantqz75ea33TtmDNW6iCraKSjVeDGfzhshJsmQ7+/Rr/L4/s7hdpwTqdjSlJTIi61eBxcpDfMWBmsHOMZgnsTZ3wrdYXo70k44moA7 vagrant@test" >> /root/.ssh/authorized_keys
|
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDYa9zstumlg7XkKoNrJMlIN/zteqMA9J4GjuZA7r0xfMPrz4CglxzYKd/BhBpwp/HhU+vSR6vBa15kRODHdPZ+T1oXzMXAmMT3R2ZJRqF280Hsx9sK0X+FZWM84e4a1zQUrxuWyWJ4kKIiaX6DBAmhy8zHNvQ0c4Nk1exfwRicojaze71qrexSas4FHWaI4usC/g3mMKfiML/QX0UWW/G+D8qrg3cK3zClG916XlY/p1h9SWantqz75ea33TtmDNW6iCraKSjVeDGfzhshJsmQ7+/Rr/L4/s7hdpwTqdjSlJTIi61eBxcpDfMWBmsHOMZgnsTZ3wrdYXo70k44moA7 vagrant@test" >> /root/.ssh/authorized_keys
|
||||||
|
|
||||||
|
# Setting A record
|
||||||
|
echo "192.168.254.2 swarm.test.com" >> /etc/hosts
|
||||||
|
|
||||||
cp /vagrant/tests/files/test_rsa /home/vagrant/test_rsa
|
cp /vagrant/tests/files/test_rsa /home/vagrant/test_rsa
|
||||||
chmod 600 /home/vagrant/test_rsa
|
chmod 600 /home/vagrant/test_rsa
|
||||||
chown vagrant:vagrant /home/vagrant/test_rsa
|
chown vagrant:vagrant /home/vagrant/test_rsa
|
||||||
@@ -44,6 +44,9 @@ function run-tests {
|
|||||||
testbash "The swarm has a leader" \
|
testbash "The swarm has a leader" \
|
||||||
"test ${number_of_docker_leaders} -eq 1"
|
"test ${number_of_docker_leaders} -eq 1"
|
||||||
|
|
||||||
|
testbash "Traefik got deployed" \
|
||||||
|
"vagrant ssh client -c 'curl --silent http://swarm.test.com:8081/ping | grep OK > /dev/null'"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function destroy-infrastructure {
|
function destroy-infrastructure {
|
||||||
|
|||||||
Reference in New Issue
Block a user