Update: 🍻 apnscp 3.0 alpha has been released. Release notes.

I am pleased to announce that the first apnscp release, 3.0 pre-alpha, is here. This release is a limited release considered stable for personal sites and is also powering this blog, hq.apnscp.com, as well as apisnetworks.com on separate instances. No known bugs exist at this time, but further testing is necessary before giving 3.0 a final stamp of approval.

Refer to pre-alpha TR announcement for installation + tutorial

Getting help

I will be available to work with you if you run into any issues. Drop me an email at matt@apisnetworks.com, post on /r/apnscp, hop on Discord, or even too the KB.


Use Bitbucket or GitHub for feature and bug tracking.

Any in-transit issues are resolved as encountered and pushed upstream. upcp will bring your instance current.

Changes over Technical Release

apnscp TR was released June 10 for early internal testing. With the help of several amazing people, TR was a great success. Bugs were squashed and all targeted features implemented. Among those 100+ commits are several important changes:

  • DigitalOcean, Linode, Cloudflare DNS providers
  • Bootstrapper idempotence
  • Ghost + Laravel 1-click installation and update. Works with any Laravel-derived application, such as Laravel Spark
  • Admin panel, add/remove/edit/suspend/activate/login-as support
  • Automatic panel updates (apnscp-vars.yml => apnscp_nightly_update=true). Off by default. Use build/upcp.sh to manually update
  • Improved cgroup resource enforcement
  • Flexible PHP upgrades, omit patch level from apnscp-vars.yml to upgrade PHP automatically when a new release comes out

Migrating from TR to pre-alpha platforms

No migration is necessary. Update the panel, run the Bootstrapper, and update domain metadata to bring everything inline with 3.0 pre-alpha:

rm -f /usr/local/apnscp/storage/cache/*
cd /usr/local/apnscp/resources/playbooks
env ANSIBLE_STDOUT_CALLBACK=actionable ansible-playbook bootstrap.yml
cd /home/virtual
for i in site* ; do EditDomain $i ; done

You can also reset apnscp's codebase to a pristine condition with git reset --hard prior to running upcp.

cd /usr/local/apnscp
git reset --hard

You can also use apnscp's builtin migration helper to transfer to a pristine platform, but it isn't necessary.

Enabling automatic updates

Edit /root/apnscp-vars.yml, set apnscp_nightly_update to true, then rerun Bootstrapper:

cd /usr/local/apnscp/resources/playbooks
env ANSIBLE_STDOUT_CALLBACK=actionable ansible-playbook bootstrap.yml

Panel updates will be pulled nightly from Bitbucket. Bootstrapper is not explicitly run during updates yet, but can be run again same as above.

Optionally set apnscp_update_bootstrapper to control whether Bootstrapper is run whenever a change is detected in its playbooks. By default it depends upon apnscp_nightly_update. It is equivalent to upcp -a.

Known issues

  • None at this time

Pending enhancements

  • Implement domain/admin/db prefix changes in Account > Change Info
  • Automated license dispersal
  • artisan platform + database migration
  • Improve Laravel app integration
  • Upgrade Bootstrap 4 alpha-6 to final
  • Documentation

This is a limited release with eligible users receiving a lifetime license for waiting for so long. Enjoy! Next release is alpha scheduled for late August, followed by beta + early access sale in September.