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└── .dockerignoreCreating the Dockerfile
Create a Dockerfile in the root of your repository:
FROM php:8.1-apache
# Install dependenciesRUN 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 extensionsRUN docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install -j$(nproc) \ gd \ mysqli \ pdo_mysql \ zip
# Enable Apache modulesRUN a2enmod rewrite headers
# Clone ProjectSendRUN git clone https://github.com/projectsend/projectsend.git /var/www/html \ && rm -rf /var/www/html/.git
# Copy PHP configurationCOPY php.ini /usr/local/etc/php/conf.d/projectsend.ini
# Create upload directoryRUN 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 directoryRUN 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 limitmemory_limit = 256M
; Upload settingsupload_max_filesize = 500Mpost_max_size = 500M
; Execution timemax_execution_time = 600max_input_time = 600
; Error reportingerror_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICTdisplay_errors = Offlog_errors = On
; Session settingssession.gc_maxlifetime = 3600
; Timezonedate.timezone = UTCCreating the .dockerignore File
Create a .dockerignore file:
.git.github*.mdLICENSE.gitignore*.log.DS_StoreDeploying ProjectSend on Klutch.sh
- Select HTTP as the traffic type
- Set the internal port to 80
- Detect your Dockerfile automatically
- Build the container image
- Attach the persistent volumes
- Start the ProjectSend container
- Provision an HTTPS certificate
- Enter database connection details
- Create administrator account
- Configure basic settings
- Complete installation
Push Your Repository to GitHub
Initialize your repository and push to GitHub:
git initgit add Dockerfile php.ini .dockerignoregit commit -m "Initial ProjectSend deployment configuration"git remote add origin https://github.com/yourusername/projectsend-deploy.gitgit push -u origin mainCreate 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:
Set Environment Variables
Add the following environment variables:
| Variable | Value |
|---|---|
DB_HOST | Your database host |
DB_NAME | projectsend |
DB_USER | Your database user |
DB_PASSWORD | Your database password |
Attach Persistent Volumes
Add the following volumes:
| Mount Path | Recommended Size | Purpose |
|---|---|---|
/var/www/html/upload | 100+ GB | File storage (adjust based on needs) |
/var/www/html/includes | 100 MB | Configuration files |
Deploy Your Application
Click Deploy to start the build process. Klutch.sh will:
Complete Installation
Access your ProjectSend instance at https://your-app-name.klutch.sh/install and complete the setup:
Initial Configuration
Setting Up Your Instance
- Log in as administrator
- Go to Options to configure system settings
- Set your site name and description
- Configure email settings for notifications
- Upload your logo for branding
Creating Clients
- Navigate to Clients section
- Click Add New Client
- Enter client name and email
- Set account credentials
- Configure access permissions
Creating Groups
- Go to Groups section
- Create groups for client organization
- Add clients to appropriate groups
- Use groups for bulk file sharing
Uploading and Sharing Files
Uploading Files
- Click Upload in the main menu
- Select or drag files to upload
- Choose category and add description
- Select clients or groups to share with
- Set expiration date if needed
- Complete upload
Managing Files
| Action | Description |
|---|---|
| Edit | Modify file details and sharing |
| Delete | Remove file from system |
| Download | Download file as admin |
| View | See 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:
- Go to Options > Email
- Enable email notifications
- Enter SMTP server details:
- SMTP host and port
- Username and password
- Encryption (TLS/SSL)
- Configure notification triggers
- Test email configuration
Customization
Branding
Customize your instance appearance:
- Upload company logo
- Set custom colors
- Modify email templates
- Configure footer text
File Categories
Create categories to organize files:
- Go to Categories
- Add new category
- Set category name and description
- 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
- ProjectSend Official Website
- ProjectSend Documentation
- ProjectSend GitHub Repository
- Klutch.sh Persistent Volumes
- Klutch.sh Deployments
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.