Bitpoke App Frequently Asked Questions

This section contains some FAQs from our clients.

About the Bitpoke App for WordPress

What is the Bitpoke App?

The Bitpoke App for WordPress is an elastic SaaS application designed to scale the most widely used CMS solution, nowadays, WordPress. This solution bets on the Kubernetes flexibility and the security offered by Google Cloud Platform, delivering a self-service cloud-native WordPress hosting platform, aimed at providing scalable, automatic and highly available solutions for keeping WordPress sites protected and speedy under heavy traffic.

Who is the Bitpoke App for?

The Bitpoke App is more demanding in terms of required technical skill. It’s for experienced WordPress developers with moderate Kubernetes knowledge.

Why should I use the Bitpoke App?

With the Bitpoke App you’re able to quickly create, deploy and scale WordPress sites right into your own Kubernetes cluster, without the need to increase your devops team. Also, the Bitpoke App allows you to configure the resources used to scale your WordPress infrastructure and that helps to keep the site highly-available and speedy under backend-intensive traffic.

Is the Bitpoke App free?

It’s not free, it’s charged directly via the Google Cloud Platform. The Bitpoke Stack is free and open-source, the Bitpoke App is a commercial implementation of the Bitpoke Stack.

See more pricing details here .

How long did it take you guys to build the Bitpoke App?

Around 25,000 hours of development. A team of 8 engineers has worked on this platform for two and a half years.

About using the Bitpoke App

How do I get started using the App?

Visit our Installation page for more details on how to start using the Bitpoke App.

Should I have a Google Account?

Yes, the Bitpoke App is available only on Google Marketplace and you need to have a Google account and an active plan in order to be able to install it.

What’s the first thing to do if something doesn’t work on the Bitpoke App?

The first thing to do if something doesn’t work is to check the events list for warnings and errors.

How can I deploy my code from Github ?

We provide a github action that can build your Dockerfile and update the site’s runtime image. The DOCKER_USERNAME for should be _json_key and as the password, you’ll need to use the service’s account JSON key. Also, you need to grant access from the Kubernetes cluster to the Docker registry.

How should I do yarn-type building? Where in the setup does that action belong?

In the Dockerfile, you should have another step which builds the js, after that you can copy it. For example, you should install yarn before the first composer install, but run it after the second one. Your Dockerfile should be something like this:

FROM as builder

# install system packages
RUN apt-get update && apt-get install yarn



# warm-up composer cache
COPY --chown=www-data:www-data composer.json composer.lock /src/
RUN composer install --no-dev --no-interaction --no-progress --no-ansi --no-scripts

# wipe everything and composer install
COPY --chown=www-data:www-data . /src
RUN composer install --no-dev --no-interaction --no-progress --no-ansi --no-scripts

RUN cp -a /src/. /app

# run yarn build
RUN yarn build

COPY --from=builder --chown=www-data:www-data /app /app

When building your image don’t forget to specify --build-arg COMPOSER_AUTH='{"github-oauth": {"": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}' where the X’s should be replaced with your github token .

Do I need to scale both in the cluster and in the Bitpoke App?

You can enable the cluster autoscaler so that GKE scales your nodes dynamically and also set the scaling range for WordPress pods in the Bitpoke App.

Should the autoscaler and Bitpoke App scaling parameters match if I’m using a single site?

The cluster autoscaler should accommodate your WordPress autoscaling needs. For example, if you autoscale 3-5 c2-standard-4 nodes you have a range of approx 12-20 vCPUs (Google takes a percentage of each node’s resources). In that range, you can autoscale 4-10 pods which request 2 vCPUs each

It depends on how you want to share the cluster between different sites. You autoscale on 2 dimensions - number of nodes and number of pods.

What can I do if I have a single multisite that has sub-sites and we just need a production and a single staging environment for that multisite?

In this case, you would create 2 Projects in the Bitpoke App, so that each environment has a dedicated MySQL server and a dedicated storage bucket for images.

Is running Percona in the cluster faster than Google’s Cloud SQL?

They should be about the same speed, but you have more control using Bitpoke’s MySQL Operator for Kubernetes , based on Percona and Orchestrator. Also, from our experience, the DB costs are reduced to half.

1-X pods, where X is your peak requirement for WordPress. A good start is at least using X = 3 nodes. Taking into consideration all mentioned above, you also need capacity for MySQL and Memcached as well.

Is it possible to set up custom cron jobs?

The WordPress Cron is enabled, and you can use custom Kubernetes CronJobs and that has access to WP-CLI.

What is the easiest way to SSH into a pod that fails due to a PHP error?

In order to connect to a pod you can do so using kubectl exec the setup command can be found in Getting Started section, under Run WP-cli commands. Just modify the second command from Getting Started guide to run bash instead of wp, like: kubectl -n <project namespace> exec -it $POD_NAME -- bash this will place you inside one of the running pods.

