- Notifications
You must be signed in to change notification settings - Fork32
GitHub Action for deploying a WordPress site using using PHP's Deployer.org
License
rtCamp/action-deploy-wordpress
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
This action is a part ofGitHub Actions Library createdbyrtCamp.
AGitHub Action to deploy WordPress on a serverusingPHP's Deployer.org project.
Please note that, this action expects git repo structure in a certain way. Your webroot should include contentinsidewp-content exceptuploads. You may use ourWordPress Skeletonas a base, or restructre existing project to fit in.
During deployment, by default this action will downloadWordPress, put the contentof the repo inwp-content directory and then deploy the entire WordPress setup on the deploy path specifiedinhosts.yml.
hosts.yml isDeployer's inventory file.
- Create a
.github/workflows/deploy.ymlfile in your GitHub repo, if one doesn't exist already. - Add the following code to the
deploy.ymlfile.
on:pushname:Deploying WordPress Sitejobs:deploy:name:Deployruns-on:ubuntu-lateststeps: -uses:actions/checkout@v2 -name:Deployuses:rtCamp/action-deploy-wordpress@v3env:SSH_PRIVATE_KEY:${{ secrets.SSH_PRIVATE_KEY }}
- Create
SSH_PRIVATE_KEYsecretusingGitHub Action's Secret and store theprivate key that you use use to ssh to server(s) defined inhosts.yml. - Create
.github/hosts.ymlinventory file, basedonDeployer inventory file format. Make sure you explictlydefine GitHub branch mapping. Only the GitHub branches mapped inhosts.ymlwill be deployed, rest will be filteredout. Here is a samplehosts.yml.
This GitHub action's behavior can be customized using following environment variables:
| Variable | Default | Possible Values | Purpose |
|---|---|---|---|
MU_PLUGINS_URL | null | vip, any git repo url | If value isvip, then action will cloneVIP's MU plugins asmu-plugins folder. If you want to specifiy a non-VIP mu-plugins repo, you can provide a publicly accessible mu-plugins repo URL as the value. |
WP_VERSION | latest | Any valid WordPress version | If you specify a WordPress version, then that speicifc WordPress version will be downloaded, instead of latest WordPress version.Note: Please use double quotes while giving value to this variable. Also,WP_VERSION, if defined in hosts.yml will have higher priority then the one defined in workflow file. |
WP_MINOR_UPDATE | null | true /false | If set totrue, latest minor version ofWP_VERSION will be taken. |
JUMPHOST_SERVER | null | Hostname/IP address of the jumphost server | If the deployment server is not directly accessible, and needs a jumphost, then this method should be used. (Note: TheSSH_PRIVATE_KEY env variable should have access to the jumphost as well as deployment server for this to work. Also, this method does not work with vault.) |
SUBMODULE_DEPLOY_KEY | null | Read access deploy key created in the submodule repo's deploy keys. | Only required for privated submodule repo. For now only one private submodule deploy key is allowed. All public submodules in repo will be fetched by default without the need of this env variable. (To create a deploy key go to: Settings > Deploy Keys > Add deploy key) |
SKIP_WP_TASKS | null | true/false | If set totrue, WordPress specific deplyment tasks will skipped. |
PHP_VERSION | 7.4 | Valid PHP version | Determines the cachetool version compatible to use for purging opcache. |
NPM_VERSION | null | Valid NPM Version | NPM Version. If not specified, latest version will be used. |
NODE_VERSION | null | Valid Node Version | If not specified, default version built into action will be used. |
NODE_BUILD_DIRECTORY | null | path to valid directory on repository. | Build directory. Generally root directory or directory like frontend. |
NODE_BUILD_COMMAND | null | npm run build or similar command. | Command used to to build the dependencies needed on deployment. |
NODE_BUILD_SCRIPT | null | path to valid shell script | Custom or predefined script to run after compilation. |
All node related variables are completely optional. You can use them if your site needs to have node dependencies built.
The Deployer.org expects server setup in a particular way.
UsingEasyEngine v4
- Pass flag
--public-dir=currentduring site creation. - Delete the
currentfolder usingrm -r /opt/easyengine/sites/example.com/app/htdocs/current.
Thecurrent folder will be automatically created by Deployer during execution.
- Open file
/opt/easyengine/sites/example.com/config/nginx/conf.d/main.conf. - Replace
/var/www/htdocswith/var/www/htdocs/current. - Run
ee site reload example.com. - Move
wp-config.phptohtdocs. You can use following command:
mv /opt/easyengine/sites/example.com/app/wp-config.php /opt/easyengine/sites/example.com/app/htdocs/wp-config.php
- Make sure your web server points to
currentsubdirectory inside original webroot. Make surecurrentsubdirectorydo NOT exist actually. - You may need to reload your webserver.
- You may need to change location of
wp-config.phpas we need in above section.
This GitHub action supportsHashicorp Vault. This comes in handy if you manage multipleservers and providingSSH_PRIVATE_KEY as GitHub secret per project becomes cumbersome.
To enable Hashicorp Vault support, please define following GitHub secrets:
| Variable | Purpose | Example Vaule |
|---|---|---|
VAULT_ADDR | Vault server address | https://example.com:8200 |
VAULT_TOKEN | Vault token | s.gIX5MKov9TUp7iiIqhrP1HgN |
You will need to changesecrets line indeploy.yml file to look like below.
on:pushname:Deploying WordPress Site using vaultjobs:deploy:name:Deployruns-on:ubuntu-lateststeps: -uses:actions/checkout@v2 -name:Deployuses:rtCamp/action-deploy-wordpress@v3env:VAULT_ADDR:${{ secrets.VAULT_ADDR }}VAULT_TOKEN:${{ secrets.VAULT_TOKEN }}
GitHub action usesVAULT_TOKEN to connect toVAULT_ADDR toretrieveSigned SSH Certificatesand uses it for deployment.
Please remember that you must configure each of your target deployment server to accept ssh connection via signedcertificate using Vault beforehand. Ususally, you need to run following commands once per server:
export VAULT_ADDR='https://example.com:8200'export VAULT_TOKEN='s.gIX5MKov9TUp7iiIqhrP1HgN'# Add the public key to all target host's SSH configuration.curl -o /etc/ssh/trusted-user-ca-keys.pem"$VAULT_ADDR/v1/ssh-client-signer/public_key"# Add the path where the public key contents are stored to the SSH configuration file as the TrustedUserCAKeys option.echo"TrustedUserCAKeys /etc/ssh/trusted-user-ca-keys.pem">> /etc/ssh/sshd_config# Restart ssh service. This may differ according to the OS.systemctl restart ssh
- If you would like to completely override this actions deployer recipe. Create a file atlocation
.github/deploy/deploy.phpin your git repository to provide your ownDeployer.orgscript.- Please note that it will completely override thisaction'soriginal deploy.php. So ifyou need some portionoforiginal deploy.php, you need tocopy that to your own
.github/deploy/deploy.php.
- Please note that it will completely override thisaction'soriginal deploy.php. So ifyou need some portionoforiginal deploy.php, you need tocopy that to your own
- If you need to add one or a few custom tasks on top of this actions
deploy.php, you can create a file atlocation.github/deploy/addon.phpin your git repository. Checkout theexample addon.php tosee how to customize it. - If you need to modify the
main.shshell script of this action, you can create a file atlocation.github/deploy/addon.shin your git repository. Checkout theexample addon.sh to seehow to customize.
MIT © 2022 rtCamp
About
GitHub Action for deploying a WordPress site using using PHP's Deployer.org
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Contributors11
Uh oh!
There was an error while loading.Please reload this page.
