feat(service): add pterodactyl & wings services (#5537)
This commit is contained in:
		
							
								
								
									
										140
									
								
								templates/compose/pterodactyl-with-wings.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										140
									
								
								templates/compose/pterodactyl-with-wings.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,140 @@ | ||||
| # documentation: https://pterodactyl.io/ | ||||
| # slogan: Pterodactyl is a free, open-source game server management panel | ||||
| # tags: game, game server, management, panel, minecraft | ||||
| # logo: svgs/pterodactyl.png | ||||
| # port: 80, 8443 | ||||
|  | ||||
| services: | ||||
|   mariadb: | ||||
|     image: mariadb:10.5 | ||||
|     healthcheck: | ||||
|       test: | ||||
|         ["CMD-SHELL", "healthcheck.sh --connect --innodb_initialized || exit 1"] | ||||
|       start_period: 10s | ||||
|       interval: 10s | ||||
|       timeout: 1s | ||||
|       retries: 3 | ||||
|     environment: | ||||
|       - MYSQL_ROOT_PASSWORD=$SERVICE_PASSWORD_MYSQLROOT | ||||
|       - MYSQL_DATABASE=pterodactyl-db | ||||
|       - MYSQL_USER=$SERVICE_USER_MYSQL | ||||
|       - MYSQL_PASSWORD=$SERVICE_PASSWORD_MYSQL | ||||
|     volumes: | ||||
|       - pterodactyl-db:/var/lib/mysql | ||||
|  | ||||
|   redis: | ||||
|     image: redis:alpine | ||||
|     healthcheck: | ||||
|       test: ["CMD-SHELL", "redis-cli ping || exit 1"] | ||||
|       interval: 10s | ||||
|       timeout: 1s | ||||
|       retries: 3 | ||||
|  | ||||
|   pterodactyl: | ||||
|     image: ghcr.io/pterodactyl/panel:latest | ||||
|     volumes: | ||||
|       - "panel-var:/app/var/" | ||||
|       - "panel-nginx:/etc/nginx/http.d/" | ||||
|       - "panel-certs:/etc/letsencrypt/" | ||||
|       - type: bind | ||||
|         source: ./etc/entrypoint.sh | ||||
|         target: /entrypoint.sh | ||||
|         mode: "0755" | ||||
|         content: | | ||||
|           #!/bin/sh | ||||
|           set -e | ||||
|  | ||||
|            echo "Setting logs permissions..." | ||||
|            chown -R nginx: /app/storage/logs/ | ||||
|  | ||||
|            USER_EXISTS=$(php artisan tinker --no-ansi --execute='echo \Pterodactyl\Models\User::where("email", "'"$ADMIN_EMAIL"'")->exists() ? "1" : "0";') | ||||
|  | ||||
|            if [ "$USER_EXISTS" = "0" ]; then | ||||
|              echo "Admin User does not exist, creating user now." | ||||
|              php artisan p:user:make --no-interaction \ | ||||
|                --admin=1 \ | ||||
|                --email="$ADMIN_EMAIL" \ | ||||
|                --username="$ADMIN_USERNAME" \ | ||||
|                --name-first="$ADMIN_FIRSTNAME" \ | ||||
|                --name-last="$ADMIN_LASTNAME" \ | ||||
|                --password="$ADMIN_PASSWORD" | ||||
|              echo "Admin user created successfully!" | ||||
|            else | ||||
|              echo "Admin User already exists, skipping creation." | ||||
|            fi | ||||
|  | ||||
|            exec supervisord --nodaemon | ||||
|     command: ["/entrypoint.sh"] | ||||
|     healthcheck: | ||||
|       test: ["CMD-SHELL", "curl -sf http://localhost:80 || exit 1"] | ||||
|       interval: 10s | ||||
|       timeout: 1s | ||||
|       retries: 3 | ||||
|     environment: | ||||
|       - SERVICE_FQDN_PTERODACTYL_80 | ||||
|       - ADMIN_EMAIL=${ADMIN_EMAIL:-admin@example.com} | ||||
|       - ADMIN_USERNAME=${SERVICE_USER_ADMIN} | ||||
|       - ADMIN_FIRSTNAME=${ADMIN_FIRSTNAME:-Admin} | ||||
|       - ADMIN_LASTNAME=${ADMIN_LASTNAME:-User} | ||||
|       - ADMIN_PASSWORD=${SERVICE_PASSWORD_ADMIN} | ||||
|       - PTERODACTYL_HTTPS=${PTERODACTYL_HTTPS:-false} | ||||
|       - APP_ENV=production | ||||
|       - APP_ENVIRONMENT_ONLY=false | ||||
|       - APP_URL=$SERVICE_FQDN_PTERODACTYL | ||||
|       - APP_TIMEZONE=${TIMEZONE:-UTC} | ||||
|       - APP_SERVICE_AUTHOR=${APP_SERVICE_AUTHOR:-author@example.com} | ||||
|       - LOG_LEVEL=${LOG_LEVEL:-debug} | ||||
|       - CACHE_DRIVER=redis | ||||
|       - SESSION_DRIVER=redis | ||||
|       - QUEUE_DRIVER=redis | ||||
|       - REDIS_HOST=redis | ||||
|       - DB_DATABASE=pterodactyl-db | ||||
|       - DB_USERNAME=$SERVICE_USER_MYSQL | ||||
|       - DB_HOST=mariadb | ||||
|       - DB_PORT=3306 | ||||
|       - DB_PASSWORD=$SERVICE_PASSWORD_MYSQL | ||||
|       - MAIL_FROM=$MAIL_FROM | ||||
|       - MAIL_DRIVER=$MAIL_DRIVER | ||||
|       - MAIL_HOST=$MAIL_HOST | ||||
|       - MAIL_PORT=$MAIL_PORT | ||||
|       - MAIL_USERNAME=$MAIL_USERNAME | ||||
|       - MAIL_PASSWORD=$MAIL_PASSWORD | ||||
|       - MAIL_ENCRYPTION=$MAIL_ENCRYPTION | ||||
|  | ||||
|   wings: | ||||
|     image: "ghcr.io/pterodactyl/wings:latest" | ||||
|     environment: | ||||
|       - SERVICE_FQDN_WINGS_8443 | ||||
|       - "TZ=${TIMEZONE:-UTC}" | ||||
|       - WINGS_USERNAME=$SERVICE_USER_WINGS | ||||
|     volumes: | ||||
|       - "/var/run/docker.sock:/var/run/docker.sock" | ||||
|       - "/var/lib/docker/containers/:/var/lib/docker/containers/" | ||||
|       - "/var/lib/pterodactyl/volumes:/var/lib/pterodactyl/volumes" | ||||
|       - "/tmp/pterodactyl:/tmp/pterodactyl" | ||||
|       - wings_lib:/var/lib/pterodactyl/ | ||||
|       - wings_logs:/var/log/pterodactyl/ | ||||
|       - type: bind | ||||
|         source: ./etc/config.yml | ||||
|         target: /etc/pterodactyl/config.yml | ||||
|         content: | | ||||
|           debug: false | ||||
|           uuid: ReplaceConfig | ||||
|           token_id: ReplaceConfig | ||||
|           token: ReplaceConfig | ||||
|           api: | ||||
|             host: 0.0.0.0 | ||||
|             port: 8443 # Warning, panel must have 443 as daemon port, while here it should should be 8443, FQDN in Coolify for this service should be https://*:8443 | ||||
|             ssl: | ||||
|               enabled: false | ||||
|               cert: ReplaceConfig | ||||
|               key: ReplaceConfig | ||||
|             upload_limit: 100 | ||||
|           system: | ||||
|             data: /var/lib/pterodactyl/volumes | ||||
|             sftp: | ||||
|               bind_port: 2022 | ||||
|           allowed_mounts: [] | ||||
|           remote: '' | ||||
|     ports: | ||||
|       - '2022:2022' | ||||
| @@ -1,4 +1,3 @@ | ||||
| # ignore: true | ||||
| # documentation: https://pterodactyl.io/ | ||||
| # slogan: Pterodactyl is a free, open-source game server management panel | ||||
| # tags: game, game server, management, panel, minecraft | ||||
| @@ -8,8 +7,6 @@ | ||||
| services: | ||||
|   mariadb: | ||||
|     image: mariadb:10.5 | ||||
|     restart: unless-stopped | ||||
|     command: --default-authentication-plugin=mysql_native_password | ||||
|     healthcheck: | ||||
|       test: | ||||
|         ["CMD-SHELL", "healthcheck.sh --connect --innodb_initialized || exit 1"] | ||||
| @@ -18,17 +15,15 @@ services: | ||||
|       timeout: 1s | ||||
|       retries: 3 | ||||
|     environment: | ||||
|       - SERVICE_PASSWORD_MYSQL | ||||
|       - MYSQL_ROOT_PASSWORD=$SERVICE_PASSWORD_MYSQLROOT | ||||
|       - MYSQL_DATABASE=panel | ||||
|       - MYSQL_USER=pterodactyl | ||||
|       - MYSQL_DATABASE=pterodactyl-db | ||||
|       - MYSQL_USER=$SERVICE_USER_MYSQL | ||||
|       - MYSQL_PASSWORD=$SERVICE_PASSWORD_MYSQL | ||||
|     volumes: | ||||
|       - pterodactyl-db:/var/lib/mysql | ||||
|  | ||||
|   redis: | ||||
|     image: redis:alpine | ||||
|     restart: unless-stopped | ||||
|     healthcheck: | ||||
|       test: ["CMD-SHELL", "redis-cli ping || exit 1"] | ||||
|       interval: 10s | ||||
| @@ -37,7 +32,6 @@ services: | ||||
|  | ||||
|   pterodactyl: | ||||
|     image: ghcr.io/pterodactyl/panel:latest | ||||
|     restart: unless-stopped | ||||
|     volumes: | ||||
|       - "panel-var:/app/var/" | ||||
|       - "panel-nginx:/etc/nginx/http.d/" | ||||
| @@ -50,28 +44,26 @@ services: | ||||
|           #!/bin/sh | ||||
|           set -e | ||||
|  | ||||
|           echo "Waiting for services to be ready..." | ||||
|           sleep 30 | ||||
|            echo "Setting logs permissions..." | ||||
|            chown -R nginx: /app/storage/logs/ | ||||
|  | ||||
|           echo "Setting logs permissions..." | ||||
|           chown -R nginx: /app/storage/logs/ | ||||
|            USER_EXISTS=$(php artisan tinker --no-ansi --execute='echo \Pterodactyl\Models\User::where("email", "'"$ADMIN_EMAIL"'")->exists() ? "1" : "0";') | ||||
|  | ||||
|           if ! php artisan p:user:list | grep -q "$ADMIN_EMAIL"; then | ||||
|             echo "Creating admin user..." | ||||
|             php artisan p:user:make --no-interaction \ | ||||
|               --admin=1 \ | ||||
|               --email="$ADMIN_EMAIL" \ | ||||
|               --username="$ADMIN_USERNAME" \ | ||||
|               --name-first="$ADMIN_FIRSTNAME" \ | ||||
|               --name-last="$ADMIN_LASTNAME" \ | ||||
|               --password="$ADMIN_PASSWORD" | ||||
|             echo "Admin user created" | ||||
|           else | ||||
|             echo "Admin user already exists, skipping creation" | ||||
|           fi | ||||
|  | ||||
|            exec supervisord -c --nodaemon | ||||
|            if [ "$USER_EXISTS" = "0" ]; then | ||||
|              echo "Admin User does not exist, creating user now." | ||||
|              php artisan p:user:make --no-interaction \ | ||||
|                --admin=1 \ | ||||
|                --email="$ADMIN_EMAIL" \ | ||||
|                --username="$ADMIN_USERNAME" \ | ||||
|                --name-first="$ADMIN_FIRSTNAME" \ | ||||
|                --name-last="$ADMIN_LASTNAME" \ | ||||
|                --password="$ADMIN_PASSWORD" | ||||
|              echo "Admin user created successfully!" | ||||
|            else | ||||
|              echo "Admin User already exists, skipping creation." | ||||
|            fi | ||||
|  | ||||
|            exec supervisord --nodaemon | ||||
|     command: ["/entrypoint.sh"] | ||||
|     healthcheck: | ||||
|       test: ["CMD-SHELL", "curl -sf http://localhost:80 || exit 1"] | ||||
| @@ -79,7 +71,7 @@ services: | ||||
|       timeout: 1s | ||||
|       retries: 3 | ||||
|     environment: | ||||
|       - SERVICE_FQDN_PTERODACTYL | ||||
|       - SERVICE_FQDN_PTERODACTYL_80 | ||||
|       - ADMIN_EMAIL=${ADMIN_EMAIL:-admin@example.com} | ||||
|       - ADMIN_USERNAME=${SERVICE_USER_ADMIN} | ||||
|       - ADMIN_FIRSTNAME=${ADMIN_FIRSTNAME:-Admin} | ||||
| @@ -88,7 +80,7 @@ services: | ||||
|       - PTERODACTYL_HTTPS=${PTERODACTYL_HTTPS:-false} | ||||
|       - APP_ENV=production | ||||
|       - APP_ENVIRONMENT_ONLY=false | ||||
|       - APP_URL=${PTERODACTYL_PUBLIC_FQDN:-$SERVICE_FQDN_PTERODACTYL} | ||||
|       - APP_URL=$SERVICE_FQDN_PTERODACTYL | ||||
|       - APP_TIMEZONE=${TIMEZONE:-UTC} | ||||
|       - APP_SERVICE_AUTHOR=${APP_SERVICE_AUTHOR:-author@example.com} | ||||
|       - LOG_LEVEL=${LOG_LEVEL:-debug} | ||||
| @@ -96,6 +88,8 @@ services: | ||||
|       - SESSION_DRIVER=redis | ||||
|       - QUEUE_DRIVER=redis | ||||
|       - REDIS_HOST=redis | ||||
|       - DB_DATABASE=pterodactyl-db | ||||
|       - DB_USERNAME=$SERVICE_USER_MYSQL | ||||
|       - DB_HOST=mariadb | ||||
|       - DB_PORT=3306 | ||||
|       - DB_PASSWORD=$SERVICE_PASSWORD_MYSQL | ||||
| @@ -105,43 +99,4 @@ services: | ||||
|       - MAIL_PORT=$MAIL_PORT | ||||
|       - MAIL_USERNAME=$MAIL_USERNAME | ||||
|       - MAIL_PASSWORD=$MAIL_PASSWORD | ||||
|       - MAIL_ENCRYPTION=$MAIL_ENCRYPTION | ||||
|  | ||||
|   wings: | ||||
|     image: ghcr.io/pterodactyl/wings:latest | ||||
|     restart: unless-stopped | ||||
|     environment: | ||||
|       - SERVICE_FQDN_WINGS_8080 | ||||
|       - TZ=${TIMEZONE:-UTC} | ||||
|       - WINGS_USERNAME=pterodactyl | ||||
|     volumes: | ||||
|       - "/var/run/docker.sock:/var/run/docker.sock" | ||||
|       - "/var/lib/docker/containers/:/var/lib/docker/containers/" | ||||
|       - "/var/lib/pterodactyl/:/var/lib/pterodactyl/" # See https://discord.com/channels/122900397965705216/493443725012500490/1272195151309045902 | ||||
|       - "/tmp/pterodactyl/:/tmp/pterodactyl/" # See https://discord.com/channels/122900397965705216/493443725012500490/1272195151309045902 | ||||
|       - "wings-logs:/var/log/pterodactyl/" | ||||
|  | ||||
|       - type: bind | ||||
|         source: ./etc/config.yml | ||||
|         target: /etc/pterodactyl/config.yml | ||||
|         content: | | ||||
|           docker: | ||||
|             network: | ||||
|               interface: 172.28.0.1 | ||||
|               dns: | ||||
|               - 1.1.1.1 | ||||
|               - 1.0.0.1 | ||||
|               name: pterodactyl_nw | ||||
|               ispn: false | ||||
|               driver: "" | ||||
|               network_mode: pterodactyl_nw | ||||
|               is_internal: false | ||||
|               enable_icc: true | ||||
|               network_mtu: 1500 | ||||
|               interfaces: | ||||
|                 v4: | ||||
|                   subnet: 172.28.0.0/16 | ||||
|                   gateway: 172.28.0.1 | ||||
|                 v6: | ||||
|                   subnet: fdba:17c8:6c94::/64 | ||||
|                   gateway: fdba:17c8:6c94::1011 | ||||
|       - MAIL_ENCRYPTION=$MAIL_ENCRYPTION | ||||
							
								
								
									
										44
									
								
								templates/compose/wings.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								templates/compose/wings.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | ||||
| # documentation: https://pterodactyl.io/ | ||||
| # slogan: Wings is Pterodactyl's server control plane | ||||
| # tags: game, game server, management, panel, minecraft | ||||
| # logo: svgs/pterodactyl.png | ||||
| # port: 8443 | ||||
|  | ||||
| services: | ||||
|   wings: | ||||
|     image: "ghcr.io/pterodactyl/wings:latest" | ||||
|     environment: | ||||
|       - SERVICE_FQDN_WINGS_8443 | ||||
|       - "TZ=${TIMEZONE:-UTC}" | ||||
|       - WINGS_USERNAME=$SERVICE_USER_WINGS | ||||
|     volumes: | ||||
|       - "/var/run/docker.sock:/var/run/docker.sock" | ||||
|       - "/var/lib/docker/containers/:/var/lib/docker/containers/" | ||||
|       - "/var/lib/pterodactyl/volumes:/var/lib/pterodactyl/volumes" | ||||
|       - "/tmp/pterodactyl:/tmp/pterodactyl" | ||||
|       - wings_lib:/var/lib/pterodactyl/ | ||||
|       - wings_logs:/var/log/pterodactyl/ | ||||
|       - type: bind | ||||
|         source: ./etc/config.yml | ||||
|         target: /etc/pterodactyl/config.yml | ||||
|         content: | | ||||
|           debug: false | ||||
|           uuid: ReplaceConfig | ||||
|           token_id: ReplaceConfig | ||||
|           token: ReplaceConfig | ||||
|           api: | ||||
|             host: 0.0.0.0 | ||||
|             port: 8443 # Warning, panel must have 443 as daemon port, while here it should should be 8443, FQDN in Coolify for this service should be https://*:8443 | ||||
|             ssl: | ||||
|               enabled: false | ||||
|               cert: ReplaceConfig | ||||
|               key: ReplaceConfig | ||||
|             upload_limit: 100 | ||||
|           system: | ||||
|             data: /var/lib/pterodactyl/volumes | ||||
|             sftp: | ||||
|               bind_port: 2022 | ||||
|           allowed_mounts: [] | ||||
|           remote: '' | ||||
|     ports: | ||||
|       - '2022:2022' | ||||
		Reference in New Issue
	
	Block a user
	 Verity
					Verity