No estás usando esta distribución?

Selecciona una versión o distribución diferente

Pixelfed es un sistema para compartir imágenes en forma de software libre, que utiliza el protocolo ActivityPub para federarse con el Fediverso, lanzado a mediados del mes de abril de 2018 por el desarrollador canadiense Daniel Supernault. Permite compartir imágenes con Friendica, Mastodon, Nextcloud, PeerTube, Pleroma, etc. Al ser software libre y de código abierto, es posible instalar su propia instancia, mientras se conecte a esta federación del Fediverso.

A veces se presenta como una alternativa a Instagram y su política de censura, cuyos datos permite importar.

El sistema está desarrollado con el lenguaje PHP y utiliza el framework Laravel.

Para hacer este tutorial vamos a usar Ubuntu 22.04 y vamos a instalar y configurar todo lo que viene a continuación.

Antes de instalar

Antes de ponernos a instalar todo, como siempre, actualizamos paquetes, actualizamos sistema e instalamos herramientas básicas para funcionar.

apt update
apt upgrade -y

Y las herramientas básicas:

apt install apt-transport-https wget curl git software-properties-common unzip

También aprovecharemos para configurar el hostname:

hostnamectl set-hostname dominio.com

Instalación de MariaDB

Empezamos con la instalación de la base de datos para PixelFed. En la documentación oficial explican que PixelFed es compatible con PostgreSQL (10+) y MySQL (5.7), pero recomiendan usar MariaDB.

Instalamos MariaDB:

apt install mariadb-server mariadb-client

Habilitamos al arranque el servicio:

systemctl enable mariadb

Luego creamos la base de datos y el usuario para PixelFed. Como siempre deberás de revisar este artículo que explica como hacerlo:

Crear base de datos y usuario con privilegios en MySQL/MariaDB
En el siguiente tutorial vamos ha explicar como crear una base de datos y un usuario para asignar permisos totales a esa base de datos. Acceder a MySQL/MariaDB Para gestionar bases de datos o usuarios, deberemos de acceder a la shell de MySQL/MariaDB. Existen programas como phpMyAdmin de
create database pixelfed;
grant all privileges on pixelfed.* to 'pixelfed'@'localhost' identified by 'contraseña_segura';
flush privileges;

Instalación de Redis

También tendremos que instalar Redis para cachear partes de la web, para ello:

apt install redis-server

Y lo habilitamos al arranque:

systemctl enable --now redis-server

Editamos el fichero /etc/redis/redis.conf y cambiamos el parámetro de port por:

port 0

Y descomentamos los siguientes parámetros:

unixsocket /var/run/redis/redis-server.sock
unixsocketperm 700

Reiniciamos el servicio:

systemctl restart redis-server

Instalación de PHP y dependencias varias

Según la documentación de PixelFed, todo esto es necesario para que funcione correctamente, procedemos a instalarlo:

apt install php8.1 php8.1-fpm php8.1-mysql php8.1-mbstring php8.1-xml php8.1-bcmath php8.1-curl php8.1-intl php8.1-ctype php8.1-exif php8.1-gd php8.1-iconv php8.1-redis php8.1-tokenizer php8.1-zip jpegoptim optipng pngquant composer

Tras instalar PHP, configuramos PHP-FPM:

sed 's/pm.max_children = 5/pm.max_children = 25/g' /etc/php/8.1/fpm/pool.d/www.conf -i
sed 's/;pm.max_requests/pm.max_requests/g' /etc/php/8.1/fpm/pool.d/www.conf -i

Luego configuramos los valores post_max_size, upload_max_filesize y max_execution_time:

sed 's/upload_max_filesize = 2M/upload_max_filesize = 20M/g' /etc/php/8.1/fpm/php.ini -i
sed 's/post_max_size = 8M/post_max_size = 20M/g' /etc/php/8.1/fpm/php.ini -i
sed 's|max_execution_time =.*|max_execution_time = 600|g' /etc/php/8.1/fpm/php.ini -i

Y reiniciamos PHP-FPM:

systemctl restart php8.1-fpm.service

Creación de usuario dedicado para PixelFed

Configuraremos un usuario del sistema para gestionar PixelFed en nuestro servidor, para ello crearemos el usuario:

useradd -rU -s /bin/bash pixelfed

Configuramos PHP-FPM con el usuario

Vamos a crear un fichero especifico para PHP-FPM, para ello:

cd /etc/php/8.1/fpm/pool.d
cp www.conf pixelfed.conf
nano pixelfed.conf

Editamos la configuración reconfiguramos lo siguiente:

[pixelfed]
user = pixelfed
group = pixelfed
; to use a tcp socket, e.g. if running php-fpm on a different machine than your app:
;    (note that the port 9001 is used, since php-fpm defaults to running on port 9000;)
;    (however, the port can be whatever you want)
; listen = 127.0.0.1:9001;
;    but it's better to use a socket if you're running locally on the same machine:
listen = /run/php-fpm/pixelfed.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
; [...]