How can I modify the site’s chart values , when using the Bitpoke App?

You cannot modify the site’s chart values. The Bitpoke App manages these values by its own.

Can a pod expand beyond one machine?

No.! Scaling is done horizontally by adding more replicas.

How is MySQL horizontally scaling done?

The MySQL cluster is provisioned and scaled horizontally using MySQL Operator and on the WordPress side the queries are routed between the master and slaves nodes using ProxySQL .

Is there any possibility to change the super admin access?

Starting from App v1.4 super admins can be changed from the App in the system settings section /#/system/settings/adminUsers. For Bitpoke App v1.3 or older the admins can be updated using kubectl. Go to Google Cloud account, on the application page and there are a few helpful commands in the notes section.

Does it usually take quite some time for the certificate request to complete?

If the DNS is propagated properly it should generate the certificate quite fast, but if the TTL for the DNS records is high, it could take some time.

Is there any command that I can run to get the status from the Certificate Manager?

Yes! You can run the following command:

kubectl -n <namespace> get certificates

The <namespace> can be found in the overview section of your site.

Do you have any recommendations for a production cluster setup?

We have a recommended setup with multiple pools dedicated to each kind of workload (e.g. web, database). Starting with version 1.4 you can distribute workloads on different servers pool. You can have at least 2 node pools , one for database and one for web. Also for development sites, you can use a preemptible node pool for cost optimization.

I have noticed that the Bitpoke App serves media files directly from Google Storage bucket, but if I already use wp-stateless should I be able to keep that?

Yes, you can, but it’s highly recommended to use the bucket provided by the Bitpoke App.

Do you have any best-use Dockerfile for building WordPress images that are Bitpoke App friendly?

You have to use the base image for building and developing classic WordPress sites provided by Bitpoke Stack. Here you can find the repository .

How to pull private docker images?

First of all, you have to publish images in Google Cloud from where the k8s is able to pull the image.

What kind of full-page cache plugin should I use?

For sites running on the Bitpoke App, page cache could be handled with W3 Total Cache or Batcache .

If you use W3 Total Cache here’s a set-up recommendation:

  • Enable page cache and set page cache method to Memcached.

Can I use Redis Object Cache instead of Memcached?

We highly recommend using Memcached which is pre-installed in the Bitpoke App. We do not recommend using Redis Object Cache due to poorer performance. But Redis can be installed into the cluster, manually by using Redis helm chart

Do you have any recommendations on the best MySQL cluster storage size to launch a site for production?

We recommend that the MySQL cluster being three times bigger than the Database size.

I have an error status for the storage bucket, what to do?

If you have an error status for the storage bucket, it means there is a problem with Config Connector. A possible solutions is to go over to the System Settings and reinstall it.

Is it possible to switch the staging MySQL database to use an SSD? It’s causing bad performance for the MySQL server and then it misses a health check and so gets restarted.

It is not possible out of the box, we have to delete the current PVC and recreate it, this implies that the database should be re-imported.

Why do I get the error “You don’t have permissions to create sites” when creating a site?

The first thing to do in this case is to check the maximum number of sites you have on project’s resource quotas .

What to do if I cannot access the App anymore, because the authentication credentials are not valid?

In this case you can reactivate the installation link .

How to activate the plugin application manager when you create the cluster?

Go to your cluster details on Google Cloud and scroll down to Features:

Edit Application Manager on Google Cloud

Press on the Enable button from Application Manager and then check to Enable the Application Manager:

Enable the Application Manager on Google Cloud

What to do if I have the error “Storage bucket’s status is unknown.”?

The first thing to do in this case is to check if the Config Connector add-on is installed. Go to your cluster details on Google Cloud and scroll down to Features:

Edit the Config Connector addon

If it’s active, you need to disable it, by clicking on the edit button, unchecking the add-on and saving the changes.

Then go to Config Connector on System Settings and:

  • if Config Connector is installed, click on the Uninstall button, then re-install it using the Configure App guidelines
  • if it’s uninstalled, click on Install and install it using the Configure App guidelines

Can I change the Bitpoke App interface language?

Yes, the App is available in 8 languages: English, Romanian, Swedish, Japanese, German, Spanish, Dutch and French.

You can change the language by using the icon on the top right corner:

Change the Bitpoke App language

What to do when the MySQL cluster is readonly?

When the MySQL cluster is readonly, connect to Orchestrator to see why it is like this:

k -n presslabs-system port-forward svc/stack-mysql-operator 3000:80

then go to http://localhost:3000/web/clusters

How do I modify the local address of a service?

You can use the following command:

kubectl run -n <K8S_PROJECT_NAMESPACE> -it --rm --restart=Never alpine --image=alpine -- nslookup prometheus-operated

where <K8S_PROJECT_NAMESPACE> is the name of your Kubernetes project, which you can see in the Site - Runtime section .