Last Updated: 3/13/2026
Setup without Docker
This guide covers installing LinkAce directly on your server without Docker. This method requires more manual configuration but offers greater control over your environment.
Prerequisites
Before you begin, ensure your server has:
- PHP 8.2 or higher with required extensions
- Composer for dependency management
- Node.js 16+ and npm for asset compilation
- MySQL 8.0+ or PostgreSQL 13+
- Web server: Apache or Nginx
- At least 512 MB RAM
Required PHP Extensions
- BCMath
- Ctype
- Fileinfo
- JSON
- Mbstring
- OpenSSL
- PDO
- Tokenizer
- XML
- cURL
- GD or Imagick
Installation Steps
1. Download LinkAce
Clone the repository:
cd /var/www
git clone https://github.com/Kovah/LinkAce.git linkace
cd linkace
git checkout 2.xOr download the latest release:
wget https://github.com/Kovah/LinkAce/archive/refs/heads/2.x.zip
unzip 2.x.zip
mv LinkAce-2.x linkace
cd linkace2. Install Dependencies
Install PHP dependencies:
composer install --no-dev --optimize-autoloaderInstall Node.js dependencies and build assets:
npm install
npm run production3. Configure Environment
Copy the example environment file:
cp .env.example .envEdit .env with your settings:
# Application
APP_NAME=LinkAce
APP_ENV=production
APP_KEY=
APP_DEBUG=false
APP_URL=https://linkace.example.com
# Database
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=linkace
DB_USERNAME=linkace
DB_PASSWORD=YourSecurePassword
# Cache & Queue
CACHE_DRIVER=file
QUEUE_CONNECTION=database
SESSION_DRIVER=fileGenerate an application key:
php artisan key:generate4. Set Up Database
Create a database and user:
CREATE DATABASE linkace CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'linkace'@'localhost' IDENTIFIED BY 'YourSecurePassword';
GRANT ALL PRIVILEGES ON linkace.* TO 'linkace'@'localhost';
FLUSH PRIVILEGES;Run migrations:
php artisan migrate --force5. Configure Web Server
Nginx Configuration
Create a new site configuration:
server {
listen 80;
server_name linkace.example.com;
root /var/www/linkace/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}Apache Configuration
Create a .htaccess file in the public directory (usually included):
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>Configure your virtual host:
<VirtualHost *:80>
ServerName linkace.example.com
DocumentRoot /var/www/linkace/public
<Directory /var/www/linkace/public>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/linkace-error.log
CustomLog ${APACHE_LOG_DIR}/linkace-access.log combined
</VirtualHost>6. Set Permissions
Ensure proper permissions:
chown -R www-data:www-data /var/www/linkace
chmod -R 755 /var/www/linkace
chmod -R 775 /var/www/linkace/storage
chmod -R 775 /var/www/linkace/bootstrap/cache7. Set Up Queue Worker
LinkAce uses queues for background tasks. Set up a supervisor configuration:
[program:linkace-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/linkace/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
user=www-data
numprocs=1
redirect_stderr=true
stdout_logfile=/var/www/linkace/storage/logs/worker.logStart the worker:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start linkace-worker:*8. Set Up Cron Jobs
Add a cron job for scheduled tasks:
* * * * * cd /var/www/linkace && php artisan schedule:run >> /dev/null 2>&1Updating LinkAce
To update LinkAce:
cd /var/www/linkace
git pull origin 2.x
composer install --no-dev --optimize-autoloader
npm install
npm run production
php artisan migrate --force
php artisan cache:clear
php artisan config:clear
php artisan view:clearTroubleshooting
500 Internal Server Error
Check the Laravel logs:
tail -f /var/www/linkace/storage/logs/laravel.logPermission Denied Errors
Reset permissions:
chown -R www-data:www-data /var/www/linkace
chmod -R 775 /var/www/linkace/storage
chmod -R 775 /var/www/linkace/bootstrap/cacheQueue Jobs Not Processing
Ensure the queue worker is running:
sudo supervisorctl status linkace-worker:*Next Steps
- Post Setup Steps: Complete the initial configuration