├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.yml │ └── feature_request.yml ├── PULL_REQUEST_TEMPLATE.md └── workflows │ ├── build.yml │ └── release.yml ├── CHANGELOG.md ├── README.md ├── windows ├── Dockerfile ├── compose.yaml └── entrypoint.cmd └── wine ├── Dockerfile ├── compose.yaml ├── entrypoint.sh └── lip /.github/ISSUE_TEMPLATE/bug_report.yml: -------------------------------------------------------------------------------- 1 | name: Bug Report 2 | description: Create a report to help us improve 3 | title: "[Bug]: " 4 | labels: ["bug"] 5 | body: 6 | - type: textarea 7 | attributes: 8 | label: Describe the bug 9 | description: A clear and concise description of what the bug is. 10 | validations: 11 | required: true 12 | 13 | - type: textarea 14 | attributes: 15 | label: To Reproduce 16 | description: Steps to reproduce the behavior. 17 | validations: 18 | required: true 19 | 20 | - type: textarea 21 | attributes: 22 | label: Expected behavior 23 | description: A clear and concise description of what you expected to happen. 24 | validations: 25 | required: true 26 | 27 | - type: textarea 28 | attributes: 29 | label: Screenshots 30 | description: If applicable, add screenshots to help explain your problem. 31 | 32 | - type: input 33 | attributes: 34 | label: Platform 35 | description: The platform you are using. (e.g. Windows 10, macOS 10.15, Ubuntu 20.04) 36 | 37 | - type: input 38 | attributes: 39 | label: Version 40 | description: The version of the application you are using. (e.g. 1.0.0) 41 | 42 | - type: textarea 43 | attributes: 44 | label: Additional context 45 | description: Add any other context about the problem here. 46 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.yml: -------------------------------------------------------------------------------- 1 | name: Feature request 2 | description: Suggest an idea for this project 3 | title: "[Feature]: " 4 | labels: ["enhancement"] 5 | body: 6 | - type: textarea 7 | attributes: 8 | label: Is your feature request related to a problem? Please describe. 9 | description: A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 10 | validations: 11 | required: true 12 | 13 | - type: textarea 14 | attributes: 15 | label: Describe the solution you'd like 16 | description: A clear and concise description of what you want to happen. 17 | validations: 18 | required: true 19 | 20 | - type: textarea 21 | attributes: 22 | label: Describe alternatives you've considered 23 | description: A clear and concise description of any alternative solutions or features you've considered. 24 | 25 | - type: textarea 26 | attributes: 27 | label: Additional context 28 | description: Add any other context or screenshots about the feature request here. 29 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## What does this PR do? 2 | 3 | 4 | 5 | ## Which issues does this PR resolve? 6 | 7 | 8 | 9 | ## Checklist before merging 10 | 11 | Thank you for your contribution to the repository. 12 | Before submitting this PR, please make sure: 13 | 14 | - [ ] Your code builds clean without any errors or warnings 15 | - [ ] You have tested all functions 16 | - [ ] You have not used code without license 17 | - [ ] You have added statement for third-party code 18 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | on: 2 | pull_request: 3 | push: 4 | workflow_dispatch: 5 | 6 | jobs: 7 | build-windows: 8 | runs-on: windows-latest 9 | steps: 10 | - uses: actions/checkout@v4 11 | 12 | - run: | 13 | docker build windows 14 | 15 | build-wine: 16 | runs-on: ubuntu-latest 17 | steps: 18 | - uses: actions/checkout@v4 19 | 20 | - uses: docker/build-push-action@v5 21 | with: 22 | context: wine 23 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | on: 2 | release: 3 | types: 4 | - published 5 | 6 | env: 7 | REGISTRY: ghcr.io 8 | NAMESPACE: liteldev 9 | IMAGE_NAME: levilamina-server 10 | 11 | jobs: 12 | release: 13 | permissions: 14 | contents: write 15 | runs-on: ubuntu-latest 16 | steps: 17 | - uses: actions/checkout@v4 18 | 19 | - id: extract-release-notes 20 | uses: ffurrer2/extract-release-notes@v1 21 | 22 | - uses: softprops/action-gh-release@v1 23 | with: 24 | body: | 25 | ${{ steps.extract-release-notes.outputs.release_notes }} 26 | 27 | publish-windows: 28 | permissions: 29 | packages: write 30 | runs-on: windows-latest 31 | steps: 32 | - uses: actions/checkout@v4 33 | 34 | - id: get-version 35 | uses: frabert/replace-string-action@v2 36 | with: 37 | pattern: '^v' 38 | string: ${{ github.event.release.tag_name }} 39 | replace-with: '' 40 | 41 | - uses: docker/login-action@v3 42 | with: 43 | registry: ${{ env.REGISTRY }} 44 | username: ${{ github.actor }} 45 | password: ${{ secrets.GITHUB_TOKEN }} 46 | 47 | - run: | 48 | docker build windows -t artifact 49 | 50 | - name: Tag image 51 | run: | 52 | docker tag artifact ${{ env.REGISTRY }}/${{ env.NAMESPACE }}/${{ env.IMAGE_NAME }}:${{ steps.get-version.outputs.replaced }}-windows 53 | docker tag artifact ${{ env.REGISTRY }}/${{ env.NAMESPACE }}/${{ env.IMAGE_NAME }}:latest-windows 54 | 55 | - name: Push to GitHub Packages 56 | run: | 57 | docker push ${{ env.REGISTRY }}/${{ env.NAMESPACE }}/${{ env.IMAGE_NAME }}:${{ steps.get-version.outputs.replaced }}-windows 58 | docker push ${{ env.REGISTRY }}/${{ env.NAMESPACE }}/${{ env.IMAGE_NAME }}:latest-windows 59 | 60 | publish-wine: 61 | permissions: 62 | packages: write 63 | runs-on: ubuntu-latest 64 | steps: 65 | - uses: actions/checkout@v4 66 | 67 | - id: get-version 68 | uses: frabert/replace-string-action@v2 69 | with: 70 | pattern: '^v' 71 | string: ${{ github.event.release.tag_name }} 72 | replace-with: '' 73 | 74 | - uses: docker/login-action@v3 75 | with: 76 | registry: ${{ env.REGISTRY }} 77 | username: ${{ github.actor }} 78 | password: ${{ secrets.GITHUB_TOKEN }} 79 | 80 | - uses: docker/build-push-action@v5 81 | with: 82 | context: wine 83 | push: true 84 | tags: | 85 | ${{ env.REGISTRY }}/${{ env.NAMESPACE }}/${{ env.IMAGE_NAME }}:${{ steps.get-version.outputs.replaced }}-wine 86 | ${{ env.REGISTRY }}/${{ env.NAMESPACE }}/${{ env.IMAGE_NAME }}:latest-wine 87 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. 4 | 5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), 6 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). 7 | 8 | ## [0.7.2] - 2025-09-18 9 | 10 | ### Changed 11 | 12 | - Updated lip to 0.32.0 13 | 14 | ## [0.7.1] - 2025-08-12 15 | 16 | ### Added 17 | 18 | - Added locales and locales-all to wine installation @Yushu2606 19 | 20 | ## [0.7.0] - 2025-04-12 21 | 22 | ### Changed 23 | 24 | - Install all packages at a time 25 | 26 | ## [0.6.5] - 2025-04-01 27 | 28 | ### Changed 29 | 30 | - Update lip to 0.31.0 31 | 32 | ## [0.6.4] - 2025-03-22 33 | 34 | ### Changed 35 | 36 | - Update lip to 0.30.2 37 | 38 | ## [0.6.3] - 2025-03-18 39 | 40 | ### Changed 41 | 42 | - Update lip version to 0.29.0 43 | 44 | ## [0.6.2] - 2025-03-15 45 | 46 | ### Changed 47 | 48 | - Update lip version to 0.28.3 49 | 50 | ## [0.6.1] - 2025-03-14 51 | 52 | ### Changed 53 | 54 | - Update lip version to 0.28.2 55 | 56 | ## [0.6.0] - 2025-03-07 57 | 58 | ### Changed 59 | 60 | - Updated lip version to 0.27.1 61 | 62 | ## [0.5.3] - 2025-01-21 63 | 64 | ### Changed 65 | 66 | - Optimizing wine dockerfile 67 | 68 | ## [0.5.2] - 2025-01-20 69 | 70 | ### Fixed 71 | 72 | - Fix LeviLamina 1.0.0 operation by installing vcredist 73 | 74 | ## [0.5.1] - 2025-01-19 75 | 76 | ### Fixed 77 | 78 | - Fix input in wine 79 | 80 | ## [0.5.0] - 2024-01-29 81 | 82 | ### Changed 83 | 84 | - Put lip files to `/opt`. 85 | - Use PowerShell to install Visual C++ Redistributable. 86 | 87 | ## [0.4.0] - 2024-01-24 88 | 89 | ### Changed 90 | 91 | - Add windows container suport. 92 | - Change Wine version to 9. 93 | 94 | ## [0.3.0] - 2024-01-12 95 | 96 | ### Changed 97 | 98 | - LeviLamina tooth repo path to `github.com/LiteLDev/LeviLamina`. 99 | 100 | ## [0.2.1] - 2023-12-25 101 | 102 | ### Fixed 103 | 104 | - No permission to run entrypoint. 105 | 106 | ## [0.2.0] - 2023-12-03 107 | 108 | ### Changed 109 | 110 | - Automatically resolve Minecraft Bedrock Server version from LeviLamina version. 111 | 112 | ## [0.1.0] - 2023-12-01 113 | 114 | First release. 115 | 116 | [0.7.2]: https://github.com/LiteLDev/docker-levilamina-server/compare/v0.7.1...v0.7.2 117 | [0.7.1]: https://github.com/LiteLDev/docker-levilamina-server/compare/v0.7.0...v0.7.1 118 | [0.7.0]: https://github.com/LiteLDev/docker-levilamina-server/compare/v0.6.5...v0.7.0 119 | [0.6.5]: https://github.com/LiteLDev/docker-levilamina-server/compare/v0.6.4...v0.6.5 120 | [0.6.4]: https://github.com/LiteLDev/docker-levilamina-server/compare/v0.6.3...v0.6.4 121 | [0.6.3]: https://github.com/LiteLDev/docker-levilamina-server/compare/v0.6.2...v0.6.3 122 | [0.6.2]: https://github.com/LiteLDev/docker-levilamina-server/compare/v0.6.1...v0.6.2 123 | [0.6.1]: https://github.com/LiteLDev/docker-levilamina-server/compare/v0.6.0...v0.6.1 124 | [0.6.0]: https://github.com/LiteLDev/docker-levilamina-server/compare/v0.5.3...v0.6.0 125 | [0.5.3]: https://github.com/LiteLDev/docker-levilamina-server/compare/v0.5.2...v0.5.3 126 | [0.5.2]: https://github.com/LiteLDev/docker-levilamina-server/compare/v0.5.1...v0.5.2 127 | [0.5.1]: https://github.com/LiteLDev/docker-levilamina-server/compare/v0.5.0...v0.5.1 128 | [0.5.0]: https://github.com/LiteLDev/docker-levilamina-server/compare/v0.4.0...v0.5.0 129 | [0.4.0]: https://github.com/LiteLDev/docker-levilamina-server/compare/v0.3.0...v0.4.0 130 | [0.3.0]: https://github.com/LiteLDev/docker-levilamina-server/compare/v0.2.1...v0.3.0 131 | [0.2.1]: https://github.com/LiteLDev/docker-levilamina-server/compare/v0.2.0...v0.2.1 132 | [0.2.0]: https://github.com/LiteLDev/docker-levilamina-server/compare/v0.1.0...v0.2.0 133 | [0.1.0]: https://github.com/LiteLDev/docker-levilamina-server/releases/tag/v0.1.0 134 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # docker-levilamina-server 2 | 3 | [English](https://lamina.levimc.org/player_guides/install_on_docker/) | [简体中文](https://lamina.levimc.org/zh/player_guides/install_on_docker/) 4 | 5 | A docker image that provides a LeviLamina server that will automatically download selected version at startup 6 | 7 | ## Usage 8 | 9 | To start the server in a Linux container, run the following command: 10 | 11 | ```sh 12 | docker run -d -it -e EULA=TRUE -p 19132:19132/udp -v levilamina-server-data:/data ghcr.io/liteldev/levilamina-server:latest-wine 13 | ``` 14 | 15 | Or, if you want to use a Windows container, run the following command: 16 | 17 | ```sh 18 | docker run -d -it -e EULA=TRUE -p 19132:19132/udp -v levilamina-server-data:C:\data ghcr.io/liteldev/levilamina-server:latest-windows 19 | ``` 20 | 21 | We also provide Docker Compose files for both Linux and Windows containers at [wine/compose.yaml](wine/compose.yaml) and [windows/compose.yaml](windows/compose.yaml) respectively. To use them, download the file to an empty directory and run `docker compose up -d`. 22 | 23 | ### Environment variables 24 | 25 | - `EULA`: must be set to `TRUE` to accept the [Minecraft End User License Agreement](https://minecraft.net/terms). 26 | 27 | - `GITHUB_MIRROR_URL`: can be set to a comma-separated list of GitHub mirror URLs to speed up the installation of LeviLamina. This is useful when you are behind a firewall or in a country with slow internet connection. 28 | 29 | - `GO_MODULE_PROXY_URL`: can be set to a comma-separated list of Go module proxy URLs to speed up the installation of LeviLamina. This is useful when you are behind a firewall or in a country with slow internet connection. 30 | 31 | - `PACKAGES`: can be set to a space-separated list of packages to install on first run. Each package must be a valid [lip specifier](https://lip.levimc.org/zh/user-guide/commands/lip-install/). Both local and remote lip teeth are supported. For local packages, you may need to mount the packages to the container. 32 | 33 | - `VERSION` (`LATEST`): can be set to a specific [LeviLamina](https://github.com/LiteLDev/LeviLamina/tags) version or `LATEST` to automatically download the latest version. 34 | -------------------------------------------------------------------------------- /windows/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mcr.microsoft.com/windows/servercore:ltsc2022@sha256:c7c591fe3a010bc641906723ad583ffe2fc14b472de6e6453ea26eaa3689d16e 2 | 3 | RUN powershell -Command Set-ExecutionPolicy Bypass -Scope Process -Force; \ 4 | [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; \ 5 | iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/aaronparker/vcredist/refs/heads/gh-pages/install.ps1')) 6 | 7 | ADD https://github.com/futrime/lip/releases/latest/download/lip-cli-win-x64-self-contained.zip lip.zip 8 | 9 | RUN mkdir "\Program Files\lip" \ 10 | && cd "\Program Files\lip" \ 11 | && tar -x -f \lip.zip \ 12 | && del \lip.zip \ 13 | && mklink \Windows\lip.exe "\Program Files\lip\lip.exe" 14 | 15 | COPY entrypoint.cmd /Windows/entrypoint.cmd 16 | 17 | WORKDIR /data 18 | 19 | ENTRYPOINT ["entrypoint.cmd"] 20 | 21 | -------------------------------------------------------------------------------- /windows/compose.yaml: -------------------------------------------------------------------------------- 1 | services: 2 | levilamina-server: 3 | image: ghcr.io/liteldev/levilamina-server:latest-windows 4 | environment: 5 | EULA: TRUE 6 | ports: 7 | - 19132:19132/udp 8 | volumes: 9 | - levilamina-server-data:C:\data 10 | stdin_open: true 11 | tty: true 12 | 13 | volumes: 14 | levilamina-server-data: 15 | -------------------------------------------------------------------------------- /windows/entrypoint.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | setlocal 3 | 4 | if "%VERSION%"=="" set "VERSION=LATEST" 5 | 6 | if not "%EULA%"=="TRUE" ( 7 | echo You must accept the Minecraft EULA to run the server 8 | echo Set the environment variable EULA to TRUE to accept it 9 | exit /b 1 10 | ) 11 | 12 | if not exist "bedrock_server_mod.exe" ( 13 | if not "%GITHUB_MIRROR_URL%"=="" ( 14 | lip.exe config set github_proxies=%GITHUB_MIRROR_URL% 15 | ) 16 | 17 | if not "%GO_MODULE_PROXY_URL%"=="" ( 18 | lip.exe config set go_module_proxies=%GO_MODULE_PROXY_URL% 19 | ) 20 | 21 | if "%VERSION%"=="LATEST" ( 22 | lip.exe install github.com/LiteLDev/LeviLamina 23 | ) else ( 24 | lip.exe install "github.com/LiteLDev/LeviLamina@%VERSION%" 25 | ) 26 | 27 | if not "%PACKAGES%"=="" ( 28 | lip.exe install %PACKAGES% 29 | ) 30 | ) 31 | 32 | bedrock_server_mod.exe 33 | -------------------------------------------------------------------------------- /wine/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:stable-slim@sha256:00a24d7c50ebe46934e31f6154c0434e2ab51259a65e028be42413c636385f7f 2 | 3 | RUN apt update \ 4 | && apt install -y unzip \ 5 | wget \ 6 | locales \ 7 | locales-all \ 8 | && apt clean \ 9 | && rm -rf /var/lib/apt/lists/* 10 | 11 | RUN dpkg --add-architecture i386 \ 12 | && mkdir -pm755 /etc/apt/keyrings \ 13 | && wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key \ 14 | && wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/debian/dists/bookworm/winehq-bookworm.sources \ 15 | && sed -i -e's/ main/ main contrib/g' /etc/apt/sources.list.d/debian.sources 16 | 17 | RUN apt update \ 18 | && apt install -y --install-recommends winehq-stable \ 19 | winetricks \ 20 | xvfb \ 21 | && apt clean \ 22 | && rm -rf /var/lib/apt/lists/* 23 | 24 | ADD https://github.com/futrime/lip/releases/latest/download/lip-cli-win-x64-self-contained.zip lip.zip 25 | 26 | RUN unzip lip.zip -d /opt/lip/ \ 27 | && rm lip.zip 28 | 29 | COPY --chmod=755 lip /usr/local/bin/lip 30 | 31 | COPY --chmod=755 entrypoint.sh /usr/local/bin/entrypoint.sh 32 | 33 | WORKDIR /data 34 | 35 | ENTRYPOINT ["entrypoint.sh"] 36 | -------------------------------------------------------------------------------- /wine/compose.yaml: -------------------------------------------------------------------------------- 1 | services: 2 | levilamina-server: 3 | image: ghcr.io/liteldev/levilamina-server:latest-wine 4 | environment: 5 | EULA: TRUE 6 | ports: 7 | - 19132:19132/udp 8 | volumes: 9 | - levilamina-server-data:/data 10 | stdin_open: true 11 | tty: true 12 | 13 | volumes: 14 | levilamina-server-data: 15 | -------------------------------------------------------------------------------- /wine/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env sh 2 | 3 | VERSION="${VERSION:-LATEST}" 4 | 5 | if [ "$EULA" != "TRUE" ] 6 | then 7 | echo "You must accept the Minecraft EULA to run the server" 8 | echo "Set the environment variable EULA to TRUE to accept it" 9 | exit 1 10 | fi 11 | 12 | if [ ! -d "/root/.wine" ] 13 | then 14 | winecfg 15 | xvfb-run -a winetricks -q vcrun2022 16 | fi 17 | 18 | export WINEDEBUG="${WINEDEBUG:--all}" 19 | 20 | if [ ! -f "bedrock_server_mod.exe" ]; then 21 | if [ -n "$GITHUB_MIRROR_URL" ]; then 22 | lip config set github_proxies="$GITHUB_MIRROR_URL" 23 | fi 24 | 25 | if [ -n "$GO_MODULE_PROXY_URL" ]; then 26 | lip config set go_module_proxies="$GO_MODULE_PROXY_URL" 27 | fi 28 | 29 | if [ "$VERSION" = "LATEST" ]; then 30 | lip install github.com/LiteLDev/LeviLamina 31 | else 32 | lip install github.com/LiteLDev/LeviLamina@"$VERSION" 33 | fi 34 | 35 | if [ -n "$PACKAGES" ]; then 36 | lip install $PACKAGES 37 | fi 38 | fi 39 | 40 | cat | wine64 bedrock_server_mod.exe 41 | -------------------------------------------------------------------------------- /wine/lip: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env sh 2 | 3 | wine64 /opt/lip/lip.exe $@ 4 | --------------------------------------------------------------------------------