Compare commits

...

1 Commits

Author SHA1 Message Date
MickLesk 73b44d03d4 projectsend: rewrite for 2.0.0 (Laravel, nginx, MariaDB) 2026-08-14 09:25:55 +02:00
2 changed files with 121 additions and 50 deletions
+27 -16
View File
@@ -28,27 +28,37 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
setup_mariadb
if [[ -f /opt/projectsend/includes/sys.config.php ]]; then
msg_error "This container runs ProjectSend Legacy (pre-2.0)."
msg_error "2.0 is a new application, not an update - there is no in-place upgrade."
msg_error "Set up a fresh ProjectSend container and use projectsend/v1-migration-tool to bring your data across."
exit
fi
if check_for_gh_release "projectsend" "projectsend/projectsend"; then if check_for_gh_release "projectsend" "projectsend/projectsend"; then
msg_info "Stopping Service" msg_info "Stopping Services"
systemctl stop apache2 systemctl stop nginx projectsend-worker
msg_ok "Stopped Service" msg_ok "Stopped Services"
php_ver=$(php -v | head -n 1 | awk '{print $2}') create_backup /opt/projectsend/.env /opt/projectsend/storage/app/files
if [[ ! $php_ver == "8.4"* ]]; then
PHP_VERSION="8.4" PHP_APACHE="YES" setup_php
fi
mv /opt/projectsend/includes/sys.config.php /opt/sys.config.php CLEAN_INSTALL=1 fetch_and_deploy_gh_release "projectsend" "projectsend/projectsend" "prebuild" "latest" "/opt/projectsend"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "projectsend" "projectsend/projectsend" "prebuild" "latest" "/opt/projectsend" "projectsend-r*.zip"
mv /opt/sys.config.php /opt/projectsend/includes/sys.config.php restore_backup
msg_info "Updating ProjectSend"
cd /opt/projectsend
chown -R www-data:www-data /opt/projectsend chown -R www-data:www-data /opt/projectsend
chmod -R 775 /opt/projectsend chmod -R 775 /opt/projectsend/storage /opt/projectsend/bootstrap/cache
$STD sudo -u www-data php artisan migrate --force
$STD sudo -u www-data php artisan projectsend:ensure-roles
$STD sudo -u www-data php artisan optimize:clear
msg_ok "Updated ProjectSend"
msg_info "Starting Service" msg_info "Starting Services"
systemctl start apache2 systemctl start nginx projectsend-worker
msg_ok "Started Service" msg_ok "Started Services"
msg_ok "Updated successfully!" msg_ok "Updated successfully!"
fi fi
exit exit
@@ -61,4 +71,5 @@ description
msg_ok "Completed successfully!\n" msg_ok "Completed successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW}Access it using the following URL:${CL}" echo -e "${INFO}${YW}Access it using the following URL:${CL}"
echo -e "${GATEWAY}${BGN}http://${IP}/install for the initial setup${CL}" echo -e "${GATEWAY}${BGN}http://${IP}${CL}"
echo -e "${INFO}${YW}Admin credentials saved to ~/projectsend.creds${CL}"
+94 -34
View File
@@ -13,46 +13,106 @@ setting_up_container
network_check network_check
update_os update_os
PHP_VERSION="8.4" PHP_APACHE="YES" setup_php msg_info "Installing Dependencies"
setup_mariadb $STD apt install -y nginx
MARIADB_DB_NAME="projectsend" MARIADB_DB_USER="projectsend" setup_mariadb_db msg_ok "Installed Dependencies"
fetch_and_deploy_gh_release "projectsend" "projectsend/projectsend" "prebuild" "latest" "/opt/projectsend" "projectsend-r*.zip"
msg_info "Installing ProjectSend" PHP_VERSION="8.4" PHP_FPM="YES" PHP_MODULE="ldap,pcntl" setup_php
mv /opt/projectsend/includes/sys.config.sample.php /opt/projectsend/includes/sys.config.php setup_mariadb
MARIADB_DB_NAME="projectsend"
MARIADB_DB_USER="projectsend"
setup_mariadb_db
fetch_and_deploy_gh_release "projectsend" "projectsend/projectsend" "prebuild" "latest" "/opt/projectsend" "projectsend-*.zip"
msg_info "Configuring ProjectSend"
cd /opt/projectsend
cp .env.example .env
ADMIN_EMAIL="admin@example.com"
ADMIN_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
sed -i \
-e "s|^APP_ENV=.*|APP_ENV=production|" \
-e "s|^APP_DEBUG=.*|APP_DEBUG=false|" \
-e "s|^APP_URL=.*|APP_URL=http://${LOCAL_IP}|" \
-e "s|^DB_HOST=.*|DB_HOST=localhost|" \
-e "s|^DB_DATABASE=.*|DB_DATABASE=${MARIADB_DB_NAME}|" \
-e "s|^DB_USERNAME=.*|DB_USERNAME=${MARIADB_DB_USER}|" \
-e "s|^DB_PASSWORD=.*|DB_PASSWORD=${MARIADB_DB_PASS}|" \
-e "s|^SESSION_DRIVER=.*|SESSION_DRIVER=database|" \
-e "s|^CACHE_STORE=.*|CACHE_STORE=database|" \
-e "s|^QUEUE_CONNECTION=.*|QUEUE_CONNECTION=database|" \
.env
chown -R www-data:www-data /opt/projectsend chown -R www-data:www-data /opt/projectsend
chmod -R 775 /opt/projectsend chmod -R 775 /opt/projectsend/storage /opt/projectsend/bootstrap/cache
chmod 644 /opt/projectsend/includes/sys.config.php $STD sudo -u www-data php artisan key:generate --force --no-interaction
sed -i -e "s/\(define('DB_NAME', \).*/\1'$MARIADB_DB_NAME');/" \ $STD sudo -u www-data php artisan migrate --force
-e "s/\(define('DB_USER', \).*/\1'$MARIADB_DB_USER');/" \ $STD sudo -u www-data php artisan storage:link --force
-e "s/\(define('DB_PASSWORD', \).*/\1'$MARIADB_DB_PASS');/" \ $STD sudo -u www-data php artisan projectsend:ensure-roles
/opt/projectsend/includes/sys.config.php $STD sudo -u www-data php artisan projectsend:admin --if-none \
sed -i -e "s/^\(memory_limit = \).*/\1 256M/" \ --name="Administrator" \
-e "s/^\(post_max_size = \).*/\1 256M/" \ --email="${ADMIN_EMAIL}" \
-e "s/^\(upload_max_filesize = \).*/\1 256M/" \ --password="${ADMIN_PASSWORD}"
-e "s/^\(max_execution_time = \).*/\1 300/" \ cat <<EOF >~/projectsend.creds
/etc/php/8.4/apache2/php.ini ProjectSend Credentials
msg_ok "Installed projectsend" Admin Email: ${ADMIN_EMAIL}
Admin Password: ${ADMIN_PASSWORD}
EOF
msg_ok "Configured ProjectSend"
msg_info "Creating Service" msg_info "Creating Service"
cat <<EOF >/etc/apache2/sites-available/projectsend.conf PHP_SOCK=$(get_php_fpm_socket)
<VirtualHost *:80> cat <<EOF >/etc/nginx/sites-available/projectsend.conf
ServerName projectsend server {
DocumentRoot /opt/projectsend listen 80 default_server;
<Directory /opt/projectsend> server_name _;
Options FollowSymLinks root /opt/projectsend/public;
AllowOverride All index index.php;
Require all granted
</Directory>
ErrorLog /var/log/apache2/projectsend_error.log client_max_body_size 100m;
CustomLog /var/log/apache2/projectsend_access.log combined
</VirtualHost> location / {
try_files \$uri \$uri/ /index.php?\$query_string;
}
location /protected-files/ {
internal;
alias /opt/projectsend/storage/app/files/;
}
location ~ \.php\$ {
try_files \$uri =404;
fastcgi_pass unix:${PHP_SOCK};
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name;
include fastcgi_params;
fastcgi_buffer_size 32k;
fastcgi_buffers 8 32k;
}
location ~ /\.(?!well-known) {
deny all;
}
}
EOF EOF
$STD a2ensite projectsend nginx_enable_site projectsend.conf
$STD a2enmod rewrite
$STD a2dissite 000-default.conf cat <<EOF >/etc/systemd/system/projectsend-worker.service
$STD systemctl reload apache2 [Unit]
Description=ProjectSend queue worker
After=network.target mariadb.service
[Service]
User=www-data
Group=www-data
Restart=always
WorkingDirectory=/opt/projectsend
ExecStart=/usr/bin/php artisan queue:work --tries=3 --backoff=3
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now projectsend-worker
echo "* * * * * cd /opt/projectsend && php artisan schedule:run >> /dev/null 2>&1" | crontab -u www-data -
msg_ok "Created Service" msg_ok "Created Service"
motd_ssh motd_ssh