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!"
exit
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
msg_info "Stopping Service"
systemctl stop apache2
msg_ok "Stopped Service"
msg_info "Stopping Services"
systemctl stop nginx projectsend-worker
msg_ok "Stopped Services"
php_ver=$(php -v | head -n 1 | awk '{print $2}')
if [[ ! $php_ver == "8.4"* ]]; then
PHP_VERSION="8.4" PHP_APACHE="YES" setup_php
fi
create_backup /opt/projectsend/.env /opt/projectsend/storage/app/files
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" "projectsend-r*.zip"
mv /opt/sys.config.php /opt/projectsend/includes/sys.config.php
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "projectsend" "projectsend/projectsend" "prebuild" "latest" "/opt/projectsend"
restore_backup
msg_info "Updating ProjectSend"
cd /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"
systemctl start apache2
msg_ok "Started Service"
msg_info "Starting Services"
systemctl start nginx projectsend-worker
msg_ok "Started Services"
msg_ok "Updated successfully!"
fi
exit
@@ -61,4 +71,5 @@ description
msg_ok "Completed successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${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
update_os
PHP_VERSION="8.4" PHP_APACHE="YES" setup_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-r*.zip"
msg_info "Installing Dependencies"
$STD apt install -y nginx
msg_ok "Installed Dependencies"
msg_info "Installing ProjectSend"
mv /opt/projectsend/includes/sys.config.sample.php /opt/projectsend/includes/sys.config.php
PHP_VERSION="8.4" PHP_FPM="YES" PHP_MODULE="ldap,pcntl" setup_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
chmod -R 775 /opt/projectsend
chmod 644 /opt/projectsend/includes/sys.config.php
sed -i -e "s/\(define('DB_NAME', \).*/\1'$MARIADB_DB_NAME');/" \
-e "s/\(define('DB_USER', \).*/\1'$MARIADB_DB_USER');/" \
-e "s/\(define('DB_PASSWORD', \).*/\1'$MARIADB_DB_PASS');/" \
/opt/projectsend/includes/sys.config.php
sed -i -e "s/^\(memory_limit = \).*/\1 256M/" \
-e "s/^\(post_max_size = \).*/\1 256M/" \
-e "s/^\(upload_max_filesize = \).*/\1 256M/" \
-e "s/^\(max_execution_time = \).*/\1 300/" \
/etc/php/8.4/apache2/php.ini
msg_ok "Installed projectsend"
chmod -R 775 /opt/projectsend/storage /opt/projectsend/bootstrap/cache
$STD sudo -u www-data php artisan key:generate --force --no-interaction
$STD sudo -u www-data php artisan migrate --force
$STD sudo -u www-data php artisan storage:link --force
$STD sudo -u www-data php artisan projectsend:ensure-roles
$STD sudo -u www-data php artisan projectsend:admin --if-none \
--name="Administrator" \
--email="${ADMIN_EMAIL}" \
--password="${ADMIN_PASSWORD}"
cat <<EOF >~/projectsend.creds
ProjectSend Credentials
Admin Email: ${ADMIN_EMAIL}
Admin Password: ${ADMIN_PASSWORD}
EOF
msg_ok "Configured ProjectSend"
msg_info "Creating Service"
cat <<EOF >/etc/apache2/sites-available/projectsend.conf
<VirtualHost *:80>
ServerName projectsend
DocumentRoot /opt/projectsend
<Directory /opt/projectsend>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
PHP_SOCK=$(get_php_fpm_socket)
cat <<EOF >/etc/nginx/sites-available/projectsend.conf
server {
listen 80 default_server;
server_name _;
root /opt/projectsend/public;
index index.php;
ErrorLog /var/log/apache2/projectsend_error.log
CustomLog /var/log/apache2/projectsend_access.log combined
</VirtualHost>
client_max_body_size 100m;
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
$STD a2ensite projectsend
$STD a2enmod rewrite
$STD a2dissite 000-default.conf
$STD systemctl reload apache2
nginx_enable_site projectsend.conf
cat <<EOF >/etc/systemd/system/projectsend-worker.service
[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"
motd_ssh