diff --git a/.dockerignore b/.dockerignore new file mode 100755 index 000000000..1fade200c --- /dev/null +++ b/.dockerignore @@ -0,0 +1,13 @@ +** + +!www/bases_examples_Linux +!www/cgi-bin_Linux +!www/htdocs +!empweb +!docker/abcd +!docker/empweb + +**/*~ +**/*.log +**/.DS_Store +**/Thumbs.db diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml new file mode 100644 index 000000000..f4cb05638 --- /dev/null +++ b/.github/workflows/docker-image.yml @@ -0,0 +1,37 @@ +name: Docker Image CI + +on: + push: + tags: [ 'v*' ] + +jobs: + + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Docker meta + id: meta + uses: docker/metadata-action@v4 + with: + images: edsz14/abcd-isis + + - name: Login to DockerHub + if: github.event_name != 'pull_request' + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push + uses: docker/build-push-action@v4 + with: + context: . + file: docker/abcd/Dockerfile + push: ${{ github.event_name != 'pull_request' }} + labels: ${{ steps.meta.outputs.labels }} + tags: ${{ steps.meta.outputs.tags }} + #tags: edsz14/abcd-isis:latest diff --git a/docker/README.md b/docker/README.md new file mode 100644 index 000000000..8080f6508 --- /dev/null +++ b/docker/README.md @@ -0,0 +1,40 @@ +# Docker Compose build and run + +``` +# create a subnet for ABCD +docker network create --subnet 172.18.18.0/24 abcd + +# ensure www-data user is owner of the example database +chown -R 33:33 ./www/bases-examples_Linux + +# start containers +docker-compose --project-directory . -f docker/docker-compose.yml up +``` + +# Start containers from dockerhub + +Download the image with: +``` +docker pull edsz14/abcd-isis +``` + +This command will start a container in the foreground (for testing/debugging, on port 8080): +``` +docker run --rm -p 127.0.0.1:8080:80 --name abcd -v :/var/opt/ABCD/bases edsz14/abcd-isis +``` + +This command will start a container in the background and ensure it is started automatically whenever docker is started (port 80, requires root): +``` +# ensure the www-data user inside the container can read/write your bases +chown -R 33:33 + +# start the container on port 80 +docker run --rm -d --restart always -p 127.0.0.1:80:80 --name abcd -v :/var/opt/ABCD/bases edsz14/abcd-isis +``` + +# Reset data (optional) + +Wipe logs and mysql data (for docker compose): +``` +rm -rf docker/logs/* docker/mysql/data/* +``` diff --git a/docker/abcd/Dockerfile b/docker/abcd/Dockerfile new file mode 100755 index 000000000..4f8c3319f --- /dev/null +++ b/docker/abcd/Dockerfile @@ -0,0 +1,23 @@ +FROM php:8-apache + +RUN apt-get update -y \ + && apt-get install -y libpng-dev libyaz-dev libxml2-dev zlib1g-dev libtidy-dev libxslt1-dev libyaz-dev libcurl4-openssl-dev \ + && rm -rf /var/lib/{apt,dpkg,cache,log} + +RUN docker-php-ext-install pdo_mysql gd xsl curl \ + && pecl install yaz \ + && (pecl install xmlrpc || pecl install xmlrpc-1.0.0RC3) \ + && echo 'extension=yaz.so' > /usr/local/etc/php/conf.d/docker-php-ext-yaz.ini \ + && echo 'extension=xmlrpc.so' > /usr/local/etc/php/conf.d/docker-php-ext-xmlrpc.ini \ + && echo 'display_errors=off\nlog_errors=on' > /usr/local/etc/php/conf.d/docker-php-logging.ini + +RUN a2enmod proxy_http cgi rewrite ldap + +COPY ./www/cgi-bin_Linux /opt/ABCD/www/cgi-bin +COPY ./www/htdocs /opt/ABCD/www/htdocs +COPY ./www/htdocs/central/config.php.template /opt/ABCD/www/htdocs/central/config.php +COPY ./docker/abcd/apache.conf /etc/apache2/sites-available/000-default.conf + +RUN ln -s /var/opt/ABCD/bases /opt/ABCD/www/bases + +WORKDIR /opt/ABCD diff --git a/docker/abcd/apache.conf b/docker/abcd/apache.conf new file mode 100755 index 000000000..6f82e1f03 --- /dev/null +++ b/docker/abcd/apache.conf @@ -0,0 +1,46 @@ + + ServerName abcd.localhost + ServerAdmin webmaster@localhost + Define ABCD_ROOT "/opt/ABCD/www" + + DocumentRoot ${ABCD_ROOT}/htdocs + + + Options +Indexes -FollowSymLinks + AllowOverride All + Require all granted + + + + Options +Indexes -FollowSymLinks +MultiViews + Require all granted + + + ScriptAlias /cgi-bin/ "${ABCD_ROOT}/cgi-bin/" + + AllowOverride None + Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch + AddHandler cgi-script .cgi + AddHandler cgi-script .exe + Require all granted + + + Alias /docs/ "/var/opt/ABCD/bases/" + + Options -Indexes -FollowSymLinks -MultiViews + AllowOverride None + Require all granted + + + + ProxyPass http://empweb:8080/empweb + ProxyPassReverse http://empweb:8080/empweb + Order allow,deny + Allow from all + + + # ErrorLog ${APACHE_LOG_DIR}/error.log + # CustomLog ${APACHE_LOG_DIR}/access.log combined + # ProxyPass /empweb/ http://127.0.0.1:8080/empweb/ + # ProxyPassReverse / http://127.0.0.1:8080/ + diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 000000000..b6d86f47b --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,71 @@ +version: '3.4' + +services: + abcd: + build: + context: . + dockerfile: ./docker/abcd/Dockerfile + image: abcd:latest + restart: always + hostname: abcd.abcd + container_name: abcd.abcd + expose: + - "80" + ports: + - "80:80" + volumes: + - ./www/bases-examples_Linux:/var/opt/ABCD/bases/ + - ./docker/logs:/var/opt/ABCD/bases/log + networks: + abcd: + ipv4_address: 172.18.18.2 + extra_hosts: + - "empweb:172.18.18.3" +# empweb: +# build: +# context: . +# dockerfile: ./docker/empweb/Dockerfile +# image: empweb:latest +# restart: always +# hostname: empweb.abcd +# container_name: empweb.abcd +# expose: +# - "8080" +# volumes: +# - ./docker/logs:/opt/ABCD/empweb/logs +# networks: +# abcd: +# ipv4_address: 172.18.18.3 +# extra_hosts: +# - "abcd:172.18.18.2" +# - "mysql:172.18.18.4" +# depends_on: +# - "mysql" +# links: +# - "mysql" +# mysql: +# #image: mariadb:5.5.64 +# image: mysql:5 +# restart: always +# hostname: mysql.abcd +# container_name: mysql.abcd +# expose: +# - "3306" +# volumes: +# - ./docker/mysql/data:/var/lib/mysql:rw +# - ./docker/mysql/restore:/docker-entrypoint-initdb.d:ro +# environment: +# MYSQL_ROOT_PASSWORD: empweb +# MYSQL_DATABASE: transa +# networks: +# abcd: +# ipv4_address: 172.18.18.4 + +networks: + abcd: + external: + name: abcd +# ipam: +# driver: default +# config: +# - subnet: 172.18.18.0/24 diff --git a/docker/empweb/Dockerfile b/docker/empweb/Dockerfile new file mode 100755 index 000000000..24f82bf1a --- /dev/null +++ b/docker/empweb/Dockerfile @@ -0,0 +1,17 @@ +FROM java:7-jdk + +ENV JETTY_HOME=/opt/ABCD/empweb/jetty +ENV JETTY_RUN=/opt/ABCD/empweb +ENV JAVA=/usr/bin/java + +COPY ./www/cgi-bin_Linux /opt/ABCD/www/cgi-bin +COPY ./empweb /opt/ABCD/empweb +#COPY ./docker/empweb/mysql-connector-java-3.1.12-bin.jar /opt/ABCD/empweb/common/ext/mysql-connector-java-bin.jar +#COPY ./docker/empweb/mariadb-java-client-1.8.0.jar /opt/ABCD/empweb/common/ext/mysql-connector-java-bin.jar +#COPY ./docker/empweb/mariadb-java-client-2.7.3.jar /opt/ABCD/empweb/common/ext/mysql-connector-java-bin.jar +COPY ./docker/empweb/mysql-connector-java-5.1.49-bin.jar /opt/ABCD/empweb/common/ext/mysql-connector-java-bin.jar + +WORKDIR /opt/ABCD + +ENTRYPOINT ["/usr/bin/java"] +CMD ["-server","-DSTART=/opt/ABCD/empweb/common/etc/start.config","-Djetty.home=/opt/ABCD/empweb/jetty","-Dempweb.home=/opt/ABCD/empweb","-Djava.util.logging.config.file=/opt/ABCD/empweb/common/etc/logging.properties","-Daxis.xml.reuseParsers=true","-Dsun.net.client.defaultConnectTimeout=10000","-Dcisis.location=/opt/ABCD/www/cgi-bin/ansi/","-Dcisis.command=mx","-Dabcd.url=http://abcd","-Dcisis.platform=linux","-Xms128M","-Xmx128M","-Djetty.home=/opt/ABCD/empweb/jetty","-Djava.library.path=/opt/ABCD/empweb/common/ext","-Dfile.encoding=ISO8859_1","-jar","/opt/ABCD/empweb/jetty/start.jar","/opt/ABCD/empweb/common/etc/ewdbws-jetty.xml","/opt/ABCD/empweb/common/etc/ewengine-jetty.xml","/opt/ABCD/empweb/common/etc/ewgui-jetty.xml"] diff --git a/docker/empweb/mariadb-java-client-1.8.0.jar b/docker/empweb/mariadb-java-client-1.8.0.jar new file mode 100644 index 000000000..9a0f7d144 Binary files /dev/null and b/docker/empweb/mariadb-java-client-1.8.0.jar differ diff --git a/docker/empweb/mariadb-java-client-2.7.3.jar b/docker/empweb/mariadb-java-client-2.7.3.jar new file mode 100644 index 000000000..579d24950 Binary files /dev/null and b/docker/empweb/mariadb-java-client-2.7.3.jar differ diff --git a/docker/empweb/mysql-connector-java-5.1.49-bin.jar b/docker/empweb/mysql-connector-java-5.1.49-bin.jar new file mode 100644 index 000000000..b0c655539 Binary files /dev/null and b/docker/empweb/mysql-connector-java-5.1.49-bin.jar differ diff --git a/docker/logs/.keepme b/docker/logs/.keepme new file mode 100644 index 000000000..e69de29bb diff --git a/empweb/engine/WEB-INF/trans_rules/classes/.keepme b/empweb/engine/WEB-INF/trans_rules/classes/.keepme new file mode 100644 index 000000000..e69de29bb