#!/usr/bin/env bash # Copyright (c) 2021-2024 tteck # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT # https://github.com/tteck/Proxmox/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color verb_ip6 catch_errors setting_up_container network_check update_os msg_info "Installing Dependencies (Patience)" $STD apt-get install -y \ build-essential \ gpg \ curl \ sudo \ git \ gnupg2 \ ca-certificates \ lsb-release \ php8.3-{fpm,bcmath,ctype,curl,exif,gd,iconv,intl,mbstring,redis,tokenizer,xml,zip,pgsql,pdo-pgsql,bz2,sqlite3} \ composer \ redis-server \ ffmpeg \ jpegoptim \ optipng \ pngquant \ make \ mc msg_ok "Installed Dependencies" msg_info "Configure Redis Socket" REDIS_PASS="$(openssl rand -base64 18 | cut -c1-13)" sed -i 's/^port .*/port 0/' /etc/redis/redis.conf sed -i "s/^# requirepass foobared/requirepass $REDIS_PASS/" /etc/redis/redis.conf sed -i 's|^# unixsocket .*|unixsocket /run/redis/redis.sock|' /etc/redis/redis.conf sed -i 's/^# unixsocketperm .*/unixsocketperm 770/' /etc/redis/redis.conf systemctl restart redis msg_ok "Redis Socket configured" #msg_info "Add pixelfed user" #useradd -rU -s /bin/bash pixelfed #msg_ok "Pixelfed User Added" #msg_info "Configure PHP-FPM for Pixelfed" #cp /etc/php/8.2/fpm/pool.d/www.conf /etc/php/8.2/fpm/pool.d/pixelfed.conf #sed -i 's/\[www\]/\[pixelfed\]/' /etc/php/8.2/fpm/pool.d/pixelfed.conf #sed -i 's/^user = www-data/user = pixelfed/' /etc/php/8.2/fpm/pool.d/pixelfed.conf #sed -i 's/^group = www-data/group = pixelfed/' /etc/php/8.2/fpm/pool.d/pixelfed.conf #sed -i 's|^listen = .*|listen = /run/php-fpm/pixelfed.sock|' /etc/php/8.2/fpm/pool.d/pixelfed.conf #systemctl restart php8.2-fpm #msg_ok "successfully configured PHP-FPM" msg_info "Setup Postgres Database" DB_NAME=pixelfed_db DB_USER=pixelfed_user DB_PASS="$(openssl rand -base64 18 | cut -c1-13)" curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc|gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg echo "deb https://apt.postgresql.org/pub/repos/apt bookworm-pgdg main" >/etc/apt/sources.list.d/pgdg.list apt-get update apt-get install -y postgresql-17 sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';" sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMPLATE template0;" sudo -u postgres psql -c "ALTER DATABASE $DB_NAME OWNER TO $DB_USER;" sudo -u postgres psql -c "GRANT CREATE ON SCHEMA public TO $DB_USER;" echo "" >>~/pixelfed.creds echo -e "Pixelfed Database Name: $DB_NAME" >>~/pixelfed.creds echo -e "Pixelfed Database User: $DB_USER" >>~/pixelfed.creds echo -e "Pixelfed Database Password: $DB_PASS" >>~/pixelfed.creds #export $(cat /opt/pixelfed/.env |grep "^[^#]" | xargs) msg_ok "Set up PostgreSQL Database successfully" msg_info "Installing Pixelfed (Patience)" RELEASE=$(curl -s https://api.github.com/repos/pixelfed/pixelfed/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') wget -q "https://github.com/pixelfed/pixelfed/archive/refs/tags/${RELEASE}.zip" unzip -q ${RELEASE}.zip mv pixelfed-${RELEASE:1} /opt/pixelfed rm -R ${RELEASE}.zip cd /opt/pixelfed #sudo chown -R www-data:www-data . #sudo find . -type d -exec chmod 755 {} \; #sudo find . -type f -exec chmod 644 {} \; chown -R www-data:www-data /opt/pixelfed chmod -R 755 /opt/pixelfed COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev --no-ansi --no-interaction --optimize-autoloader msg_info "Setup envoirement & PHP Database Migration" cp .env.example .env sed -i "s/DB_CONNECTION=.*/DB_CONNECTION=pgsql/" .env sed -i "s/DB_PORT=.*/DB_PORT=5432/" .env sed -i "s/DB_DATABASE=.*/DB_DATABASE=$DB_NAME/" .env sed -i "s/DB_USERNAME=.*/DB_USERNAME=$DB_USER/" .env sed -i "s/DB_PASSWORD=.*/DB_PASSWORD=$DB_PASS/" .env sed -i "s/REDIS_HOST=.*/REDIS_HOST=127.0.0.1/" .env sed -i "s/REDIS_PASSWORD=.*/REDIS_PASSWORD=$REDIS_PASS/" .env sed -i "s/APP_URL=.*/APP_URL=http:\/\/localhost/" .env # localhost URL 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 msg_ok "Pixelfed successfully set up" msg_info "Creating Services" cat </etc/supervisor/conf.d/pixelfed-worker.conf [program:pixelfed-worker] command=/usr/bin/php /opt/pixelfed/artisan queue:work autostart=true autorestart=true user=root numprocs=1 redirect_stderr=true stdout_logfile=/opt/pixelfed/storage/logs/worker.log EOL EOF supervisorctl reread supervisorctl update supervisorctl start pixelfed-worker cat </etc/nginx/sites-available/pixelfed.conf server { listen 80; server_name localhost; # Nutzung von localhost root /opt/pixelfed/public; index index.php; location / { try_files \$uri \$uri/ /index.php?\$query_string; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name; include fastcgi_params; } location ~ /\.(?!well-known).* { deny all; } client_max_body_size 20M; } EOF ln -s /etc/nginx/sites-available/pixelfed.conf /etc/nginx/sites-enabled/ nginx -t && systemctl reload nginx #cat </etc/systemd/system/pixelfed.service #[Unit] #Description=Pixelfed task queueing via Laravel Horizon #After=network.target #Requires=postgresql #Requires=php-fpm #Requires=redis #[Service] #Type=simple #ExecStart=/usr/bin/php /opt/pixelfed/artisan serve --host=0.0.0.0 --port=8000 #WorkingDirectory=/opt/pixelfed #User=root #Restart=on-failure #[Install] #WantedBy=multi-user.target #EOF #systemctl enable -q --now pixelfed.service msg_ok "Created Services" motd_ssh customize msg_info "Cleaning up" $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned"