aboutsummaryrefslogtreecommitdiff
path: root/roles/seafile_docker
diff options
context:
space:
mode:
authorKumar <kumar@kumardamani.xyz>2021-11-23 14:59:08 +0000
committerKumar Damani <me@kumardamani.net>2022-03-25 19:45:25 +0000
commita857eb82ec9c4a79ad5e41462e2ab82c2660982e (patch)
tree9ca51ddfb551322bd4d2fa3f949fa8898032632d /roles/seafile_docker
initial commit
Diffstat (limited to 'roles/seafile_docker')
-rw-r--r--roles/seafile_docker/defaults/main.yaml14
-rw-r--r--roles/seafile_docker/files/ccnet.conf2
-rw-r--r--roles/seafile_docker/files/seafdav.conf6
-rw-r--r--roles/seafile_docker/files/seafile.service14
-rw-r--r--roles/seafile_docker/files/seahub.service13
-rw-r--r--roles/seafile_docker/tasks/main.yaml49
-rw-r--r--roles/seafile_docker/templates/docker-compose.yaml.j261
7 files changed, 159 insertions, 0 deletions
diff --git a/roles/seafile_docker/defaults/main.yaml b/roles/seafile_docker/defaults/main.yaml
new file mode 100644
index 0000000..ed7cad3
--- /dev/null
+++ b/roles/seafile_docker/defaults/main.yaml
@@ -0,0 +1,14 @@
+# Default Values
+---
+
+seafile_image_repo: 'docker.seadrive.org'
+seafile_image_name: '{{ seafile_image_repo }}/seafileltd/seafile-pro-mc'
+seafile_image_tag: 'latest'
+seafile_image_user: 'seafile'
+seafile_image_password: ''
+seafile_data_root: '{{ data_vol_path }}/seafile'
+seafile_mysql_root_password: ''
+seafile_timezone: 'America/Toronto'
+seafile_admin_email: ''
+seafile_admin_password: ''
+seafile_listen_port: ''
diff --git a/roles/seafile_docker/files/ccnet.conf b/roles/seafile_docker/files/ccnet.conf
new file mode 100644
index 0000000..b1b35fd
--- /dev/null
+++ b/roles/seafile_docker/files/ccnet.conf
@@ -0,0 +1,2 @@
+[General]
+SERVICE_URL = http://{{ inventory_hostname }}/seafile
diff --git a/roles/seafile_docker/files/seafdav.conf b/roles/seafile_docker/files/seafdav.conf
new file mode 100644
index 0000000..8ce50cf
--- /dev/null
+++ b/roles/seafile_docker/files/seafdav.conf
@@ -0,0 +1,6 @@
+[WEBDAV]
+enabled = true
+port = 8080
+fastcgi = false
+host = 0.0.0.0
+share_name = /seafdav
diff --git a/roles/seafile_docker/files/seafile.service b/roles/seafile_docker/files/seafile.service
new file mode 100644
index 0000000..593ae64
--- /dev/null
+++ b/roles/seafile_docker/files/seafile.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=Seafile
+After=network.target
+
+[Service]
+Type=forking
+ExecStart=/opt/seafile/seafile-server-latest/seafile.sh start
+ExecStop=/opt/seafile/seafile-server-latest/seafile.sh stop
+LimitNOFILE=infinity
+User=seafserver
+Group=seafserver
+
+[Install]
+WantedBy=multi-user.target
diff --git a/roles/seafile_docker/files/seahub.service b/roles/seafile_docker/files/seahub.service
new file mode 100644
index 0000000..83afd48
--- /dev/null
+++ b/roles/seafile_docker/files/seahub.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Seahub
+After=network.target seafile.service
+
+[Service]
+Type=forking
+ExecStart=/opt/seafile/seafile-server-latest/seahub.sh start
+ExecStop=/opt/seafile/seafile-server-latest/seahub.sh stop
+User=seafserver
+Group=seafserver
+
+[Install]
+WantedBy=multi-user.target
diff --git a/roles/seafile_docker/tasks/main.yaml b/roles/seafile_docker/tasks/main.yaml
new file mode 100644
index 0000000..b40e2fc
--- /dev/null
+++ b/roles/seafile_docker/tasks/main.yaml
@@ -0,0 +1,49 @@
+# https://manual.seafile.com/docker/pro-edition/deploy_seafile_pro_with_docker/
+---
+
+- name: 'Ensure required vars exist'
+ assert:
+ that: item | mandatory
+ loop:
+ - '{{ data_vol_path }}'
+ - '{{ seafile_image_repo }}'
+ - '{{ seafile_image_name }}'
+ - '{{ seafile_image_tag }}'
+ - '{{ seafile_image_user }}'
+ - '{{ seafile_image_password }}'
+ - '{{ seafile_data_root }}'
+ - '{{ seafile_mysql_root_password }}'
+ - '{{ seafile_timezone }}'
+ - '{{ seafile_admin_email }}'
+ - '{{ seafile_admin_password }}'
+ - '{{ seafile_listen_port }}'
+ no_log: true
+
+- name: 'Log into DockerHub'
+ community.docker.docker_login:
+ registry_url: '{{ seafile_image_repo }}'
+ username: '{{ seafile_image_user }}'
+ password: '{{ seafile_image_password }}'
+
+- name: 'Pull Seafile Pro image'
+ community.docker.docker_image:
+ name: '{{ seafile_image_name }}'
+ tag: '{{ seafile_image_tag }}'
+ state: 'present'
+ source: 'pull'
+
+- name: 'Ensure Seafile data dir exists'
+ file:
+ path: '{{ seafile_data_root }}'
+ state: 'directory'
+ mode: '755'
+
+- name: 'Copy Seafile docker compose config to seafile dir'
+ template:
+ dest: '{{ seafile_data_root }}/docker-compose.yaml'
+ src: 'docker-compose.yaml.j2'
+ mode: '644'
+
+- name: 'Create and start services'
+ community.docker.docker_compose:
+ project_src: '{{ seafile_data_root }}'
diff --git a/roles/seafile_docker/templates/docker-compose.yaml.j2 b/roles/seafile_docker/templates/docker-compose.yaml.j2
new file mode 100644
index 0000000..3dd34b3
--- /dev/null
+++ b/roles/seafile_docker/templates/docker-compose.yaml.j2
@@ -0,0 +1,61 @@
+version: '2.0'
+services:
+ db:
+ image: mariadb:10.5
+ container_name: seafile-mysql
+ environment:
+ - MYSQL_ROOT_PASSWORD={{ seafile_mysql_root_password }}
+ - MYSQL_LOG_CONSOLE=true
+ volumes:
+ - {{ seafile_data_root }}/seafile-mysql/db:/var/lib/mysql
+ networks:
+ - seafile-net
+
+ memcached:
+ image: memcached:1.5.6
+ container_name: seafile-memcached
+ entrypoint: memcached -m 256
+ networks:
+ - seafile-net
+
+ elasticsearch:
+ image: seafileltd/elasticsearch-with-ik:5.6.16
+ container_name: seafile-elasticsearch
+ environment:
+ - discovery.type=single-node
+ - bootstrap.memory_lock=true
+ - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
+ ulimits:
+ memlock:
+ soft: -1
+ hard: -1
+ mem_limit: 2g
+ volumes:
+ - {{ seafile_data_root }}/seafile-elasticsearch/data:/usr/share/elasticsearch/data
+ networks:
+ - seafile-net
+
+ seafile:
+ image: {{ seafile_image_name }}:{{ seafile_image_tag }}
+ container_name: seafile
+ ports:
+ - "{{ seafile_listen_port }}:80"
+ volumes:
+ - {{ seafile_data_root }}/seafile-data:/shared
+ environment:
+ - DB_HOST=db
+ - DB_ROOT_PASSWD={{ seafile_mysql_root_password }}
+ - TIME_ZONE={{ seafile_timezone }}
+ - SEAFILE_ADMIN_EMAIL={{ seafile_admin_email }}
+ - SEAFILE_ADMIN_PASSWORD={{ seafile_admin_password }}
+ - SEAFILE_SERVER_LETSENCRYPT=false
+ #- SEAFILE_SERVER_HOSTNAME=example.seafile.com # Specifies your host name if https is enabled
+ depends_on:
+ - db
+ - memcached
+ - elasticsearch
+ networks:
+ - seafile-net
+
+networks:
+ seafile-net: