Deploying Geeftlist
Introduction
Geeftlist is a self-hosted collaborative gift list management webapp designed to simplify and coordinate the sharing, reservation, and purchase of gifts among close ones. Born from the complexity of family gift exchanges, especially during holidays like Christmas, Geeftlist eliminates the need for slow phone calls and error-prone email chains when coordinating who is buying what.
Built with PHP, Geeftlist provides a straightforward web interface where family members can create wishlists, browse others’ lists, and secretly reserve gifts to avoid duplicates. The application maintains the surprise by hiding reservations from the gift recipient while showing them to other potential gift-givers.
Key highlights of Geeftlist:
- Wishlist Creation: Create and manage personal wishlists with items you’d like to receive
- Gift Reservation: Reserve gifts on others’ lists to prevent duplicate purchases
- Secret Reservations: Recipients can’t see who reserved their gifts, maintaining surprise
- Group Collaboration: Share lists within family groups or friend circles
- Simple Interface: Clean, easy-to-use web interface for all ages
- Self-Hosted: Keep your family’s gift data private on your own infrastructure
- No Account Required for Viewing: Optional public wishlist viewing
- Open Source: Community-driven development with transparent codebase
This guide walks through deploying Geeftlist on Klutch.sh using Docker, configuring persistent storage for your gift lists, and setting up the application for your family or group.
Why Deploy Geeftlist on Klutch.sh
Deploying Geeftlist on Klutch.sh provides several advantages for managing gift coordination:
Simplified Deployment: Klutch.sh automatically detects your Dockerfile and builds Geeftlist without complex orchestration or manual server configuration. Push to GitHub, and your gift list platform deploys automatically.
Persistent Storage: Attach persistent volumes for your database and configuration. Your wishlists and reservations survive container restarts and redeployments.
HTTPS by Default: Klutch.sh provides automatic SSL certificates, ensuring secure access to your gift lists from anywhere.
GitHub Integration: Connect your configuration repository directly from GitHub. Updates trigger automatic redeployments.
Environment Variable Management: Securely store sensitive configuration like database credentials through Klutch.sh’s environment variable system.
Custom Domains: Assign a custom domain to your Geeftlist instance for a family-branded wishlist portal.
Always-On Availability: Your gift lists remain accessible 24/7, perfect for year-round wishlist maintenance and holiday coordination.
Private Data: Unlike commercial wishlist services, your family’s gift preferences stay on your own infrastructure.
Prerequisites
Before deploying Geeftlist on Klutch.sh, ensure you have:
- A Klutch.sh account
- A GitHub account with a repository for your Geeftlist configuration
- Basic familiarity with Docker and containerization concepts
- A MySQL/MariaDB database (see database deployment guides)
- (Optional) A custom domain for your Geeftlist instance
Understanding Geeftlist Architecture
Geeftlist is built on a traditional PHP web application stack:
PHP Backend: The core application runs on PHP, handling wishlist management, user authentication, and reservation logic.
MySQL/MariaDB Database: Geeftlist uses MySQL or MariaDB for storing user accounts, wishlists, items, and reservations.
Apache/Nginx Web Server: The application is served through a standard web server with PHP support.
Session-Based Auth: User authentication is handled through PHP sessions with secure password hashing.
Preparing Your Repository
To deploy Geeftlist on Klutch.sh, create a GitHub repository containing your Dockerfile and configuration.
Repository Structure
geeftlist-deploy/├── Dockerfile├── README.md└── .dockerignoreCreating the Dockerfile
Create a Dockerfile in the root of your repository:
FROM php:8.1-apache
# Install required extensionsRUN docker-php-ext-install mysqli pdo pdo_mysql
# Enable Apache rewrite moduleRUN a2enmod rewrite
# Set working directoryWORKDIR /var/www/html
# Clone Geeftlist from repositoryRUN apt-get update && apt-get install -y git && \ git clone https://codeberg.org/nanawel/geeftlist.git . && \ apt-get remove -y git && apt-get autoremove -y && \ rm -rf /var/lib/apt/lists/*
# Set permissionsRUN chown -R www-data:www-data /var/www/html && \ chmod -R 755 /var/www/html
# Configure ApacheRUN echo '<Directory /var/www/html>\n\ AllowOverride All\n\ Require all granted\n\</Directory>' >> /etc/apache2/apache2.conf
# Expose portEXPOSE 80
CMD ["apache2-foreground"]Creating the .dockerignore File
Create a .dockerignore file:
.git.github*.mdREADME.mdLICENSE.gitignore*.log.DS_Store.env.env.localEnvironment Variables Reference
Geeftlist requires database configuration:
| Variable | Required | Default | Description |
|---|---|---|---|
DB_HOST | Yes | - | MySQL/MariaDB host |
DB_PORT | No | 3306 | Database port |
DB_NAME | Yes | geeftlist | Database name |
DB_USER | Yes | - | Database username |
DB_PASSWORD | Yes | - | Database password |
Deploying Geeftlist on Klutch.sh
Once your repository is prepared, follow these steps to deploy Geeftlist:
- Select HTTP as the traffic type
- Set the internal port to 80 (Apache’s default port)
- Detect your Dockerfile automatically
- Build the container image
- Attach the persistent volumes
- Start the Geeftlist container
- Provision an HTTPS certificate
Set Up MySQL/MariaDB Database
Geeftlist requires a MySQL or MariaDB database. Deploy a database instance on Klutch.sh or use an existing database. Create a database named geeftlist.
Push Your Repository to GitHub
Initialize your repository and push to GitHub:
git initgit add Dockerfile .dockerignore README.mdgit commit -m "Initial Geeftlist deployment configuration"git remote add origin https://github.com/yourusername/geeftlist-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 “geeftlist” or “family-wishlists”.
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 Geeftlist Dockerfile.
Configure HTTP Traffic
Geeftlist serves its web interface over HTTP. In the deployment settings:
Set Environment Variables
In the environment variables section, add the following:
| Variable | Value |
|---|---|
DB_HOST | Your MySQL/MariaDB host |
DB_PORT | 3306 |
DB_NAME | geeftlist |
DB_USER | Your database username |
DB_PASSWORD | Your database password |
Attach Persistent Volumes
Add persistent storage for uploaded files:
| Mount Path | Recommended Size | Purpose |
|---|---|---|
/var/www/html/uploads | 1 GB | User uploaded images |
Deploy Your Application
Click Deploy to start the build process. Klutch.sh will:
Run Database Setup
After first deployment, access your Geeftlist instance and run the initial database setup through the web interface.
Access Geeftlist
Once deployment completes, access your Geeftlist instance at https://your-app-name.klutch.sh. Create an admin account and invite your family members.
Initial Setup and Configuration
Creating the Admin Account
On first access:
- Navigate to the registration page
- Create your administrator account
- Configure basic site settings
Inviting Family Members
Add family members to your Geeftlist:
- Share the registration URL with family
- Or create accounts for them manually
- Organize users into groups (e.g., “Smith Family”)
Creating Groups
Organize gift-giving circles:
- Go to Groups in the admin panel
- Create groups for different occasions
- Add members to appropriate groups
- Configure group visibility settings
Using Geeftlist
Creating a Wishlist
To add items to your wishlist:
- Log in to your account
- Navigate to My Wishlist
- Click Add Item
- Enter item details:
- Name
- Description
- Link (optional)
- Price (optional)
- Image (optional)
- Save the item
Browsing Others’ Lists
View what others want:
- Navigate to a family member’s wishlist
- Browse available items
- Items already reserved are marked
Reserving Gifts
Claim a gift you’ll purchase:
- Find an item on someone’s wishlist
- Click Reserve
- The reservation is hidden from the recipient
- Other family members see the item is taken
Managing Reservations
Track your commitments:
- Go to My Reservations
- View all gifts you’ve reserved
- Mark as purchased when complete
- Cancel reservations if needed
Group Management
Creating Occasions
Set up gift-giving events:
| Occasion | Description |
|---|---|
| Christmas | Annual family gift exchange |
| Birthdays | Individual birthday lists |
| Anniversaries | Couple gift coordination |
| Special Events | Weddings, graduations, etc. |
Setting Deadlines
Add important dates:
- Create an occasion with a date
- Members receive reminders
- Lists can be locked after deadlines
Production Best Practices
Security Recommendations
- Strong Passwords: Require strong passwords for all accounts
- HTTPS: Always access via HTTPS (provided by Klutch.sh)
- Database Security: Use strong database credentials
- Regular Updates: Keep Geeftlist updated
Family Onboarding
Tips for successful adoption:
- Start with a small group
- Provide simple instructions
- Help less technical members
- Demonstrate core features
Backup Strategy
Protect your wishlists:
- Database Backups: Regularly back up MySQL/MariaDB
- Before Holidays: Extra backup before major gift-giving occasions
- Export Lists: Allow users to export their lists
Troubleshooting Common Issues
Cannot Connect to Database
Solutions:
- Verify database credentials
- Check database host accessibility
- Ensure database exists
- Review PHP error logs
Reservations Not Showing
Solutions:
- Clear browser cache
- Check user permissions
- Verify group membership
- Check database connectivity
Image Uploads Failing
Solutions:
- Check upload directory permissions
- Verify persistent volume is mounted
- Check PHP upload limits
- Review file size restrictions
Additional Resources
Conclusion
Deploying Geeftlist on Klutch.sh gives you a private, self-hosted gift coordination platform with automatic builds, persistent storage, and secure HTTPS access. The combination of Geeftlist’s collaborative features and Klutch.sh’s deployment simplicity means you can focus on celebrating with family rather than managing infrastructure.
With wishlist creation, secret reservations, and group organization, Geeftlist eliminates the chaos of holiday gift coordination. Whether you’re managing a small family or a large extended family gift exchange, Geeftlist on Klutch.sh provides a reliable, private platform that keeps everyone’s wishes organized and surprises intact.