#!/bin/bash toolName="pixelfed" toolDeps="composer jpegoptim php7.2-bcmath" toolPath="/var/www/pixelfed" step_1_info() { echo "Updating apt"; } step_1_alias() { ALIAS="install"; } step_1() { exe apt update } step_2_info() { echo -e "Installing $toolname dependencies: $toolDeps"; } step_2() { exe apt install $toolDeps -y saveReturn $? endReturn exe service php7.2-fpm restart } step_3_info() { echo -e "Get $toolName using git"; } step_3() { #exe git clone https://github.com/dansup/pixelfed $toolPath exe chown -R www-data: $toolPath cd $toolPath exe composer install --no-dev saveReturn $? endReturn } step_4_info() { echo "Create mysql database for $toolName"; } step_4() { local mysqlDatabase local mysqlUser local mysqlPass echo "Existing mysql databases:" exe mysql -u root -e 'SHOW DATABASES;' echo -en "Enter database name: " read mysqlDatabase endCheckEmpty mysqlDatabase "database name" exe mysql -u root -e 'CREATE DATABASE '$mysqlDatabase' CHARACTER SET utf8mb4;' saveReturn $? endReturn echo "Existing mysql user:" exe mysql -u root -e 'SELECT User, Host FROM mysql.user;' echo -en "Enter mysql user name: " read mysqlUser endCheckEmpty mysqlDatabase "user name" echo -en "Enter mysql user password: " read mysqlPass endCheckEmpty mysqlPass "password" exe mysql -u root -e 'CREATE USER '"'"$mysqlUser"'"'@'"'"'localhost'"'"' IDENTIFIED BY '"'"$mysqlPass"'"';' saveReturn $? endReturn exe mysql -u root -e 'GRANT ALL PRIVILEGES ON '$mysqlDatabase'.* TO '"'"$mysqlUser"'"'@'"'"'localhost'"'"';' saveReturn $? endReturn exe mysql -u root -e 'FLUSH PRIVILEGES;' } step_5_info() { echo "$toolName configuration"; } step_5() { cd $toolPath exe cp .env.example .env exe php artisan key:generate exe php artisan storage:link read -p "Edit database settings, hostname, etc... (Enter to continue)" exe vi .env echo echo "Include following changes (all occurences) to fix mysql support:" echo "return $this->addColumn('json', $column);" echo "to" echo "return $this->addColumn('text', $column);" read -p "Enter to open $blueprintHack" exe vi $blueprintHack exe php artisan migrate:fresh } blueprintHack="${toolPath}/vendor/laravel/framework/src/Illuminate/Database/Schema/Blueprint.php" step_6_info() { echo "Create admin user"; } step_6() { cd $toolPath read -p "Create admin user. (Enter to continue)" exe php artisan user:create } step_7_info() { echo "Create pixelfed (horzion) service"; } step_7() { addConf "${horizonService}" "${horizonServiceLoc}" exe systemctl daemon-reload exe systemctl enable pixelfed.service exe service pixelfed start } horizonServiceLoc="/etc/systemd/system/pixelfed.service" horizonService="\ [Unit] Description=Pixelfeds' Horizon After=syslog.target After=network.target #Requires=mysql.service Requires=mariadb.service #Requires=postgresql.service #Requires=memcached.service #Requires=redis.service [Service] # Modify these two values and uncomment them if you have # repos with lots of files and get an HTTP error 500 because # of that ### #LimitMEMLOCK=infinity #LimitNOFILE=65535 RestartSec=2s Type=simple User=www-data Group=www-data WorkingDirectory=/var/www/pixelfed/ ExecStart=/usr/bin/php /var/www/pixelfed/artisan horizon Restart=always Environment= [Install] WantedBy=multi-user.target" step_8_info() { echo "Nginx configuration"; } step_8() { addConf "$nginxConfig" "$nginxConfigLoc" exe ln -s "$nginxConfigLoc" "$nginxConfigEnable" exe nginx -t saveReturn $? endReturn exe service nginx restart } nginxConfigLoc="/etc/nginx/sites-available/pixelfed" nginxConfigEnable="/etc/nginx/sites-enabled/pixelfed" nginxConfig="\ upstream php-handler-pixel { server unix:/var/run/php/php7.2-fpm.sock; } map \$http_x_forwarded_proto \$proxy_https { default ''; https 'on'; } server { listen 80; listen [::]:80; add_header X-Frame-Options \"SAMEORIGIN\"; add_header X-XSS-Protection \"1; mode=block\"; add_header X-Content-Type-Options \"nosniff\"; # Path to the root of your installation root ${toolPath}/public; index index.php index.html; charset utf-8; client_max_body_size 64M; location / { try_files \$uri \$uri/ /\$is_args\$args; #try_files \$uri \$uri/ /index.php?\$query_string; } location ~ \\.php$ { try_files \$uri =404; fastcgi_split_path_info ^(.+\\.php)(/.+)$; fastcgi_pass php-handler-pixel; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME \$request_filename; fastcgi_param PATH_INFO \$fastcgi_path_info; # fix preview problem fastcgi_param REQUEST_SCHEME \$http_x_forwarded-proto; fastcgi_param HTTPS \$proxy_https if_not_empty; } }" step_20_info() { echo "Reload configuration (.env)"; } step_20_alias() { ALIAS="newenv"; } step_20() { cd $toolPath exe php artisan config:cache } step_22_info() { echo "Create new user"; } step_22_alias() { ALIAS="createuser"; } step_22() { cd $toolPath exe php artisan user:create } # Sequence Revision VERSION_SEQREV=2 # Workaround when called from different directory # Not needed when path to sequencer is absolut DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >>/dev/null 2>&1 && pwd )" # Path to sequencer . ${DIR}/../sequencer/sequencer.sh