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:
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.
Más sobre ./voidNull
- 📖 Aprende todos sobre los comandos de GNU/Linux en nuestro Diccionario "De la A a la Z: Los comandos de GNU/Linux"
- 💪 ¡Forma parte de la Comunidad de ./voidNull!
- 🤖 Disfruta de todos nuestros Cursos sobre Ansible, Proxmox, Home Assistant entre otros.
- 📩 Mantente actualizado con lo último en GNU/Linux y Software Libre. Recibe nuestra Newsletter mensual.
Comentarios