Last Updated: 3/12/2026
Setup with Docker
Working with Docker is straightforward, but you should be familiar with Docker basics. LinkAce provides Docker Compose files in the repository with all needed services pre-configured to run the application immediately.
All images are available on Docker Hub and the GitHub Registry , supporting amd64, arm64, and arm/v7 architectures.
Requirements
- Command-line access to your server
- Docker version 19 or greater
- Docker Compose (must support at least compose version 3)
2-Minute Test Setup
You can run LinkAce within minutes using a SQLite database to try out the application. This is not recommended for production use, and migrating from this test setup to another database is not supported.
touch database.sqlite
chmod 0766 database.sqlite
docker run -p "8080:80" -v "./database.sqlite:/app/database/database.sqlite" linkace/linkaceThen open http://localhost:8080 in your browser and follow the setup steps.
If the LinkAce container doesn’t start, this might be caused by OS-specific permissions for Docker. Try running LinkAce on another internal port:
docker run -p "8080:8080" -e "PORT=8080" -v "./database.sqlite:/app/database/database.sqlite" linkace/linkaceStable Setup
Follow these steps to ensure LinkAce runs smoothly. This setup method is the only supported one for Docker.
1. Copy the needed files
Download the Docker setup package from the LinkAce repository: linkace-docker.zip
Alternatively, view the docker-compose.yml and .env files directly and adapt them to your own setup.
2. Edit the base configuration
Change the following settings in the .env file before starting the setup:
DB_PASSWORD— Set a secure password hereREDIS_PASSWORD— Set a secure password here
If you’re unsure whether the .env file is writable inside Docker, make it writable for anybody (-rw-rw-rw- or 666). You can switch back to read-only after the setup.
Your directory should look like this now:
/my-user-directory/linkace
├── .env
├── docker-compose.yml
├── LICENSE.md
└── README.mdUsing environment variables instead of an .env file
You can move configuration variables from the .env file into your docker-compose.yml file or Docker setup. If you do this, you must generate your own application key:
docker run --rm -it linkace/linkace php artisan key:generate --showThis outputs a key like base64:Il/5KRDENz2TiCYjKweDAkI93Q4D5ZWmP3AORXgReNo=. Put this key into your environment variables. Example in docker-compose.yml:
services:
app:
image: docker.io/linkace/linkace:latest
environment:
APP_KEY: base64:Il/5KRDENz2TiCYjKweDAkI93Q4D5ZWmP3AORXgReNo=
DB_CONNECTION: mysql
# ...3. Start the application
Run the following command to start the container setup:
docker compose up -d4. Start the built-in setup
Open the URL pointing to your Docker container in your browser. If you started LinkAce on your local machine, the URL should be http://localhost or your domain pointing to LinkAce.
You can configure the database and your user account in the following process.
5. Follow the post-installation steps
Make sure to follow the post-installation steps now to fully enable all features.
Advanced Configuration
Completing the installation without the built-in setup
If you run into issues with the built-in setup via the web, you can complete the installation via the command line.
Follow the instructions above until step 4. Then run the following commands. The database configuration must be done in the .env file BEFORE running these commands.
docker exec -it linkace_app_1 php artisan migrate
docker exec -it linkace_app_1 php artisan setup:complete
docker exec -it linkace_app_1 php artisan registeruser --adminThe last command lets you create your first admin user. After all commands succeed, you can log in at http://localhost or your domain pointing to LinkAce.
Running LinkAce behind a proxy / load balancer
If you’re using a proxy or load balancer with HTTPS, make sure it sends the X-Forwarded-Proto and X-Forwarded-For headers to LinkAce. Otherwise, LinkAce won’t correctly generate URLs.
Nginx configuration example:
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;Apache configuration example:
ProxyPreserveHost on
RequestHeader set X-Forwarded-Port "443"
RequestHeader set X-Forwarded-Proto "https"LinkAce 2 accepts a PORT environment variable to listen on the specified port for incoming connections. This is useful for restricted Docker hosting environments like Heroku.
Running LinkAce directly with SSL
If you want to run LinkAce without a proxy but still use HTTPS, you must configure the built-in web server accordingly.
-
Stop your existing LinkAce setup. Make sure your domain is accessible from the internet.
-
Download the ssl.Caddyfile file and place it beside your
docker-compose.ymlfile. -
Open your
docker-compose.ymlfile and make these adjustments:- After
image: docker.io/linkace/linkace:latest, add environment variables and set your own domain:
services: app: image: docker.io/linkace/linkace:latest environment: LINKACE_DOMAIN: "your-linkace-domain.com" PORT: 443- Remove the hash in front of the
- "0.0.0.0:443:443"line. - Remove the hash in front of the
- ./caddy-data:/home/www-data/.local/share/caddyand- ./ssl.Caddyfile:/etc/caddy/Caddyfilelines.
- After
-
Start the installation again with
docker compose up -d.
The web server will now try to get the SSL certificate. After a short while, you’ll be able to access LinkAce under your domain.
If that doesn’t work, check the logs with docker compose logs -f app.
Compatibility with other Tools
Watchtower: Several users reported broken LinkAce installations after Watchtower ran updates. Please exclude LinkAce from Watchtower and only update manually to properly run all update steps.
What’s Next
- Post-Setup Steps: Configure LinkAce after installation to fully enable all features
- Links: Learn how to save and manage your bookmarks