Frequently Asked Questions

This page contains answers to some frequently asked questions from our clients.

What is 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 slightly 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 to build the App?

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

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.

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 gcr.io 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 docker.io/bitpoke/wordpress-runtime:bedrock as builder

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

WORKDIR /src

ARG COMPOSER_AUTH={}
ENV COMPOSER_AUTH=${COMPOSER_AUTH}

# 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

FROM docker.io/bitpoke/wordpress-runtime:bedrock
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": {"github.com": "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 if I need a production and a single staging environment for a 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.

For example, if the app gets like 0 visitors at night and you want to optimize cost during that time, you would need at least 1-X pods, where X is your peak requirement for WordPress. A good start is at least using X = 3 nodes. 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.

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?

Nope. Scaling is done horizontally by adding more replicas.

How is horizontal MySQL 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?

Super admins can be changed right from the App, in the system settings section /#/system/settings/adminUsers. The admins can also be managed using kubectl. Go to Google Cloud account, on the application page and there are a few helpful commands in the notes section.

How long does it take 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.

Can I see the status of 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). You can distribute workloads on different servers pool. You can also have at least 2 node pools, one for the database and one for the webapp. Also for development sites, you could use a preemptible node pool for cost optimization.

If I already use wp-stateless, should I be able to keep it?

The Bitpoke App serves media files directly from Google Storage bucket. Yes, you can keep wp-stateless , but it’s highly recommended to use the bucket provided by the Bitpoke App.

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?

You need to publish the docker images in Google Cloud from where Kubernetes 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

What is 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.

Is it possible to switch the staging MySQL database to use an SSD?

You would notice that 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.

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

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

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 .