1
0
Fork 0

Update README.md

This commit is contained in:
Michael Nguyen 2018-02-19 00:44:13 -08:00
parent bf2a1d5d8f
commit aee13ef7ea

132
README.md
View file

@ -1,4 +1,5 @@
# pterodactyl-panel-docker
[![GitHub release](https://img.shields.io/github/release/TehTotalPwnage/pterodactyl-panel-docker.svg?style=for-the-badge)](https://github.com/TehTotalPwnage/pterodactyl-panel-docker/releases)
> Docker Compose configuration for the [Pterodactyl Panel](https://github.com/Pterodactyl/Panel).
Pterodactyl is an open-source control panel used for hosting numerous game-related
@ -6,37 +7,42 @@ services, such as Minecraft and Teamspeak servers. Setting it up, however, takes
quite a few steps according to the [documentation](https://docs.pterodactyl.io/docs).
This Docker Compose configuration is aimed at removing a majority of the steps so
that the installation process is almost as simple as cloning this build script and
that the installation process is *almost* as simple as cloning this build script and
running `docker-compose up`.
There are other Docker Compose setups available, including the [one](https://github.com/parkervcp/pterodactyl-panel-Dockerfile)
created by one of the project's primary developers, parkervcp. However, I opted
to create my own for a few reasons:
created by one of the project's primary developers, parkervcp. This differs from
those setups in various ways for a couple of different reasons:
1. These setups detract from Docker's "one service per container" philosophy. While
it might be impossible to completely narrow down such a complex setup to one container,
there are services, such as PHP and Nginx, that can be separated.
2. I wanted to add a few alternative services for use in the Panel, such as Nginx
instead of caddy.
1. This setup splits the HTTP and PHP services into two different containers. Doing
so allows for separation of concerns (a central Docker principle) and easier management
of containers and Dockerfiles.
2. This setup uses Nginx instead of Caddy. Various [benchmarks](https://community.centminmod.com/threads/caddy-http-2-server-benchmarks.5170/#post-34367)
[indicate](https://hackernoon.com/caddy-a-modern-web-server-vs-nginx-e9e4abc443e)
that Nginx performs better than Caddy in handling requests. In addition to this,
Nginx, while having a more complicated configuration file, doesn't enforce HTTPS,
a feature of Caddy which only complicates the setup of the HTTP Docker container.
## Usage
The instructions are fairly self explanatory: clone the repository and launch the
stack.
project. Instructions on how to launch the project are listed below. All commands
should be run from the repository directory.
In your favorite text editor, open docker-compose.yml change the port that you want
the panel binded to. See below for more details. Once that's done, build and start
the project.
```
git clone https://github.com/TehTotalPwnage/pterodactyl-panel-docker mypanel
cd mypanel
docker-compose -p <project_name> pull
docker-compose -p <project_name> build
docker-compose -p <project_name> up
```
I'd recommend cloning the repository into a specific directory name unless you want
all your containers to be named pterodactylpaneldocker_service_number.
The panel is now online. If this is your first time booting the panel, you'll also
need to run the install script, which will run all of the necessary configuration
scripts and database migrations for you.
```
vim docker-compose.yml
```
In your favorite text editor, change the port that you want the panel binded to.
There are other settings you may need to modify that are documented below.
```
docker-compose pull
docker-compose build
docker-compose up
docker exec -it <project name>_php_1 install
# Restart the panel to load changes. The install script will remind you to do so.
docker restart <project name>_php_1
```
The panel should now be ready, and you can connect to it via localhost at the port
you specified in the Docker Compose file.
@ -47,22 +53,72 @@ ports:
```
<host port number>:80
```
For the Panel, there are different environment variables that you can configure:
- `panel_url` - The FQDN that the Panel will be hosted on. Required. (https://mc.example.com)
- `timezone` - The timezone that the Panel will be hosted on. A list is available at http://php.net/manual/en/timezones.php.
- `email_driver` - The email driver for the Panel. Options are smtp, mail, mailgun, mandrill, or postmark.
- `panel_email` - The email address the panel should use. Required for all drivers.
- `email_name` - The display name emails sent should have. Required for all drivers.
- `email_user` - A username for the email server. Required for smtp, mandrill, mailgun, and postmark.
- `email_pass` - A password for the email server. Required for smtp.
- `email_domain` - The domain the driver should connect to. Required for smtp and mailgun.
- `email_port` - The port of the email server. Required for smtp.
- `admin_email` - The email address for the admin user. Required.
- `admin_first` - The first name for the admin user. Required.
- `admin_last` - The last name for the admin user. Required.
- `admin_pass` - The password for the admin user. Required.
- `admin_username` - The username for the admin user. Required.
Two scripts are provided in order to aid with installation and upgrades.
```
# Use these scripts with the following command:
docker exec -it <project name>_php_1 <script name>
- install: Runs all the installation scripts, including migrations and configuration.
- upgrade: Runs all the steps needed to upgrade to the latest version of the panel.
```
Note that depending on how old your version of the panel is, the upgrade command
may not work. Be sure to check the changelog for each release and make sure your
version is not listed as not working.
### Upgrading
**Always remember to back up your data before upgrades! While I do my best to keep
this Docker Compose configuration stable, there is always the chance that something
can go horribly wrong! See the next section on how to run backups.**
Upgrading the project is slightly more complex. See the second caveat for an explanation
as to why.
To upgrade, take down the project and wipe out the panel volume as it interferes
with the upgrade process.
```
docker-compose -p <project name> down
docker volume rm <project name>_panel
```
Rebuild and restart the project.
```
docker-compose -p <project name> pull
docker-compose -p <project name> build
docker-compose -p <project name> up
```
Finally, run the upgrade script.
```
docker exec -it <project name>_php_1 upgrade
# Restart the panel to load changes. The upgrade script will remind you to do so.
docker restart <project name>_php_1
```
### Backups
The volumes that you will need to backup are `db` (database), `env` (configuration),
and `storage` (stored eggs and other files). These commands only work when the project
is up (a caveat of Docker).
```
# Use mysqldump to back up the database.
docker exec -it <project name>_db_1 mysqldump -u pterodactyl -ppterodactyl pterodactyl > database.sql
# You can copy the .env file from the mounted env volume.
docker cp <project name>_php_1:/var/www/html/env/.env .env
# You can copy the mounted storage volume.
docker cp <project name>_php_1:/var/www/html/pterodactyl/storage storage
```
## Caveats
- Do not stop the Docker Compose stack on the first run until supervisor announces
that the setup is complete! Errors may occur if you kill the process too early!
- Due to the need for a .env file early on in the build process, it is impossible
to automatically run an install script, which would depend on checking for the existence
of a .env file. You will need to manually run the install and upgrade scripts as
necessary. Their use has been covered in the previous section.
- The panel volume is required to share data between the HTTP and PHP containers,
but the existence of this volume interferes with upgrade files due to how Docker
works. These containers are separated for reasons already outlined, but this does
mean that this volume must manually be removed on each upgrade.
- A symbolic link is used to maintain the state of the .env file rather than Docker
configs because of issues with **Docker itself**. Configs exist, but because they
are read-only filesystems, they cannot be modified in the container, making their
maintenance much more complicated. They would also require the use of Docker Swarms
and Docker Services.
- This setup is for Docker Compose, **not** for Docker Swarm or Docker Service. These
two Docker services take much more convoluted configuration, including the setup
of a swarm and the use of a local image registry, which would only complicate this
setup.