Skip to main content

Upgrading Mixpost Pro to v2 from v1

Backup database

Sometimes the upgrade can go wrong, so we recommend that you backup your database before starting the upgrade.

Upgrade Using Docker

Upgrading Mixpost using Docker is straightforward. Ensure that you preserve the mounted volume during the process. Simply follow these steps:

Navigate to your folder where you have the docker-compose.yml the file then run:

# Pull the latest version
docker compose pull

# Stop and remove the old container
docker compose down

# Start a new container
docker compose up -d
info

If something goes wrong, you can use the inovector/mixpost-pro-team:v1 tag to revert. Also, you need to restore your database backup.

Upgrade in a PHP Environment

This method applies if you have installed Mixpost Pro manually or within an existing Laravel application.

1. Updating your composer.json using the require command

composer require inovector/mixpost-pro-team "^2.0"

2. Migrations

Some changes were made to the database, use the migration below to update your database to the latest schema:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Inovector\Mixpost\Models\Service;

return new class extends Migration {
public function up()
{
if (Schema::hasTable('mixpost_services')) {
if (Schema::hasColumn('mixpost_services', 'credentials') && !Schema::hasColumn('mixpost_services', 'configuration')) {
Schema::table('mixpost_services', function (Blueprint $table) {
$table->renameColumn('credentials', 'configuration');
});
}


if (!Schema::hasColumn('mixpost_services', 'active')) {
Schema::table('mixpost_services', function (Blueprint $table) {
$table->boolean('active')->default(false);
});
}

Service::query()->update(['active' => true]);
}

if (!Schema::hasTable('mixpost_user_tokens')) {
Schema::create('mixpost_user_tokens', function (Blueprint $table) {
$table->id();
$table->bigInteger('user_id')->unsigned()->index();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->string('name');
$table->string('token', 64)->unique();
$table->timestamp('last_used_at')->nullable();
$table->date('expires_at')->nullable();
$table->timestamps();
});
}

if (!Schema::hasTable('mixpost_webhooks')) {
Schema::create('mixpost_webhooks', function (Blueprint $table) {
$table->id();
$table->uuid('uuid')->unique();
$table->bigInteger('workspace_id')->nullable()->index(); // if null, it's a system webhook
$table->string('name');
$table->string('callback_url');
$table->string('method')->default('post');
$table->string('content_type');
$table->tinyInteger('max_attempts')->default(1);
$table->tinyInteger('last_delivery_status')->nullable();
$table->text('secret')->nullable();
$table->boolean('active')->default(false);
$table->json('events')->nullable();
$table->timestamps();

$table->index(['workspace_id', 'active']);
});
}

if (!Schema::hasTable('mixpost_webhook_deliveries')) {
Schema::create('mixpost_webhook_deliveries', function (Blueprint $table) {
$table->id();
$table->uuid('uuid')->unique();
$table->bigInteger('webhook_id')->unsigned()->index();
$table->foreign('webhook_id')->references('id')->on('mixpost_webhooks')->onDelete('cascade');
$table->string('event');
$table->tinyInteger('attempts')->default(0);
$table->tinyInteger('status');
$table->integer('http_status')->nullable();
$table->timestamp('resend_at')->nullable();
$table->boolean('resent_manually')->default(false);
$table->json('payload')->nullable();
$table->json('response')->nullable();
$table->timestamp('created_at')->nullable();
});
}

Schema::dropIfExists('mixpost_post_version_media');
}
};

Don't know how to migrate?

  • Open your terminal and navigate to your project directory.
  • Generate a migration file by running: php artisan make:migration create_mixpost_v2_tables
  • Open the new migration file from database/migrations and paste the migration code into it.
  • Apply the migration with: php artisan migrate
  • Done!

3. Config changes

There have been numerous config changes. If you have published the Mixpost config file, you should update it manually.

To update easily, simply run the following command:

php artisan vendor:publish --tag=mixpost-config --force

4. Clear the cache

php artisan route:clear
php artisan view:clear
php artisan mixpost:clear-services-cache
php artisan mixpost:clear-settings-cache

5. Optimize application

php artisan optimize

6. Terminate the Horizon process

php artisan horizon:terminate

Conclusion

Following these steps will ensure that your Mixpost Pro installation is upgraded to v2, maintaining performance and security standards.