Skip to content

Deploying ProjectSend

Introduction

ProjectSend is an open-source, self-hosted file sharing platform designed to facilitate secure file exchange between you and your clients. Unlike generic cloud storage solutions, ProjectSend is purpose-built for client file management with features like client groups, file categories, and detailed access controls.

Built with PHP and MySQL, ProjectSend offers a professional interface that can be customized with your branding. It’s ideal for agencies, freelancers, and businesses that need to share project files, deliverables, or documents with external parties.

Key highlights of ProjectSend:

  • Client Management: Create client accounts with individual access
  • Group Sharing: Organize clients into groups for batch file sharing
  • File Categories: Organize files with customizable categories
  • Upload Tracking: Monitor who downloads what and when
  • Email Notifications: Automatic notifications for new files
  • Custom Branding: White-label with your logo and colors
  • Access Expiration: Set file and account expiration dates
  • Activity Logging: Complete audit trail of all actions
  • Multi-Language: Available in multiple languages
  • Open Source: Licensed under GPL v2

This guide walks through deploying ProjectSend on Klutch.sh using Docker.

Why Deploy ProjectSend on Klutch.sh

Deploying ProjectSend on Klutch.sh provides several advantages:

Simplified Deployment: Klutch.sh automatically detects your Dockerfile and builds ProjectSend without complex configuration.

Persistent Storage: Attach persistent volumes for uploaded files and database.

HTTPS by Default: Klutch.sh provides automatic SSL certificates for secure file transfers.

GitHub Integration: Connect your repository directly from GitHub for automatic deployments.

Scalable Storage: Allocate storage based on your file sharing needs.

Custom Domains: Assign a custom domain for professional client access.

Prerequisites

Before deploying ProjectSend on Klutch.sh, ensure you have:

  • A Klutch.sh account
  • A GitHub account with a repository for your ProjectSend configuration
  • A MySQL or MariaDB database
  • Basic familiarity with Docker and containerization concepts
  • (Optional) A custom domain for your ProjectSend instance
  • (Optional) SMTP credentials for email notifications

Preparing Your Repository

Create a GitHub repository containing your Dockerfile for ProjectSend deployment.

Repository Structure

projectsend-deploy/
├── Dockerfile
├── php.ini
└── .dockerignore

Creating the Dockerfile

Create a Dockerfile in the root of your repository:

