add role files
Signed-off-by: Jakub Sokołowski <jakub@status.im>
This commit is contained in:
parent
1a7ca9c909
commit
6971bc1010
|
@ -0,0 +1,15 @@
|
||||||
|
# Description
|
||||||
|
|
||||||
|
This role configures Status [Open Bounty](https://github.com/status-im/open-bounty) service which sets bounties for GitHub issues and pais out Eth rewards.
|
||||||
|
|
||||||
|
# Usage
|
||||||
|
|
||||||
|
Made available at domain configured the `sob_domain` variable.
|
||||||
|
Currently only two installations exist:
|
||||||
|
|
||||||
|
* https://openbounty.status.im/ - `sob-test` host group.
|
||||||
|
* https://test-openbounty.status.im/ - `sob-prod` host group.
|
||||||
|
|
||||||
|
# Configuration
|
||||||
|
|
||||||
|
Configured via `host_vars`, for example configuration see [`ansible/group_vars/sob-test.yml`](/ansible/group_vars/sob-test.yml).
|
|
@ -0,0 +1,30 @@
|
||||||
|
---
|
||||||
|
sob_domain: 'test-openbounty.status.im'
|
||||||
|
# for multiple stages
|
||||||
|
sob_branch: 'deploy-test'
|
||||||
|
# if anable dummy data will be loaded into the database
|
||||||
|
sob_testing: false
|
||||||
|
|
||||||
|
cont_image: 'statusteam/openbounty-app:{{ sob_branch }}'
|
||||||
|
cont_name: 'openbounty'
|
||||||
|
cont_vol: '/docker/{{ cont_name }}'
|
||||||
|
cont_port: 3000
|
||||||
|
|
||||||
|
cont_state: started
|
||||||
|
cont_recreate: false
|
||||||
|
cont_restart: false
|
||||||
|
|
||||||
|
# PostgreSQL database for SOB
|
||||||
|
db_cont_image: 'postgres:9.6-alpine'
|
||||||
|
db_cont_name: '{{ cont_name }}-db'
|
||||||
|
db_cont_port: 5432
|
||||||
|
db_cont_uid: 70
|
||||||
|
db_host_uid: '{{ 100000 + db_cont_uid - 1 }}'
|
||||||
|
db_cont_vol: '/docker/{{ db_cont_name }}'
|
||||||
|
db_backup_dir: '/var/tmp/backups/sob'
|
||||||
|
sob_backup_script_dir: '/var/lib/backups'
|
||||||
|
sob_backup_script: '{{ sob_backup_script_dir }}/sob_db_backup.sh'
|
||||||
|
|
||||||
|
dba_cont_image: 'adminer:4.6.3-standalone'
|
||||||
|
dba_cont_name: '{{ cont_name }}-db-admin'
|
||||||
|
dba_cont_port: 8080
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
- name: Save iptables rules
|
||||||
|
shell: iptables-save > /etc/iptables/rules.v4
|
||||||
|
|
||||||
|
- name: Restart nginx
|
||||||
|
service: name=nginx state=restarted
|
|
@ -0,0 +1,43 @@
|
||||||
|
---
|
||||||
|
- name: Create directory for backup script
|
||||||
|
file:
|
||||||
|
path: '{{ item }}'
|
||||||
|
state: directory
|
||||||
|
group: adm
|
||||||
|
mode: 0775
|
||||||
|
with_items:
|
||||||
|
- '{{ sob_backup_script_dir }}'
|
||||||
|
- '{{ db_backup_dir }}'
|
||||||
|
|
||||||
|
- name: Create PostgreSQL dump script
|
||||||
|
copy:
|
||||||
|
dest: '{{ sob_backup_script }}'
|
||||||
|
content: |
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
TSTAMP=$(date -u +%Y%m%d%H%M%S)
|
||||||
|
/usr/bin/docker exec -i {{ db_cont_name }} \
|
||||||
|
pg_dump -U {{ sob_db_user }} {{ sob_db_name }} \
|
||||||
|
> {{ db_backup_dir }}/{{ cont_name }}_dump_${TSTAMP}.sql
|
||||||
|
group: adm
|
||||||
|
mode: 0750
|
||||||
|
|
||||||
|
- name: Configure PostgreSQL dump cron kob
|
||||||
|
cron:
|
||||||
|
name: PostgreSQL DB Dump
|
||||||
|
minute: 0
|
||||||
|
hour: 4
|
||||||
|
user: root
|
||||||
|
job: '{{ sob_backup_script }}'
|
||||||
|
|
||||||
|
- name: Configure Discourse backups
|
||||||
|
include_role:
|
||||||
|
name: s3cmd-backup
|
||||||
|
vars:
|
||||||
|
backup_name: sob
|
||||||
|
backup_hour: 5
|
||||||
|
backup_directory: '/var/tmp/backups/sob'
|
||||||
|
backup_base_domain: ams3.digitaloceanspaces.com
|
||||||
|
backup_bucket_name: 's3://sob-backups'
|
||||||
|
backup_encryption_pass: '{{lookup("passwordstore", "services/openbounty/backup-pass")}}'
|
||||||
|
backup_access_key: '{{lookup("passwordstore", "cloud/DigitalOcean/spaces/sob-backups.key")}}'
|
||||||
|
backup_secret_key: '{{lookup("passwordstore", "cloud/DigitalOcean/spaces/sob-backups.secret")}}'
|
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
- name: Create Consul service definition
|
||||||
|
include_role: name=consul-service
|
||||||
|
vars:
|
||||||
|
consul_config_name: '{{ cont_name }}'
|
||||||
|
consul_services:
|
||||||
|
- name: '{{ cont_name }}'
|
||||||
|
tags: ['logging']
|
||||||
|
# we advertise the port with basic auth
|
||||||
|
port: '{{ cont_port }}'
|
||||||
|
checks:
|
||||||
|
- id: openbounty-status
|
||||||
|
name: Kibana Healthcheck
|
||||||
|
type: http
|
||||||
|
http: 'http://localhost:{{ cont_port }}/api/top-hunters'
|
|
@ -0,0 +1,48 @@
|
||||||
|
---
|
||||||
|
- name: Create directory for config files
|
||||||
|
file:
|
||||||
|
path: '{{ item }}'
|
||||||
|
state: directory
|
||||||
|
owner: dockremap
|
||||||
|
group: docker
|
||||||
|
recurse: true
|
||||||
|
with_items:
|
||||||
|
- '{{ cont_vol }}/conf'
|
||||||
|
- '{{ cont_vol }}/wallet'
|
||||||
|
|
||||||
|
- name: Generate OpenBounty configuration
|
||||||
|
template:
|
||||||
|
src: config.edn.j2
|
||||||
|
dest: '{{ cont_vol }}/conf/config.edn'
|
||||||
|
owner: dockremap
|
||||||
|
group: docker
|
||||||
|
mode: 0640
|
||||||
|
register: config
|
||||||
|
|
||||||
|
- name: Create container for OpenBounty
|
||||||
|
docker_container:
|
||||||
|
name: '{{ cont_name }}'
|
||||||
|
image: '{{ cont_image }}'
|
||||||
|
pull: true
|
||||||
|
restart_policy: always
|
||||||
|
state: '{{ cont_state }}'
|
||||||
|
recreate: '{{ cont_recreate }}'
|
||||||
|
restart: '{{ config.changed | default(cont_restart) }}'
|
||||||
|
entrypoint: '/usr/bin/java'
|
||||||
|
# enable automatic container updates
|
||||||
|
labels:
|
||||||
|
com.centurylinklabs.watchtower.enable: 'true'
|
||||||
|
command: |
|
||||||
|
-Duser.timezone=UTC
|
||||||
|
-Dconf=/root/config.edn
|
||||||
|
-jar /root/commiteth.jar
|
||||||
|
links:
|
||||||
|
- '{{ db_cont_name }}:database'
|
||||||
|
ports:
|
||||||
|
- '{{ cont_port }}:{{ cont_port }}'
|
||||||
|
env:
|
||||||
|
server_address: 'https://{{ sob_domain }}'
|
||||||
|
jdbc-database-url: '{{ sob_jdbc_url }}'
|
||||||
|
volumes:
|
||||||
|
- '{{ cont_vol }}/conf/config.edn:/root/config.edn'
|
||||||
|
- '{{ cont_vol }}/wallet/default:/root/ethereum-wallet'
|
|
@ -0,0 +1,54 @@
|
||||||
|
---
|
||||||
|
- name: Create directory for DB data
|
||||||
|
file:
|
||||||
|
path: '{{ item }}'
|
||||||
|
state: directory
|
||||||
|
owner: '{{ db_host_uid }}'
|
||||||
|
group: docker
|
||||||
|
recurse: true
|
||||||
|
with_items:
|
||||||
|
- '{{ db_cont_vol }}/data'
|
||||||
|
- '{{ db_cont_vol }}/backups'
|
||||||
|
|
||||||
|
- name: Start PostgreSQL container
|
||||||
|
docker_container:
|
||||||
|
name: '{{ db_cont_name }}'
|
||||||
|
image: '{{ db_cont_image }}'
|
||||||
|
pull: true
|
||||||
|
restart_policy: always
|
||||||
|
state: '{{ cont_state }}'
|
||||||
|
recreate: '{{ cont_recreate }}'
|
||||||
|
restart: '{{ cont_restart }}'
|
||||||
|
env:
|
||||||
|
POSTGRES_DB: '{{ sob_db_name }}'
|
||||||
|
POSTGRES_USER: '{{ sob_db_user }}'
|
||||||
|
POSTGRES_PASSWORD: '{{ sob_db_pass }}'
|
||||||
|
ports:
|
||||||
|
- '0.0.0.0:{{ db_cont_port }}:{{ db_cont_port }}'
|
||||||
|
volumes:
|
||||||
|
- '{{ db_cont_vol }}/data:/var/lib/postgresql'
|
||||||
|
- '{{ db_cont_vol }}/backups:/var/tmp/backups'
|
||||||
|
|
||||||
|
- name: Start PostgreSQL Adminer container
|
||||||
|
docker_container:
|
||||||
|
name: '{{ dba_cont_name }}'
|
||||||
|
image: '{{ dba_cont_image }}'
|
||||||
|
pull: true
|
||||||
|
restart_policy: always
|
||||||
|
state: '{{ cont_state }}'
|
||||||
|
recreate: '{{ cont_recreate }}'
|
||||||
|
restart: '{{ cont_restart }}'
|
||||||
|
ports:
|
||||||
|
- '0.0.0.0:{{ dba_cont_port }}:{{ dba_cont_port }}'
|
||||||
|
links:
|
||||||
|
- '{{ db_cont_name }}:db'
|
||||||
|
|
||||||
|
- name: Copy over Dummy DB SQL
|
||||||
|
copy:
|
||||||
|
src: openbounty_test_data.sql
|
||||||
|
dest: '/var/tmp/'
|
||||||
|
when: sob_testing
|
||||||
|
|
||||||
|
- name: Import dummy data into PostgreSQL
|
||||||
|
shell: cat /var/tmp/openbounty_test_data.sql | docker exec -i {{ db_cont_name }} psql -U {{ sob_db_user }}
|
||||||
|
when: sob_testing
|
|
@ -0,0 +1,26 @@
|
||||||
|
---
|
||||||
|
- name: Enable OpenBounty HTTP & HTTPS ports
|
||||||
|
iptables:
|
||||||
|
comment: OpenBounty
|
||||||
|
chain: INPUT
|
||||||
|
jump: ACCEPT
|
||||||
|
source: '0.0.0.0/0'
|
||||||
|
protocol: 'tcp'
|
||||||
|
destination_port: '{{ item }}'
|
||||||
|
with_items:
|
||||||
|
- 80
|
||||||
|
- 443
|
||||||
|
notify:
|
||||||
|
- Save iptables rules
|
||||||
|
|
||||||
|
- name: Enable Postgres Admin UI ports
|
||||||
|
iptables:
|
||||||
|
comment: Postgres ADM
|
||||||
|
action: insert
|
||||||
|
chain: DOCKER-USER
|
||||||
|
jump: ACCEPT
|
||||||
|
source: '0.0.0.0/0'
|
||||||
|
protocol: 'tcp'
|
||||||
|
destination_port: 8080
|
||||||
|
notify:
|
||||||
|
- Save iptables rules
|
|
@ -0,0 +1,8 @@
|
||||||
|
---
|
||||||
|
- import_tasks: database.yml
|
||||||
|
- import_tasks: container.yml
|
||||||
|
- import_tasks: consul.yml
|
||||||
|
- import_tasks: firewall.yml
|
||||||
|
- import_tasks: proxy.yml
|
||||||
|
- import_tasks: backup.yml
|
||||||
|
when: not sob_testing
|
|
@ -0,0 +1,13 @@
|
||||||
|
---
|
||||||
|
- name: Install Nginx
|
||||||
|
apt:
|
||||||
|
package: nginx
|
||||||
|
|
||||||
|
- name: Generate OpenBounty Nginx proxy
|
||||||
|
template:
|
||||||
|
src: nginx_proxy.conf.j2
|
||||||
|
dest: '/etc/nginx/sites-enabled/openbounty_proxy.conf'
|
||||||
|
mode: 0644
|
||||||
|
notify:
|
||||||
|
- Restart nginx
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
; WARNING: This file is generated by an Ansible role:
|
||||||
|
; https://github.com/status-im/infra-misc/tree/master/ansible/roles/open-bounty
|
||||||
|
{
|
||||||
|
{% for key, value in sob_settings.items() %}
|
||||||
|
{% if value is string and value.startswith(':') %}
|
||||||
|
:{{ '%-22s'|format(key) }} {{ value }}
|
||||||
|
{% else %}
|
||||||
|
:{{ '%-22s'|format(key) }} {{ value | to_json }}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
:token-blacklist #{
|
||||||
|
{% for token in sob_token_blacklist %}
|
||||||
|
:{{ token }}
|
||||||
|
{% endfor %}
|
||||||
|
}
|
||||||
|
:user-whitelist #{
|
||||||
|
{% for user in sob_users_whitelist %}
|
||||||
|
"{{ user }}"
|
||||||
|
{% endfor %}
|
||||||
|
}
|
||||||
|
:testnet-token-data {
|
||||||
|
{% for token_data in sob_testnet_token_data %}
|
||||||
|
{{ token_data }}
|
||||||
|
{% endfor %}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name {{ sob_domain }};
|
||||||
|
return 301 https://$server_name$request_uri;
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 443 ssl;
|
||||||
|
|
||||||
|
server_name {{ sob_domain }};
|
||||||
|
|
||||||
|
ssl_certificate /certs/origin.crt;
|
||||||
|
ssl_certificate_key /certs/origin.key;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://127.0.0.1:{{ cont_port }}/;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue