feat(pixelfed): add ansible role
This commit is contained in:
parent
1fe954197f
commit
dfb9433a54
40
roles/pixelfed/defaults/main.yml
Normal file
40
roles/pixelfed/defaults/main.yml
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
pixelfed_user: pixelfed
|
||||||
|
pixelfed_version: 0.11.2
|
||||||
|
pixelfed_base_path: /opt/pixelfed
|
||||||
|
|
||||||
|
pixelfed_deployment_method: docker_selfbuilt
|
||||||
|
|
||||||
|
# user to run pixelfed as
|
||||||
|
pixelfed_run_user: "{{ pixelfed_user_stat.uid | default(pixelfed_user) }}"
|
||||||
|
pixelfed_run_group: "{{ pixelfed_user_stat.group | default(pixelfed_user) }}"
|
||||||
|
|
||||||
|
# container settings
|
||||||
|
pixelfed_container_name: pixelfed
|
||||||
|
pixelfed_container_image_name: pixelfed
|
||||||
|
pixelfed_container_image_tag: ~
|
||||||
|
pixelfed_container_image: "{{ pixelfed_container_image_name }}:{{ pixelfed_container_image_tag | default('v' + pixelfed_version, True) }}"
|
||||||
|
pixelfed_container_image_local_build: true
|
||||||
|
pixelfed_container_ports: []
|
||||||
|
pixelfed_container_networks: []
|
||||||
|
pixelfed_container_extra_volumes: []
|
||||||
|
pixelfed_container_extra_labels: {}
|
||||||
|
pixelfed_container_extra_env: {}
|
||||||
|
pixelfed_container_restart_policy: unless-stopped
|
||||||
|
pixelfed_worker_container_name: "{{ pixelfed_container_name }}-worker"
|
||||||
|
|
||||||
|
# host filesystem paths
|
||||||
|
pixelfed_config_path: "{{ pixelfed_base_path }}/config"
|
||||||
|
pixelfed_storage_path: "{{ pixelfed_base_path }}/storage"
|
||||||
|
pixelfed_source_path: "{{ pixelfed_base_path }}/source"
|
||||||
|
|
||||||
|
pixelfed_app_paths:
|
||||||
|
- path: "{{ pixelfed_base_path }}"
|
||||||
|
mode: "0750"
|
||||||
|
- path: "{{ pixelfed_config_path }}"
|
||||||
|
mode: "0750"
|
||||||
|
- path: "{{ pixelfed_storage_path }}"
|
||||||
|
mode: "0750"
|
||||||
|
- path: "{{ pixelfed_source_path }}"
|
||||||
|
mode: "0750"
|
0
roles/pixelfed/handlers/main.yml
Normal file
0
roles/pixelfed/handlers/main.yml
Normal file
28
roles/pixelfed/tasks/docker-deploy.yml
Normal file
28
roles/pixelfed/tasks/docker-deploy.yml
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: Ensure docker container '{{ pixelfed_container_name }}' is running
|
||||||
|
docker_container:
|
||||||
|
name: "{{ pixelfed_container_name }}"
|
||||||
|
image: "{{ pixelfed_container_image }}"
|
||||||
|
env: "{{ pixelfed_container_env }}"
|
||||||
|
env_file: "{{ pixelfed_config_path }}/env"
|
||||||
|
labels: "{{ pixelfed_container_labels }}"
|
||||||
|
volumes: "{{ pixelfed_container_volumes }}"
|
||||||
|
ports: "{{ pixelfed_container_ports | default(omit, True) }}"
|
||||||
|
networks: "{{ pixelfed_container_networks | default(omit, True) }}"
|
||||||
|
purge_networks: "{{ pixelfed_container_purge_networks|default(False) }}"
|
||||||
|
restart_policy: "{{ pixelfed_container_restart_policy }}"
|
||||||
|
state: started
|
||||||
|
|
||||||
|
- name: Ensure docker container '{{ pixelfed_worker_container_name }}' is running
|
||||||
|
docker_container:
|
||||||
|
name: "{{ pixelfed_worker_container_name }}"
|
||||||
|
image: "{{ pixelfed_container_image }}"
|
||||||
|
env: "{{ pixelfed_container_env }}"
|
||||||
|
env_file: "{{ pixelfed_config_path }}/env"
|
||||||
|
volumes: "{{ pixelfed_container_volumes }}"
|
||||||
|
networks: "{{ pixelfed_container_networks | default(omit, True) }}"
|
||||||
|
purge_networks: "{{ pixelfed_container_purge_networks|default(False) }}"
|
||||||
|
restart_policy: "{{ pixelfed_container_restart_policy }}"
|
||||||
|
command: "gosu www-data php artisan horizon"
|
||||||
|
state: started
|
28
roles/pixelfed/tasks/docker-image.yml
Normal file
28
roles/pixelfed/tasks/docker-image.yml
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: Ensure docker container image is pulled
|
||||||
|
docker_image:
|
||||||
|
name: "{{ pixelfed_container_image }}"
|
||||||
|
state: present
|
||||||
|
source: pull
|
||||||
|
force_source: "{{ true if docker_container_image_tag else false }}"
|
||||||
|
when: not pixelfed_container_image_local_build
|
||||||
|
|
||||||
|
- name: Ensure upstream git repository is cloned to source folder
|
||||||
|
git:
|
||||||
|
repo: "{{ pixelfed_source_upstream_git_repo }}"
|
||||||
|
dest: "{{ pixelfed_source_path }}"
|
||||||
|
update: yes
|
||||||
|
clone: yes
|
||||||
|
when: pixelfed_container_image_local_build
|
||||||
|
|
||||||
|
- name: Build docker container image '{{ pixelfed_container_image }}' locally
|
||||||
|
docker_image:
|
||||||
|
name: "{{ pixelfed_container_image_name }}"
|
||||||
|
tag: "{{ pixelfed_container_image_tag | default('v' + pixelfed_version) }}"
|
||||||
|
state: present
|
||||||
|
source: build
|
||||||
|
build:
|
||||||
|
dockerfile: "contrib/docker/Dockerfile.apache"
|
||||||
|
path: "{{ pixelfed_source_path }}"
|
||||||
|
when: pixelfed_container_image_local_build
|
39
roles/pixelfed/tasks/main.yml
Normal file
39
roles/pixelfed/tasks/main.yml
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: Ensure user '{{ pixelfed_user }}' for pixelfed is created
|
||||||
|
user:
|
||||||
|
name: "{{ pixelfed_user }}"
|
||||||
|
state: present
|
||||||
|
system: true
|
||||||
|
register: pixelfed_user_stat
|
||||||
|
|
||||||
|
- name: Ensure file system paths exist for persisting data
|
||||||
|
file:
|
||||||
|
path: "{{ dir.path }}"
|
||||||
|
state: directory
|
||||||
|
owner: "{{ dir.user | default(pixelfed_run_user) }}"
|
||||||
|
group: "{{ dir.group | default(pixelfed_run_group) }}"
|
||||||
|
mode: "{{ dir.mode }}"
|
||||||
|
loop: "{{ pixelfed_app_paths }}"
|
||||||
|
loop_control:
|
||||||
|
loop_var: dir
|
||||||
|
label: "{{ dir.path }}"
|
||||||
|
|
||||||
|
- name: Ensure env file for pixelfed is templated
|
||||||
|
template:
|
||||||
|
src: env.docker.j2
|
||||||
|
dest: "{{ pixelfed_config_path }}/env"
|
||||||
|
owner: "{{ pixelfed_run_user }}"
|
||||||
|
group: "{{ pixelfed_run_group }}"
|
||||||
|
mode: "0640"
|
||||||
|
|
||||||
|
- name: Ensure docker container image is available
|
||||||
|
include_tasks:
|
||||||
|
file: docker-image.yml
|
||||||
|
when: 'docker' in pixelfed_deployment_method
|
||||||
|
|
||||||
|
- name: Ensure pixelfed instance is started
|
||||||
|
block:
|
||||||
|
- name: Ensure pixelfed instance is started (docker)
|
||||||
|
include_tasks:
|
||||||
|
file: docker-deploy.yml
|
148
roles/pixelfed/templates/env.docker.j2
Normal file
148
roles/pixelfed/templates/env.docker.j2
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
## Crypto
|
||||||
|
APP_KEY=
|
||||||
|
|
||||||
|
## General Settings
|
||||||
|
APP_NAME="Pixelfed Prod"
|
||||||
|
APP_ENV=production
|
||||||
|
APP_DEBUG=false
|
||||||
|
APP_URL=https://real.domain
|
||||||
|
APP_DOMAIN="real.domain"
|
||||||
|
ADMIN_DOMAIN="real.domain"
|
||||||
|
SESSION_DOMAIN="real.domain"
|
||||||
|
|
||||||
|
OPEN_REGISTRATION=true
|
||||||
|
ENFORCE_EMAIL_VERIFICATION=false
|
||||||
|
PF_MAX_USERS=1000
|
||||||
|
OAUTH_ENABLED=true
|
||||||
|
|
||||||
|
APP_TIMEZONE=UTC
|
||||||
|
APP_LOCALE=en
|
||||||
|
|
||||||
|
## Pixelfed Tweaks
|
||||||
|
LIMIT_ACCOUNT_SIZE=true
|
||||||
|
MAX_ACCOUNT_SIZE=1000000
|
||||||
|
MAX_PHOTO_SIZE=15000
|
||||||
|
MAX_AVATAR_SIZE=2000
|
||||||
|
MAX_CAPTION_LENGTH=500
|
||||||
|
MAX_BIO_LENGTH=125
|
||||||
|
MAX_NAME_LENGTH=30
|
||||||
|
MAX_ALBUM_LENGTH=4
|
||||||
|
IMAGE_QUALITY=80
|
||||||
|
PF_OPTIMIZE_IMAGES=true
|
||||||
|
PF_OPTIMIZE_VIDEOS=true
|
||||||
|
ADMIN_ENV_EDITOR=false
|
||||||
|
ACCOUNT_DELETION=true
|
||||||
|
ACCOUNT_DELETE_AFTER=false
|
||||||
|
MAX_LINKS_PER_POST=0
|
||||||
|
|
||||||
|
## Instance
|
||||||
|
#INSTANCE_DESCRIPTION=
|
||||||
|
INSTANCE_PUBLIC_HASHTAGS=false
|
||||||
|
#INSTANCE_CONTACT_EMAIL=
|
||||||
|
INSTANCE_PUBLIC_LOCAL_TIMELINE=false
|
||||||
|
#BANNED_USERNAMES=
|
||||||
|
STORIES_ENABLED=false
|
||||||
|
RESTRICTED_INSTANCE=false
|
||||||
|
|
||||||
|
## Mail
|
||||||
|
MAIL_DRIVER=log
|
||||||
|
MAIL_HOST=smtp.mailtrap.io
|
||||||
|
MAIL_PORT=2525
|
||||||
|
MAIL_FROM_ADDRESS="pixelfed@example.com"
|
||||||
|
MAIL_FROM_NAME="Pixelfed"
|
||||||
|
MAIL_USERNAME=null
|
||||||
|
MAIL_PASSWORD=null
|
||||||
|
MAIL_ENCRYPTION=null
|
||||||
|
|
||||||
|
## Databases (MySQL)
|
||||||
|
DB_CONNECTION=mysql
|
||||||
|
DB_DATABASE=pixelfed_prod
|
||||||
|
DB_HOST=db
|
||||||
|
DB_PASSWORD=pixelfed_db_pass
|
||||||
|
DB_PORT=3306
|
||||||
|
DB_USERNAME=pixelfed
|
||||||
|
# pass the same values to the db itself
|
||||||
|
MYSQL_DATABASE=pixelfed_prod
|
||||||
|
MYSQL_PASSWORD=pixelfed_db_pass
|
||||||
|
MYSQL_RANDOM_ROOT_PASSWORD=true
|
||||||
|
MYSQL_USER=pixelfed
|
||||||
|
|
||||||
|
## Databases (Postgres)
|
||||||
|
#DB_CONNECTION=pgsql
|
||||||
|
#DB_HOST=postgres
|
||||||
|
#DB_PORT=5432
|
||||||
|
#DB_DATABASE=pixelfed
|
||||||
|
#DB_USERNAME=postgres
|
||||||
|
#DB_PASSWORD=postgres
|
||||||
|
|
||||||
|
## Cache (Redis)
|
||||||
|
REDIS_CLIENT=phpredis
|
||||||
|
REDIS_SCHEME=tcp
|
||||||
|
REDIS_HOST=redis
|
||||||
|
REDIS_PASSWORD=redis_password
|
||||||
|
REDIS_PORT=6379
|
||||||
|
REDIS_DATABASE=0
|
||||||
|
|
||||||
|
## EXPERIMENTS
|
||||||
|
EXP_LC=false
|
||||||
|
EXP_REC=false
|
||||||
|
EXP_LOOPS=false
|
||||||
|
|
||||||
|
## ActivityPub Federation
|
||||||
|
ACTIVITY_PUB=false
|
||||||
|
AP_REMOTE_FOLLOW=false
|
||||||
|
AP_SHAREDINBOX=false
|
||||||
|
AP_INBOX=false
|
||||||
|
AP_OUTBOX=false
|
||||||
|
ATOM_FEEDS=true
|
||||||
|
NODEINFO=true
|
||||||
|
WEBFINGER=true
|
||||||
|
|
||||||
|
## S3
|
||||||
|
FILESYSTEM_DRIVER=local
|
||||||
|
FILESYSTEM_CLOUD=s3
|
||||||
|
PF_ENABLE_CLOUD=false
|
||||||
|
#AWS_ACCESS_KEY_ID=
|
||||||
|
#AWS_SECRET_ACCESS_KEY=
|
||||||
|
#AWS_DEFAULT_REGION=
|
||||||
|
#AWS_BUCKET=
|
||||||
|
#AWS_URL=
|
||||||
|
#AWS_ENDPOINT=
|
||||||
|
#AWS_USE_PATH_STYLE_ENDPOINT=false
|
||||||
|
|
||||||
|
## Horizon
|
||||||
|
HORIZON_DARKMODE=false
|
||||||
|
|
||||||
|
## COSTAR - Confirm Object Sentiment Transform and Reduce
|
||||||
|
PF_COSTAR_ENABLED=false
|
||||||
|
|
||||||
|
# Media
|
||||||
|
MEDIA_EXIF_DATABASE=false
|
||||||
|
|
||||||
|
## Logging
|
||||||
|
LOG_CHANNEL=stderr
|
||||||
|
|
||||||
|
## Image
|
||||||
|
IMAGE_DRIVER=imagick
|
||||||
|
|
||||||
|
## Broadcasting
|
||||||
|
BROADCAST_DRIVER=log # log driver for local development
|
||||||
|
|
||||||
|
## Cache
|
||||||
|
CACHE_DRIVER=redis
|
||||||
|
|
||||||
|
## Purify
|
||||||
|
RESTRICT_HTML_TYPES=true
|
||||||
|
|
||||||
|
## Queue
|
||||||
|
QUEUE_DRIVER=redis
|
||||||
|
|
||||||
|
## Session
|
||||||
|
SESSION_DRIVER=redis
|
||||||
|
|
||||||
|
## Trusted Proxy
|
||||||
|
TRUST_PROXIES="*"
|
||||||
|
|
||||||
|
## Passport
|
||||||
|
#PASSPORT_PRIVATE_KEY=
|
||||||
|
#PASSPORT_PUBLIC_KEY=
|
0
roles/pixelfed/templates/main.yml
Normal file
0
roles/pixelfed/templates/main.yml
Normal file
21
roles/pixelfed/vars/main.yml
Normal file
21
roles/pixelfed/vars/main.yml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
pixelfed_container_base_volumes:
|
||||||
|
- "{{ pixelfed_storage_path }}:/var/www/storage:z"
|
||||||
|
- "{{ pixelfed_config_path/env:/var/www/.env:ro"
|
||||||
|
|
||||||
|
pixelfed_container_base_env:
|
||||||
|
|
||||||
|
|
||||||
|
pixelfed_container_base_labels:
|
||||||
|
VERSION: "{{ pixelfed_version }}"
|
||||||
|
|
||||||
|
pixelfed_container_volumes: "{{ pixelfed_container_base_volumes + pixelfed_container_extra_volumes }}"
|
||||||
|
pixelfed_container_labels: "{{ pixelfed_container_base_labels + pixelfed_container_extra_labels }}"
|
||||||
|
pixelfed_container_env: "{{ pixelfed_container_base_env + pixelfed_container_extra_env }}"
|
||||||
|
|
||||||
|
pixelfed_source_upstream_git_repo: "https://github.com/pixelfed/pixelfed.git"
|
||||||
|
|
||||||
|
pixelfed_supported_deployment_methods:
|
||||||
|
- docker_selfbuilt
|
||||||
|
- docker_pulled
|
Loading…
Reference in New Issue
Block a user