FROM php:8.1-apache
# Install dependencies
RUN apt-get update && apt-get install -y \
libpng-dev \
libjpeg-dev \
libfreetype6-dev \
libzip-dev \
unzip \
git \
&& rm -rf /var/lib/apt/lists/*
# Configure and install PHP extensions
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) \
gd \
mysqli \
pdo_mysql \
zip
# Enable Apache modules
RUN a2enmod rewrite headers
# Clone ProjectSend
RUN git clone https://github.com/projectsend/projectsend.git /var/www/html \
&& rm -rf /var/www/html/.git
# Copy PHP configuration
COPY php.ini /usr/local/etc/php/conf.d/projectsend.ini
# Create upload directory
RUN mkdir -p /var/www/html/upload/files \
&& mkdir -p /var/www/html/upload/temp \
&& chown -R www-data:www-data /var/www/html \
&& chmod -R 755 /var/www/html
# Set proper permissions for upload directory
RUN chmod -R 775 /var/www/html/upload
EXPOSE 80
CMD ["apache2-foreground"]

Creating php.ini Configuration

Create a php.ini file with recommended settings:

; ProjectSend PHP Configuration
; Memory limit
memory_limit = 256M
; Upload settings
upload_max_filesize = 500M
post_max_size = 500M
; Execution time
max_execution_time = 600
max_input_time = 600
; Error reporting
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = Off
log_errors = On
; Session settings
session.gc_maxlifetime = 3600
; Timezone
date.timezone = UTC

Creating the .dockerignore File

Create a .dockerignore file:

.git
.github
*.md
LICENSE
.gitignore
*.log
.DS_Store

Deploying ProjectSend on Klutch.sh

    Push Your Repository to GitHub

    Initialize your repository and push to GitHub:

    Terminal window
    git init
    git add Dockerfile php.ini .dockerignore
    git commit -m "Initial ProjectSend deployment configuration"
    git remote add origin https://github.com/yourusername/projectsend-deploy.git
    git push -u origin main

    Create a New Project on Klutch.sh

    Navigate to the Klutch.sh dashboard and create a new project. Give it a descriptive name like “projectsend” or “file-sharing”.

    Create a New App

    Within your project, create a new app. Connect your GitHub account if you haven’t already, then select the repository containing your ProjectSend Dockerfile.

    Configure HTTP Traffic

    In the deployment settings:

    • Select HTTP as the traffic type
    • Set the internal port to 80

    Set Environment Variables

    Add the following environment variables:

    VariableValue
    DB_HOSTYour database host
    DB_NAMEprojectsend
    DB_USERYour database user
    DB_PASSWORDYour database password

    Attach Persistent Volumes

    Add the following volumes:

    Mount PathRecommended SizePurpose
    /var/www/html/upload100+ GBFile storage (adjust based on needs)
    /var/www/html/includes100 MBConfiguration files

    Deploy Your Application

    Click Deploy to start the build process. Klutch.sh will:

    • Detect your Dockerfile automatically
    • Build the container image
    • Attach the persistent volumes
    • Start the ProjectSend container
    • Provision an HTTPS certificate

    Complete Installation

    Access your ProjectSend instance at https://your-app-name.klutch.sh/install and complete the setup:

    1. Enter database connection details
    2. Create administrator account
    3. Configure basic settings
    4. Complete installation

Initial Configuration

Setting Up Your Instance

  1. Log in as administrator
  2. Go to Options to configure system settings
  3. Set your site name and description
  4. Configure email settings for notifications
  5. Upload your logo for branding

Creating Clients

  1. Navigate to Clients section
  2. Click Add New Client
  3. Enter client name and email
  4. Set account credentials
  5. Configure access permissions

Creating Groups

  1. Go to Groups section
  2. Create groups for client organization
  3. Add clients to appropriate groups
  4. Use groups for bulk file sharing

Uploading and Sharing Files

Uploading Files

  1. Click Upload in the main menu
  2. Select or drag files to upload
  3. Choose category and add description
  4. Select clients or groups to share with
  5. Set expiration date if needed
  6. Complete upload

Managing Files

ActionDescription
EditModify file details and sharing
DeleteRemove file from system
DownloadDownload file as admin
ViewSee download statistics

Client Experience

Clients can:

  • Log in to their personalized dashboard
  • View and download shared files
  • See file categories and descriptions
  • Receive email notifications for new files

Email Configuration

Configure SMTP for email notifications:

  1. Go to Options > Email
  2. Enable email notifications
  3. Enter SMTP server details:
    • SMTP host and port
    • Username and password
    • Encryption (TLS/SSL)
  4. Configure notification triggers
  5. Test email configuration

Customization

Branding

Customize your instance appearance:

  1. Upload company logo
  2. Set custom colors
  3. Modify email templates
  4. Configure footer text

File Categories

Create categories to organize files:

  1. Go to Categories
  2. Add new category
  3. Set category name and description
  4. Assign files to categories

Troubleshooting Common Issues

File Upload Failures

Solutions:

  • Check PHP upload limits in configuration
  • Verify storage space availability
  • Ensure upload directory permissions
  • Check for file type restrictions

Email Not Sending

Solutions:

  • Verify SMTP credentials
  • Check SMTP server connectivity
  • Review email configuration settings
  • Check server error logs

Client Cannot Access Files

Solutions:

  • Verify client account is active
  • Check file sharing settings
  • Ensure file hasn’t expired
  • Confirm client group membership

Additional Resources

Conclusion

Deploying ProjectSend on Klutch.sh gives you a professional, self-hosted file sharing platform for managing client deliverables. With features like client management, access controls, and custom branding, ProjectSend provides a polished experience that reflects well on your business.

Whether you’re an agency sharing creative assets, a consultant delivering reports, or a business exchanging documents with partners, ProjectSend offers the organization and security you need for professional file sharing.