Entendiendo esta guia:
Estos son comandos:
ls -all
Esto es el contenido de un archivo:
<?php echo «hello world!» ?>
Estos son notas que deberás leer.
¿Qué es Pixelfed?
Pues Pixelfed es una aplicación/servicio similar a Instagram, pero a diferencia de Instagram, Pixelfed no esta centralizado, es libre y de código abierto
¿Qué significa que no esta centralizado?
Pues a diferencia de otros servicios y aplicaciones, Pixelfed esta descentralizado, no depende de una única entidad y cada instancia es única he independiente.
También cada instancia de Pixelfed puede interactuar con otras instancias, ya que utiliza protocolos abiertos.
Manos a la obra!
Paquetes necesarios
Antes de configurar todo instaláremos algunos paquetes necesarios para hacer funcionar todo, en lugar de instalarlos todos juntos, lo haremos de forma independiente para evitar cualquier problema.
Ejecutamos:
apt install git zip psmisc build-essential apache2 mariadb-server curl htop bmon mc pngquant optipng jpegoptim gifsicle ffmpeg redis
Usuario de sistemas para Pixelfed
Crearemos un usuario para la aplicación, ejecutamos lo siguiente:
useradd pixelfed -m -d /www/pixelfed -s /bin/false -r -c "Pixelfed User"
Obtenemos una copia de Github
Para esto utilizaremos el usuario que ya creamos, ejecutamos:
su -l pixelfed -s /bin/bash ; cd
Y ejecutamos:
git clone -b dev https://github.com/pixelfed/pixelfed.git pixelfed
Deberemos ver algo asi:
Clonando en 'pixelfed'...
remote: Enumerating objects: 47808, done.
remote: Total 47808 (delta 0), reused 0 (delta 0), pack-reused 47808
Recibiendo objetos: 100% (47808/47808), 44.17 MiB | 13.14 MiB/s, listo.
Resolviendo deltas: 100% (30423/30423), listo.
(Mi sistema esta en español)
*Encontre un BUG!
Existe un bug en el codigo de la version » dev 0.11.4″, este se debe al cambio de version de Laravel de 8 a 9. Lo que ocasiona el BUG es que cuando se sube un archivo y se crean los directorios dentro de «storage», estos se creen con los permisos «0700», lo que evita que cualquier otro usuario que no sea el propietario del directorio, no pueda acceder al mismo. Para solventarlo he solicitado un PULL, en el repositorio de GitHUB #3825, lo que hace que el usuario con el que se ejecuta PHP al momento cree los directorios con los permisos correctos.
Para verificar si esto se ha corregido, editamos el archivo «pixelfed/config/filesystems.php».
Buscamos las lineas:
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
Agregamos la siguientes líneas (En rojo, si no están hay que agregarlas):
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
'permissions' => [
'file' => [
'public' => 0644,
'private' => 0644,
],
'dir' => [
'public' => 0755,
'private' => 0755,
],
],
'public' => [
Guardamos el archivo y continuamos.
Dejamos de utilizar el usuario «pixelfed» ejecutando:
exit
NOTA: Directorio de trabajo
El directorio de trabajo puede cambiar de acuerdo a cada uno y sus preferencias, en mi caso para las aplicaciones WEB y sitios WEB, prefiero instalar todo en un único directorio dentro del RAIZ del disco, en mi caso es el «/www» y las aplicaciones en un directorio con su respectivo nombre, en este caso «pixelfed».
Para ello ejecutamos este comando:
mkdir /www/pixelfed/ssl -p
«-p» esta opción creara los directorios padres si no existen.
«ssl» utilizaremos este directorio para guardar los certificados firmados por Let’s Encrypt.
Configurando Apache2
Configuraremos el apache web server, para que pueda acceder a «/www/pixelfed», por defecto el servicio de apache tiene permisos para trabajar en el directorio «/var/www/», cambiaremos esto para que el servicio pueda acceder a «www» (este es mi ejemplo, en tu caso puede ser el directorio que ).
Editamos el archivo «/etc/apache2/apache2.conf«. Buscamos las líneas:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
Podemos cambiarlas o agregar de bajo:
<Directory /www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
Configuramos el Virtual Host
Dentro del directorio «/etc/apache2/sites-available» se almacenas las configuraciones de cada virtual host, crearemos una nueva configuración llamada «pixelfed.conf», por ejemplo.
Teniendo en cuenta que en este ejemplo utilizaremos el dominio «pixelfed.example.int» y el directorio de trabajo «/www/pixelfed/public», están cargados en todo en este ejemplo.
Creamos el archivo «/etc/apache2/sites-available/pixelfed.conf» Y agregamos lo siguiente:
<VirtualHost *:80>
ServerName pixel.example.int
ServerAdmin goxonline@arguos.com
DocumentRoot /www/pixelfed/pixelfed/public
LogLevel debug
<Directory /www/pixelfed/pixelfed/public>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/pidexfed.error.log
CustomLog ${APACHE_LOG_DIR}/pixelfed.access.log combined
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php.pixelfed.sock|fcgi://localhost"
</FilesMatch>
</VirtualHost>
Activamos el sitio ejecutando:
a2ensite pixelfed.conf
Y reiniciamos el servicio de Apache:
service apache2 restart
Soporte para SSL
Este ejemplo de configuración es para el servicio sin SSL. Si necesitamos SSL, crearemos también el siguiente archivo de configuración «/etc/apache2/sites-available/ssl.pixelfed.conf» y agregaremos lo siguiente al archivo:
<VirtualHost *:443>
ServerName pixelfed.example.int
ServerAdmin goxonline@arguos.com
DocumentRoot /www/pixelfed/pixelfed/public
<Directory /www/pixelfed/pixelfed/public>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php.pixelfed.sock|fcgi://localhost"
</FilesMatch>
SSLCertificateFile /www/pixelfed/ssl/fullchain.cer
SSLCertificateKeyFile /www/pixelfed/ssl/pixelfed.key
Include /etc/apache2/conf-available/letsencrypt.conf
ErrorLog ${APACHE_LOG_DIR}/ssl.pixelfed.error.log
CustomLog ${APACHE_LOG_DIR}/ssl.pixelfed.access.log combined
</VirtualHost>
También creamos el archivo «/etc/apache2/conf-available/letsencrypt.conf» y agregamos al mismo:
SSLEngine on
# Intermediate configuration, tweak to your needs
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
#SSLCipherSuite HIGH:MEDIUM:!MD5!EXP:!NULL:!LOW:!ADH
#SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
SSLHonorCipherOrder on
SSLCompression off
SSLOptions +StrictRequire
Antes de activar esta configuración, solicitaremos la firma del certificado. Los pasos para hacer esto, están al final del documento.
Firmamos un certificado para nuestro dominio con ACME.SH
Descargaremos el cliente «acme.sh», pero se puede utilizar cualquier, yo estoy acostumbrado a este.
Puedes descargar el mismo desde aquí:
Release Normal release · acmesh-official/acme.sh · GitHub
Descomprimimos el «acme.sh» en el directorio que deseemos, dentro de este encontraremos el script «acme.sh». Psociblemente deberemos registrarnos, para esto ejecutamos:
./acme.sh --register-account --insecure --force --email test@test.com
Y luego firmamos el certificado para nuestro dominio:
./acme.sh --issue -d pixelfed.int -w /www/pixelfed/pixelfed/public --cert-file /www/pixelfed/ssl/pixelfed.int.cer \
--key-file /www/pixelfed/ssl/pixelfed.int.key --ca-file /www/pixelfed/ssl/ca.cer \
--fullchain-file /www/pixelfed/ssl/fullchain.cer --force
(Donde pixelfed.int deberá ser reemplazado por tu dominio)
Activaremos el Virtual Hosts en apache con el siguiente comando:
a2ensite ssl.pixelfed.conf
También activaremos los módulos «proxy» de Apache, estos los utilizaremos para pasar los archivos PHP desde el Apache y procesarlos. Tambien ectivaremos el modulo «Rewrite», el cual es necesario por Pixelfed. Ejecutamos el siguiente comando para activar los módulos:
a2enmod proxy* rewrite ssl
Y reiniciamos el servicio Apache con el siguiente comando:
systemctl restart apache2
PHP 8.1
Agregamos el repositorio PHP alternativo
Repositorio: Para poder instalar PHP 8.1 utilizaremos los paquetes de https://deb.sury.org. Para ello ejecutaremos los siguientes pasos:
apt install apt-transport-https lsb-release ca-certificates
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
apt update
Instalamos PHP 8.1 con el siguiente comando (El repositorio tiene varias versiones de PHP, por lo que especificamos la versión que necesitamos ):
apt-get install php8.1-fpm php8.1 php8.1-common php8.1-cli php8.1-gd php8.1-mbstring php8.1-xml php8.1-bcmath php8.1-pgsql php8.1-curl php8.1-xml php8.1-xmlrpc php8.1-imagick php8.1-gd php8.1-mysql php8.1-cli php8.1-intl php8.1-zip php8.1-redis
Configuramos el PHP FPM
Crearemos un nuevo «pool» de PHP para nuestro sitio WEB. Para esto crearemos el archivo «/etc/php/8.1/fpm/pool.d/pixelfed.conf» y agregaremos el siguiente contenido:
[pixelfed]
user = pixelfed
group = pixelfed
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
listen = /var/run/php.pixelfed.sock
pm = dynamic
pm.max_children = 20
pm.start_servers = 4
pm.min_spare_servers = 4
pm.max_spare_servers = 20
chdir = /www/pixelfed
php_flag[display_errors] = on
php_admin_value[error_log] = /www/pixelfed/php.error.log
php_admin_flag[log_errors] = on
php_admin_value[open_basedir] = /www/pixelfed:/usr/share/:/tmp:/var/lib/php
Modificamos el php.ini
Editamos el archivo «/etc/php/8.1/fpm/php.ini», buscamos la entrada «upload_max_filesize = 2M» y la modificamos por:
upload_max_filesize = 20M
(20 Megas es suficiente, este es el parámetro que indica el tamaño máximo que puede tener un archivo. Si quieres subir videos a tu instancia, este numero deberá ser mayor)
Buscamos la entrada «post_max_size = 8M» y la modificamos:
post_max_size = 20M
(Deberá tener el mismo valor que «upload_max_filesize»).
Salvamos el archivo y continuamos reiniciando servicio de PHP-FPM con el siguiente comando:
service php8.1-fpm restart
Si no hay errores, verificamos con el siguiente comando que este en ejecucion el php:
pstree -cupa | grep php
Deberemos ver algo asi:
|-php-fpm8.1,1392
| |-php-fpm8.1,1397,www-data
| |-php-fpm8.1,1398,www-data
| |-php-fpm8.1,1393,pixelfed
| |-php-fpm8.1,1394,pixelfed
| |-php-fpm8.1,1395,pixelfed
| `-php-fpm8.1,1396,pixelfed
| |-grep,1405 php
Creamos una base de datos MySQL
Crearemos una base de datos para Pixelfed llamada «pixelfed» (Pero puedes crear la que desees). Para esto como el usuario «root» ingresamos a mysql, no deberá solicitar clave, ya que MariaDB, no la solicita para el usuario de sistemas «root»:
:~# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 30
Server version: 10.5.15-MariaDB-0+deb11u1 Debian 11
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
Una ves dentro del cliente MySQL, ejecutamos la siguiente sentencia para crear la base de datos:
CREATE DATABASE pixelfed ;
Ahora crearemos un usuario para la aplicación que tenga permisos para trabajar en esta base de datos.
GRANT ALL ON pixelfed.* TO pixelfed@localhost IDENTIFIED BY 'the_secure_password';
Tener en cuenta que «the_secure_password» debe ser cambiado por una contraseña un poco mas segura.
Para salir de cliente MySQL, pueden escribir «exit;».cd /
Instalamor PHP Composer
Ejecutamos lo siguiente para instalar el paquete PHP composer:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
Movemos el paquete para finalizar:
mv composer.phar /usr/local/bin/composer
Terminamos de configurar Pixelfed
Utilizamos el usuario «pixelfed» nuevamente, ejecutando:
su -l pixelfed -s /bin/bash ; cd
Verificamos los permisos de los directorios y los archivos, ejecutamos:
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
Esto corregirá cualquier error en los permisos de los archivos y directorios que no esta contemplado el Github.
Instalamos las dependencias
(Aun con el usuario pixelfed)
cd /www/pixelfed/pixelfed ; composer install --no-ansi --no-interaction --optimize-autoloader
Nota: Es posible que tambien necesitemos actualizar alguna dependencia, esto se puede hacer ejecutando dentro del directorio «/www/pixelfed/pixelfed» el siguiente comando:
composer update
Veremos algo asi:
Installing dependencies from lock file (including require-dev)
Verifying lock file contents can be installed on current platform.
Package operations: 181 installs, 0 updates, 0 removals
- Downloading aws/aws-crt-php (v1.0.2)
- Downloading dasprid/enum (1.0.3)
- Downloading bacon/bacon-qr-code (2.0.7)
- Downloading symfony/polyfill-mbstring (v1.26.0)
- Downloading symfony/deprecation-contracts (v3.1.1)
- Downloading symfony/http-foundation (v6.1.7)
- Downloading psr/http-message (1.0.1)
Copiamos en archivo de variables de entorno:
cp .env.example .env
En este archivo podemos cambiar las variables de la configuración de la aplicación, para este ejemplo nos interesan las siguientes líneas:
APP_NAME="Pixelfed"
APP_ENV="production"
APP_KEY= APP_DEBUG="false"
# Instance Configuration
OPEN_REGISTRATION="false"
ENFORCE_EMAIL_VERIFICATION="false"
PF_MAX_USERS="1000"
# Instance URL Configuration
APP_URL="http://pixelfed.int"
APP_DOMAIN="pixelfed.int"
ADMIN_DOMAIN="pixelfed.int"
SESSION_DOMAIN="pixelfed"
# Database Configuration
DB_CONNECTION="mysql"
DB_HOST="127.0.0.1"
DB_PORT="3306"
DB_DATABASE="pixelfed"
DB_USERNAME="pixelfed"
DB_PASSWORD="the_secure_password"
# ActivityPub Configuration ACTIVITY_PUB="true" AP_REMOTE_FOLLOW="true" AP_INBOX="true" AP_OUTBOX="true" AP_SHAREDINBOX="true"
Guardamos y preseguimos.
Ejecución de solo un paso
Estos comandos lo debemos ejecutar con el usuario «pixelfed», dentro de la carpeta «pixelfed»:
su -l pixelfed -s /bin/bash; cd ; cd pixelfed
Ejecuta estos comandos uno, por uno, en caso de error habrá que investigarlo.
php artisan key:generate
php artisan storage:link
php artisan migrate --force
php artisan import:cities
php artisan instance:actor
php artisan passport:keys
php artisan route:cache
php artisan view:cache
php artisan config:cache
Si todo ha ido bien y no tienes errores, pues puedes crear el servicio, esto deberas hacerlo como el usuario «root».
Crearemos el archivo «/etc/systemd/system/pixelfed.service
» con el siguiente contenido:
[Unit]
Description=Pixelfed task queueing via Laravel Horizon
After=network.target
Requires=mariadb
Requires=php-fpm
Requires=redis
Requires=apache
[Service]
Type=simple
ExecStart=/usr/bin/php /www/pixelfed/pixelfed/artisan horizon
User=pixelfed
Restart=on-failure
[Install]
WantedBy=multi-user.target
Habilitamos el servicio con en el systemd con el siguiente comando:
systemctl enable --now pixelfed
Por ultimo como el usuario «pixelfed», crearemos un usuario y agregaremos una en el crontab.
Primero agregamos el usuario ejecutando lo siguiguiente:
php artisan user:create
Nos solicitara algunos datos, como si lo queremos hacer administrador y si deseamos verificar su email manualmente, responderemos que si a todo:
Creating a new user...
Name:
> Gonzalo
Username:
> goxonline
Email:
> goxonline@gmail.com
Password:
>*******
Confirm Password:
>*******
Make this user an admin? (yes/no) [no]:
> yes
Manually verify email address? (yes/no) [no]:
> yes
Are you sure you want to create this user? (yes/no) [no]:
> yes
Created new user!
Agregamos al crontab ejecutando «crontab -e», la siguiente entrada:
* * * * * /usr/bin/php /www/pixelfed/pixelfed/artisan schedule:run >> /dev/null 2>&1
Si todo va bien, ingresa en un navegador a tu dominio, y deberás ver esto:

Y listo!
Cualquier problemas que encuentres, pues déjame un comentario!
Deja una respuesta