feat: finalize file structure for Docker

This commit is contained in:
Emmanuel BENOîT 2025-01-02 14:04:58 +01:00
parent 2523581537
commit 7439475766
Signed by: Emmanuel BENOîT
SSH key fingerprint: SHA256:l7PFUUF5TCDsvYeQC9OnTNz08dFY7Fvf4Hv3neIqYpg
6 changed files with 99 additions and 3 deletions

View file

@ -0,0 +1,3 @@
FROM postgres:17-alpine
ADD sql /opt/lwsql
ADD misc/init-sql.sh /docker-entrypoint-initdb.d

75
docker/Dockerfile.game Normal file
View file

@ -0,0 +1,75 @@
FROM debian:12-slim
RUN <<EOF
set -e
export DEBIAN_FRONTEND=noninteractive
export DEBCONF_NONINTERACTIVE_SEEN=true
apt-get update && apt-get dist-upgrade -uy
apt-get -y install lsb-release ca-certificates curl
curl -sSLo /tmp/debsuryorg-archive-keyring.deb \
https://packages.sury.org/debsuryorg-archive-keyring.deb
dpkg -i /tmp/debsuryorg-archive-keyring.deb
rm -f /tmp/debsuryorg-archive-keyring.deb
echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" \
> /etc/apt/sources.list.d/php.list
apt-get update
apt-get install -y apache2 libapache2-mod-php8.3 \
php8.3-cli php8.3-opcache php8.3-pgsql \
php8.3-xml socat
adduser --system --ingroup www-data \
--shell '/bin/false' \
--comment 'LWB5 Ticks' \
--home /opt/lwb5 --no-create-home \
lwticks
a2dismod mpm_event
a2enmod mpm_prefork
/bin/echo -e "Listen 80\nListen 81" > /etc/apache2/ports.conf
cat > /etc/apache2/sites-available/lwb5-main.conf <<EOC
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /opt/lwb5/site
ErrorLog /dev/stderr
CustomLog /dev/stdout combined
<Directory /opt/lwb5/site>
Require all granted
php_flag log_errors on
php_value error_log syslog
</Directory>
<Files "*.inc">
Require all denied
</Files>
</VirtualHost>
EOC
cat > /etc/apache2/sites-available/lwb5-admin.conf <<EOC
<VirtualHost *:81>
ServerAdmin webmaster@localhost
DocumentRoot /opt/lwb5/admin
ErrorLog /dev/stderr
CustomLog /dev/stdout combined
<Directory /opt/lwb5/admin>
Require all granted
php_flag log_errors on
php_value error_log syslog
</Directory>
<Files "*.inc">
Require all denied
</Files>
</VirtualHost>
EOC
a2dissite 000-default
a2ensite lwb5-main
a2ensite lwb5-admin
mkdir /var/spool/pgen
chgrp www-data /var/spool/pgen
chmod 1775 /var/spool/pgen
EOF
VOLUME /var/spool/pgen
EXPOSE 80 81
ADD game /opt/lwb5
ENTRYPOINT ["/opt/lwb5/run-lwb5.sh"]

View file

@ -0,0 +1,17 @@
FROM debian:12-slim
ADD ./planetgen /opt/planetgen
RUN <<EOF
set -e
export DEBIAN_FRONTEND=noninteractive
export DEBCONF_NONINTERACTIVE_SEEN=true
apt-get update && apt-get dist-upgrade -uy
apt-get install -y perl povray
mkdir -p /var/spool/pgen/{input,output}
chown -R www-data:www-data /var/spool/pgen
EOF
VOLUME /var/spool/pgen/input /var/spool/pgen/output
ENTRYPOINT ["/opt/planetgen/planetmaker.pl"]

74
docker/compose.yml Normal file
View file

@ -0,0 +1,74 @@
name: legacyworlds
services:
db:
build:
context: ../
dockerfile: docker/Dockerfile.database
restart: always
shm_size: 128mb
volumes:
- database:/var/lib/postgresql/data
environment:
LW_ADMIN_MAIL: ${LW_ADMIN_MAIL}
LW_ADMIN_NAME: ${LW_ADMIN_NAME}
LW_ADMIN_PASSWORD_FILE: /run/secrets/lw_admin_password
LW_DB_ADMIN_PASS_FILE: /run/secrets/lw_db_admin_pass
LW_DB_USER_PASS_FILE: /run/secrets/lw_db_user_pass
LW_PEACEKEEPERS_PASSWORD_FILE: /run/secrets/lw_peacekeepers_password
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
secrets:
- db_password
- lw_db_user_pass
- lw_db_admin_pass
- lw_admin_password
- lw_peacekeepers_password
game:
build:
context: ../
dockerfile: docker/Dockerfile.game
restart: always
ports:
- "80:80"
- "81:81"
volumes:
- type: bind
source: ../game
target: /opt/lwb5
- type: tmpfs
target: /tmp
tmpfs:
size: 1g
- planets:/opt/lwb5/site/static/beta5/pics/pl:ro
- pgen:/var/spool/pgen:rw
planetgen:
build:
context: ..
dockerfile: docker/Dockerfile.planetgen
restart: always
volumes:
- pgen:/var/spool/pgen/input:rw
- planets:/var/spool/pgen/output:rw
environment:
PGEN_INPUT: /var/spool/pgen/input
PGEN_OUTPUT: /var/spool/pgen/output
volumes:
pgen:
planets:
database:
secrets:
db_password:
environment: DB_PASSWORD
lw_db_user_pass:
environment: LW_DB_USER_PASS
lw_db_admin_pass:
environment: LW_DB_ADMIN_PASS
lw_admin_password:
environment: LW_ADMIN_PASSWORD
lw_peacekeepers_password:
environment: LW_PEACEKEEPERS_PASSWORD

17
docker/env.example Normal file
View file

@ -0,0 +1,17 @@
# Password for the database superuser
DB_PASSWORD=...
# Legacyworlds database - Main user
LW_DB_USER_PASS=...
# Legacyworlds database - Admin user
LW_DB_ADMIN_PASS=...
# First admin account - User name
LW_ADMIN_NAME=...
# First admin account - Email address
LW_ADMIN_MAIL=...
# First admin account - Password (warning: will be stored in the clear)
LW_ADMIN_PASSWORD=...
# "Peacekeepers" fake player - Password (should be a random string)
LW_PEACEKEEPERS_PASSWORD=...