#8 Add support for a mapserver
Opened 5 months ago by dherrera. Modified 5 months ago
dherrera/fedora-mine new-mapserver  into  master

@@ -0,0 +1,12 @@ 

+ [Unit]

+ Description=Minetest mapserver for the %i instance

+ After=syslog.target network.target

+ 

+ [Service]

+ User=minetest

+ Type=simple

+ WorkingDirectory=/var/lib/minetest/%i/

+ ExecStart=/opt/mapserver/mapserver

+ 

+ [Install]

+ WantedBy=multi-user.target

@@ -11,6 +11,50 @@ 

      mine_sysconfig: "/etc/sysconfig/minetest/{{ world.id }}.conf"

      mine_config: "/etc/minetest/{{ world.id }}.conf"

  

+ - name: install mapserver if activated

+   block:

+   - name: Ensure mapserver directory exists

+     file:

+       path: /opt/mapserver

+       state: directory

+ 

+   - name: install mapserver

+     unarchive:

+       src: "https://github.com/minetest-mapserver/mapserver/releases/download/v4.7.0/mapserver_4.7.0_linux_amd64.tar.gz"

+       dest: "/opt/mapserver/"

+       owner: minetest

+       group: minetest

+       remote_src: yes

+ 

+   - name: install mapserver service

+     copy:

+       src: mapserver@.service

+       dest: "/etc/systemd/system/mapserver@.service"

+ 

+   - name: get mapserver key

+     shell: cat /opt/mapserver_key

+     register: data

+     ignore_errors: True

+     changed_when: False

+ 

+   - name: generate mapserver secretkey

+     set_fact:

+       mapserver_secretkey: "{{ lookup('password', '/dev/null length=15 chars=ascii_letters') }}"

+     when: data is failed

+ 

+   - name: read mapserver secretkey

+     set_fact:

+       mapserver_secretkey: "{{ data.stdout }}"

+     when: data is not failed

+ 

+   - name: save generated key

+     copy:

+       dest: "/opt/mapserver_key"

+       content: "{{ mapserver_secretkey }}"

+       mode: 0600

+ 

+   when: mapserver is defined

+ 

  - name: Games folder exists

    file:

      path: "{{ mine_home }}/.minetest/games"
@@ -58,4 +102,39 @@ 

      name: minetest@{{ world.id }}.service

      enabled: true

      state: started

-     

+  

+ - name: configure mapserver if activated

+   block:

+   - name: configure mapserver port for {{ world.id }}

+     template:

+       src: mapserver.json.j2

+       dest: "{{ mine_home }}/{{ world.id }}/mapserver.json"

+       owner: minetest

+       group: minetest

+       backup: yes

+ 

+   - name: wait for world to exist

+     ansible.builtin.wait_for:

+       path: "{{ mine_home }}/{{ world.id }}/map.sqlite"

+       state: present

+ 

+   - name: start Minetest-mapserver for {{ world.id }}

+     service:

+       name: mapserver@{{ world.id }}.service

+       enabled: true

+       state: started

+ 

+   - name: setup nginx vhost

+     template:

+       src=mapserver_vhost_.conf.j2

+       dest={{ nginx_location_available }}/mapserver_vhost_{{ world.id }}.conf

+ 

+   - name: create symlink nginx vhost

+     file:

+       src={{ nginx_location_available }}/mapserver_vhost_{{ world.id }}.conf

+       dest={{ nginx_location_enabled }}/mapserver_vhost_{{ world.id }}.conf

+       state=link

+     notify: restart nginx

+ 

+   when: mapserver is defined

+ 

@@ -0,0 +1,73 @@ 

+ {

+         "configversion": 1,

+         "port": {{ mapserver.port }},

+         "enableprometheus": false,

+         "enablerendering": true,

+         "enablesearch": true,

+         "enableinitialrendering": true,

+         "enabletransparency": false,

+         "enablemediarepository": false,

+         "webdev": false,

+         "webapi": {

+                 "enablemapblock": true,

+                 "secretkey": "{{ mapserver_secretkey }}"

+         },

+         "layers": [

+                 {

+                         "id": 0,

+                         "name": "Ground",

+                         "from": -16,

+                         "to": 160

+                 }

+         ],

+         "renderingfetchlimit": 10000,

+         "renderingjobs": 8,

+         "renderingqueue": 100,

+         "incrementalrenderingtimer": "5s",

+         "mapobjects": {

+                 "areas": true,

+                 "bones": true,

+                 "protector": true,

+                 "xpprotector": true,

+                 "privprotector": true,

+                 "technic_quarry": true,

+                 "technic_switch": true,

+                 "technic_anchor": true,

+                 "technic_reactor": true,

+                 "luacontroller": true,

+                 "digiterms": true,

+                 "digilines": true,

+                 "travelnet": true,

+                 "mapserver_player": true,

+                 "mapserver_poi": true,

+                 "mapserver_label": true,

+                 "mapserver_trainline": true,

+                 "mapserver_border": true,

+                 "tileserverlegacy": true,

+                 "mission": true,

+                 "jumpdrive": true,

+                 "smartshop": true,

+                 "fancyvend": true,

+                 "atm": true,

+                 "train": true,

+                 "trainsignal": true,

+                 "minecart": false,

+                 "locator": false,

+                 "signs": true,

+                 "mapserver_airutils": true

+         },

+         "mapblockaccessor": {

+                 "expiretime": "15s",

+                 "purgetime": "30s",

+                 "maxitems": 500

+         },

+         "defaultoverlays": [

+                 "mapserver_poi",

+                 "mapserver_label",

+                 "mapserver_player"

+         ],

+         "skins": {

+                 "enableskinsdb": false,

+                 "skinspath": ""

+         }

+ } 

\ No newline at end of file

@@ -0,0 +1,6 @@ 

+ location /{{ world.id }}/map/ {

+     proxy_pass http://127.0.0.1:{{ mapserver.port }}/;

+     proxy_set_header Upgrade $http_upgrade;

+     proxy_set_header Connection $http_connection;

+     access_log off;

+ }

file modified
+2
@@ -32,4 +32,6 @@ 

          admin_name: server_admin

          announce: false

          port: 30001

+       mapserver:

+         port: 40001

  

This is a reiteration of the previous PR #6, here are the changes since then:

  • This time I merged everything into the minetest-world since it's not that big.
  • The internal api key is saved into the server and only used internally there
  • It will expose the mineclone2 server map on https://mine.fedorainfracloud.org/mineclone2/map using nginx