summaryrefslogtreecommitdiffstats
path: root/ansible/lemmy_dev.yml
blob: e8556665389a9c9a5cb935e5e9bb5115b5f58d0d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
---
- hosts: all
  vars:
    lemmy_docker_image: 'lemmy:dev'

  # Install python if required
  # https://www.josharcher.uk/code/ansible-python-connection-failure-ubuntu-server-1604/
  gather_facts: False
  pre_tasks:
    - name: check lemmy_base_dir
      fail:
        msg: "`lemmy_base_dir` is unset. if you are upgrading from an older version, add `lemmy_base_dir=/lemmy` to your inventory file."
      when: lemmy_base_dir is not defined

    - name: install python for Ansible
      raw: test -e /usr/bin/python || (apt -y update && apt install -y python-minimal python-setuptools)
      args:
        executable: /bin/bash
      register: output
      changed_when: output.stdout != ''
    - setup: # gather facts

  tasks:
  - name: install dependencies
    apt:
      pkg:
        - 'nginx'
        - 'docker-compose'
        - 'docker.io'
        - 'certbot'
        - 'python-certbot-nginx'

  - name: request initial letsencrypt certificate
    command: certbot certonly --nginx --agree-tos -d '{{ domain }}' -m '{{ letsencrypt_contact_email }}'
    args:
      creates: '/etc/letsencrypt/live/{{domain}}/privkey.pem'

  - name: create lemmy folder
    file:
      path: '{{item.path}}'
      owner: '{{item.owner}}'
      state: directory
    with_items:
      - path: '{{lemmy_base_dir}}/lemmy/'
        owner: 'root'
      - path: '{{lemmy_base_dir}}/volumes/'
        owner: 'root'
      - path: '{{lemmy_base_dir}}/volumes/pictrs/'
        owner: '991'

  - block:
    - name:  add template files
      template:
        src: '{{item.src}}'
        dest: '{{item.dest}}'
        mode: '{{item.mode}}'
      with_items:
        - src: 'templates/docker-compose.yml'
          dest: '{{lemmy_base_dir}}/docker-compose.yml'
          mode: '0600'
        - src: 'templates/nginx.conf'
          dest: '/etc/nginx/sites-enabled/lemmy.conf'
          mode: '0644'
        - src: '../docker/iframely.config.local.js'
          dest: '{{lemmy_base_dir}}/iframely.config.local.js'
          mode: '0600'

    - name:  add config file (only during initial setup)
      template:
        src: 'templates/config.hjson'
        dest: '{{lemmy_base_dir}}/lemmy.hjson'
        mode: '0600'
        force: false
        owner: '1000'
        group: '1000'
      vars:
        postgres_password: "{{ lookup('password', 'passwords/{{ inventory_hostname }}/postgres chars=ascii_letters,digits') }}"
        jwt_password: "{{ lookup('password', 'passwords/{{ inventory_hostname }}/jwt chars=ascii_letters,digits') }}"

  - name: build the dev docker image
    local_action: shell cd .. && sudo docker build . -f docker/dev/Dockerfile -t lemmy:dev
    register: image_build

  - name: find hash of the new docker image
    set_fact:
      image_hash: "{{ image_build.stdout | regex_search('(?<=Successfully built )[0-9a-f]{12}') }}"

  # this does not use become so that the output file is written as non-root user and is easy to delete later
  - name: save dev docker image to file
    local_action: shell sudo docker save lemmy:dev > lemmy-dev.tar

  - name: copy dev docker image to server
    copy:
      src: lemmy-dev.tar
      dest: '{{lemmy_base_dir}}/lemmy-dev.tar'

  - name: import docker image
    docker_image:
      name: lemmy
      tag: dev
      load_path: '{{lemmy_base_dir}}/lemmy-dev.tar'
      source: load
      force_source: yes
    register: image_import

  - name: delete remote image file
    file:
      path: '{{lemmy_base_dir}}/lemmy-dev.tar'
      state: absent

  - name: delete local image file
    local_action:
      module: file
      path: lemmy-dev.tar
      state: absent

  - name: enable and start docker service
    systemd:
      name: docker
      enabled: yes
      state: started

  # cant pull here because that fails due to lemmy:dev (without dessalines/) not being on docker hub, but that shouldnt
  # be a problem for testing
  - name: start docker-compose
    docker_compose:
      project_src: '{{lemmy_base_dir}}'
      state: present
      recreate: always
      remove_orphans: yes
    ignore_errors: yes

  - name: reload nginx with new config
    shell: nginx -s reload

  - name: certbot renewal cronjob
    cron:
      special_time: daily
      name: certbot-renew-lemmy
      user: root
      job: "certbot certonly --nginx -d '{{ domain }}' --deploy-hook 'nginx -s reload'"