Last Updated: 3/9/2026
Upgrading LinkAce
This guide covers upgrading LinkAce to newer versions. Always back up your data before upgrading.
Before You Upgrade
1. Create a Backup
⚠️ CRITICAL: Always back up your LinkAce installation and database before upgrading.
What to back up:
- Database: Full database dump (MySQL, PostgreSQL, or SQLite file)
- .env file: Your configuration
- Uploaded files: Any custom uploads or backups in
storage/app
Docker backup:
# Stop containers
docker compose down
# Backup database (MySQL example)
docker compose exec db mysqldump -u linkace -p linkace > linkace-backup-$(date +%Y%m%d).sql
# Backup .env file
cp .env .env.backup
# Backup volumes (optional)
docker run --rm -v linkace_linkace-db:/data -v $(pwd):/backup ubuntu tar czf /backup/linkace-db-backup.tar.gz /dataNon-Docker backup:
# Backup database
mysqldump -u linkace -p linkace > linkace-backup-$(date +%Y%m%d).sql
# Backup files
cp -r /path/to/linkace /path/to/linkace-backup2. Check the Release Notes
Always read the release notes before upgrading:
Look for:
- Breaking changes: Configuration changes, removed features
- Migration notes: Special upgrade steps
- New requirements: PHP version, database version, etc.
3. Check Your Current Version
Find your current version:
- In LinkAce: System Settings → Update Checks
- Docker: Check your
docker-compose.ymlimage tag - Non-Docker: Check
composer.jsonor runphp artisan --version
Upgrading Docker Installations
Standard Upgrade Process
-
Stop the containers:
docker compose down -
Pull the latest image:
docker pull linkace/linkace:latestOr, for a specific version:
docker pull linkace/linkace:2.5.0 -
Start the containers:
docker compose up -d -
Run database migrations:
docker compose exec app php artisan migrateYou may see a warning about running migrations in production. Type
yesto confirm. -
Clear caches:
docker compose exec app php artisan cache:clear docker compose exec app php artisan config:clear -
Verify the upgrade:
- Open LinkAce in your browser
- Check System Settings → Update Checks for the new version
- Test core functionality (add a link, search, etc.)
Using the Update Script (Optional)
LinkAce provides an automated update script:
-
Download the script:
wget https://raw.githubusercontent.com/Kovah/LinkAce/master/update-docker.sh chmod +x update-docker.sh -
Run the script:
./update-docker.sh
The script will:
- Stop containers
- Pull the latest image
- Restart containers
- Run migrations
- Clear caches
Pinning to a Specific Version
To avoid automatic upgrades, pin your Docker image to a specific version in docker-compose.yml:
services:
app:
image: docker.io/linkace/linkace:2.5.0 # Pin to specific versionRecommendation: Use specific versions for production deployments.
Upgrading Non-Docker Installations
Standard Upgrade Process
-
Download the latest release: 👉 LinkAce Releases
-
Extract to a NEW directory (do not overwrite):
unzip linkace-v2.5.0.zip -d /path/to/linkace-new -
Copy your .env file:
cp /path/to/linkace-old/.env /path/to/linkace-new/.env -
Copy uploaded files (if any):
cp -r /path/to/linkace-old/storage/app/* /path/to/linkace-new/storage/app/ -
Run database migrations:
cd /path/to/linkace-new php artisan migrateType
yesto confirm. -
Clear caches:
php artisan cache:clear php artisan config:clear -
Update your web server to point to the new directory:
- Nginx: Update
rootdirective to/path/to/linkace-new/public - Apache: Update
DocumentRootto/path/to/linkace-new/public
- Nginx: Update
-
Reload your web server:
# Nginx sudo systemctl reload nginx # Apache sudo systemctl reload apache2 -
Verify the upgrade:
- Open LinkAce in your browser
- Check System Settings → Update Checks
- Test core functionality
-
Remove the old directory (after confirming everything works):
rm -rf /path/to/linkace-old
Upgrading from LinkAce v1 to v2
LinkAce v2 is a major release with breaking changes. See the dedicated v1 to v2 upgrade guide below.
Version-Specific Upgrade Notes
Upgrading to v2.5.0+
- PHP 8.1 support dropped: Requires PHP 8.2 to 8.5
- Action: Update your PHP version before upgrading
Upgrading to v2.4.0+
- Security patches: Update as soon as possible
- No breaking changes
Upgrading to v2.0.0+
- Major release: See v1 to v2 upgrade guide
- Breaking changes: Docker image renamed, multi-user support, API v2
Upgrading from v1 to v2 (Detailed)
Breaking Changes
- Docker image renamed:
linkace/linkace:simpleorlinkace/linkace:php-nginx→linkace/linkace - Multi-user support: New visibility system (Public, Internal, Private)
- API v2: Existing integrations must be updated
- Mail configuration:
MAIL_DRIVER→MAIL_MAILER
Preparation
- Back up everything (database, .env, files)
- Enable Guest Mode (optional):
- If enabled before upgrade: Public links stay public
- If disabled: Public links become Internal
- Note your current setup:
- Docker Compose or manual Docker?
- Which image are you using?
Docker Compose Upgrade
1. Stop containers
docker compose down2. Update docker-compose.yml
Change the image name:
Old:
image: linkace/linkace:simpleNew:
image: linkace/linkace:latestThe internal port stays at 80 (do not change).
Optional: Download the latest docker-compose.yml and .env templates:
Do NOT overwrite your existing .env file — merge changes manually.
3. Update .env file
Change MAIL_DRIVER to MAIL_MAILER:
Old:
MAIL_DRIVER=smtpNew:
MAIL_MAILER=smtp4. Start containers
docker compose up -d5. Run migrations
docker compose exec app php artisan migrate
docker compose exec app php artisan cache:clearType yes to confirm. This may take several minutes depending on your link count.
6. Verify
- Log in and check your links
- Verify visibility settings (Public/Internal/Private)
- Test core functionality
Manual Docker Upgrade
If you used docker run or a custom setup:
- Change the image name from
linkace/linkace:simpleorlinkace/linkace:php-nginxtolinkace/linkace - Update your Docker command or configuration
- Run migrations inside the container:
docker exec -it linkace-container php artisan migrate docker exec -it linkace-container php artisan cache:clear
Non-Docker Upgrade
- Download LinkAce v2: Releases
- Extract to a NEW directory
- Copy .env file and update
MAIL_DRIVER→MAIL_MAILER - Run migrations:
php artisan migrate php artisan cache:clear - Update web server to point to the new directory
HTTPS Configuration Changes
If you used LinkAce directly with SSL certificates:
- Certificate migration is not possible
- Reconfigure HTTPS using the new Caddy-based setup
- See Installation with Docker → Running with SSL
Post-Upgrade
- Review visibility settings:
- Private links remain private
- Public links: Stay public if Guest Mode was enabled, become Internal if disabled
- Update API integrations to use API v2: API Documentation
- Invite users (optional): System Settings → User Management
- Configure SSO (optional): Single Sign-On
Troubleshooting Upgrades
Migration Errors
Error: SQLSTATE[42S01]: Base table or view already exists
Solution:
- Your database is already up to date
- Run
php artisan cache:clearand try again
Error: SQLSTATE[HY000]: General error: 1364 Field 'xxx' doesn't have a default value
Solution:
- Database collation issue
- See Database Configuration
Docker Image Not Pulling
Error: Error response from daemon: manifest for linkace/linkace:latest not found
Solution:
- Check your internet connection
- Try pulling from GitHub Container Registry:
image: ghcr.io/kovah/linkace:latest
Containers Not Starting
-
Check logs:
docker compose logs -f app -
Verify .env permissions:
chmod 666 .env -
Check database connection:
- Verify
DB_PASSWORDmatches in.envanddocker-compose.yml
- Verify
Links Not Loading After Upgrade
-
Clear all caches:
docker compose exec app php artisan cache:clear docker compose exec app php artisan config:clear docker compose exec app php artisan view:clear -
Restart containers:
docker compose restart -
Check logs: System Logs → look for errors
Visibility Issues After v1 → v2 Upgrade
Problem: Links that were public are now internal
Cause: Guest Mode was disabled before the upgrade
Solution:
- Enable Guest Mode in System Settings
- Or, manually change link visibility to Public
Watchtower Broke My Installation
Problem: Watchtower auto-upgraded LinkAce and it’s not working
Solution:
- Restore from backup
- Exclude LinkAce from Watchtower:
services: app: labels: - "com.centurylinklabs.watchtower.enable=false" - Upgrade manually following this guide
For more help, see the Troubleshooting guide or GitHub Discussions .
Best Practices
1. Test Upgrades First
- Use a staging environment if possible
- Test with a copy of your production database
- Verify all features work before upgrading production
2. Schedule Downtime
- Announce upgrades to your users (if multi-user)
- Upgrade during low-traffic periods
- Plan for rollback if something goes wrong
3. Keep Backups
- Automated backups: Configure Application Backups
- Pre-upgrade backups: Always back up before upgrading
- Test restores: Verify your backups work
4. Pin Versions in Production
- Use specific image tags:
linkace/linkace:2.5.0instead of:latest - Control upgrades: Upgrade intentionally, not automatically
- Review release notes: Understand what’s changing
5. Monitor After Upgrade
- Check System Logs: Look for errors
- Test core features: Add links, search, edit
- Monitor performance: Watch for slowdowns or errors
- Check cron: Verify automation is still working
Rollback Procedure
If an upgrade fails, you can roll back:
Docker Rollback
-
Stop containers:
docker compose down -
Restore database:
docker compose exec db mysql -u linkace -p linkace < linkace-backup.sql -
Change image tag in
docker-compose.ymlto previous version:image: linkace/linkace:2.4.0 # Previous working version -
Restore .env file:
cp .env.backup .env -
Start containers:
docker compose up -d
Non-Docker Rollback
-
Restore database:
mysql -u linkace -p linkace < linkace-backup.sql -
Restore files:
rm -rf /path/to/linkace-new mv /path/to/linkace-backup /path/to/linkace -
Update web server to point to the old directory
-
Reload web server:
sudo systemctl reload nginx
Next Steps
- Review release notes: LinkAce Changelog
- Check for configuration changes: Environment Variables
- Test new features: Explore what’s new in the latest version
- Update documentation: Inform your team about changes
For ongoing maintenance, see: