2019-07-02 08:05:15 +03:00
|
|
|
# Getting Started
|
|
|
|
|
2021-11-22 03:23:57 -05:00
|
|
|
This tutorial will cover:
|
|
|
|
- Provisioning a new server.
|
|
|
|
- Configuring a deployment.
|
|
|
|
- Automateing deployment via GitHub Actions.
|
2021-04-18 22:01:23 +02:00
|
|
|
|
2021-11-15 23:14:03 +01:00
|
|
|
Tutorial duration: **7 min**
|
2021-11-05 15:18:02 +01:00
|
|
|
|
2021-11-10 23:25:39 +01:00
|
|
|
First, [install the Deployer](installation.md):
|
2021-11-05 15:18:02 +01:00
|
|
|
|
2021-11-10 23:25:39 +01:00
|
|
|
```sh
|
|
|
|
curl -LO https://deployer.org/deployer.phar
|
|
|
|
mv deployer.phar /usr/local/bin/dep
|
|
|
|
chmod +x /usr/local/bin/dep
|
|
|
|
```
|
|
|
|
|
2021-11-15 23:14:03 +01:00
|
|
|
Now lets cd into the project and run following command:
|
2021-11-05 15:18:02 +01:00
|
|
|
|
2021-11-22 03:23:57 -05:00
|
|
|
```sh
|
2021-11-05 15:18:02 +01:00
|
|
|
dep init
|
|
|
|
```
|
|
|
|
|
|
|
|
Deployer will ask you a few question and after finishing you will have a
|
2021-11-15 23:14:03 +01:00
|
|
|
**deploy.php** or **deploy.yaml** file. This is our deployment recipe.
|
|
|
|
It contains hosts, tasks and requires other recipes. All framework recipes
|
2021-11-22 03:23:57 -05:00
|
|
|
that come with Deployer are based on the [common](recipe/common.md) recipe.
|
2021-11-05 16:09:34 +01:00
|
|
|
|
2021-11-22 03:23:57 -05:00
|
|
|
## Provisioning
|
2021-11-05 15:18:02 +01:00
|
|
|
|
|
|
|
:::note
|
2021-11-22 03:23:57 -05:00
|
|
|
If you already have a configured webserver you may skip to
|
2021-11-10 23:25:39 +01:00
|
|
|
[deployment](#deploy).
|
2021-11-05 15:18:02 +01:00
|
|
|
:::
|
|
|
|
|
2021-11-22 03:23:57 -05:00
|
|
|
Let's create a new VPS on Linode, DigitalOcean, Vultr, AWS, GCP, etc.
|
2021-11-10 23:25:39 +01:00
|
|
|
|
2021-11-22 03:23:57 -05:00
|
|
|
Make sure the image is **Ubuntu 20.04 LTS** as this version is supported via
|
2021-11-05 15:18:02 +01:00
|
|
|
Deployer [provision](recipe/provision.md) recipe.
|
|
|
|
|
2021-11-22 03:23:57 -05:00
|
|
|
Configure Reverse DNS or RDNS on your server. This will allow you to ssh into
|
|
|
|
server using the domain name instead of the IP address.
|
2021-11-05 15:18:02 +01:00
|
|
|
|
|
|
|
Now let's provision our server.
|
|
|
|
|
2021-11-22 03:23:57 -05:00
|
|
|
```sh
|
2021-11-05 15:18:02 +01:00
|
|
|
dep provision -o remote_user=root
|
|
|
|
```
|
|
|
|
|
2021-11-22 03:23:57 -05:00
|
|
|
We added `-o remote_user=root` to make Deployer use the root user to connect to host
|
2021-11-10 23:25:39 +01:00
|
|
|
for provisioning.
|
2021-11-05 15:18:02 +01:00
|
|
|
|
2021-11-22 03:23:57 -05:00
|
|
|
Deployer will ask you a few questions during provisioning like what php version and
|
|
|
|
database type you would like to use.
|
2021-11-05 15:18:02 +01:00
|
|
|
|
2021-11-22 03:23:57 -05:00
|
|
|
Provisioning will take around **5 minutes** and will install everything we need to run a
|
|
|
|
site. It will also configure a `deployer` user we will need to use to ssh to our
|
|
|
|
host. A new website will be configured at [deploy_path](recipe/common.md#deploy_path).
|
2021-11-05 15:18:02 +01:00
|
|
|
|
2021-11-22 03:23:57 -05:00
|
|
|
After we have configured the webserver, let's deploy the project.
|
2021-11-05 15:18:02 +01:00
|
|
|
|
2021-11-10 23:25:39 +01:00
|
|
|
## Deploy
|
2021-11-05 15:18:02 +01:00
|
|
|
|
2021-11-10 23:25:39 +01:00
|
|
|
To deploy the project:
|
2021-11-22 03:23:57 -05:00
|
|
|
```sh
|
2021-11-05 15:18:02 +01:00
|
|
|
dep deploy
|
|
|
|
```
|
|
|
|
|
2021-11-10 23:25:39 +01:00
|
|
|
Ssh to host, for example, for editing _.env_ file.
|
2021-11-05 15:18:02 +01:00
|
|
|
|
2021-11-22 03:23:57 -05:00
|
|
|
```sh
|
2021-11-05 15:18:02 +01:00
|
|
|
dep ssh
|
|
|
|
```
|
|
|
|
|
2021-11-10 23:25:39 +01:00
|
|
|
Let's add a build step on our host:
|
|
|
|
```php
|
2021-11-05 16:09:34 +01:00
|
|
|
task('build', function () {
|
|
|
|
cd('{{release_path}}');
|
|
|
|
run('npm install');
|
|
|
|
run('npm run prod');
|
|
|
|
});
|
|
|
|
|
|
|
|
after('deploy:update_code', 'build');
|
|
|
|
```
|
|
|
|
|
2021-11-22 03:23:57 -05:00
|
|
|
Deployer has a useful task for examining what is currently deployed.
|
2021-11-10 23:20:32 +01:00
|
|
|
```
|
2021-11-05 16:09:34 +01:00
|
|
|
$ dep releases
|
|
|
|
task releases
|
2021-11-05 16:18:42 +01:00
|
|
|
+---------------------+--------- deployer.org -------+--------+-----------+
|
2021-11-05 16:09:34 +01:00
|
|
|
| Date (UTC) | Release | Author | Target | Commit |
|
|
|
|
+---------------------+-------------+----------------+--------+-----------+
|
|
|
|
| 2021-11-05 14:00:22 | 1 (current) | Anton Medvedev | HEAD | 943ded2be |
|
|
|
|
+---------------------+-------------+----------------+--------+-----------+
|
|
|
|
```
|
|
|
|
|
|
|
|
:::tip
|
2021-11-22 03:23:57 -05:00
|
|
|
During development, the [dep push](recipe/deploy/push.md) task maybe useful.
|
2021-11-05 16:09:34 +01:00
|
|
|
:::
|
2021-11-05 15:18:02 +01:00
|
|
|
|
|
|
|
## Deploy on push
|
2021-11-05 16:09:34 +01:00
|
|
|
|
|
|
|
Not let's use [GitHub Action for Deployer](https://github.com/deployphp/action).
|
|
|
|
|
|
|
|
Create `.github/workflows/deploy.yml` file with following content:
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
name: deploy
|
|
|
|
|
|
|
|
on:
|
|
|
|
push:
|
|
|
|
branches: [ master ]
|
|
|
|
|
|
|
|
concurrency: production_environment
|
|
|
|
|
|
|
|
jobs:
|
|
|
|
deploy:
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
|
|
|
|
steps:
|
|
|
|
- uses: actions/checkout@v2
|
|
|
|
|
|
|
|
- name: Setup PHP
|
|
|
|
uses: shivammathur/setup-php@v2
|
|
|
|
with:
|
|
|
|
php-version: '8.0'
|
|
|
|
|
|
|
|
- name: Deploy
|
|
|
|
uses: deployphp/action@v1
|
|
|
|
with:
|
|
|
|
private-key: ${{ secrets.PRIVATE_KEY }}
|
|
|
|
dep: deploy
|
|
|
|
```
|
|
|
|
|
|
|
|
:::warning
|
|
|
|
The `concurrency: production_environment` is important as it prevents concurrent
|
|
|
|
deploys.
|
|
|
|
:::
|