No estás usando esta distribución?

Selecciona una versión o distribución diferente

Para los que no conozcáis PixelFed os lo podría resumir en una sola frase: un Instagram libre para compartir imágenes sin que te estén espiando.

Ahora que el Fediverso parece que se está cargando de la buena energía de la comunidad, donde todo el mundo tiene una cuenta de Mastodon o Pleroma (o incluso GNU Social, que sí, sigue vivo), ahora viene la nueva red social del Fediverso para compartir imágenes.

Tal y como hice con las tres redes sociales, vamos a explicar paso por paso como montar un nodo de PixelFed. Ahora bien, debéis tener en cuenta que aún todo está muy verde y seguramente hayan cosas que en el tutorial con el tiempo se tendrán que cambiar.

Tampoco hay toda la documentación escrita y he tenido que buscar la forma correcta para que funcione (me he peleado mucho con Apache y Nginx).

También debo de admitir que este tutorial por el momento no se puede hacer en Debian, ya que para usar PixelFed se necesita una versión de PHP superior o igual a la 7.2 (cosa que en Debian 9 no va a ser posible a menos que añadas repositorios de terceros, cosa que me niego totalmente).

Así que para hacer este tutorial vamos a usar a nuestra querida Ubuntu 18.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 y configuración de Nginx

Como siempre, para instalar Nginx en Ubuntu:

apt install nginx

Y tras instalarlo, lo habilitamos al arranque:

systemctl start nginx
systemctl enable nginx

Creamos el fichero de configuración en /etc/nginx/sites-available/pixelfed.conf y añadimos lo siguiente:

server {
  listen 80;
  listen [::]:80;
  server_name dominio.com;

  location /.well-known {
    root /usr/share/nginx/html;
  }

  return 301 https://$host$request_uri;
}


server {
  listen 443 http2 ssl;
  listen [::]:443 http2;
  server_name dominio.com;

  root /var/www/vhost/dominio.com/www/public;
  index index.html index.htm index.php;

  access_log /var/www/vhost/dominio.com/logs/access.log;
  error_log /var/www/vhost/dominio.com/logs/error.log;

  client_max_body_size 20M;

  add_header X-Content-Type-Options nosniff;
  add_header X-XSS-Protection "1; mode=block";
  add_header X-Robots-Tag none;
  add_header X-Download-Options noopen;
  add_header X-Permitted-Cross-Domain-Policies none;

  ssl_certificate /etc/letsencrypt/live/dominio.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/dominio.com/privkey.pem;
  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_prefer_server_ciphers on;
  ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
  ssl_ecdh_curve secp384r1;
  ssl_session_cache shared:SSL:10m;
  add_header Strict-Transport-Security max-age=15768000;

  location /.well-known {
    root /usr/share/nginx/html;
  }

  location / {
    try_files $uri $uri/ /$is_args$args;
  }

  location ~ \.php$ {
    try_files $uri /index.php =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    fastcgi_param PATH_INFO $fastcgi_path_info;
  }
}

Recordad que tenéis que cambiar dominio.com por vuestro dominio o subdominio para PixelFed. Lo siguiente que haremos será configurar el SSL pero aún no reiniciaremos Nginx.

certbot certonly

Escogeremos la opción 1 (Nginx web Server plugin – Alpha) y luego escribiremos nuestro dominio para generar el certificado.

Luego creamos las rutas necesarias para PixelFed:

mkdir -p /var/www/vhost/dominio.com/{www,logs}

Finalmente, creamos el enlace simbólico y reiniciamos Nginx:

ln -s /etc/nginx/sites-available/pixelfed.conf /etc/nginx/sites-enabled/pixelfed.conf
systemctl restart nginx

Instalación de PHP y dependencias varias

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

apt install php7.2 php7.2-fpm php7.2-mysql php7.2-mbstring php7.2-common php7.2-xml php7.2-json php7.2-bcmath php7.2-curl php7.2-intl jpegoptim optipng pngquant composer

Tras instalar PHP, configuramos PHP-FPM:

sed 's/pm.max_children = 5/pm.max_children = 25/g' /etc/php/7.2/fpm/pool.d/www.conf -i
sed 's/;pm.max_requests/pm.max_requests/g' /etc/php/7.2/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/7.2/fpm/php.ini -i
sed 's/post_max_size = 8M/post_max_size = 20M/g' /etc/php/7.2/fpm/php.ini -i
sed 's|max_execution_time =.*|max_execution_time = 600|g' /etc/php/7.2/fpm/php.ini -i

Y reiniciamos PHP-FPM:

systemctl restart php7.2-fpm.service

Instalación de MariaDB 10.3

Para instalar MariaDB en Ubuntu, tendremos que añadir un repositorio para tener MariaDB 10.3, ya que una versión inferior o la que trae por defecto Ubuntu 18.04 no nos funcionará (sobretodo da error al importar la base de datos porque JSON no está disponible para mariadb-10.2.

Antes de añadir el repositorio, añadimos la llave GPG:

apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8

Añadimos repositorio:

add-apt-repository 'deb [arch=amd64] http://mirror.zol.co.zw/mariadb/repo/10.3/ubuntu bionic main'

Y finalmente instalamos MariaDB:

apt install mariadb-server mariadb-client

Durante la instalación, nos pedirá configurar el usuario root.

Habilitamos al arranque el servicio:

systemctl enable mysql

Luego creamos la base de datos y el usuario para PixelFed:

mysql -uroot -p -e "CREATE DATABASE pixelfed;"
mysql -uroot -p  -e "CREATE USER pixelfed@localhost IDENTIFIED BY 'superpassword';"
mysql -uroot -p  -e "GRANT ALL PRIVILEGES ON pixelfed.* TO 'pixelfed'@'localhost';"
mysql -uroot -p  -e "FLUSH PRIVILEGES;"

Instalación de Redis

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

apt install php-redis redis-server

Y lo habilitamos al arranque:

systemctl enable redis-server

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

Nos vamos a la ruta que toca y descargamos PixelFed desde el repositorio de GitHub:

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
chown www-data.www-data -R *
chown www-data.www-data -R .*

Y con composer instalamos:

composer install --no-plugins --no-scripts

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 ES"
...
APP_URL=https://dominio.com
APP_DOMAIN="dominio.com"
ADMIN_DOMAIN="dominio.com"
SESSION_DOMAIN="dominio.com"
...
DB_PASSWORD=superpassword
...
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

Y luego configuramos Laravel:

php artisan key:generate
php artisan storage:link
php artisan migrate --force
php artisan config:cache

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/www/vhost/dominio.com/logs/horizon.log

Y lo iniciamos:

supervisorctl reread
supervisorctl update
supervisorctl start horizon

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

Conclusión MUY IMPORTANTE

Esta es la explicación de como se instala PixelFed que he encontrado en varios blogs y algún que otro script en bash un tanto guarruno por Git.

También he encontrado información en la documentación incompleta de PixelFed. La documentación oficial está por hacer, y eso significa que el software, aún funcionando bastante bien, sigue estando en constante desarrollo.

Es por eso que debo de decir que quizás este artículo quede desfasado muy rápido debido a que habrán cambios pronto. De todos modos, iré actualizando de tanto en tanto el artículo con cambios que se vayan haciendo en la configuración.

Debéis tener en cuenta que el proyecto sigue estando en fase beta y que algunas cosas que se hacen no pueden funcionar correctamente o que incluso en vuestro servidor no funcione 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