Skip to content

Instantly share code, notes, and snippets.

@carbontwelve
Last active October 19, 2018 23:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save carbontwelve/024c68c68605dc581474145eda74ac38 to your computer and use it in GitHub Desktop.
Save carbontwelve/024c68c68605dc581474145eda74ac38 to your computer and use it in GitHub Desktop.
Installing PHP7.2 on Debian 9 for pixelfed and pleroma

Installing dependencies for Pleroma and Pixelfed

This is an install guide for getting pixelfed and pleroma installed and sharing a dedicated server running Debian 9.

Todo

Notes

  • php7.2-curl is needed by Guzzle when using mailgun in API mode

References

  • Redis Install Guide followed from here
  • Postgres install guide followed from here
  • PHP-FPM install guide followed from here
  • Lets encrypt install guide followed from here
#!/bin/bash
# Helper function for making passwords
make_password () {
PASS=`< /dev/urandom tr -dc A-Za-z0-9 | head -c28;`
}
if [ "$(whoami)" != "root" ]; then
SUDO=sudo
fi
cd ~
# Install sury.org package source
${SUDO} apt-get update
${SUDO} apt-get -y install apt-transport-https lsb-release ca-certificates
${SUDO} wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
${SUDO} sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
${SUDO} apt-get update
# Install Erlang Solutions repo
${SUDO} wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all.deb
${SUDO} apt-get update
# Install Elixir
${SUDO} apt-get install -y erlang-dev erlang-xmerl erlang-parsetools elixir
# Install Node.js 10.x
${SUDO} wget -qO- https://deb.nodesource.com/setup_10.x | sudo -E bash -
${SUDO} apt-get install -y nodejs build-essential
# Install Git, htop, bmon, mc and misc tools required by pixelfed
${SUDO} apt-get install -y git htop bmon mc pngquant optipng jpegoptim gifsicle
# Install PHP 7.2 FPM + additional extensions requiredd by pixelfed
${SUDO} apt-get install -y php7.2-fpm php7.2 php7.2-common php7.2-cli php7.2-gd php7.2-mbstring php7.2-xml php7.2-json php7.2-bcmath php7.2-pgsql php7.2-curl
# Install Nginx, Redis and Postgres
${SUDO} apt-get install -y nginx redis-server postgresql
# Configure Redis supervised by systemd
${SUDO} sed -i "s/supervised no/supervised systemd/" /etc/redis/redis.conf
${SUDO} systemctl restart redis
# Install svgo required by pixelfed
${SUDO} npm install -g svgo
# Install composer
${SUDO} curl -s https://getcomposer.org/installer | php
${SUDO} mv composer.phar /usr/local/bin/composer
${SUDO} chmod +x /usr/local/bin/composer
# Create pixelfed user/group
${SUDO} groupadd pixelfed
${SUDO} useradd -g pixelfed pixelfed
# Create pixelfed php pool
${SUDO} cp ./pixelfed.fpm.conf /etc/php/7.2/fpm/pool.d/pixelfed.conf
${SUDO} systemctl restart php7.2-fpm
# Create pixelfed vhost directory
${SUDO} mkdir /var/www/vhosts
${SUDO} mkdir /var/www/vhosts/pixelfed
${SUDO} mkdir /var/www/vhosts/pixelfed/httpdocs
${SUDO} mkdir /var/www/vhosts/pixelfed/logs
# Install pixelfed into vhost
${SUDO} git clone https://github.com/dansup/pixelfed.git /var/www/vhosts/pixelfed/httpdocs
${SUDO} chown pixelfed:pixelfed /var/www/vhosts/pixelfed/httpdocs/ -R
${SUDO} su pixelfed -c 'cd /var/www/vhosts/pixelfed/httpdocs && composer install'
${SUDO} su pixelfed -c 'cp /var/www/vhosts/pixelfed/httpdocs/.env.example /var/www/vhosts/pixelfed/httpdocs/.env'
${SUDO} su pixelfed -c 'cd /var/www/vhosts/pixelfed/httpdocs && php artisan key:generate'
${SUDO} su pixelfed -c 'cd /var/www/vhosts/pixelfed/httpdocs && php artisan storage:link'
# Create pixelfed database user and database
make_password
sudo -u postgres psql --command "CREATE ROLE pixelfed PASSWORD '${PASS}' NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN"
sudo -u postgres createdb -O pixelfed pixelfed_prod
${SUDO} sed -i "s/DB_CONNECTION=.*/DB_CONNECTION=pgsql/" /var/www/vhosts/pixelfed/httpdocs/.env
${SUDO} sed -i "s/DB_DATABASE=.*/DB_DATABASE=pixelfed_prod/" /var/www/vhosts/pixelfed/httpdocs/.env
${SUDO} sed -i "s/DB_USERNAME=.*/DB_USERNAME=pixelfed/" /var/www/vhosts/pixelfed/httpdocs/.env
${SUDO} sed -i "s/DB_PASSWORD=.*/DB_PASSWORD=${PASS}/" /var/www/vhosts/pixelfed/httpdocs/.env
${SUDO} sed -i "s/DB_PORT=.*/DB_PORT=5432/" /var/www/vhosts/pixelfed/httpdocs/.env
${SUDO} su pixelfed -c 'cd /var/www/vhosts/pixelfed/httpdocs && php artisan migrate'
# Create pleroma user/group
${SUDO} groupadd pleroma
${SUDO} useradd -g pleroma pleroma
# Create pleroma vhost directory
${SUDO} mkdir /var/www/vhosts/pleroma
${SUDO} mkdir /var/www/vhosts/pleroma/httpdocs
${SUDO} mkdir /var/www/vhosts/pleroma/logs
${SUDO} git clone https://git.pleroma.social/pleroma/pleroma.git /var/www/vhosts/pleroma/httpdocs
${SUDO} chown -R pleroma:pleroma /var/www/vhosts/pleroma/httpdocs
# Lets Encrypt
${SUDO} apt-get install -y python-certbot-nginx -t stretch-backports
[pixelfed]
user = pixelfed
group = pixelfed
listen = /var/run/php5-fpm-pixelfed.sock
listen.owner = www-data
listen.group = www-data
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
php_admin_flag[allow_url_fopen] = off
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
chdir = /
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment