|
| 1 | +# Docker |
| 2 | + |
| 3 | +Pelican provides pre-built Docker images via GitHub Packages. `ghcr.io/pelican-dev/panel:latest` is the current latest release, and `ghcr.io/pelican-dev/panel:main` is built automatically from the current `main` branch. Deploying the panel in Docker is still a work in progress. While the plan is to make Docker the preferred installation method, we currently recommend the [standard deployment instructions](/docs/panel/getting-started) |
| 4 | + |
| 5 | +This guide requires Docker CE. (Docker Compose has been included in the Docker CLI since v2. Docker Compose v1 is unsupported.) For instructions on installing and configuring Docker, see the [installation guide](/docs/guides/docker). |
| 6 | + |
| 7 | +## Basics |
| 8 | + |
| 9 | +The easiest deployment method is using the standard `compose.yml` file. |
| 10 | + |
| 11 | +This configuration includes an integrated web server that will automatically obtain SSL certificates if you are serving over HTTPS. For the database, it assumes you want to use SQLite (or you have an external database server to configure using the installer.) It also assumes you intend to use the Filesystem driver for cache, filesystem or database driver for session, and database driver for queue (or you have an external Redis server to configure using the installer.) If you want to use other options built into Docker, see [Advanced Options](#advanced-options). |
| 12 | + |
| 13 | +### Create compose.yml |
| 14 | + |
| 15 | +```yml {17,18} title="compose.yml" |
| 16 | +services: |
| 17 | + panel: |
| 18 | + image: ghcr.io/pelican-dev/panel:latest |
| 19 | + restart: always |
| 20 | + networks: |
| 21 | + - default |
| 22 | + ports: |
| 23 | + - "80:80" |
| 24 | + - "443:443" |
| 25 | + extra_hosts: |
| 26 | + - "host.docker.internal:host-gateway" |
| 27 | + volumes: |
| 28 | + - pelican-data:/pelican-data |
| 29 | + - pelican-logs:/var/www/html/storage/logs |
| 30 | + environment: |
| 31 | + XDG_DATA_HOME: /pelican-data |
| 32 | + APP_URL: "http://localhost" |
| 33 | + ADMIN_EMAIL: "USEYOUROWNEMAILHERE@example.com" |
| 34 | + |
| 35 | +volumes: |
| 36 | + pelican-data: |
| 37 | + pelican-logs: |
| 38 | + |
| 39 | +networks: |
| 40 | + default: |
| 41 | + ipam: |
| 42 | + config: |
| 43 | + - subnet: 172.20.0.0/16 |
| 44 | +``` |
| 45 | +
|
| 46 | +### Set Required Environment Variables |
| 47 | +
|
| 48 | +1. Set `APP_URL` to the base URL your panel will be reachable on, including the protocol (https:// or http://) and port. |
| 49 | + - Note that Caddy, the integrated webserver, will serve a 308 redirect to any requests on port 80 if the `APP_URL` begins with `https://`. If your final site will be reachable over HTTPS but TLS (SSL) will be handled and terminated by an upstream server, such as a reverse proxy, you will need to use a [custom caddyfile](#custom-caddyfile). |
| 50 | +2. Set the `ADMIN_EMAIL` to your email address. Caddy will use this email address to generate a LetsEncrypt SSL certificate if you are serving via HTTPS. |
| 51 | + |
| 52 | +Now, close and save changes to `compose.yml`. |
| 53 | + |
| 54 | +### Starting |
| 55 | + |
| 56 | +From the directory in which the compose file is located, run: |
| 57 | + |
| 58 | +```sh |
| 59 | +docker compose up -d |
| 60 | +``` |
| 61 | + |
| 62 | +### Back Up Your Encryption Key |
| 63 | + |
| 64 | +The first time the container starts, it will generate an `APP_KEY` which is used as an encryption key. This will be saved automatically, but you should save a copy in a secure place in case you need it later. |
| 65 | + |
| 66 | +```sh |
| 67 | +docker compose logs panel | grep 'Generated app key:' |
| 68 | +``` |
| 69 | + |
| 70 | +### Installing |
| 71 | + |
| 72 | +Open the installer in your browser at `APP_URL/installer` to finish setting up the panel. |
| 73 | + |
| 74 | +:::note |
| 75 | +The first time the container starts after installing or updating, it will apply database migrations, which may take a few minutes. The panel will not be accessible during this process. |
| 76 | +::: |
| 77 | + |
| 78 | +#### Sensible Driver Defaults: |
| 79 | + |
| 80 | +* Cache Driver: Filesystem |
| 81 | +* Database Driver: SQLite |
| 82 | +* Queue Driver: Database |
| 83 | +* Session Driver: Filesystem |
| 84 | + |
| 85 | +For other configuration, such as UI options, CAPTCHA, email, backups and OAuth, head to the settings menu in the admin panel. |
| 86 | + |
| 87 | +### Stopping |
| 88 | + |
| 89 | +The panel will automatically restart if the container crashes or the host restarts. If you need to non-destructively stop the panel for any reason, navigate back to the directory containing `compose.yml` and run: |
| 90 | + |
| 91 | +```sh |
| 92 | +docker compose down |
| 93 | +``` |
| 94 | + |
| 95 | +### Uninstalling |
| 96 | + |
| 97 | +To uninstall the panel, navigate to the directory containing `compose.yml` and run: |
| 98 | + |
| 99 | +```sh |
| 100 | +docker compose down -v |
| 101 | +``` |
| 102 | + |
| 103 | +:::danger |
| 104 | + **This will permanently delete the panel and all associated data including the SQLite database and your encryption key.** |
| 105 | +::: |
| 106 | + |
| 107 | +## Advanced Options |
| 108 | + |
| 109 | +### Custom Caddyfile |
| 110 | + |
| 111 | +The default Caddyfile will work for standard installations. If you need to edit the configuration of the integrated webserver, such as to place it behind a reverse proxy that terminates TLS, you can do so by bind-mounting a Caddyfile on the host to `/etc/caddy/Caddyfile` inside the container. |
| 112 | + |
| 113 | +This example assumes there is a Caddyfile in the same directory as the `compose.yml` file. |
| 114 | + |
| 115 | +```yml {15} title="compose.yml" |
| 116 | +services: |
| 117 | + panel: |
| 118 | + image: ghcr.io/pelican-dev/panel:latest |
| 119 | + restart: always |
| 120 | + networks: |
| 121 | + - default |
| 122 | + ports: |
| 123 | + - "80:80" |
| 124 | + - "443:443" |
| 125 | + extra_hosts: |
| 126 | + - "host.docker.internal:host-gateway" |
| 127 | + volumes: |
| 128 | + - pelican-data:/pelican-data |
| 129 | + - pelican-logs:/var/www/html/storage/logs |
| 130 | + - ./Caddyfile:/etc/caddy/Caddyfile |
| 131 | + environment: |
| 132 | + XDG_DATA_HOME: /pelican-data |
| 133 | + APP_URL: "http://localhost" |
| 134 | + ADMIN_EMAIL: "USEYOUROWNEMAILHERE@example.com" |
| 135 | +
|
| 136 | +volumes: |
| 137 | + pelican-data: |
| 138 | + pelican-logs: |
| 139 | +
|
| 140 | +networks: |
| 141 | + default: |
| 142 | + ipam: |
| 143 | + config: |
| 144 | + - subnet: 172.20.0.0/16 |
| 145 | +``` |
0 commit comments