### Deploy Full-Stack Application (Frontend + Backend) Source: https://opensource.mieweb.org/docs/proxmox-launchpad/supplied-runners Deploy a full-stack application with separate frontend (Node.js) and backend (Python/Flask) components. This example configures install, build, and start commands, along with environment variables, for each component. ```yaml name: Full-Stack Deployment on: push: create: delete: jobs: manage-container: runs-on: self-hosted steps: - uses: maxklema/proxmox-launchpad@main with: proxmox_username: your-username proxmox_password: ${{ secrets.PROXMOX_PASSWORD }} public_key: ${{ secrets.SSH_PUBLIC_KEY }} # Multi-component configuration install_command: '{"/client": "npm install", "/server": "pip install -r requirements.txt"}' build_command: '{"/client": "npm run build"}' start_command: '{"/client": "npm start", "/server": "flask run --host=0.0.0.0 --port=5000"}' runtime_language: '{"/client": "nodejs", "/server": "python"}' # Environment variables per component container_env_vars: '{"/client": {"REACT_APP_API_URL": "http://0.0.0.0:5000"}, "/server": {"FLASK_ENV": "production", "DATABASE_URL": "mongodb://localhost:27017/myapp"}}' # Services for the application services: '["mongodb", "redis"]' ``` -------------------------------- ### Configure Component Installation Source: https://opensource.mieweb.org/docs/creating-containers/advanced-containers/multi-component Prompts for defining the directory path and installation command for project components. ```text Enter the path of your component to enter the install command → ``` ```text Enter the install command (e.g., 'npm install') → ``` -------------------------------- ### Install a custom service on Debian Bookworm Source: https://opensource.mieweb.org/docs/creating-containers/advanced-containers/single-component Use this sequence to install, enable, and start a service manually when it is not in the pre-defined master list. ```bash sudo apt update -y sudo apt install nginx -y sudo systemctl enable nginx sudo systemctl start nginx ``` -------------------------------- ### Basic Container Setup Source: https://opensource.mieweb.org/docs/proxmox-launchpad/automatic-runner-provisioning This workflow sets up a basic container environment using auto-runners. It focuses on the initial setup and runner configuration without specifying application deployment commands. ```yaml name: Basic Container with Auto Runners on: push: create: delete: jobs: setup-runner: runs-on: ubuntu-latest steps: - name: Install Dependencies run: | sudo apt install -y sshpass jq - uses: maxklema/proxmox-launchpad@main with: proxmox_username: ${{ secrets.PROXMOX_USERNAME }} proxmox_password: ${{ secrets.PROXMOX_PASSWORD }} github_pat: ${{ secrets.GH_PAT }} manage-container: runs-on: self-hosted needs: setup-runner steps: - uses: maxklema/proxmox-launchpad@main with: proxmox_username: ${{ secrets.PROXMOX_USERNAME }} proxmox_password: ${{ secrets.PROXMOX_PASSWORD }} github_pat: ${{ secrets.GH_PAT }} public_key: ${{ secrets.SSH_PUBLIC_KEY }} ``` -------------------------------- ### Configure Custom Service Installation Source: https://opensource.mieweb.org/docs/creating-containers/advanced-containers/multi-component Prompts for defining custom installation commands for services not in the master list. ```text Configuring Custom Service Installation. For each prompt, enter a command that is a part of the installation process for your service on Debian Bookworm. Do not forget to enable and start the service at the end. Once you have entered all of your commands, press enter to continue Enter Command 1: Enter Command 2: ... ``` ```bash sudo apt update -y sudo apt install nginx -y sudo systemctl enable nginx sudo systemctl start nginx ``` -------------------------------- ### Deployment summary output Source: https://opensource.mieweb.org/docs/creating-containers/advanced-containers/single-component Example of the information provided upon successful deployment, including port mappings, container IDs, and access URLs. ```text ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🔔 COPY THESE PORTS DOWN — For External Access ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📌 Note: Your container listens on SSH Port 22 internally, but EXTERNAL traffic must use the SSH port listed below: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ✅ Hostname Registration: my-app → 10.15.19.181 🔐 SSH Port : 2376 🌐 HTTP Port : 3000 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📦 Container ID : 116 🌐 Internal IP : 10.15.19.181 🔗 Domain Name : https://my-app.opensource.mieweb.org 🛠️ SSH Access : ssh -p 2376 myusername@my-app.opensource.mieweb.org 🔑 Container Password : Your proxmox account password ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ NOTE: Additional background scripts are being ran in detached terminal sessions. Wait up to two minutes for all processes to complete. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ``` -------------------------------- ### Create a Container via SSH Source: https://opensource.mieweb.org/ Use this SSH command to initiate the creation of a new container and follow the on-screen instructions for setup. ```bash ssh create-container@opensource.mieweb.org ``` -------------------------------- ### Configure Multi-Component Applications Source: https://opensource.mieweb.org/docs/proxmox-launchpad/supplied-runners Use this configuration to define installation, build, and runtime commands for multiple services within a single project. ```yaml - uses: maxklema/proxmox-launchpad@main with: proxmox_username: your-username proxmox_password: ${{ secrets.PROXMOX_PASSWORD }} # Multi-component configuration install_command: '{"/frontend": "npm install", "/backend": "pip install -r requirements.txt"}' start_command: '{"/frontend": "npm start", "/backend": "flask run --host=0.0.0.0"}' runtime_language: '{"/frontend": "nodejs", "/backend": "python"}' # Optional: Build commands per component build_command: '{"/frontend": "npm run build", "/backend": "python setup.py build"}' # Optional: Environment variables per component container_env_vars: '{"/frontend": {"REACT_APP_API_URL": "http://localhost:5000"}, "/backend": {"FLASK_ENV": "production"}}' # Optional: Root directory command (e.g., Docker Compose) root_start_command: "docker-compose up -d" ``` -------------------------------- ### Define Multi-Component Directory Structure Source: https://opensource.mieweb.org/docs/proxmox-launchpad/automatic-runner-provisioning Example directory structure for a multi-component application where paths are relative to the project root. ```text your-repo/ ├── frontend/ # Component path: "/frontend" │ ├── package.json │ └── src/ ├── backend/ # Component path: "/backend" │ ├── requirements.txt │ └── app.py └── docker-compose.yml # Root commands run here ``` -------------------------------- ### Install Custom Services Source: https://opensource.mieweb.org/docs/proxmox-launchpad/supplied-runners Define custom installation scripts for services not included in the standard list. Each inner array represents a sequence of commands for a single service. ```yaml custom_services: | [ ["sudo apt-get update", "sudo apt-get install -y nginx", "sudo systemctl enable nginx", "sudo systemctl start nginx"], ["curl -fsSL https://get.docker.com | sh", "sudo systemctl enable docker", "sudo systemctl start docker"] ] ``` -------------------------------- ### Deploy Full-Stack App with MongoDB and Redis Source: https://opensource.mieweb.org/docs/proxmox-launchpad/automatic-runner-provisioning This workflow deploys a full-stack application with separate configurations for frontend (Node.js) and backend (Python/Flask). It installs dependencies, builds, and starts both components, utilizing MongoDB and Redis as services. ```yaml name: Full-Stack Auto Deployment on: push: create: delete: jobs: setup-runner: runs-on: ubuntu-latest steps: - name: Install Dependencies run: | sudo apt install -y sshpass jq - uses: maxklema/proxmox-launchpad@main with: proxmox_username: ${{ secrets.PROXMOX_USERNAME }} proxmox_password: ${{ secrets.PROXMOX_PASSWORD }} github_pat: ${{ secrets.GH_PAT }} manage-container: runs-on: self-hosted needs: setup-runner steps: - uses: maxklema/proxmox-launchpad@main with: proxmox_username: ${{ secrets.PROXMOX_USERNAME }} proxmox_password: ${{ secrets.PROXMOX_PASSWORD }} github_pat: ${{ secrets.GH_PAT }} public_key: ${{ secrets.SSH_PUBLIC_KEY }} # Multi-component configuration install_command: '{"//client": "npm install", "//server": "pip install -r requirements.txt"}' build_command: '{"//client": "npm run build"}' start_command: '{"//client": "npm start", "//server": "flask run --host=0.0.0.0 --port=5000"}' runtime_language: '{"//client": "nodejs", "//server": "python"}' # Services for the application services: '["mongodb", "redis"]' ``` -------------------------------- ### Meteor Application Start Command Source: https://opensource.mieweb.org/docs/proxmox-launchpad/automatic-runner-provisioning Configures the start command for a Meteor application, specifying it to allow superuser privileges and bind to all interfaces on port 3000. ```yaml start_command: "meteor --allow-superuser --port 0.0.0.0:3000" ``` -------------------------------- ### Deploy React App with MongoDB Source: https://opensource.mieweb.org/docs/proxmox-launchpad/automatic-runner-provisioning This workflow deploys a React application with MongoDB as a service. It installs dependencies, builds, and starts the Node.js application within a container, setting environment variables for the API URL and Node environment. ```yaml name: React App with Auto Runners on: push: create: delete: jobs: setup-runner: runs-on: ubuntu-latest steps: - name: Install Dependencies run: | sudo apt install -y sshpass jq - uses: maxklema/proxmox-launchpad@main with: proxmox_username: ${{ secrets.PROXMOX_USERNAME }} proxmox_password: ${{ secrets.PROXMOX_PASSWORD }} github_pat: ${{ secrets.GH_PAT }} manage-container: runs-on: self-hosted needs: setup-runner steps: - uses: maxklema/proxmox-launchpad@main with: proxmox_username: ${{ secrets.PROXMOX_USERNAME }} proxmox_password: ${{ secrets.PROXMOX_PASSWORD }} github_pat: ${{ secrets.GH_PAT }} public_key: ${{ secrets.SSH_PUBLIC_KEY }} # Container settings http_port: 3000 linux_distribution: debian # Application deployment install_command: "npm install" build_command: "npm run build" start_command: "npm start" runtime_language: "nodejs" # Environment and services container_env_vars: '{"REACT_APP_API_URL": "http://0.0.0.0:5000", "NODE_ENV": "production"}' services: '["mongodb"]' ``` -------------------------------- ### Deploy Microservices with Docker Compose Source: https://opensource.mieweb.org/docs/proxmox-launchpad/supplied-runners Orchestrate microservices using Docker Compose. This example deploys an API (Node.js) and a worker (Python), utilizing Docker, PostgreSQL, and Redis services. ```yaml name: Microservices Deployment on: push: create: delete: jobs: manage-container: runs-on: self-hosted steps: - uses: maxklema/proxmox-launchpad@main with: proxmox_username: your-username proxmox_password: ${{ secrets.PROXMOX_PASSWORD }} # Use Docker Compose for orchestration root_start_command: "docker-compose up -d" # Individual service configuration install_command: '{"/api": "npm install", "/worker": "pip install -r requirements.txt"}' start_command: '{"/api": "npm start", "/worker": "python worker.py"}' runtime_language: '{"/api": "nodejs", "/worker": "python"}' # Docker and database services services: '["docker", "postgresql", "redis"]' ``` -------------------------------- ### Configure Dual-Job Workflow Source: https://opensource.mieweb.org/docs/proxmox-launchpad/automatic-runner-provisioning Full workflow configuration using a setup job for runner provisioning and a management job for container operations. ```yaml name: Proxmox Container Management (Auto Runners) on: push: create: delete: jobs: setup-runner: runs-on: ubuntu-latest steps: - name: Install Dependencies run: | sudo apt install -y sshpass jq - uses: maxklema/proxmox-launchpad@main with: proxmox_username: ${{ secrets.PROXMOX_USERNAME }} proxmox_password: ${{ secrets.PROXMOX_PASSWORD }} github_pat: ${{ secrets.GH_PAT }} manage-container: runs-on: self-hosted needs: setup-runner steps: - uses: maxklema/proxmox-launchpad@main with: proxmox_username: ${{ secrets.PROXMOX_USERNAME }} proxmox_password: ${{ secrets.PROXMOX_PASSWORD }} github_pat: ${{ secrets.GH_PAT }} # Enables PR commenting ``` -------------------------------- ### Define Custom Services Source: https://opensource.mieweb.org/docs/proxmox-launchpad/automatic-runner-provisioning Install services not included in the standard list by providing arrays of installation commands. ```yaml custom_services: | [ ["sudo apt-get update", "sudo apt-get install -y nginx", "sudo systemctl enable nginx", "sudo systemctl start nginx"], ["curl -fsSL https://get.docker.com | sh", "sudo systemctl enable docker", "sudo systemctl start docker"] ] ``` -------------------------------- ### Configure Component Startup Source: https://opensource.mieweb.org/docs/creating-containers/advanced-containers/multi-component Prompts for defining the directory path and startup command for project components. ```text Enter the path of your component to enter the start command → ``` ```text Enter the start command (e.g., 'npm start', 'python app.py') → ``` -------------------------------- ### Configure Minimal Workflow Source: https://opensource.mieweb.org/docs/proxmox-launchpad/supplied-runners Basic structure for the .github/workflows/proxmox-launchpad.yml file. ```yaml name: Proxmox Container Management on: push: create: delete: jobs: manage-container: runs-on: self-hosted # Use your runner label here steps: - uses: maxklema/proxmox-launchpad@main with: proxmox_username: your-username proxmox_password: ${{ secrets.PROXMOX_PASSWORD }} ``` -------------------------------- ### Enable Automatic Project Deployment Source: https://opensource.mieweb.org/docs/creating-containers/basic-containers/command-line Choose whether to trigger an automatic deployment upon container startup. ```text Do you want to deploy your project automatically? (y/n) → ``` -------------------------------- ### Configure Application Services Source: https://opensource.mieweb.org/docs/creating-containers/advanced-containers/multi-component Prompts for enabling and adding external services like databases or web servers. ```text Does your application require special services (i.e. Docker, MongoDB, etc.) to run on the container? (y/n) → ``` ```text Enter the name of a service to add to your container or type "C" to set up a custom service installation (Enter to exit) → ``` -------------------------------- ### Configure Root Directory Commands Source: https://opensource.mieweb.org/docs/creating-containers/advanced-containers/multi-component Optional prompt for executing commands from the project root directory. ```text Do you want to run a command from the root directory? (e.g., 'docker-compose up') (Enter to skip) → ``` -------------------------------- ### Attach to Tmux Session Source: https://opensource.mieweb.org/docs/creating-containers/advanced-containers/multi-component If your application is not accessible, attach to the tmux session to view potential errors related to start or build commands. This is useful for debugging runtime issues. ```bash tmux attach -t 0 ``` -------------------------------- ### Define Multi-Component Directory Structure Source: https://opensource.mieweb.org/docs/proxmox-launchpad/supplied-runners Organize your repository with distinct directories for each component to ensure relative paths are correctly mapped. ```text your-repo/ ├── frontend/ # Component path: "frontend/" │ ├── package.json │ └── src/ ├── backend/ # Component path: "backend/" │ ├── requirements.txt │ └── app.py └── docker-compose.yml # Root commands run here ``` -------------------------------- ### View Backend Environment Variables Source: https://opensource.mieweb.org/docs/creating-containers/advanced-containers/multi-component Display the environment variables for the backend component. Ensure paths are relative to the component directory. ```bash cat backend/.env ``` -------------------------------- ### View Frontend Environment Variables Source: https://opensource.mieweb.org/docs/creating-containers/advanced-containers/multi-component Display the environment variables for the frontend component. Ensure paths are relative to the component directory. ```bash cat frontend/.env ``` -------------------------------- ### Add Pre-configured Services Source: https://opensource.mieweb.org/docs/proxmox-launchpad/supplied-runners Specify a list of standard services to be included in your container environment. ```yaml # Available services services: '["mongodb", "postgresql", "redis", "docker", "nginx", "apache"]' ``` -------------------------------- ### Select Linux Distribution Source: https://opensource.mieweb.org/docs/creating-containers/basic-containers/command-line Choose between available Linux distributions for the container environment. ```text Available Linux Distributions: 1. Debian 12 (Bookworm) 2. Rocky 9 Choose a Linux Distribution (debian/rocky) → ``` -------------------------------- ### View Container Directory Structure Source: https://opensource.mieweb.org/docs/vscode-setup Standard layout for project files within the container root. ```text /root ├── your-repository-name/ # Your project files │ ├── src/ │ ├── package.json │ └── README.md ├── .bashrc └── other-files ``` -------------------------------- ### Specify Runtime Environment Source: https://opensource.mieweb.org/docs/creating-containers/advanced-containers/multi-component Prompts for defining the underlying runtime for each configured component. ```text Enter the underlying runtime environment for "frontend/" (e.g., 'nodejs', 'python') → Enter the underlying runtime environment for "backend/" (e.g., 'nodejs', 'python') → ``` -------------------------------- ### Deploy Multi-Component Application Source: https://opensource.mieweb.org/docs/proxmox-launchpad/automatic-runner-provisioning Use this configuration for applications with multiple services, providing component-specific commands and environment variables. ```yaml manage-container: runs-on: self-hosted needs: setup-runner steps: - uses: maxklema/proxmox-launchpad@main with: proxmox_username: ${{ secrets.PROXMOX_USERNAME }} proxmox_password: ${{ secrets.PROXMOX_PASSWORD }} github_pat: ${{ secrets.GH_PAT }} # Multi-component configuration install_command: '{"/frontend": "npm install", "/backend": "pip install -r requirements.txt"}' start_command: '{"/frontend": "npm start", "/backend": "flask run --host=0.0.0.0"}' runtime_language: '{"/frontend": "nodejs", "/backend": "python"}' # Optional: Build commands per component build_command: '{"/frontend": "npm run build", "/backend": "python setup.py build"}' # Optional: Environment variables per component container_env_vars: '{"/frontend": {"REACT_APP_API_URL": "http://localhost:5000"}, "/backend": {"FLASK_ENV": "production"}}' # Optional: Root directory command (e.g., Docker Compose) root_start_command: "docker-compose up -d" ``` -------------------------------- ### Set Basic Container Properties Source: https://opensource.mieweb.org/docs/proxmox-launchpad/supplied-runners Configuration options for container settings including ports, OS distribution, and SSH keys. ```yaml - uses: maxklema/proxmox-launchpad@main with: proxmox_username: your-username proxmox_password: ${{ secrets.PROXMOX_PASSWORD }} # Optional: HTTP port (default: 3000) http_port: 8080 # Optional: Linux distribution (default: debian) linux_distribution: debian # Options: debian, rocky # Optional: SSH public key for passwordless access public_key: ${{ secrets.SSH_PUBLIC_KEY }} ``` -------------------------------- ### Provide Proxmox Credentials Source: https://opensource.mieweb.org/docs/creating-containers/basic-containers/command-line Enter your Proxmox username and password when prompted by the script. ```text Enter Proxmox Username → Enter Proxmox Password → ``` -------------------------------- ### Configure Automatic Deployment Source: https://opensource.mieweb.org/docs/proxmox-launchpad/supplied-runners Deployment settings for single-component applications including build commands and environment variables. ```yaml - uses: maxklema/proxmox-launchpad@main with: proxmox_username: your-username proxmox_password: ${{ secrets.PROXMOX_PASSWORD }} # Deployment configuration project_root: "" # Leave blank for repository root install_command: "npm install" start_command: "npm start" runtime_language: "nodejs" # Optional: Build command build_command: "npm run build" # Optional: Environment variables container_env_vars: '{"API_KEY": "your-api-key", "NODE_ENV": "production"}' # Optional: Services services: '["mongodb", "redis"]' ``` -------------------------------- ### Execute Sudo Commands Source: https://opensource.mieweb.org/docs/vscode-setup Use the Proxmox account password when prompted for administrator privileges. ```bash sudo command-here ``` -------------------------------- ### Configure Container Properties Source: https://opensource.mieweb.org/docs/proxmox-launchpad/automatic-runner-provisioning Optional configuration parameters for customizing container ports, distribution, and SSH access. ```yaml - uses: maxklema/proxmox-launchpad@main with: proxmox_username: ${{ secrets.PROXMOX_USERNAME }} proxmox_password: ${{ secrets.PROXMOX_PASSWORD }} github_pat: ${{ secrets.GH_PAT }} # Optional: HTTP port (default: 3000) http_port: 8080 # Optional: Linux distribution (default: debian) linux_distribution: debian # Options: debian, rocky # Optional: SSH public key for passwordless access public_key: ${{ secrets.SSH_PUBLIC_KEY }} ``` -------------------------------- ### Access the Container via SSH Source: https://opensource.mieweb.org/docs/creating-containers/basic-containers/web-gui Use this command to connect to your newly created container after the deployment process finishes. ```bash ssh -p @opensource.mieweb.org ``` -------------------------------- ### Access Deployed Container Source: https://opensource.mieweb.org/docs/creating-containers/basic-containers/command-line Connect to the newly created container using the specified port and credentials. ```bash ssh -p @opensource.mieweb.org ``` -------------------------------- ### Container Access and Management Output Source: https://opensource.mieweb.org/docs/proxmox-launchpad/supplied-runners This output provides essential information after a successful deployment, including hostname, IP addresses, SSH access details, and the container's domain name. ```text ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Hostname Registration: my-app-main → 10.15.129.23 SSH Port : 2344 HTTP Port : 3000 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Container ID : 136 Internal IP : 10.15.129.23 Domain Name : https://my-app-main.opensource.mieweb.org SSH Access : ssh -p 2344 root@my-app-main.opensource.mieweb.org ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ``` -------------------------------- ### Supported Protocols Source: https://opensource.mieweb.org/docs/creating-containers/protocol-list This section details the protocols supported by the MIE Proxmox cluster. When creating a container, you must specify any additional protocols you intend to use. Protocols within your container should listen on their default port. However, incoming traffic to the cluster for these protocols will be directed through a randomly assigned port, which is then forwarded to your container's default port. ```APIDOC ## Protocol List Below is a list of all protocols supported by the MIE Proxmox cluster. **Note:** You must specify any additional protocols that you want to use during the container creation process in the command line. If you need to, you can reference that documentation here. **Important:** Protocols in your container should listen on their default port. However, traffic for that protocol coming into our cluster will come in on a randomly-generated port number assigned to you, before being forwarded to your container on the default port. Therefore, traffic for that service using that protocol should be sent on that randomly-generated port assigned to you. ### Supported Protocols Table | Protocol | Default Port | Type | |---------------|--------------|------| | TCPM | 1 | tcp | | RJE | 5 | tcp | | ECHO | 7 | tcp | | DISCARD | 9 | tcp | | DAYTIME | 13 | tcp | | QOTD | 17 | tcp | | MSP | 18 | tcp | | CHARGEN | 19 | tcp | | FTP | 20 | tcp | | FTP | 21 | tcp | | SSH | 22 | tcp | | TELNET | 23 | tcp | | SMTP | 25 | tcp | | TIME | 37 | tcp | | HNS | 42 | tcp | | WHOIS | 43 | tcp | | TACACS | 49 | tcp | | DNS | 53 | tcp | | BOOTPS | 67 | udp | | BOOTPC | 68 | udp | | TFTP | 69 | udp | | GOPHER | 70 | tcp | | FINGER | 79 | tcp | | HTTP | 80 | tcp | | KERBEROS | 88 | tcp | | HNS | 101 | tcp | | ISO-TSAP | 102 | tcp | | POP2 | 109 | tcp | | POP3 | 110 | tcp | | RPC | 111 | tcp | | AUTH | 113 | tcp | | SFTP | 115 | tcp | | UUCP-PATH | 117 | tcp | | NNTP | 119 | tcp | | NTP | 123 | udp | | EPMAP | 135 | tcp | | NETBIOS-NS | 137 | tcp | | NETBIOS-DGM | 138 | udp | | NETBIOS-SSN | 139 | tcp | | IMAP | 143 | tcp | | SQL-SRV | 156 | tcp | | SNMP | 161 | udp | | SNMPTRAP | 162 | udp | | XDMCP | 177 | tcp | | BGP | 179 | tcp | | IRC | 194 | tcp | | LDAP | 389 | tcp | | NIP | 396 | tcp | | HTTPS | 443 | tcp | | SNPP | 444 | tcp | | SMB | 445 | tcp | | KPASSWD | 464 | tcp | | SMTPS | 465 | tcp | | ISAKMP | 500 | udp | | EXEC | 512 | tcp | | LOGIN | 513 | tcp | | SYSLOG | 514 | udp | | LPD | 515 | tcp | | TALK | 517 | udp | | NTALK | 518 | udp | | RIP | 520 | udp | | RIPNG | 521 | udp | | RPC | 530 | tcp | | UUCP | 540 | tcp | | KLOGIN | 543 | tcp | | KSHELL | 544 | tcp | | DHCPV6-C | 546 | tcp | | DHCPV6-S | 547 | tcp | | AFP | 548 | tcp | | RTSP | 554 | tcp | | NNTPS | 563 | tcp | | SUBMISSION | 587 | tcp | | IPP | 631 | tcp | | LDAPS | 636 | tcp | | LDP | 646 | tcp | | LINUX-HA | 694 | tcp | | ISCSI | 860 | tcp | | RSYNC | 873 | tcp | | VMWARE | 902 | tcp | | FTPS-DATA | 989 | tcp | | FTPS | 990 | tcp | | TELNETS | 992 | tcp | | IMAPS | 993 | tcp | | POP3S | 995 | tcp | | SOCKS | 1080 | tcp | | OPENVPN | 1194 | udp | | OMGR | 1311 | tcp | | MS-SQL-S | 1433 | tcp | | MS-SQL-M | 1434 | udp | | WINS | 1512 | tcp | | ORACLE-SQL | 1521 | tcp | | RADIUS | 1645 | tcp | | RADIUS-ACCT | 1646 | tcp | | L2TP | 1701 | udp | | PPTP | 1723 | tcp | | CISCO-ISL | 1741 | tcp | | RADIUS | 1812 | udp | | RADIUS-ACCT | 1813 | udp | | NFS | 2049 | tcp | | CPANEL | 2082 | tcp | | CPANEL-SSL | 2083 | tcp | | WHM | 2086 | tcp | | WHM-SSL | 2087 | tcp | | DA | 2222 | tcp | | ORACLE-DB | 2483 | tcp | | ORACLE-DBS | 2484 | tcp | | XBOX | 3074 | tcp | | HTTP-PROXY | 3128 | tcp | | MYSQL | 3306 | tcp | | RDP | 3389 | tcp | | NDPS-PA | 3396 | tcp | | SVN | 3690 | tcp | | MSQL | 4333 | udp | | METASPLOIT | 4444 | tcp | | EMULE | 4662 | tcp | | EMULE | 4672 | udp | | RADMIN | 4899 | tcp | | UPNP | 5000 | tcp | | YMSG | 5050 | tcp | | SIP | 5060 | tcp | | SIP-TLS | 5061 | tcp | | AIM | 5190 | tcp | | XMPP-CLIENT | 5222 | tcp | | XMPP-CLIENTS | 5223 | tcp | | XMPP-SERVER | 5269 | tcp | | POSTGRES | 5432 | tcp | | VNC | 5500 | tcp | | VNC-HTTP | 5800 | tcp | | VNC | 5900 | tcp | | X11 | 6000 | tcp | | BNET | 6112 | tcp | | GNUTELLA | 6346 | tcp | | SANE | 6566 | tcp | | IRC | 6667 | tcp | | IRCS | 6697 | tcp | | BT | 6881 | tcp | | HTTP-ALT | 8000 | tcp | | HTTP-ALT | 8008 | tcp | | HTTP-ALT | 8080 | tcp | | HTTPS-ALT | 8443 | tcp | | PDL-DS | 9100 | tcp | | BACNET | 9101 | tcp | | WEBMIN | 10000 | udp | | MONGO | 27017 | tcp | | TRACEROUTE | 33434 | udp | ``` -------------------------------- ### Deploy Single-Component Application Source: https://opensource.mieweb.org/docs/proxmox-launchpad/automatic-runner-provisioning Use this configuration for applications consisting of a single service, such as a React app or Flask server. ```yaml manage-container: runs-on: self-hosted needs: setup-runner steps: - uses: maxklema/proxmox-launchpad@main with: proxmox_username: ${{ secrets.PROXMOX_USERNAME }} proxmox_password: ${{ secrets.PROXMOX_PASSWORD }} github_pat: ${{ secrets.GH_PAT }} # Deployment configuration project_root: "" # Leave blank for repository root install_command: "npm install" start_command: "npm start" runtime_language: "nodejs" # Optional: Build command build_command: "npm run build" # Optional: Environment variables container_env_vars: '{"API_KEY": "your-api-key", "NODE_ENV": "production"}' # Optional: Services services: '["mongodb", "redis"]' ``` -------------------------------- ### Configure Additional Protocols Source: https://opensource.mieweb.org/docs/creating-containers/basic-containers/command-line Optionally add extra protocols beyond SSH and HTTP by providing their abbreviations. ```text Does your Container require any protocols other than SSH and HTTP? (y/n) → ``` ```text Enter the protocol abbreviation (e.g, LDAP for Lightweight Directory Access Protocol). Type "e" to exit → ``` -------------------------------- ### Define Container Hostname Source: https://opensource.mieweb.org/docs/creating-containers/basic-containers/command-line Specify a single-word application name to serve as the container's subdomain. ```text Enter Application Name (One-Word) → ``` -------------------------------- ### Automatic Deployment Configuration Source: https://opensource.mieweb.org/docs/proxmox-launchpad/automatic-runner-provisioning Defines the configuration properties required for automatic application deployment, supporting both single and multi-component architectures. ```APIDOC ## Automatic Deployment Properties ### Description Configuration properties for managing application deployment, dependencies, and runtime environments. ### Parameters #### Request Body - **multi_component** (string) - Conditional - A 'y' flag specifying if the application is multi-component. - **container_env_vars** (object/string) - No - Key-Value environment variable pairs. - **install_command** (string/object) - Yes* - Commands to install project dependencies. - **build_command** (string/object) - No - Commands to build project components. - **start_command** (string/object) - Yes* - Commands to start project components. - **runtime_language** (string/object) - Yes* - Runtime language (nodejs or python). - **root_start_command** (string) - No - Command to run at the project root for multi-component apps. > * (*) Required if root_start_command is not provided. ``` -------------------------------- ### Deploy React App with MongoDB Source: https://opensource.mieweb.org/docs/proxmox-launchpad/supplied-runners Use this for deploying a single React application that requires a MongoDB service. Ensure your Proxmox credentials and SSH keys are set up as secrets. ```yaml name: React App with Database on: push: create: delete: jobs: manage-container: runs-on: self-hosted steps: - uses: maxklema/proxmox-launchpad@main with: proxmox_username: your-username proxmox_password: ${{ secrets.PROXMOX_PASSWORD }} public_key: ${{ secrets.SSH_PUBLIC_KEY }} # Container settings http_port: 3000 linux_distribution: debian # Application deployment install_command: "npm install" build_command: "npm run build" start_command: "npm start" runtime_language: "nodejs" # Environment and services container_env_vars: '{"REACT_APP_API_URL": "http://0.0.0.0:5000", "NODE_ENV": "production"}' services: '["mongodb"]' ``` -------------------------------- ### Services Configuration Source: https://opensource.mieweb.org/docs/proxmox-launchpad/automatic-runner-provisioning Configures pre-built or custom services to be included in the container environment. ```APIDOC ## Services Configuration ### Description Add pre-configured or custom services to your container environment. ### Parameters #### Request Body - **services** (array) - No - List of available services (e.g., '["mongodb", "postgresql", "redis"]'). - **custom_services** (array of arrays) - No - List of installation command sequences for custom services. ``` -------------------------------- ### SSH Key Detection and Configuration Source: https://opensource.mieweb.org/docs/creating-containers/basic-containers/command-line The script attempts to detect an existing SSH key; if not found, you may provide one manually. ```text Attempting to Detect SSH Public Key... ``` ```text Could not detect Public Key Enter Public Key (Allows Easy Access to Container) [OPTIONAL - LEAVE BLANK TO SKIP] → ``` -------------------------------- ### Check Listening Ports Source: https://opensource.mieweb.org/docs/creating-containers/advanced-containers/multi-component Execute this command inside your container to list all active listening TCP ports and associated processes. This helps verify that your services are running and accessible. ```bash ss -tlnp | grep LISTEN ``` -------------------------------- ### Connect to Container via SSH Source: https://opensource.mieweb.org/docs/proxmox-launchpad/supplied-runners Use these commands to access your container. The password method uses your Proxmox account credentials, while the key-based method enables passwordless access. ```bash ssh -p 2344 root@my-app-main.opensource.mieweb.org # Use your Proxmox account password ``` ```bash ssh -p 2344 -i ~/.ssh/id_rsa root@my-app-main.opensource.mieweb.org # Passwordless access ``` -------------------------------- ### Express Application Binding (Correct) Source: https://opensource.mieweb.org/docs/proxmox-launchpad/automatic-runner-provisioning Ensures the Express backend service listens on all available network interfaces (0.0.0.0) for proper external communication. ```javascript app.listen(5000, '0.0.0.0'); ``` -------------------------------- ### Configure SSH Host Source: https://opensource.mieweb.org/docs/vscode-setup Add this block to your SSH config file to define the connection parameters for your container. ```text Host my-container HostName opensource.mieweb.org User Port ``` ```text Host my-fullstack-app HostName opensource.mieweb.org User demouser Port 2348 ``` -------------------------------- ### Ensure Backend Services Bind to 0.0.0.0 Source: https://opensource.mieweb.org/docs/proxmox-launchpad/supplied-runners For multi-component applications, backend services must bind to '0.0.0.0' to accept connections from other components within the container. Binding to '127.0.0.1' (localhost) will prevent inter-component communication. ```python # Flask - Correct app.run(host='0.0.0.0', port=5000) # Flask - Incorrect app.run(host='127.0.0.1', port=5000) ``` -------------------------------- ### Container Output Details Source: https://opensource.mieweb.org/docs/creating-containers/basic-containers/web-gui This block displays all the ports your container uses for external access, including SSH and HTTP. It also provides hostname registration and internal IP. ```text ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🔔 COPY THESE PORTS DOWN — For External Access ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📌 Note: Your container listens on SSH Port 22 internally, but EXTERNAL traffic must use the SSH port listed below: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ✅ Hostname Registration: max-demo-container → 10.15.19.181 🔐 SSH Port : 2376 🌐 HTTP Port : 3000 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📦 Container ID : 116 🌐 Internal IP : 10.15.19.181 🔗 Domain Name : https://max-demo-container.opensource.mieweb.org 🛠️ SSH Access : ssh -p 2376 demouser@max-demo-container.opensource.mieweb.org 🔑 Container Password : Your proxmox account password ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ NOTE: Additional background scripts are being ran in detached terminal sessions. Wait up to two minutes for all processes to complete. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Still not working? Contact Max K. at maxklema@gmail.com ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ``` -------------------------------- ### SSH Access Command Source: https://opensource.mieweb.org/docs/creating-containers/advanced-containers/multi-component Use this command to SSH into your deployed container. Ensure you use the correct port and username provided in the deployment output. ```bash ssh -p 2377 myusername@my-fullstack-app.opensource.mieweb.org ``` -------------------------------- ### Flask Application Binding (Correct) Source: https://opensource.mieweb.org/docs/proxmox-launchpad/automatic-runner-provisioning Ensures the Flask backend service binds to all available network interfaces (0.0.0.0) for proper external communication. ```python app.run(host='0.0.0.0', port=5000) ``` -------------------------------- ### Access a Container via SSH Source: https://opensource.mieweb.org/ Connect securely to your running containers using SSH. Replace and with your specific container details. ```bash ssh -p @opensource.mieweb.org ```