mirror of
https://github.com/pixelfed/pixelfed.git
synced 2024-11-23 06:51:27 +00:00
migration docs
This commit is contained in:
parent
72b454143b
commit
de96c5f06d
10 changed files with 627 additions and 157 deletions
360
.env.docker
360
.env.docker
|
@ -1,60 +1,24 @@
|
||||||
# shellcheck disable=SC2034,SC2148
|
|
||||||
|
|
||||||
# -*- mode: bash -*-
|
# -*- mode: bash -*-
|
||||||
# vi: ft=bash
|
# vi: ft=bash
|
||||||
|
|
||||||
###############################################################
|
# shellcheck disable=SC2034,SC2148
|
||||||
# Docker-wide configuration
|
|
||||||
###############################################################
|
|
||||||
|
|
||||||
# Path (relative to the docker-compose.yml) or absolute (/some/other/path) file where containers will store their data
|
################################################################################
|
||||||
DOCKER_DATA_ROOT="./docker-compose/data"
|
|
||||||
|
|
||||||
# Path (relative to the docker-compose.yml) or absolute (/some/other/path) file where containers will store their confguration
|
|
||||||
DOCKER_CONFIG_ROOT="./docker-compose/config"
|
|
||||||
|
|
||||||
# Image to pull the Pixelfed Docker images from
|
|
||||||
#
|
|
||||||
# Possible values:
|
|
||||||
# - "ghcr.io/pixelfed/pixelfed" to pull from GitHub
|
|
||||||
# - "pixelfed/pixelfed" to pull from DockerHub
|
|
||||||
#
|
|
||||||
DOCKER_IMAGE="ghcr.io/jippi/pixelfed"
|
|
||||||
|
|
||||||
# Pixelfed version (image tag) to pull from the registry.
|
|
||||||
#
|
|
||||||
# See: https://github.com/pixelfed/pixelfed/pkgs/container/pixelfed
|
|
||||||
DOCKER_TAG="branch-jippi-fork-apache-8.1"
|
|
||||||
|
|
||||||
# Set timezone used by *all* containers - these should be in sync.
|
|
||||||
#
|
|
||||||
# See: https://www.php.net/manual/en/timezones.php
|
|
||||||
TZ="UTC"
|
|
||||||
|
|
||||||
# Automatically run "One-time setup tasks" commands.
|
|
||||||
#
|
|
||||||
# If you are migrating to this docker-compose setup or have manually run the "One time seutp"
|
|
||||||
# tasks (https://docs.pixelfed.org/running-pixelfed/installation/#setting-up-services)
|
|
||||||
# you can set this to "0" to prevent them from running.
|
|
||||||
#
|
|
||||||
# Otherwise, leave it at "1" to have them run *once*.
|
|
||||||
DOCKER_RUN_ONE_TIME_SETUP_TASKS="1"
|
|
||||||
|
|
||||||
# The e-mail to use for Lets Encrypt certificate requests.
|
|
||||||
LETSENCRYPT_EMAIL="__CHANGE_ME__"
|
|
||||||
|
|
||||||
# Lets Encrypt staging/test servers for certificate requests.
|
|
||||||
#
|
|
||||||
# Setting this to any value will change to letsencrypt test servers.
|
|
||||||
#LETSENCRYPT_TEST="1"
|
|
||||||
|
|
||||||
# Enable Docker Entrypoint debug mode (will call [set -x] in bash scripts)
|
|
||||||
# by setting this to "1".
|
|
||||||
#ENTRYPOINT_DEBUG="0"
|
|
||||||
|
|
||||||
###############################################################
|
|
||||||
# Pixelfed application configuration
|
# Pixelfed application configuration
|
||||||
###############################################################
|
################################################################################
|
||||||
|
|
||||||
|
# The docker tag prefix to use for pulling images, can be one of
|
||||||
|
#
|
||||||
|
# * latest
|
||||||
|
# * <some semver release>
|
||||||
|
# * staging
|
||||||
|
# * edge
|
||||||
|
# * branch-<some branch name>
|
||||||
|
# * pr-<some merge request id>
|
||||||
|
#
|
||||||
|
# Combined with [DOCKER_RUNTIME] and [PHP_VERSION] configured
|
||||||
|
# elsewhere in this file, the final Docker tag is computed.
|
||||||
|
PIXELFED_RELEASE="branch-jippi-fork"
|
||||||
|
|
||||||
# A random 32-character string to be used as an encryption key.
|
# A random 32-character string to be used as an encryption key.
|
||||||
#
|
#
|
||||||
|
@ -80,7 +44,7 @@ APP_DOMAIN="__CHANGE_ME__"
|
||||||
# You should set this to the root of your application so that it is used when running Artisan tasks.
|
# You should set this to the root of your application so that it is used when running Artisan tasks.
|
||||||
#
|
#
|
||||||
# See: https://docs.pixelfed.org/technical-documentation/config/#app_url
|
# See: https://docs.pixelfed.org/technical-documentation/config/#app_url
|
||||||
APP_URL=https://${APP_DOMAIN}
|
APP_URL="https://${APP_DOMAIN}"
|
||||||
|
|
||||||
# Application domains used for routing.
|
# Application domains used for routing.
|
||||||
#
|
#
|
||||||
|
@ -104,7 +68,7 @@ ADMIN_DOMAIN="${APP_DOMAIN}"
|
||||||
# Enable/disable new local account registrations.
|
# Enable/disable new local account registrations.
|
||||||
#
|
#
|
||||||
# See: https://docs.pixelfed.org/technical-documentation/config/#open_registration
|
# See: https://docs.pixelfed.org/technical-documentation/config/#open_registration
|
||||||
#OPEN_REGISTRATION=true
|
#OPEN_REGISTRATION="true"
|
||||||
|
|
||||||
# Require email verification before a new user can do anything.
|
# Require email verification before a new user can do anything.
|
||||||
#
|
#
|
||||||
|
@ -130,11 +94,11 @@ OAUTH_ENABLED="true"
|
||||||
|
|
||||||
# Defaults to "UTC".
|
# Defaults to "UTC".
|
||||||
#
|
#
|
||||||
# Do not edit your timezone or things will break!
|
# ! Do not edit your timezone once the service is running - or things will break!
|
||||||
#
|
#
|
||||||
# See: https://docs.pixelfed.org/technical-documentation/config/#app_timezone
|
# See: https://docs.pixelfed.org/technical-documentation/config/#app_timezone
|
||||||
# See: https://www.php.net/manual/en/timezones.php
|
# See: https://www.php.net/manual/en/timezones.php
|
||||||
APP_TIMEZONE="${TZ}"
|
APP_TIMEZONE="UTC"
|
||||||
|
|
||||||
# The application locale determines the default locale that will be used by the translation service provider.
|
# The application locale determines the default locale that will be used by the translation service provider.
|
||||||
# You are free to set this value to any of the locales which will be supported by the application.
|
# You are free to set this value to any of the locales which will be supported by the application.
|
||||||
|
@ -277,11 +241,27 @@ INSTANCE_CONTACT_EMAIL="admin@${APP_DOMAIN}"
|
||||||
# See: https://docs.pixelfed.org/technical-documentation/config/#restricted_instance
|
# See: https://docs.pixelfed.org/technical-documentation/config/#restricted_instance
|
||||||
#RESTRICTED_INSTANCE="false"
|
#RESTRICTED_INSTANCE="false"
|
||||||
|
|
||||||
###############################################################
|
################################################################################
|
||||||
# Database configuration
|
# Lets Encrypt configuration
|
||||||
###############################################################
|
################################################################################
|
||||||
|
|
||||||
# Here you may specify which of the database connections below you wish to use as your default connection for all database work.
|
# The host to request LetsEncrypt certificate for
|
||||||
|
LETSENCRYPT_HOST="${APP_DOMAIN}"
|
||||||
|
|
||||||
|
# The e-mail to use for Lets Encrypt certificate requests.
|
||||||
|
LETSENCRYPT_EMAIL="__CHANGE_ME__"
|
||||||
|
|
||||||
|
# Lets Encrypt staging/test servers for certificate requests.
|
||||||
|
#
|
||||||
|
# Setting this to any value will change to letsencrypt test servers.
|
||||||
|
#LETSENCRYPT_TEST="1"
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Database configuration
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# Here you may specify which of the database connections below
|
||||||
|
# you wish to use as your default connection for all database work.
|
||||||
#
|
#
|
||||||
# Of course you may use many connections at once using the database library.
|
# Of course you may use many connections at once using the database library.
|
||||||
#
|
#
|
||||||
|
@ -313,11 +293,11 @@ DB_DATABASE="pixelfed_prod"
|
||||||
DB_PORT="3306"
|
DB_PORT="3306"
|
||||||
|
|
||||||
# Automatically run [artisan migrate --force] if new migrations are detected.
|
# Automatically run [artisan migrate --force] if new migrations are detected.
|
||||||
DB_APPLY_NEW_MIGRATIONS_AUTOMATICALLY="0"
|
DB_APPLY_NEW_MIGRATIONS_AUTOMATICALLY="false"
|
||||||
|
|
||||||
###############################################################
|
################################################################################
|
||||||
# Mail configuration
|
# Mail configuration
|
||||||
###############################################################
|
################################################################################
|
||||||
|
|
||||||
# Laravel supports both SMTP and PHP’s “mail” function as drivers for the sending of e-mail.
|
# Laravel supports both SMTP and PHP’s “mail” function as drivers for the sending of e-mail.
|
||||||
# You may specify which one you’re using throughout your application here.
|
# You may specify which one you’re using throughout your application here.
|
||||||
|
@ -392,9 +372,9 @@ MAIL_FROM_NAME="Pixelfed @ ${APP_DOMAIN}"
|
||||||
# See: https://docs.pixelfed.org/technical-documentation/config/#mail_encryption
|
# See: https://docs.pixelfed.org/technical-documentation/config/#mail_encryption
|
||||||
#MAIL_ENCRYPTION="tls"
|
#MAIL_ENCRYPTION="tls"
|
||||||
|
|
||||||
###############################################################
|
################################################################################
|
||||||
# Redis configuration
|
# Redis configuration
|
||||||
###############################################################
|
################################################################################
|
||||||
|
|
||||||
# Defaults to "phpredis".
|
# Defaults to "phpredis".
|
||||||
#
|
#
|
||||||
|
@ -419,16 +399,16 @@ REDIS_HOST="redis"
|
||||||
# Defaults to 6379.
|
# Defaults to 6379.
|
||||||
#
|
#
|
||||||
# See: https://docs.pixelfed.org/technical-documentation/config/#redis_port
|
# See: https://docs.pixelfed.org/technical-documentation/config/#redis_port
|
||||||
REDIS_PORT="6379"
|
#REDIS_PORT="6379"
|
||||||
|
|
||||||
# Defaults to 0.
|
# Defaults to 0.
|
||||||
#
|
#
|
||||||
# See: https://docs.pixelfed.org/technical-documentation/config/#redis_database
|
# See: https://docs.pixelfed.org/technical-documentation/config/#redis_database
|
||||||
#REDIS_DATABASE="0"
|
#REDIS_DATABASE="0"
|
||||||
|
|
||||||
###############################################################
|
################################################################################
|
||||||
# Cache settings
|
# Cache settings
|
||||||
###############################################################
|
################################################################################
|
||||||
|
|
||||||
# This option controls the default cache connection that gets used while using this caching library.
|
# This option controls the default cache connection that gets used while using this caching library.
|
||||||
#
|
#
|
||||||
|
@ -448,11 +428,11 @@ CACHE_DRIVER="redis"
|
||||||
# Defaults to ${APP_NAME}_cache, or laravel_cache if no APP_NAME is set.
|
# Defaults to ${APP_NAME}_cache, or laravel_cache if no APP_NAME is set.
|
||||||
#
|
#
|
||||||
# See: https://docs.pixelfed.org/technical-documentation/config/#cache_prefix
|
# See: https://docs.pixelfed.org/technical-documentation/config/#cache_prefix
|
||||||
# CACHE_PREFIX="{APP_NAME}_cache"
|
#CACHE_PREFIX="{APP_NAME}_cache"
|
||||||
|
|
||||||
###############################################################
|
################################################################################
|
||||||
# Horizon settings
|
# Horizon settings
|
||||||
###############################################################
|
################################################################################
|
||||||
|
|
||||||
# This prefix will be used when storing all Horizon data in Redis.
|
# This prefix will be used when storing all Horizon data in Redis.
|
||||||
#
|
#
|
||||||
|
@ -498,9 +478,9 @@ CACHE_DRIVER="redis"
|
||||||
# See: https://docs.pixelfed.org/technical-documentation/config/#horizon_supervisor_timeout
|
# See: https://docs.pixelfed.org/technical-documentation/config/#horizon_supervisor_timeout
|
||||||
#HORIZON_SUPERVISOR_TIMEOUT="300"
|
#HORIZON_SUPERVISOR_TIMEOUT="300"
|
||||||
|
|
||||||
###############################################################
|
################################################################################
|
||||||
# Experiments
|
# Experiments
|
||||||
###############################################################
|
################################################################################
|
||||||
|
|
||||||
# Text only posts (alpha).
|
# Text only posts (alpha).
|
||||||
#
|
#
|
||||||
|
@ -523,16 +503,16 @@ CACHE_DRIVER="redis"
|
||||||
# See: https://docs.pixelfed.org/technical-documentation/config/#exp_cpt
|
# See: https://docs.pixelfed.org/technical-documentation/config/#exp_cpt
|
||||||
#EXP_CPT="false"
|
#EXP_CPT="false"
|
||||||
|
|
||||||
# Enforce Mastoapi Compatibility (alpha).
|
# Enforce Mastodon API Compatibility (alpha).
|
||||||
#
|
#
|
||||||
# Defaults to "true".
|
# Defaults to "true".
|
||||||
#
|
#
|
||||||
# See: https://docs.pixelfed.org/technical-documentation/config/#exp_emc
|
# See: https://docs.pixelfed.org/technical-documentation/config/#exp_emc
|
||||||
EXP_EMC="true"
|
#EXP_EMC="true"
|
||||||
|
|
||||||
###############################################################
|
################################################################################
|
||||||
# ActivityPub confguration
|
# ActivityPub confguration
|
||||||
###############################################################
|
################################################################################
|
||||||
|
|
||||||
# Defaults to "false".
|
# Defaults to "false".
|
||||||
#
|
#
|
||||||
|
@ -559,9 +539,9 @@ ACTIVITY_PUB="true"
|
||||||
# See: https://docs.pixelfed.org/technical-documentation/config/#ap_outbox
|
# See: https://docs.pixelfed.org/technical-documentation/config/#ap_outbox
|
||||||
#AP_OUTBOX="true"
|
#AP_OUTBOX="true"
|
||||||
|
|
||||||
###############################################################
|
################################################################################
|
||||||
# Federation confguration
|
# Federation confguration
|
||||||
###############################################################
|
################################################################################
|
||||||
|
|
||||||
# Defaults to "true".
|
# Defaults to "true".
|
||||||
#
|
#
|
||||||
|
@ -578,9 +558,9 @@ ACTIVITY_PUB="true"
|
||||||
# See: https://docs.pixelfed.org/technical-documentation/config/#webfinger
|
# See: https://docs.pixelfed.org/technical-documentation/config/#webfinger
|
||||||
#WEBFINGER="true"
|
#WEBFINGER="true"
|
||||||
|
|
||||||
###############################################################
|
################################################################################
|
||||||
# Storage (cloud)
|
# Storage (cloud)
|
||||||
###############################################################
|
################################################################################
|
||||||
|
|
||||||
# Store media on object storage like S3, Digital Ocean Spaces, Rackspace
|
# Store media on object storage like S3, Digital Ocean Spaces, Rackspace
|
||||||
#
|
#
|
||||||
|
@ -604,9 +584,9 @@ ACTIVITY_PUB="true"
|
||||||
# See: https://docs.pixelfed.org/technical-documentation/config/#media_delete_local_after_cloud
|
# See: https://docs.pixelfed.org/technical-documentation/config/#media_delete_local_after_cloud
|
||||||
#MEDIA_DELETE_LOCAL_AFTER_CLOUD="true"
|
#MEDIA_DELETE_LOCAL_AFTER_CLOUD="true"
|
||||||
|
|
||||||
###############################################################
|
################################################################################
|
||||||
# Storage (cloud) - S3 andS S3 *compatible* providers (most of them)
|
# Storage (cloud) - S3 andS S3 *compatible* providers (most of them)
|
||||||
###############################################################
|
################################################################################
|
||||||
|
|
||||||
# See: https://docs.pixelfed.org/technical-documentation/config/#aws_access_key_id
|
# See: https://docs.pixelfed.org/technical-documentation/config/#aws_access_key_id
|
||||||
#AWS_ACCESS_KEY_ID=
|
#AWS_ACCESS_KEY_ID=
|
||||||
|
@ -765,10 +745,10 @@ LOG_CHANNEL="stderr"
|
||||||
BROADCAST_DRIVER="redis"
|
BROADCAST_DRIVER="redis"
|
||||||
|
|
||||||
###############################################################
|
###############################################################
|
||||||
# Other settings
|
# Sanitizing settings
|
||||||
###############################################################
|
###############################################################
|
||||||
|
|
||||||
# Defaults to true.
|
# Defaults to "true".
|
||||||
#
|
#
|
||||||
# See: https://docs.pixelfed.org/technical-documentation/config/#restrict_html_types
|
# See: https://docs.pixelfed.org/technical-documentation/config/#restrict_html_types
|
||||||
#RESTRICT_HTML_TYPES="true"
|
#RESTRICT_HTML_TYPES="true"
|
||||||
|
@ -898,52 +878,122 @@ TRUST_PROXIES="*"
|
||||||
# PHP configuration
|
# PHP configuration
|
||||||
###############################################################
|
###############################################################
|
||||||
|
|
||||||
|
# The PHP version to use for [web] and [worker] container
|
||||||
|
#
|
||||||
|
# Any version published on https://hub.docker.com/_/php should work
|
||||||
|
#
|
||||||
|
# Example:
|
||||||
|
#
|
||||||
|
# * 8.1
|
||||||
|
# * 8.2
|
||||||
|
# * 8.2.14
|
||||||
|
# * latest
|
||||||
|
#
|
||||||
|
# Do *NOT* use the full Docker tag (e.g. "8.3.2RC1-fpm-bullseye")
|
||||||
|
# *only* the version part. The rest of the full tag is derived from
|
||||||
|
# the [DOCKER_RUNTIME] and [PHP_DEBIAN_RELEASE] settings
|
||||||
|
PHP_VERSION="8.1"
|
||||||
|
|
||||||
# See: https://www.php.net/manual/en/ini.core.php#ini.memory-limit
|
# See: https://www.php.net/manual/en/ini.core.php#ini.memory-limit
|
||||||
#PHP_MEMORY_LIMIT="128M"
|
#PHP_MEMORY_LIMIT="128M"
|
||||||
|
|
||||||
###############################################################
|
# The Debian release variant to use of the [php] Docker image
|
||||||
# MySQL DB container configuration (DO NOT CHANGE)
|
#PHP_DEBIAN_RELEASE="bullseye"
|
||||||
###############################################################
|
|
||||||
|
# The [php] Docker image base type
|
||||||
#
|
#
|
||||||
# See "Environment Variables" at https://hub.docker.com/_/mysql
|
# See: https://github.com/pixelfed/pixelfed/blob/dev/docker/runtimes.md
|
||||||
|
#PHP_BASE_TYPE="apache"
|
||||||
|
|
||||||
MYSQL_ROOT_PASSWORD="${DB_PASSWORD}"
|
# List of extra APT packages (separated by space) to install when building
|
||||||
MYSQL_USER="${DB_USERNAME}"
|
# locally using [docker compose build].
|
||||||
MYSQL_PASSWORD="${DB_PASSWORD}"
|
|
||||||
MYSQL_DATABASE="${DB_DATABASE}"
|
|
||||||
|
|
||||||
###############################################################
|
|
||||||
# MySQL (MariaDB) DB container configuration (DO NOT CHANGE)
|
|
||||||
###############################################################
|
|
||||||
#
|
#
|
||||||
# See "Start a mariadb server instance with user, password and database" at https://hub.docker.com/_/mariadb
|
# See: https://github.com/pixelfed/pixelfed/blob/dev/docker/customizing.md
|
||||||
|
#APT_PACKAGES_EXTRA=""
|
||||||
|
|
||||||
MARIADB_ROOT_PASSWORD="${DB_PASSWORD}"
|
# List of *extra* PECL extensions (separated by space) to install when
|
||||||
MARIADB_USER="${DB_USERNAME}"
|
# building locally using [docker compose build].
|
||||||
MARIADB_PASSWORD="${DB_PASSWORD}"
|
|
||||||
MARIADB_DATABASE="${DB_DATABASE}"
|
|
||||||
|
|
||||||
###############################################################
|
|
||||||
# PostgreSQL DB container configuration (DO NOT CHANGE)
|
|
||||||
###############################################################
|
|
||||||
#
|
#
|
||||||
# See "Environment Variables" at https://hub.docker.com/_/postgres
|
# See: https://github.com/pixelfed/pixelfed/blob/dev/docker/customizing.md
|
||||||
|
#PHP_PECL_EXTENSIONS_EXTRA=""
|
||||||
|
|
||||||
POSTGRES_USER="${DB_USERNAME}"
|
# List of *extra* PHP extensions (separated by space) to install when
|
||||||
POSTGRES_PASSWORD="${DB_PASSWORD}"
|
# building locally using [docker compose build].
|
||||||
POSTGRES_DB="${DB_DATABASE}"
|
#
|
||||||
|
# See: https://github.com/pixelfed/pixelfed/blob/dev/docker/customizing.md
|
||||||
|
#PHP_EXTENSIONS_EXTRA=""
|
||||||
|
|
||||||
###############################################################
|
################################################################################
|
||||||
# Lets Encrypt configuration
|
# Other configuration
|
||||||
###############################################################
|
################################################################################
|
||||||
|
|
||||||
LETSENCRYPT_HOST="${APP_DOMAIN}"
|
# ? Add your own configuration here
|
||||||
|
|
||||||
###############################################################
|
################################################################################
|
||||||
|
# Timezone configuration
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# Set timezone used by *all* containers - these must be in sync.
|
||||||
|
#
|
||||||
|
# ! Do not edit your timezone once the service is running - or things will break!
|
||||||
|
#
|
||||||
|
# See: https://www.php.net/manual/en/timezones.php
|
||||||
|
TZ="${APP_TIMEZONE}"
|
||||||
|
|
||||||
|
################################################################################
|
||||||
# Docker Specific configuration
|
# Docker Specific configuration
|
||||||
###############################################################
|
################################################################################
|
||||||
|
|
||||||
|
# Image to pull the Pixelfed Docker images from.
|
||||||
|
#
|
||||||
|
# Example values:
|
||||||
|
#
|
||||||
|
# * "ghcr.io/pixelfed/pixelfed" to pull from GitHub
|
||||||
|
# * "pixelfed/pixelfed" to pull from DockerHub
|
||||||
|
# * "your/fork" to pull from a custom fork
|
||||||
|
#
|
||||||
|
DOCKER_IMAGE="ghcr.io/jippi/pixelfed"
|
||||||
|
|
||||||
|
# The container runtime to use.
|
||||||
|
#
|
||||||
|
# See: https://github.com/jippi/pixelfed/blob/jippi-fork/docker/runtimes.md
|
||||||
|
DOCKER_RUNTIME="apache"
|
||||||
|
|
||||||
|
# Pixelfed version (image tag) to pull from the registry.
|
||||||
|
#
|
||||||
|
# See: https://github.com/pixelfed/pixelfed/pkgs/container/pixelfed
|
||||||
|
DOCKER_TAG="${PIXELFED_RELEASE}-${DOCKER_RUNTIME}-${PHP_VERSION}"
|
||||||
|
|
||||||
|
# Path (relative to the docker-compose.yml) or absolute (/some/other/path) where containers will store their data
|
||||||
|
DOCKER_DATA_ROOT="./docker-compose-state/data"
|
||||||
|
|
||||||
|
# Path (relative to the docker-compose.yml) or absolute (/some/other/path) where containers will store their confguration
|
||||||
|
DOCKER_CONFIG_ROOT="./docker-compose-state/config"
|
||||||
|
|
||||||
|
# Path (on host system) where the [db] container will store its data
|
||||||
|
#
|
||||||
|
# Path is relative (./some/other/path) to the docker-compose.yml or absolute (/some/other/path)
|
||||||
|
DOCKER_DB_DATA_PATH="${DOCKER_DATA_ROOT}/db"
|
||||||
|
|
||||||
|
# Path (on host system) where the [redis] container will store its data
|
||||||
|
#
|
||||||
|
# Path is relative (./some/other/path) to the docker-compose.yml or absolute (/some/other/path)
|
||||||
|
DOCKER_REDIS_DATA_PATH="${DOCKER_DATA_ROOT}/redis"
|
||||||
|
|
||||||
|
# Path (on host system) where the [app] + [worker] container will write
|
||||||
|
# its [storage] data (e.g uploads/images/profile pictures etc.).
|
||||||
|
#
|
||||||
|
# Path is relative (./some/other/path) to the docker-compose.yml or absolute (/some/other/path)
|
||||||
|
DOCKER_APP_STORAGE_PATH="${DOCKER_DATA_ROOT}/pixelfed/storage"
|
||||||
|
|
||||||
|
# Path (on host system) where the [app] + [worker] container will write
|
||||||
|
# its [cache] data.
|
||||||
|
#
|
||||||
|
# Path is relative (./some/other/path) to the docker-compose.yml or absolute (/some/other/path)
|
||||||
|
DOCKER_APP_CACHE_PATH="${DOCKER_DATA_ROOT}/pixelfed/cache"
|
||||||
|
|
||||||
# Port that Redis will listen on *outside* the container (e.g. the host machine)
|
# Port that Redis will listen on *outside* the container (e.g. the host machine)
|
||||||
DOCKER_REDIS_PORT_EXTERNAL="${REDIS_PORT}"
|
DOCKER_REDIS_PORT_EXTERNAL="${REDIS_PORT:-6379}"
|
||||||
|
|
||||||
# Port that the database will listen on *outside* the container (e.g. the host machine)
|
# Port that the database will listen on *outside* the container (e.g. the host machine)
|
||||||
#
|
#
|
||||||
|
@ -971,30 +1021,64 @@ DOCKER_PROXY_PROFILE=""
|
||||||
# Set this to a non-empty value (e.g. "disabled") to disable the [proxy-acme] service
|
# Set this to a non-empty value (e.g. "disabled") to disable the [proxy-acme] service
|
||||||
DOCKER_PROXY_ACME_PROFILE="${DOCKER_PROXY_PROFILE}"
|
DOCKER_PROXY_ACME_PROFILE="${DOCKER_PROXY_PROFILE}"
|
||||||
|
|
||||||
# Path (relative to the docker-compose.yml) or absolute (/some/other/path) where containers will store their data
|
# Automatically run "One-time setup tasks" commands.
|
||||||
DOCKER_DATA_ROOT="./docker-compose-state/data"
|
|
||||||
|
|
||||||
# Path (relative to the docker-compose.yml) or absolute (/some/other/path) where containers will store their confguration
|
|
||||||
DOCKER_CONFIG_ROOT="./docker-compose-state/config"
|
|
||||||
|
|
||||||
# Path (on host system) where the [db] container will store its data
|
|
||||||
#
|
#
|
||||||
# Path is relative (./some/other/path) to the docker-compose.yml or absolute (/some/other/path)
|
# If you are migrating to this docker-compose setup or have manually run the "One time seutp"
|
||||||
DB_DATA_PATH="${DOCKER_DATA_ROOT}/db"
|
# tasks (https://docs.pixelfed.org/running-pixelfed/installation/#setting-up-services)
|
||||||
|
# you can set this to "0" to prevent them from running.
|
||||||
# Path (on host system) where the [redis] container will store its data
|
|
||||||
#
|
#
|
||||||
# Path is relative (./some/other/path) to the docker-compose.yml or absolute (/some/other/path)
|
# Otherwise, leave it at "1" to have them run *once*.
|
||||||
REDIS_DATA_PATH="${DOCKER_DATA_ROOT}/redis"
|
#DOCKER_RUN_ONE_TIME_SETUP_TASKS="1"
|
||||||
|
|
||||||
# Path (on host system) where the [app] + [worker] container will write
|
# A space-seperated list of paths (inside the container) to *recursively* [chown]
|
||||||
# its [storage] data (e.g uploads/images/profile pictures etc.).
|
# to the container user/group id (UID/GID) in case of permission issues.
|
||||||
#
|
#
|
||||||
# Path is relative (./some/other/path) to the docker-compose.yml or absolute (/some/other/path)
|
# ! You should *not* leave this on permanently, at it can significantly slow down startup
|
||||||
APP_STORAGE_PATH="${DOCKER_DATA_ROOT}/pixelfed/storage"
|
# ! time for the container, and during normal operations there should never be permission
|
||||||
|
# ! issues. Please report a bug if you see behavior requiring this to be permanently on
|
||||||
|
#
|
||||||
|
# Example: "/var/www/storage /var/www/bootstrap/cache"
|
||||||
|
#DOCKER_ENSURE_OWNERSHIP_PATHS=""
|
||||||
|
|
||||||
# Path (on host system) where the [app] + [worker] container will write
|
# Enable Docker Entrypoint debug mode (will call [set -x] in bash scripts)
|
||||||
# its [cache] data.
|
# by setting this to "1".
|
||||||
|
#ENTRYPOINT_DEBUG="0"
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# MySQL DB container configuration
|
||||||
|
################################################################################
|
||||||
#
|
#
|
||||||
# Path is relative (./some/other/path) to the docker-compose.yml or absolute (/some/other/path)
|
# See "Environment Variables" at https://hub.docker.com/_/mysql
|
||||||
APP_CACHE_PATH="${DOCKER_DATA_ROOT}/pixelfed/cache"
|
#
|
||||||
|
# ! DO NOT CHANGE unless you know what you are doing
|
||||||
|
|
||||||
|
MYSQL_ROOT_PASSWORD="${DB_PASSWORD}"
|
||||||
|
MYSQL_USER="${DB_USERNAME}"
|
||||||
|
MYSQL_PASSWORD="${DB_PASSWORD}"
|
||||||
|
MYSQL_DATABASE="${DB_DATABASE}"
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# MySQL (MariaDB) DB container configuration
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# See "Start a mariadb server instance with user, password and database"
|
||||||
|
# at https://hub.docker.com/_/mariadb
|
||||||
|
#
|
||||||
|
# ! DO NOT CHANGE unless you know what you are doing
|
||||||
|
|
||||||
|
MARIADB_ROOT_PASSWORD="${DB_PASSWORD}"
|
||||||
|
MARIADB_USER="${DB_USERNAME}"
|
||||||
|
MARIADB_PASSWORD="${DB_PASSWORD}"
|
||||||
|
MARIADB_DATABASE="${DB_DATABASE}"
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# PostgreSQL DB container configuration
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# See "Environment Variables" at https://hub.docker.com/_/postgres
|
||||||
|
#
|
||||||
|
# ! DO NOT CHANGE unless you know what you are doing
|
||||||
|
|
||||||
|
POSTGRES_USER="${DB_USERNAME}"
|
||||||
|
POSTGRES_PASSWORD="${DB_PASSWORD}"
|
||||||
|
POSTGRES_DB="${DB_DATABASE}"
|
||||||
|
|
4
.markdownlint.json
Normal file
4
.markdownlint.json
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"MD013": false,
|
||||||
|
"MD014": false
|
||||||
|
}
|
|
@ -37,7 +37,7 @@ ARG RUNTIME_UID=33 # often called 'www-data'
|
||||||
ARG RUNTIME_GID=33 # often called 'www-data'
|
ARG RUNTIME_GID=33 # often called 'www-data'
|
||||||
|
|
||||||
# APT extra packages
|
# APT extra packages
|
||||||
ARG APT_PACKAGES_EXTRA=""
|
ARG APT_PACKAGES_EXTRA=
|
||||||
|
|
||||||
# Extensions installed via [pecl install]
|
# Extensions installed via [pecl install]
|
||||||
ARG PHP_PECL_EXTENSIONS=
|
ARG PHP_PECL_EXTENSIONS=
|
||||||
|
|
42
docker-compose.migrate.yml
Normal file
42
docker-compose.migrate.yml
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
---
|
||||||
|
version: "3"
|
||||||
|
|
||||||
|
services:
|
||||||
|
migrate:
|
||||||
|
image: "secoresearch/rsync"
|
||||||
|
entrypoint: ""
|
||||||
|
working_dir: /migrate
|
||||||
|
command: 'bash -c "exit 1"'
|
||||||
|
restart: never
|
||||||
|
volumes:
|
||||||
|
################################
|
||||||
|
# Storage volume
|
||||||
|
################################
|
||||||
|
# OLD
|
||||||
|
- "app-storage:/migrate/app-storage/old"
|
||||||
|
# NEW
|
||||||
|
- "${DOCKER_APP_STORAGE_PATH}:/migrate/app-storage/new"
|
||||||
|
|
||||||
|
################################
|
||||||
|
# MySQL/DB volume
|
||||||
|
################################
|
||||||
|
# OLD
|
||||||
|
- "db-data:/migrate/db-data/old"
|
||||||
|
# NEW
|
||||||
|
- "${DOCKER_DB_DATA_PATH}:/migrate/db-data/new"
|
||||||
|
|
||||||
|
################################
|
||||||
|
# Redis volume
|
||||||
|
################################
|
||||||
|
# OLD
|
||||||
|
- "redis-data:/migrate/redis-data/old"
|
||||||
|
# NEW
|
||||||
|
- "${DOCKER_REDIS_DATA_PATH}:/migrate/redis-data/new"
|
||||||
|
|
||||||
|
# Volumes from the old [docker-compose.yml] file
|
||||||
|
# https://github.com/pixelfed/pixelfed/blob/b1ff44ca2f75c088a11576fb03b5bad2fbed4d5c/docker-compose.yml#L72-L76
|
||||||
|
volumes:
|
||||||
|
db-data:
|
||||||
|
redis-data:
|
||||||
|
app-storage:
|
||||||
|
app-bootstrap:
|
|
@ -65,15 +65,22 @@ services:
|
||||||
container_name: "${DOCKER_CONTAINER_NAME_PREFIX}-web"
|
container_name: "${DOCKER_CONTAINER_NAME_PREFIX}-web"
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
build:
|
build:
|
||||||
target: apache-runtime
|
target: ${DOCKER_RUNTIME}-runtime
|
||||||
|
args:
|
||||||
|
PHP_VERSION: "${PHP_VERSION:-8.1}"
|
||||||
|
PHP_BASE_TYPE: "${PHP_BASE_TYPE:-apache}"
|
||||||
|
PHP_DEBIAN_RELEASE: "${PHP_DEBIAN_RELEASE:-bullseye}"
|
||||||
|
APT_PACKAGES_EXTRA: "${APT_PACKAGES_EXTRA:-}"
|
||||||
|
PHP_PECL_EXTENSIONS_EXTRA: "${PHP_PECL_EXTENSIONS_EXTRA:-}"
|
||||||
|
PHP_EXTENSIONS_EXTRA: "${PHP_EXTENSIONS_EXTRA:-}"
|
||||||
volumes:
|
volumes:
|
||||||
- "./.env:/var/www/.env"
|
- "./.env:/var/www/.env"
|
||||||
- "${APP_CACHE_PATH}:/var/www/bootstrap/cache"
|
- "${DOCKER_APP_CACHE_PATH}:/var/www/bootstrap/cache"
|
||||||
- "${APP_STORAGE_PATH}:/var/www/storage"
|
- "${DOCKER_APP_STORAGE_PATH}:/var/www/storage"
|
||||||
environment:
|
environment:
|
||||||
LETSENCRYPT_HOST: "${LETSENCRYPT_HOST}"
|
LETSENCRYPT_HOST: "${LETSENCRYPT_HOST}"
|
||||||
LETSENCRYPT_EMAIL: "${LETSENCRYPT_EMAIL}"
|
LETSENCRYPT_EMAIL: "${LETSENCRYPT_EMAIL}"
|
||||||
LETSENCRYPT_TEST: "${LETSENCRYPT_TEST}"
|
LETSENCRYPT_TEST: "${LETSENCRYPT_TEST:-}"
|
||||||
VIRTUAL_HOST: "${APP_DOMAIN}"
|
VIRTUAL_HOST: "${APP_DOMAIN}"
|
||||||
VIRTUAL_PORT: "80"
|
VIRTUAL_PORT: "80"
|
||||||
labels:
|
labels:
|
||||||
|
@ -91,15 +98,19 @@ services:
|
||||||
container_name: "${DOCKER_CONTAINER_NAME_PREFIX}-worker"
|
container_name: "${DOCKER_CONTAINER_NAME_PREFIX}-worker"
|
||||||
command: gosu www-data php artisan horizon
|
command: gosu www-data php artisan horizon
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
deploy:
|
|
||||||
mode: replicated
|
|
||||||
replicas: 1
|
|
||||||
build:
|
build:
|
||||||
target: apache-runtime
|
target: ${DOCKER_RUNTIME}-runtime
|
||||||
|
args:
|
||||||
|
PHP_VERSION: "${PHP_VERSION:-8.1}"
|
||||||
|
PHP_BASE_TYPE: "${PHP_BASE_TYPE:-apache}"
|
||||||
|
PHP_DEBIAN_RELEASE: "${PHP_DEBIAN_RELEASE:-bullseye}"
|
||||||
|
APT_PACKAGES_EXTRA: "${APT_PACKAGES_EXTRA:-}"
|
||||||
|
PHP_PECL_EXTENSIONS_EXTRA: "${PHP_PECL_EXTENSIONS_EXTRA:-}"
|
||||||
|
PHP_EXTENSIONS_EXTRA: "${PHP_EXTENSIONS_EXTRA:-}"
|
||||||
volumes:
|
volumes:
|
||||||
- "./.env:/var/www/.env"
|
- "./.env:/var/www/.env"
|
||||||
- "${APP_CACHE_PATH}:/var/www/bootstrap/cache"
|
- "${DOCKER_APP_CACHE_PATH}:/var/www/bootstrap/cache"
|
||||||
- "${APP_STORAGE_PATH}:/var/www/storage"
|
- "${DOCKER_APP_STORAGE_PATH}:/var/www/storage"
|
||||||
depends_on:
|
depends_on:
|
||||||
- db
|
- db
|
||||||
- redis
|
- redis
|
||||||
|
@ -112,7 +123,7 @@ services:
|
||||||
env_file:
|
env_file:
|
||||||
- ".env"
|
- ".env"
|
||||||
volumes:
|
volumes:
|
||||||
- "${DB_DATA_PATH}:/var/lib/mysql"
|
- "${DOCKER_DB_DATA_PATH}:/var/lib/mysql"
|
||||||
ports:
|
ports:
|
||||||
- "${DOCKER_DB_PORT_EXTERNAL}:3306"
|
- "${DOCKER_DB_PORT_EXTERNAL}:3306"
|
||||||
|
|
||||||
|
@ -124,7 +135,7 @@ services:
|
||||||
- ".env"
|
- ".env"
|
||||||
volumes:
|
volumes:
|
||||||
- "${DOCKER_CONFIG_ROOT}/redis:/etc/redis"
|
- "${DOCKER_CONFIG_ROOT}/redis:/etc/redis"
|
||||||
- "${REDIS_DATA_PATH}:/data"
|
- "${DOCKER_REDIS_DATA_PATH}:/data"
|
||||||
ports:
|
ports:
|
||||||
- "${DOCKER_REDIS_PORT_EXTERNAL}:6399"
|
- "${DOCKER_REDIS_PORT_EXTERNAL}:6399"
|
||||||
healthcheck:
|
healthcheck:
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
# Pixelfed + Docker + Docker Compose
|
# Pixelfed + Docker + Docker Compose
|
||||||
|
|
||||||
* [Setting up a new Pixelfed server with Docker Compose](new-server.md)
|
* [Setting up a new Pixelfed server with Docker Compose](new-server.md)
|
||||||
|
* [Migrating to the new `docker-compose.yml` setup](migration.md)
|
||||||
* [Frequently Asked Question / FAQ](faq.md)
|
* [Frequently Asked Question / FAQ](faq.md)
|
||||||
* [How do I use my own Proxy server?](faq.md#how-do-i-use-my-own-proxy-server)
|
* [How do I use my own Proxy server?](faq.md#how-do-i-use-my-own-proxy-server)
|
||||||
* [How do I use my own SSL certificate?](faq.md#how-do-i-use-my-own-ssl-certificate)
|
* [How do I use my own SSL certificate?](faq.md#how-do-i-use-my-own-ssl-certificate)
|
||||||
|
|
|
@ -73,12 +73,12 @@ Please see the
|
||||||
|
|
||||||
## Fixing ownership on startup
|
## Fixing ownership on startup
|
||||||
|
|
||||||
You can set the environment variable `ENTRYPOINT_ENSURE_OWNERSHIP_PATHS` to a list of paths that should have their `$USER` and `$GROUP` ownership changed to the configured runtime user and group during container bootstrapping.
|
You can set the environment variable `DOCKER_ENSURE_OWNERSHIP_PATHS` to a list of paths that should have their `$USER` and `$GROUP` ownership changed to the configured runtime user and group during container bootstrapping.
|
||||||
|
|
||||||
The variable is a space-delimited list shown below and accepts both relative and absolute paths:
|
The variable is a space-delimited list shown below and accepts both relative and absolute paths:
|
||||||
|
|
||||||
* `ENTRYPOINT_ENSURE_OWNERSHIP_PATHS="./storage ./bootstrap"`
|
* `DOCKER_ENSURE_OWNERSHIP_PATHS="./storage ./bootstrap"`
|
||||||
* `ENTRYPOINT_ENSURE_OWNERSHIP_PATHS="/some/other/folder"`
|
* `DOCKER_ENSURE_OWNERSHIP_PATHS="/some/other/folder"`
|
||||||
|
|
||||||
## Build settings (arguments)
|
## Build settings (arguments)
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ No problem! All you have to do is:
|
||||||
1. Point your proxy upstream to the exposed `web` port (**Default**: `8080`).
|
1. Point your proxy upstream to the exposed `web` port (**Default**: `8080`).
|
||||||
* The port is controlled by the `DOCKER_WEB_PORT_EXTERNAL_HTTP` key in `.env`.
|
* The port is controlled by the `DOCKER_WEB_PORT_EXTERNAL_HTTP` key in `.env`.
|
||||||
* The setting is near the bottom of the file.
|
* The setting is near the bottom of the file.
|
||||||
|
1. Run `docker compose up -d --remove-orphans` to apply the configuration
|
||||||
|
|
||||||
## How do I use my own SSL certificate?
|
## How do I use my own SSL certificate?
|
||||||
|
|
||||||
|
@ -26,6 +27,7 @@ No problem! All you have to do is:
|
||||||
1. `${APP_DOMAIN}.fullchain.pem`
|
1. `${APP_DOMAIN}.fullchain.pem`
|
||||||
1. `${APP_DOMAIN}.key.pem`
|
1. `${APP_DOMAIN}.key.pem`
|
||||||
* See the [`nginx-proxy` configuration file for name patterns](https://github.com/nginx-proxy/nginx-proxy/blob/main/nginx.tmpl#L659-L670)
|
* See the [`nginx-proxy` configuration file for name patterns](https://github.com/nginx-proxy/nginx-proxy/blob/main/nginx.tmpl#L659-L670)
|
||||||
|
1. Run `docker compose up -d --remove-orphans` to apply the configuration
|
||||||
|
|
||||||
## How do I change the container name prefix?
|
## How do I change the container name prefix?
|
||||||
|
|
||||||
|
|
326
docker/migration.md
Normal file
326
docker/migration.md
Normal file
|
@ -0,0 +1,326 @@
|
||||||
|
# Migrating to the new Pixelfed Docker setup
|
||||||
|
|
||||||
|
There is [*a lot* of changes](https://github.com/pixelfed/pixelfed/pull/4844) in how Pixelfed Docker/Docker Compose images work - it's a complete rewrite - with a bunch of breaking changes.
|
||||||
|
|
||||||
|
## No more anonymous Docker Compose volumes
|
||||||
|
|
||||||
|
The old `docker-compose.yml` configuration file [declared four anonymous volumes](https://github.com/pixelfed/pixelfed/blob/b1ff44ca2f75c088a11576fb03b5bad2fbed4d5c/docker-compose.yml#L72-L76) for storing Pixelfed related data within.
|
||||||
|
|
||||||
|
These are no longer used, instead favoring a [Docker bind volume](https://docs.docker.com/storage/bind-mounts/) approach where content are stored directly on the server disk, outside
|
||||||
|
of a Docker volume.
|
||||||
|
|
||||||
|
The consequence of this change is that *all* data stored in the - now unsupported - Docker volumes will no longer be accessible by Pixelfed.
|
||||||
|
|
||||||
|
* The `db-data` volume *definitely* contain important data - it's your database after all!
|
||||||
|
* The `app-storage` volume *definitely* contain important data - it's files uploaded to - or seen by - your server!
|
||||||
|
* The `redis-data` volume *might* contain important data (depending on your configuration)
|
||||||
|
* The `app-bootstrap` volume does not contain any important data - all of it will be generated automatically in the new setup on startup. We will *not* be migrating this!
|
||||||
|
|
||||||
|
### Migrating off anonymous Docker Compose volumes
|
||||||
|
|
||||||
|
#### Caveats and warnings
|
||||||
|
|
||||||
|
**NOTE**: This is a best-effort guide to help migrate off the old system, the operation is potentially rather complicated (and risky), so please do be careful!
|
||||||
|
|
||||||
|
***PLEASE MAKE SURE TO BACKUP YOUR SERVER AND DATA BEFORE ATTEMPTING A MIGRATION***
|
||||||
|
|
||||||
|
We provide a "migration container" for your convenience that can access both the new and old volumes, allowing you to copy the data into the setup.
|
||||||
|
|
||||||
|
**It's important to note that this is a *copy* operation - so disk usage will (temporarily) double while you migrate**
|
||||||
|
|
||||||
|
**YOUR INSTANCE WILL BE *DOWN* WHILE DOING THE MIGRATION, PLEASE PLAN ACCORDINGLY, DEPENDING ON DATA SIZE IT COULD TAKE ANYWHERE FROM 5 *MINUTES* TO 5 *HOURS***
|
||||||
|
|
||||||
|
#### 0. Backup, rollout, and rollback plan
|
||||||
|
|
||||||
|
1. Make sure to backup your server (ideally *after* step 1 below has completed, but *before* is better than not at all!)
|
||||||
|
1. Capture the current Git version / Pixelfed release you are on (e.g. `git --no-pager log -1` outputs the commit reference as the 2nd word in first line)
|
||||||
|
1. Backup your `.env` file (we will do this in step 3 as well)
|
||||||
|
1. Backup your `docker-compose.yml` file (`cp docker-compose.yml docker-compose.yml.old`)
|
||||||
|
1. Read through the *entire* document before starting
|
||||||
|
|
||||||
|
#### 1. Migrate your ".env" file
|
||||||
|
|
||||||
|
The new `.env` file for Docker is a bit different from the old one (many new settings!) so the easiest is to grab the new `.env.docker` file and modify it from scratch again.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ cp .env .env.old
|
||||||
|
$ wget -O .env.new https://raw.githubusercontent.com/pixelfed/pixelfed/dev/.env.docker
|
||||||
|
```
|
||||||
|
|
||||||
|
Then open your old `.env.old` configuration file, and for each of the key/value pairs within it, find and update the key in the new `.env.new` configuration file.
|
||||||
|
|
||||||
|
Don't worry though, the file might *look* different (and significantly larger) but it behaves *exactly* the way the old file did, it just has way more options!
|
||||||
|
|
||||||
|
If a key is missing in `.env.new`, don't worry, you can just add those key/value pairs back to the new file - ideally in the `Other configuration` section near the end of the file - but anywhere *should* be fine.
|
||||||
|
|
||||||
|
This is a great time to review your settings and familiarize you with all the new settings.
|
||||||
|
|
||||||
|
In *particular* the following sections and the [Frequently Asked Question / FAQ](faq.md)
|
||||||
|
|
||||||
|
* `PHP configuration` section (near the end of the file) where
|
||||||
|
* The `PHP_VERSION` settings controls your PHP version
|
||||||
|
* The `PHP_MEMORY_LIMIT` settings controls your PHP memory limit
|
||||||
|
* `Docker Specific configuration` section (near the end of the file) where
|
||||||
|
* The `DOCKER_DATA_ROOT` setting dictate where the new migrated data will live.
|
||||||
|
* The `DOCKER_RUN_ONE_TIME_SETUP_TASKS` controls if the `One time setup tasks` should run or not. We do *not* want this, since your Pixelfed instance already is set up!
|
||||||
|
|
||||||
|
#### 2. Stop all running containers
|
||||||
|
|
||||||
|
Stop *all* running containers (web, worker, redis, db)
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ docker compose down
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 3. Pull down the new source code
|
||||||
|
|
||||||
|
Update your project to the latest release of Pixelfed by running
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ git pull origin $release
|
||||||
|
```
|
||||||
|
|
||||||
|
Where `$release` is either `dev`, `staging` or a [tagged release](https://github.com/pixelfed/pixelfed/releases) such as `v0.12.0`.
|
||||||
|
|
||||||
|
#### 4. Run the migration container
|
||||||
|
|
||||||
|
You can access the Docker container with both old and new volumes by running the following command
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ docker compose -f docker-compose.migrate.yml run migrate bash
|
||||||
|
```
|
||||||
|
|
||||||
|
This will put you in the `/migrate` directory within the container, containing 8 directories like shown here
|
||||||
|
|
||||||
|
```plain
|
||||||
|
|-- app-storage
|
||||||
|
| |-- new
|
||||||
|
| `-- old
|
||||||
|
|-- db-data
|
||||||
|
| |-- new
|
||||||
|
| `-- old
|
||||||
|
`-- redis-data
|
||||||
|
|-- new
|
||||||
|
`-- old
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 5. Check the folders
|
||||||
|
|
||||||
|
##### Old folders
|
||||||
|
|
||||||
|
The following commands should all return *SOME* files and data - if they do not - then there might be an issue with the anonymous volume binding.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ ls app-storage/old
|
||||||
|
$ ls db-data/old
|
||||||
|
$ ls redis-data/old
|
||||||
|
```
|
||||||
|
|
||||||
|
##### New folders
|
||||||
|
|
||||||
|
The following commands should all return *NO* files and data - if they contain data - you need to either delete it (backup first!) or skip that migration step.
|
||||||
|
|
||||||
|
If you haven't run `docker compose up` since you updated your project in step (2) - they should be empty and good to go.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ ls app-storage/new
|
||||||
|
$ ls db-data/new
|
||||||
|
$ ls redis-data/new
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 6. Copy the data
|
||||||
|
|
||||||
|
Now we will copy the data from the old volumes, to the new ones.
|
||||||
|
|
||||||
|
The migration container has [`rsync`](https://www.digitalocean.com/community/tutorials/how-to-use-rsync-to-sync-local-and-remote-directories) installed - which is perfect for that kind of work!
|
||||||
|
|
||||||
|
**NOTE** It's important that the "source" (first path in the `rsync` command) has a trailing `/` - otherwise the directory layout will turn out wrong!
|
||||||
|
|
||||||
|
**NOTE** Depending on your server, these commands might take some time to finish, each command should provide a progress bar with rough time estimation.
|
||||||
|
|
||||||
|
**NOTE** `rsync` should preserve ownership, permissions, and symlinks correctly for you as well for all the files copied.
|
||||||
|
|
||||||
|
Lets copy the data by running the following commands:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ rsync -avP app-storage/old/ app-storage/new
|
||||||
|
$ rsync -avP db-data/old/ db-data/new
|
||||||
|
$ rsync -avP redis-data/old/ redis-data/new
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 7. Sanity checking
|
||||||
|
|
||||||
|
Lets make sure everything copied over successfully!
|
||||||
|
|
||||||
|
Each *new* directory should contain *something* like (but not always exactly) the following - **NO** directory should have a single folder called `old`, if they do, the `rsync` commands above didn't work correctly - and you need to move the content of the `old` folder into the "root" of the `new` folder like shown a bit in the following sections.
|
||||||
|
|
||||||
|
The **redis-data/new** directory might also contain a `server.pid`
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ ls redis-data/new
|
||||||
|
appendonlydir
|
||||||
|
```
|
||||||
|
|
||||||
|
The **app-storage/new** directory should look *something* like this
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ ls app-storage/new
|
||||||
|
app debugbar docker framework logs oauth-private.key oauth-public.key purify
|
||||||
|
```
|
||||||
|
|
||||||
|
The **db-data/new** directory should look *something* like this. There might be a lot of files, or very few files, but there *must* be a `mysql`, `performance_schema`, and `${DB_DATABASE}` (e.g. `pixelfed_prod` directory)
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ ls db-data/new
|
||||||
|
aria_log_control ddl_recovery-backup.log ib_buffer_pool ib_logfile0 ibdata1 mariadb_upgrade_info multi-master.info mysql performance_schema pixelfed_prod sys undo001 undo002 undo003
|
||||||
|
```
|
||||||
|
|
||||||
|
If everything looks good, type `exit` to leave exit the migration container
|
||||||
|
|
||||||
|
#### 6. Starting up the your Pixelfed server again
|
||||||
|
|
||||||
|
With all an updated Pixelfed (step 2), updated `.env` file (step 3), migrated data (step 4, 5, 6 and 7) we're ready to start things back up again.
|
||||||
|
|
||||||
|
But before we start your Pixelfed server back up again, lets put the new `.env` file we made in step 1 in its right place.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ cp .env.new .env
|
||||||
|
```
|
||||||
|
|
||||||
|
##### The Database
|
||||||
|
|
||||||
|
First thing we want to try is to start up the database by running the following command and checking the logs
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ docker compose up -d db
|
||||||
|
$ docker compose logs --tail 250 --follow db
|
||||||
|
```
|
||||||
|
|
||||||
|
if there are no errors and the server isn't crashing, great! If you have an easy way of connecting to the Database via a GUI or CLI client, do that as well and verify the database and tables are all there.
|
||||||
|
|
||||||
|
##### Redis
|
||||||
|
|
||||||
|
Next thing we want to try is to start up the Redis server by running the following command and checking the logs
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ docker compose up -d redis
|
||||||
|
$ docker compose logs --tail 250 --follow redis
|
||||||
|
```
|
||||||
|
|
||||||
|
if there are no errors and the server isn't crashing, great!
|
||||||
|
|
||||||
|
##### Worker
|
||||||
|
|
||||||
|
Next thing we want to try is to start up the Worker server by running the following command and checking the logs
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ docker compose up -d worker
|
||||||
|
$ docker compose logs --tail 250 --follow worker
|
||||||
|
```
|
||||||
|
|
||||||
|
The container should output a *lot* of logs from the [docker-entrypoint system](customizing.md#running-commands-on-container-start), but *eventually* you should see these messages
|
||||||
|
|
||||||
|
* `Configuration complete; ready for start up`
|
||||||
|
* `Horizon started successfully.`
|
||||||
|
|
||||||
|
If you see one or both of those messages, great, the worker seems to be running.
|
||||||
|
|
||||||
|
If the worker is crash looping, inspect the logs and try to resolve the issues.
|
||||||
|
|
||||||
|
You can consider the following additional steps:
|
||||||
|
|
||||||
|
* Enabling `ENTRYPOINT_DEBUG` which will show even more log output to help understand whats going on
|
||||||
|
* Enabling `DOCKER_ENSURE_OWNERSHIP_PATHS` against the path(s) that might have permission issues
|
||||||
|
* Fixing permission issues directly on the host since your data should all be in the `${DOCKER_DATA_ROOT}` folder (`./docker-compose-state/data` by default)
|
||||||
|
|
||||||
|
##### Web
|
||||||
|
|
||||||
|
The final service, `web`, which will bring your site back online! What a journey it has been.
|
||||||
|
|
||||||
|
Lets get to it, run these commands to start the `web` service and inspect the logs.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ docker compose up -d web
|
||||||
|
$ docker compose logs --tail 250 --follow web
|
||||||
|
```
|
||||||
|
|
||||||
|
The output should be pretty much identical to that of the `worker`, so please see that section for debugging tips if the container is crash looping.
|
||||||
|
|
||||||
|
If the `web` service came online without issues, start the rest of the (optional) services, such as the `proxy`, if enabled, by running
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ docker compose up -d
|
||||||
|
$ docker compose logs --tail 250 --follow
|
||||||
|
```
|
||||||
|
|
||||||
|
If you changed anything in the `.env` file while debugging, some containers might restart now, thats perfectly fine.
|
||||||
|
|
||||||
|
#### 7. Verify
|
||||||
|
|
||||||
|
With all services online, it's time to go to your browser and check everything is working
|
||||||
|
|
||||||
|
1. Upload and post a picture
|
||||||
|
1. Comment on a post
|
||||||
|
1. Like a post
|
||||||
|
1. Check Horizon (`https://${APP_DOMAIN}/horizon`) for any errors
|
||||||
|
1. Check the Docker compose logs via `docker compose logs --follow`
|
||||||
|
|
||||||
|
If everything looks fine, yay, you made it to the end! Lets do some cleanup
|
||||||
|
|
||||||
|
#### 8. Final steps + cleanup
|
||||||
|
|
||||||
|
With everything working, please take a new snapshot/backup of your server *before* we do any cleanup. A post-migration snapshot is incredibly useful, since it contains both the old and new configuration + data, making any recovery much easier in a rollback scenario later.
|
||||||
|
|
||||||
|
Now, with all the data in the new folders, you can delete the old Docker Container volumes (if you want, completely optional)
|
||||||
|
|
||||||
|
List all volumes, and give them a look:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ docker volume ls
|
||||||
|
```
|
||||||
|
|
||||||
|
The volumes we want to delete *ends* with the volume name (`db-data`, `app-storage`, `redis-data`, and `app-bootstrap`.) but has some prefix in front of them.
|
||||||
|
|
||||||
|
Once you have found the volumes in in the list, delete each of them by running:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ docker volume rm $volume_name_in_column_two_of_the_output
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also delete the `docker-compose.yml.old` and `.env.old` file since they are no longer needed
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ rm docker-compose.yml.old
|
||||||
|
$ rm .env.old
|
||||||
|
```
|
||||||
|
|
||||||
|
### Rollback
|
||||||
|
|
||||||
|
Oh no, something went wrong? No worries, we you got backups and a quick way back!
|
||||||
|
|
||||||
|
#### Move `docker-compose.yml` back
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ cp docker-compose.yml docker-compose.yml.new
|
||||||
|
$ cp docker-compose.yml.old docker-compose.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Move `.env` file back
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ cp env.old .env
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Go back to old source code version
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ git checkout $commit_id_from_step_0
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Start things back up
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Verify it worked
|
|
@ -13,13 +13,13 @@ run-as-current-user chown --verbose "${RUNTIME_UID}:${RUNTIME_GID}" "./bootstrap
|
||||||
run-as-current-user chown --verbose "${RUNTIME_UID}:${RUNTIME_GID}" "./storage"
|
run-as-current-user chown --verbose "${RUNTIME_UID}:${RUNTIME_GID}" "./storage"
|
||||||
|
|
||||||
# Optionally fix ownership of configured paths
|
# Optionally fix ownership of configured paths
|
||||||
: "${ENTRYPOINT_ENSURE_OWNERSHIP_PATHS:=""}"
|
: "${DOCKER_ENSURE_OWNERSHIP_PATHS:=""}"
|
||||||
|
|
||||||
declare -a ensure_ownership_paths=()
|
declare -a ensure_ownership_paths=()
|
||||||
IFS=' ' read -ar ensure_ownership_paths <<<"${ENTRYPOINT_ENSURE_OWNERSHIP_PATHS}"
|
IFS=' ' read -ar ensure_ownership_paths <<<"${DOCKER_ENSURE_OWNERSHIP_PATHS}"
|
||||||
|
|
||||||
if [[ ${#ensure_ownership_paths[@]} == 0 ]]; then
|
if [[ ${#ensure_ownership_paths[@]} == 0 ]]; then
|
||||||
log-info "No paths has been configured for ownership fixes via [\$ENTRYPOINT_ENSURE_OWNERSHIP_PATHS]."
|
log-info "No paths has been configured for ownership fixes via [\$DOCKER_ENSURE_OWNERSHIP_PATHS]."
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
Loading…
Reference in a new issue