2015-12-19 14:52:17 +01:00
|
|
|
title: Deployment
|
|
|
|
---
|
|
|
|
sort_key: 110
|
|
|
|
---
|
|
|
|
summary: All there is to know about deploying and publishing changes.
|
|
|
|
---
|
|
|
|
body:
|
|
|
|
|
|
|
|
A website is only a website if other people can look at it. While you are
|
|
|
|
developing locally that's not really all that helpful. So how do you get
|
|
|
|
your changes up to your favorite web host? This is where [lektor deploy
|
|
|
|
:ref](../cli/deploy/) comes in.
|
|
|
|
|
|
|
|
## Deploying in Two Steps:
|
|
|
|
|
|
|
|
Deploying a website in Lektor is a two step process:
|
|
|
|
|
|
|
|
1. build
|
|
|
|
2. deploy
|
|
|
|
|
|
|
|
Keep this in mind. A deploy will not implicitly build! This means that if
|
|
|
|
you deploy without building first you might send up a completely wrong
|
|
|
|
version! Also more importantly: *never deploy unless the build finished
|
|
|
|
successfully*.
|
|
|
|
|
|
|
|
## The Build Pipeline
|
|
|
|
|
|
|
|
So let's cover the building first. When you use the Lektor server locally,
|
2016-01-08 22:38:26 +01:00
|
|
|
Lektor constantly builds out your website into static HTML files behind the
|
2015-12-19 14:52:17 +01:00
|
|
|
scenes into the default build folder. This folder is in an operating system
|
|
|
|
specific location. If you want to know where that folder is, you can use this
|
|
|
|
command:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ lektor project-info --output-path
|
|
|
|
```
|
|
|
|
|
|
|
|
Additionally you can manually provide a different path if you kick off a
|
|
|
|
manual build:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ lektor build --output-path my-folder
|
|
|
|
```
|
|
|
|
|
|
|
|
Generally we strongly recommend to use the default build folder when deploying
|
|
|
|
from your own machine because it will be faster since the build can reuse
|
|
|
|
what the development server already did. If you want to deploy from a build
|
|
|
|
server it might make more sense to provide absolute paths.
|
|
|
|
|
|
|
|
## Lektor Assisted Deployments
|
|
|
|
|
|
|
|
Currently Lektor can deploy via `rsync` and `ftp` automatically. To enable
|
|
|
|
this functionality you need to configure this in the config file. For each
|
|
|
|
potential deployment target add a `[servers.NAME]` section. The supported
|
|
|
|
keys are `name` for an optional human readable name of the server, `enabled` to
|
|
|
|
enable or disable it (defaults to `true`) and `target` which is the URL to
|
|
|
|
publish to. Additionally one of the servers can have `default` set to `yes`
|
2015-12-26 15:11:45 +01:00
|
|
|
to set it as default. Here is an example:
|
2015-12-19 14:52:17 +01:00
|
|
|
|
|
|
|
```ini
|
|
|
|
[servers.production]
|
|
|
|
name = Production
|
|
|
|
enabled = yes
|
|
|
|
default = yes
|
|
|
|
target = rsync://server/path/to/folder
|
|
|
|
```
|
|
|
|
|
|
|
|
To trigger a deploy you can use the [deploy :ref](../cli/deploy/) command:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ lektor deploy production
|
|
|
|
```
|
|
|
|
|
|
|
|
Or because it's the default server, you can just do this:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ lektor deploy
|
|
|
|
```
|
|
|
|
|
|
|
|
This deploys the latest state of what was built from the default build
|
|
|
|
folder. It does not build itself! So to do both in one go, do something like
|
|
|
|
this:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ lektor build && lektor deploy
|
|
|
|
```
|
|
|
|
|
|
|
|
If you want to provide a different build folder, provide it explicitly with
|
|
|
|
`--output-path` to both `build` and `deploy`. This can also be set with
|
|
|
|
the `LEKTOR_OUTPUT_PATH` environment variable.
|
|
|
|
|
2018-10-03 22:20:36 +02:00
|
|
|
!!!! **Note on credentials**: For FTP and other systems it is possible to embed
|
2015-12-19 14:52:17 +01:00
|
|
|
the credentials directly in the URL. If you do this, please ensure that
|
|
|
|
you keep your project file secure as loss of the project file can mean that
|
|
|
|
people get access to your server. Alternatively you can also provide username
|
2016-01-16 15:45:07 +01:00
|
|
|
and password through the command line or environment variables.
|
2015-12-19 14:52:17 +01:00
|
|
|
|
2018-10-03 22:20:36 +02:00
|
|
|
The following targets are supported for the `target` field natively:
|
2015-12-19 14:52:17 +01:00
|
|
|
|
|
|
|
* [rsync](rsync/)
|
|
|
|
* [FTP](ftp/)
|
|
|
|
* [GitHub Pages](ghpages/)
|
|
|
|
|
2018-10-03 22:20:36 +02:00
|
|
|
**In addition**, there are [third-party plugins :ref](../../plugins/categories/deploy/) available for additional deploy targets.
|
2015-12-22 23:02:26 +01:00
|
|
|
|
2015-12-19 14:52:17 +01:00
|
|
|
## Manual Deployments
|
|
|
|
|
|
|
|
If you want to manually deploy something through the favorite tool of yours
|
|
|
|
you can do that easily as well. For instance if you want to deploy to S3
|
|
|
|
with [s3cmd](http://s3tools.org/s3cmd-sync) you could do this:
|
|
|
|
|
|
|
|
```
|
2016-03-24 15:51:34 +01:00
|
|
|
$ lektor build && s3cmd sync "$(lektor project-info --output-path)"/* "s3://my-bucket/some/path"
|
2015-12-19 14:52:17 +01:00
|
|
|
```
|
|
|
|
|
|
|
|
Assisted deployments are also supported directly from the admin UI. There is a
|
|
|
|
publish button that can be used to send the changes up.
|