Finalmente, reiniciamos PHP-FPM:

systemctl restart php8.1-fpm

Instalación de Postfix

Además, si queremos enviar correos para restaurar contraseña y validar e-mail de las cuentas, tendremos que instalar PostFix:

apt install postfix

Durante la instalación escogeremos la opción Internet Site, y continuaremos.

Instalación de pixelfed

Para la instalación vamos a configurar primero los directorios necesarios. Para ello:

mkdir -p /var/www/vhost/dominio.com/www

Nos descargamos el repositorio en el directorio:

git clone -b dev https://github.com/pixelfed/pixelfed.git /var/www/vhost/dominio.com/www/

Cambiamos permisos:

cd /var/www/vhost/dominio.com/www
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

Y con composer instalamos las dependencias:

composer install --no-ansi --no-interaction --optimize-autoloader

Una vez acabe todo, crearemos una copia del fichero .env y configuraremos lo siguiente:

cp .env.example .env

De este fichero modificamos:

APP_NAME="Pixelfed voidNull"
...
APP_URL=https://dominio.com
APP_DOMAIN="dominio.com"
ADMIN_DOMAIN="dominio.com"
SESSION_DOMAIN="dominio.com"
...
DB_CONNECTION="mysql"
DB_HOST="127.0.0.1"
DB_PORT="3306"
DB_DATABASE="pixelfed"
DB_USERNAME="pixelfed"
DB_PASSWORD="contraseña_segura"
...
REDIS_SCHEME="unix"
REDIS_PATH="/var/run/redis/redis-server.sock"
REDIS_PORT="null"
REDIS_PORT="null"
...
MAIL_DRIVER=sendmail
MAIL_HOST=localhost
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="pixelfed@dominio.com"
MAIL_FROM_NAME="Pixelfed"
...
ACTIVITY_PUB=true
REMOTE_FOLLOW=true
ACTIVITYPUB_INBOX=true
ACTIVITYPUB_SHAREDINBOX=true
...

Configuración de los servicios

Generamos la APP_KEY:

php artisan key:generate

Agregaremos los storage, solo tenemos que ejecutarlo una vez:

php artisan storage:link

Migración de la base de datos:

php artisan migrate --force

Si queremos importar las ciudades para las localizaciones:

php artisan import:cities

Si hemos habilitado la federación:

php artisan instance:actor

Si has habilitado OAuth:

php artisan passport:keys

Habilitamos las rutas:

php artisan route:cache
php artisan view:cache

Cada vez que hagas cambios en .env, debes de ejecutar este comando:

php artisan config:cache

Instalamos Laravel Horizon

Utilizaremos Laravel Horizon, así que lo activamos:

php artisan horizon:install
php artisan horizon:publish

Configuración de Nginx

Como siempre, para instalar Nginx:

apt install nginx

Y tras instalarlo, lo habilitamos al arranque:

systemctl start nginx
systemctl enable nginx

Copiamos el fichero de configuración para Nginx:

cp -rf /var/www/vhost/dominio.com/www/contrib/nginx.conf /etc/nginx/sites-available/pixelfed.conf
ln -s /etc/nginx/sites-available/pixelfed.conf /etc/nginx/sites-enabled/pixelfed.conf

Y modificamos los parámetros server_name (tanto el del principio como el del final) y root. Además modificamos ssl_certificate y ssl_certificate_key. Finalmente, modificaremos fastcgi_pass para añadir el FPM que hemos configurado.

server_name pixel.arrel.cloud;
root /var/www/vhost/dominio.com/www/public;
ssl_certificate /etc/letsencrypt/live/dominio.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/dominio.com/privkey.pem;
fastcgi_pass unix:/run/php/php-fpm-pixelfed.sock;

Generamos el certificado SSL

Para el SSL usaremos Let's Encrypt, y para ello necesitamos instalar:

apt install certbot

Paramos Nginx y generamos el certificado:

systemctl stop nginx
certbot certonly --standalone --post-hook "systemctl restart nginx"
systemctl start nginx

Instalación de Supervisor

También tendremos que instalar Supervisor para tener controlado un proceso de Horizon (cosas de Laravel… no hagáis muchas preguntas, pero es necesario).

apt install supervisor

Lo habilitamos al arranque:

systemctl enable supervisor

Y creamos el fichero de configuración con el siguiente contenido:

touch /etc/supervisor/conf.d/horizon.conf

[program:horizon]
process_name=Artisan_Horizon
command=php /var/www/vhost/dominio.com/www/artisan horizon
autostart=true
autorestart=true
user=www-data
redirect_stderr=true
stdout_logfile=/var/log/horizon.log

Y lo iniciamos:

supervisorctl reread
supervisorctl update
supervisorctl start horizon

Y con esto ya tendríamos PixelFed instalado y funcionando correctamente.

Haz que cada palabra cuente: tu donación nos inspira a seguir creando contenido. Accede al apartado de Donación para hacer tu aportación