summaryrefslogtreecommitdiffstats
path: root/ansible/lemmy.yml
blob: 3520c4042934d9646167a50560ee79ebf29abcdd (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
---
- hosts: all

  # 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
      # python2-minimal instead of python-minimal for ubuntu 20.04 and up
      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'

  - name: install certbot-nginx on ubuntu < 20
    apt:
      pkg:
        - 'python-certbot-nginx'
    when: ansible_distribution == 'Ubuntu' and ansible_distribution_version is version('20.04', '<')

  - name: install certbot-nginx on ubuntu > 20
    apt:
      pkg:
        - 'python3-certbot-nginx'
    when: ansible_distribution == 'Ubuntu' and ansible_distribution_version is version('20.04', '>=')

  - 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}}'
        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'
      vars:
        lemmy_docker_image: "dessalines/lemmy:{{ lookup('file', 'VERSION') }}"
        lemmy_port: "8536"
        pictshare_port: "8537"
        iframely_port: "8538"

    - 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: enable and start docker service
    systemd:
      name: docker
      enabled: yes
      state: started

  - name: start docker-compose
    docker_compose:
      project_src: '{{lemmy_base_dir}}'
      state: present
      pull: yes
      remove_orphans: 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'"