Docker Compose: Difference between revisions
Jump to navigation
Jump to search
(74 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
{| | |||
|valign="top"| | |||
<syntaxhighlight lang="bash" highlight="3" line> | |||
npm install yarn@latest -g | |||
yarn global add serve | |||
serve -s target | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="bash"> | |||
:' | |||
┌──────────────────────────────────────────────────┐ | |||
│ │ | |||
│ Serving! │ | |||
│ │ | |||
│ - Local: http://localhost:5000 │ | |||
│ - On Your Network: http://10.20.13.10:5000 │ | |||
│ │ | |||
│ Copied local address to clipboard! │ | |||
│ │ | |||
└──────────────────────────────────────────────────┘ | |||
' | |||
</syntaxhighlight> | |||
|valign="top"| | |||
<syntaxhighlight lang="bash"> | |||
sudo apt install build-essential libssl-dev libffi-dev\ | |||
libgmp3-dev libpq-dev python-is-python3\ | |||
python3-dev python3-pip python3-venv | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="bash"> | |||
ip -o route get to 8.8.8.8 | sed -n 's/.*src \([0-9.]\+\).*/\1/p' | |||
nohup python3 -m http.server 5000 2> /dev/null >&1 & | |||
:' | |||
[1] 226938 | |||
' | |||
kill -9 $(lsof -t -i:5000) | |||
</syntaxhighlight> | |||
|} | |||
==Dockerfile== | |||
<syntaxhighlight lang="bash" highlight="28-32" line> | |||
FROM openjdk:8-jdk-alpine | |||
ENV CHORKE_HOME='/var/chorke'\ | |||
SPRING_PROFILES_ACTIVE=docker\ | |||
CHORKE_DS_POOLNAME='java:jboss/datasources/H2_http_spider_devDS'\ | |||
CHORKE_DS_JDBC_URL='jdbc:h2:file:${user.home}/.chorke/academia/var/h2/${academia.datasource.database};\ | |||
db_close_on_exit=false;mode=MySQL;user=${academia.datasource.username};password=${academia.datasource.password}'\ | |||
CHORKE_DS_DBDRIVER='org.h2.Driver'\ | |||
CHORKE_DS_DATABASE='academia'\ | |||
CHORKE_DS_USERNAME='academia'\ | |||
CHORKE_DS_PASSWORD='academia'\ | |||
CHORKE_DS_SQLQUERY='SELECT 1'\ | |||
CHORKE_H2_WEBADMIN='false'\ | |||
CHORKE_H2_ALLOWALL='false'\ | |||
CHORKE_JPA_DIALECT='org.hibernate.dialect.H2Dialect'\ | |||
CHORKE_JPA_SHOWSQL='false'\ | |||
CHORKE_GQL_ENABLED='true'\ | |||
CHORKE_GQL_BROWSER='true'\ | |||
CHORKE_LIQ_ENABLED='true'\ | |||
CHORKE_LIQ_CONTEXT='dev'\ | |||
CHORKE_LOG_ROLLING='WARN'\ | |||
CHORKE_LOG_CONSOLE='OFF'\ | |||
CHORKE_REQ_CONTEXT='/crawler' | |||
# COPY ./*.jar $CHORKE_HOME/chorke.jar | |||
# RUN chmod 644 -R $CHORKE_HOME &&\ | |||
# chmod 755 $CHORKE_HOME/chorke.jar | |||
RUN mkdir $CHORKE_HOME &&\ | |||
chmod 644 -R $CHORKE_HOME &&\ | |||
apk add --no-cache curl &&\ | |||
curl -s http://10.20.13.10:5000/chorke.jar -o $CHORKE_HOME/chorke.jar &&\ | |||
chmod 755 $CHORKE_HOME/chorke.jar | |||
VOLUME ["$HOME/.chorke/academia"] | |||
WORKDIR $CHORKE_HOME | |||
EXPOSE 1983 | |||
ENTRYPOINT ["java", "-jar", "chorke.jar"] | |||
</syntaxhighlight> | |||
Keep in mind '''COPY''' and '''RUN''' command create same size of images layer twice. For this case if '''COPY''' created '''118MB''' layer then '''RUN''' command will be created another same size of layer. It's means another '''118MB''' layer will be added in your image. We should avoid '''COPY''' command rather we should use '''CURL''' inside '''RUN''' command to copy jar file from maven repository. That will reduce another 118MB from your image. | |||
'''Example:''' | |||
present image size => 105MB ['''FROM'''] + 118MB ['''COPY'''] + 118MB ['''RUN'''] => '''340MB''' | |||
reduced image size => 105MB ['''FROM'''] + 0MB ['''COPY'''] + 119MB ['''RUN'''] => '''224MB''' | |||
==docker-compose.yml== | |||
<syntaxhighlight lang="properties"> | |||
version: "3.9" | |||
services: | |||
app: | |||
build: | |||
context: . | |||
dockerfile: Dockerfile | |||
container_name: crawler_app | |||
image: chorke/crawler:1.0.00 | |||
extra_hosts: | |||
- "host.docker.internal:host-gateway" | |||
networks: | |||
default: | |||
aliases: | |||
- app.academia.chorke.org | |||
ports: | |||
- "127.0.0.1:1983:1983" | |||
labels: | |||
org.chorke.academia.http.spider: "Academia Web Crawler" | |||
depends_on: | |||
- redis | |||
- db | |||
environment: | |||
- CHORKE_DS_POOLNAME=java:jboss/datasources/PG_http_spider_devDS | |||
- CHORKE_DS_JDBC_URL=jdbc:postgresql://db:5432/academia | |||
- CHORKE_DS_DBDRIVER=org.postgresql.Driver | |||
- CHORKE_DS_DATABASE=academia | |||
- CHORKE_DS_USERNAME=academia | |||
- CHORKE_DS_PASSWORD=academia | |||
- CHORKE_DS_SQLQUERY=SELECT 1 | |||
- CHORKE_H2_WEBADMIN=false | |||
- CHORKE_H2_ALLOWALL=false | |||
- CHORKE_JPA_DIALECT=org.hibernate.dialect.PostgreSQLDialect | |||
- CHORKE_JPA_SHOWSQL=false | |||
- CHORKE_GQL_ENABLED=true | |||
- CHORKE_GQL_BROWSER=true | |||
- CHORKE_LIQ_ENABLED=true | |||
- CHORKE_LIQ_CONTEXT=dev | |||
- CHORKE_LOG_ROLLING=WARN | |||
- CHORKE_LOG_CONSOLE=OFF | |||
- CHORKE_REQ_CONTEXT=/crawler | |||
redis: | |||
container_name: crawler_redis | |||
image: 'redis:6.0.10-alpine' | |||
networks: | |||
default: | |||
aliases: | |||
- redis.academia.chorke.org | |||
db: | |||
image: 'postgres:13.1-alpine' | |||
container_name: crawler_psql | |||
environment: | |||
- POSTGRES_PASSWORD=academia | |||
- POSTGRES_USER=academia | |||
- POSTGRES_DB=academia | |||
networks: | |||
default: | |||
aliases: | |||
- db.academia.chorke.org | |||
networks: | |||
default: | |||
ipam: | |||
config: | |||
- subnet: 10.20.21.0/24 | |||
</syntaxhighlight> | |||
==application-docker.yml== | |||
<syntaxhighlight lang="properties" line> | |||
################################################################################ | |||
# application snake yaml properties | |||
################################################################################ | |||
academia: | |||
datasource: | |||
url: ${CHORKE_DS_JDBC_URL} | |||
database: ${CHORKE_DS_DATABASE} | |||
username: ${CHORKE_DS_USERNAME} | |||
password: ${CHORKE_DS_PASSWORD} | |||
poolname: ${CHORKE_DS_POOLNAME} | |||
server: | |||
servlet: | |||
contextPath: ${CHORKE_REQ_CONTEXT} | |||
spring: | |||
datasource: | |||
driver-class-name: ${CHORKE_DS_DBDRIVER} | |||
hikari: | |||
connection-test-query: ${CHORKE_DS_SQLQUERY} | |||
################################################################################ | |||
# built on: Sat, Oct 10 2020, 10:10 +0000 by: [email protected] | |||
################################################################################ | |||
</syntaxhighlight> | |||
==application-docker.properties== | |||
<syntaxhighlight lang="properties" line> | |||
################################################################################ | |||
# application properties | |||
################################################################################ | |||
spring.jpa.properties.hibernate.dialect: ${CHORKE_JPA_DIALECT} | |||
spring.jpa.properties.hibernate.format_sql: true | |||
spring.jpa.show-sql: ${CHORKE_JPA_SHOWSQL} | |||
spring.h2.console.settings.web-allow-others: ${CHORKE_H2_ALLOWALL} | |||
spring.h2.console.enabled: ${CHORKE_H2_WEBADMIN} | |||
graphql.servlet.enabled: ${CHORKE_GQL_ENABLED} | |||
graphiql.enabled: ${CHORKE_GQL_BROWSER} | |||
spring.liquibase.enabled: ${CHORKE_LIQ_ENABLED} | |||
spring.liquibase.contexts: ${CHORKE_LIQ_CONTEXT} | |||
################################################################################ | |||
# built on: Sat, Oct 10 2020, 10:10 +0000 by: [email protected] | |||
################################################################################ | |||
</syntaxhighlight> | |||
==log4j2.xml== | |||
<syntaxhighlight lang="xml" highlight="7,8,24" line> | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<Configuration> | |||
<Properties> | |||
<Property name="academia.log.format">%d{MMM dd, yyyy HH:mm:ss a} %c [METHOD: %M , LINE: %L]%n[%-5p][%t] %m%n</Property> | |||
<Property name="academia.log.file.gz">${academia.log.dir}/%d{yyyyMM}/SPIDER-%d{yyyyMMdd}-%i.log.gz</Property> | |||
<Property name="academia.log.dir">${sys:user.home}/.chorke/academia/var/log/http</Property> | |||
<Property name="academia.log.rolling">${env:CHORKE_LOG_ROLLING:-INFO}</Property> | |||
<Property name="academia.log.console">${env:CHORKE_LOG_CONSOLE:-INFO}</Property> | |||
<Property name="academia.log.file">${academia.log.dir}/SPIDER.log</Property> | |||
</Properties> | |||
<Appenders> | |||
<RollingFile name="rolling" fileName="${academia.log.file}" filePattern="${academia.log.file.gz}" ignoreExceptions="false"> | |||
<PatternLayout pattern="${academia.log.format}"/> | |||
<Policies> | |||
<SizeBasedTriggeringPolicy size="10 MB"/> | |||
<TimeBasedTriggeringPolicy interval="1"/> | |||
<OnStartupTriggeringPolicy /> | |||
</Policies> | |||
<DefaultRolloverStrategy max="20"/> | |||
</RollingFile> | |||
<Console name="console" target="SYSTEM_OUT"> | |||
<PatternLayout pattern="${academia.log.format}"/> | |||
</Console> | |||
<Async name="async" includeLocation="true"> | |||
<AppenderRef ref="console" level="${academia.log.console}"/> | |||
<AppenderRef ref="rolling" level="${academia.log.rolling}"/> | |||
</Async> | |||
</Appenders> | |||
<Loggers> | |||
<Logger name="org.chorke.academia.http.spider.mapper" level="WARN"/> | |||
<Logger name="springfox.documentation" level="WARN"/> | |||
<Logger name="edu.uci.ics.crawler4j" level="ERROR"/> | |||
<Logger name="org.apache.activemq" level="WARN"/> | |||
<Logger name="org.chorke.academia" level="INFO"/> | |||
<Logger name="org.springframework" level="WARN"/> | |||
<Logger name="org.apache.camel" level="WARN"/> | |||
<Logger name="org.thymeleaf" level="WARN"/> | |||
<Logger name="javax.servlet" level="WARN"/> | |||
<Logger name="bitronix.tm" level="WARN"/> | |||
<Logger name="org.jasypt" level="WARN"/> | |||
<Logger name="org.quartz" level="WARN"/> | |||
<Logger name="com.zaxxer" level="WARN"/> | |||
<Root level="INFO"> | |||
<AppenderRef ref="async"/> | |||
</Root> | |||
</Loggers> | |||
</Configuration> | |||
</syntaxhighlight> | |||
==Knowledge== | |||
docker \ | |||
run --detach \ | |||
--name crawler \ | |||
--publish 1983:1983 \ | |||
chorke/crawler:1.0.00 | |||
docker compose up | |||
docker compose up -d | |||
docker compose logs -f -t | |||
docker logs crawler | |||
docker logs -f crawler | |||
docker exec -it crawler /bin/sh | |||
docker inspect crawler_app|grep compose | |||
docker build --rm -t 'chorke/crawler:1.0.00' -f ./Dockerfile . | |||
docker run --name='crawler' -d -p 1983:1983 chorke/crawler:1.0.00 | |||
docker run --rm --name='crawler' -d -p 1983:1983 chorke/crawler:1.0.00 | |||
docker run --rm --name='crawler' -d -p 1983:1983 hub.chorke.org/chorke/crawler:1.0.00 | |||
'''docker push and pull''' | |||
docker login reg.chorke.org -u academia -p sadaqah! | |||
docker tag chorke/crawler:1.0.00 reg.chorke.org/chorke/crawler:1.0.00 | |||
docker push reg.chorke.org/chorke/crawler:1.0.00 | |||
docker login hub.chorke.org -u academia -p sadaqah! | |||
docker pull hub.chorke.org/chorke/crawler:1.0.00 | |||
docker tag hub.chorke.org/chorke/crawler:1.0.00 chorke/crawler:1.0.00 | |||
docker rmi hub.chorke.org/chorke/crawler:1.0.00 | |||
docker logout hub.chorke.org | |||
docker logout reg.chorke.org | |||
docker \ | |||
run --detach \ | |||
--name crawler \ | |||
--publish 1983:1983 \ | |||
hub.chorke.org/chorke/crawler:1.0.00 | |||
docker exec -it crawler /bin/sh | |||
'''nodejs static web server for curl''' | |||
npm install yarn@latest -g | |||
yarn global add serve | |||
serve -s target | |||
<syntaxhighlight lang="bash"> | |||
if [[ "$(</proc/sys/kernel/osrelease)" == *microsoft* ]];then echo 'WSL enabled';fi | |||
if grep -qEi '(Microsoft|WSL)' /proc/version &>/dev/null;then echo 'WSL enabled';fi | |||
if [[ "$(</proc/version)" == *microsoft* ]];then echo 'WSL enabled';fi | |||
</syntaxhighlight> | |||
==References== | ==References== | ||
{| | {| | ||
Line 5: | Line 315: | ||
* [https://docs.docker.com/compose/gettingstarted/ Get started with Docker Compose] | * [https://docs.docker.com/compose/gettingstarted/ Get started with Docker Compose] | ||
* [https://www.docker.com/blog/how-to-deploy-on-remote-docker-hosts-with-docker-compose/ Docker Compose Remote Deploy] | * [https://www.docker.com/blog/how-to-deploy-on-remote-docker-hosts-with-docker-compose/ Docker Compose Remote Deploy] | ||
* [https://docs.docker.com/compose/ Overview | * [https://docs.docker.com/compose/compose-file/compose-file-v3/#network_mode Docker Compose Network Mode] | ||
* [https://docs.docker.com/compose/ Docker Compose Overview] | |||
* [https://docs.docker.com/compose/compose-file/compose-file-v3/#networks Docker Compose Network] | |||
* [https://docs.docker.com/compose/compose-file/compose-file-v3/ Docker Compose File v3] | * [https://docs.docker.com/compose/compose-file/compose-file-v3/ Docker Compose File v3] | ||
* [https://docs.docker.com/compose/compose-file/ Docker Compose File] | * [https://docs.docker.com/compose/compose-file/ Docker Compose File] | ||
Line 12: | Line 324: | ||
| valign="top" | | | valign="top" | | ||
* [https://docs.docker.com/compose/compose-file/compose-file-v3/#environment Docker Compose Environment] | |||
* [https://docs.docker.com/compose/compose-file/compose-file-v3/#depends_on Docker Compose Depends On] | * [https://docs.docker.com/compose/compose-file/compose-file-v3/#depends_on Docker Compose Depends On] | ||
* [https://docs.docker.com/compose/compose-file/compose-file-v3/#dns_search Docker Compose DNS Search] | * [https://docs.docker.com/compose/compose-file/compose-file-v3/#dns_search Docker Compose DNS Search] | ||
* [https://docs.docker.com/compose/compose-file/compose-file-v3/#extra_hosts Docker Compose Extra Hosts] | |||
* [https://docs.docker.com/compose/compose-file/compose-file-v3/#env_file Docker Compose Env File] | |||
* [https://docs.docker.com/compose/compose-file/compose-file-v3/#logging Docker Compose Logging] | |||
* [https://docs.docker.com/compose/compose-file/compose-file-v3/#expose Docker Compose Expose] | |||
* [https://docs.docker.com/compose/compose-file/compose-file-v3/#deploy Docker Compose Deploy] | * [https://docs.docker.com/compose/compose-file/compose-file-v3/#deploy Docker Compose Deploy] | ||
* [https://docs.docker.com/compose/compose-file/compose-file-v3/#devices Docker Compose Device] | * [https://docs.docker.com/compose/compose-file/compose-file-v3/#devices Docker Compose Device] | ||
* [https://docs.docker.com/compose/compose-file/compose-file-v3/#dns Docker Compose DNS] | * [https://docs.docker.com/compose/compose-file/compose-file-v3/#dns Docker Compose DNS] | ||
| valign="top" | | |||
* [https://stackoverflow.com/questions/49718431/ <code>docker-compose.yml</code> file naming convention] | |||
* [https://docs.docker.com/compose/compose-file/compose-file-v3/#aliases Docker Compose Service Host Name Alias] | |||
* [https://www.sandtable.com/reduce-docker-image-sizes-using-alpine/ Reduce Docker image sizes using Alpine] | |||
* [https://docs.docker.com/compose/environment-variables/ Docker Compose Environment Variables] | |||
* [[Build LDAP Docker Image from Ubuntu]] | |||
* [https://docs.docker.com/develop/develop-images/dockerfile_best-practices/ Best practices for writing Dockerfiles] | |||
* [https://docs.docker.com/compose/compose-file/compose-file-v3/#ipv4_address-ipv6_address Docker Compose Specify a static IP] | |||
* [https://stackoverflow.com/questions/8058793/ Single Line Python Webserver] | |||
* [https://stackoverflow.com/questions/31222377/ Reduce Docker Image Size] | |||
* [https://stackoverflow.com/questions/37195222/ Docker Compose View Log] | |||
|- | |||
| colspan="3" | | |||
---- | |||
|- | |||
| valign="top" | | |||
* [https://adhoctuts.com/run-mulitple-databases-in-single-machine-using-docker-vagrant/ Run MySQL, Oracle, MSSQL, PostgreSQL & MongoDB] | |||
* [https://devopscube.com/reduce-docker-image-size/ Reduce Docker Image Size: 6 Optimal Methods] | |||
* [https://github.com/MariaDB/mariadb-docker/issues/15 Support MariaDB Multiple databases in Docker] | |||
* [https://www.baeldung.com/linux/docker-multiple-databases Use Multiple Databases with Docker Compose] | |||
* [https://medium.com/@TimvanBaarsen/how-to-connect-to-the-docker-host-from-inside-a-docker-container-112b4c71bc66 Connect to the Docker host from a Container] | |||
* [https://stackoverflow.com/questions/50173296/ MariaDB Multiple databases in Docker] | |||
* [https://kitloong.medium.com/how-to-run-sql-server-2019-on-macbook-pro-m1-d1448525f805 SQL Server 2019 on MacBook Pro M1] | |||
* [https://github.com/oracle/docker-images Docker Images from Oracle] | |||
* [https://docs.docker.com/develop/develop-images/multistage-build/ Docker Multi-Stage builds] | |||
* [[Java Remote Debug]] | |||
| valign="top" | | |||
* [https://medium.com/@TimvanBaarsen/how-to-connect-to-the-docker-host-from-inside-a-docker-container-112b4c71bc66 Docker » Host » <code>host.docker.internal</code>] | |||
* [https://stackoverflow.com/questions/35689628/ Docker » Alpine Shell Access] | |||
* [https://stackoverflow.com/questions/43099408/ Docker » Stack vs. Compose] | |||
* [[Docker/Compose/GitLab|Docker » Compose » GitLab]] | |||
* [https://docs.docker.com/engine/reference/commandline/checkpoint/ Docker » Checkpoint] | |||
* [[Dockerized PostgreSQL|Docker » PostgreSQL]] | |||
* [https://docs.docker.com/engine/reference/commandline/commit/ Docker » Commit] | |||
| valign="top" | | |||
|} | |} |
Latest revision as of 22:42, 25 September 2024
npm install yarn@latest -g
yarn global add serve
serve -s target
:'
┌──────────────────────────────────────────────────┐
│ │
│ Serving! │
│ │
│ - Local: http://localhost:5000 │
│ - On Your Network: http://10.20.13.10:5000 │
│ │
│ Copied local address to clipboard! │
│ │
└──────────────────────────────────────────────────┘
'
|
sudo apt install build-essential libssl-dev libffi-dev\
libgmp3-dev libpq-dev python-is-python3\
python3-dev python3-pip python3-venv
ip -o route get to 8.8.8.8 | sed -n 's/.*src \([0-9.]\+\).*/\1/p'
nohup python3 -m http.server 5000 2> /dev/null >&1 &
:'
[1] 226938
'
kill -9 $(lsof -t -i:5000)
|
Dockerfile
FROM openjdk:8-jdk-alpine
ENV CHORKE_HOME='/var/chorke'\
SPRING_PROFILES_ACTIVE=docker\
CHORKE_DS_POOLNAME='java:jboss/datasources/H2_http_spider_devDS'\
CHORKE_DS_JDBC_URL='jdbc:h2:file:${user.home}/.chorke/academia/var/h2/${academia.datasource.database};\
db_close_on_exit=false;mode=MySQL;user=${academia.datasource.username};password=${academia.datasource.password}'\
CHORKE_DS_DBDRIVER='org.h2.Driver'\
CHORKE_DS_DATABASE='academia'\
CHORKE_DS_USERNAME='academia'\
CHORKE_DS_PASSWORD='academia'\
CHORKE_DS_SQLQUERY='SELECT 1'\
CHORKE_H2_WEBADMIN='false'\
CHORKE_H2_ALLOWALL='false'\
CHORKE_JPA_DIALECT='org.hibernate.dialect.H2Dialect'\
CHORKE_JPA_SHOWSQL='false'\
CHORKE_GQL_ENABLED='true'\
CHORKE_GQL_BROWSER='true'\
CHORKE_LIQ_ENABLED='true'\
CHORKE_LIQ_CONTEXT='dev'\
CHORKE_LOG_ROLLING='WARN'\
CHORKE_LOG_CONSOLE='OFF'\
CHORKE_REQ_CONTEXT='/crawler'
# COPY ./*.jar $CHORKE_HOME/chorke.jar
# RUN chmod 644 -R $CHORKE_HOME &&\
# chmod 755 $CHORKE_HOME/chorke.jar
RUN mkdir $CHORKE_HOME &&\
chmod 644 -R $CHORKE_HOME &&\
apk add --no-cache curl &&\
curl -s http://10.20.13.10:5000/chorke.jar -o $CHORKE_HOME/chorke.jar &&\
chmod 755 $CHORKE_HOME/chorke.jar
VOLUME ["$HOME/.chorke/academia"]
WORKDIR $CHORKE_HOME
EXPOSE 1983
ENTRYPOINT ["java", "-jar", "chorke.jar"]
Keep in mind COPY and RUN command create same size of images layer twice. For this case if COPY created 118MB layer then RUN command will be created another same size of layer. It's means another 118MB layer will be added in your image. We should avoid COPY command rather we should use CURL inside RUN command to copy jar file from maven repository. That will reduce another 118MB from your image.
Example: present image size => 105MB [FROM] + 118MB [COPY] + 118MB [RUN] => 340MB reduced image size => 105MB [FROM] + 0MB [COPY] + 119MB [RUN] => 224MB
docker-compose.yml
version: "3.9"
services:
app:
build:
context: .
dockerfile: Dockerfile
container_name: crawler_app
image: chorke/crawler:1.0.00
extra_hosts:
- "host.docker.internal:host-gateway"
networks:
default:
aliases:
- app.academia.chorke.org
ports:
- "127.0.0.1:1983:1983"
labels:
org.chorke.academia.http.spider: "Academia Web Crawler"
depends_on:
- redis
- db
environment:
- CHORKE_DS_POOLNAME=java:jboss/datasources/PG_http_spider_devDS
- CHORKE_DS_JDBC_URL=jdbc:postgresql://db:5432/academia
- CHORKE_DS_DBDRIVER=org.postgresql.Driver
- CHORKE_DS_DATABASE=academia
- CHORKE_DS_USERNAME=academia
- CHORKE_DS_PASSWORD=academia
- CHORKE_DS_SQLQUERY=SELECT 1
- CHORKE_H2_WEBADMIN=false
- CHORKE_H2_ALLOWALL=false
- CHORKE_JPA_DIALECT=org.hibernate.dialect.PostgreSQLDialect
- CHORKE_JPA_SHOWSQL=false
- CHORKE_GQL_ENABLED=true
- CHORKE_GQL_BROWSER=true
- CHORKE_LIQ_ENABLED=true
- CHORKE_LIQ_CONTEXT=dev
- CHORKE_LOG_ROLLING=WARN
- CHORKE_LOG_CONSOLE=OFF
- CHORKE_REQ_CONTEXT=/crawler
redis:
container_name: crawler_redis
image: 'redis:6.0.10-alpine'
networks:
default:
aliases:
- redis.academia.chorke.org
db:
image: 'postgres:13.1-alpine'
container_name: crawler_psql
environment:
- POSTGRES_PASSWORD=academia
- POSTGRES_USER=academia
- POSTGRES_DB=academia
networks:
default:
aliases:
- db.academia.chorke.org
networks:
default:
ipam:
config:
- subnet: 10.20.21.0/24
application-docker.yml
################################################################################
# application snake yaml properties
################################################################################
academia:
datasource:
url: ${CHORKE_DS_JDBC_URL}
database: ${CHORKE_DS_DATABASE}
username: ${CHORKE_DS_USERNAME}
password: ${CHORKE_DS_PASSWORD}
poolname: ${CHORKE_DS_POOLNAME}
server:
servlet:
contextPath: ${CHORKE_REQ_CONTEXT}
spring:
datasource:
driver-class-name: ${CHORKE_DS_DBDRIVER}
hikari:
connection-test-query: ${CHORKE_DS_SQLQUERY}
################################################################################
# built on: Sat, Oct 10 2020, 10:10 +0000 by: [email protected]
################################################################################
application-docker.properties
################################################################################
# application properties
################################################################################
spring.jpa.properties.hibernate.dialect: ${CHORKE_JPA_DIALECT}
spring.jpa.properties.hibernate.format_sql: true
spring.jpa.show-sql: ${CHORKE_JPA_SHOWSQL}
spring.h2.console.settings.web-allow-others: ${CHORKE_H2_ALLOWALL}
spring.h2.console.enabled: ${CHORKE_H2_WEBADMIN}
graphql.servlet.enabled: ${CHORKE_GQL_ENABLED}
graphiql.enabled: ${CHORKE_GQL_BROWSER}
spring.liquibase.enabled: ${CHORKE_LIQ_ENABLED}
spring.liquibase.contexts: ${CHORKE_LIQ_CONTEXT}
################################################################################
# built on: Sat, Oct 10 2020, 10:10 +0000 by: [email protected]
################################################################################
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Properties>
<Property name="academia.log.format">%d{MMM dd, yyyy HH:mm:ss a} %c [METHOD: %M , LINE: %L]%n[%-5p][%t] %m%n</Property>
<Property name="academia.log.file.gz">${academia.log.dir}/%d{yyyyMM}/SPIDER-%d{yyyyMMdd}-%i.log.gz</Property>
<Property name="academia.log.dir">${sys:user.home}/.chorke/academia/var/log/http</Property>
<Property name="academia.log.rolling">${env:CHORKE_LOG_ROLLING:-INFO}</Property>
<Property name="academia.log.console">${env:CHORKE_LOG_CONSOLE:-INFO}</Property>
<Property name="academia.log.file">${academia.log.dir}/SPIDER.log</Property>
</Properties>
<Appenders>
<RollingFile name="rolling" fileName="${academia.log.file}" filePattern="${academia.log.file.gz}" ignoreExceptions="false">
<PatternLayout pattern="${academia.log.format}"/>
<Policies>
<SizeBasedTriggeringPolicy size="10 MB"/>
<TimeBasedTriggeringPolicy interval="1"/>
<OnStartupTriggeringPolicy />
</Policies>
<DefaultRolloverStrategy max="20"/>
</RollingFile>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="${academia.log.format}"/>
</Console>
<Async name="async" includeLocation="true">
<AppenderRef ref="console" level="${academia.log.console}"/>
<AppenderRef ref="rolling" level="${academia.log.rolling}"/>
</Async>
</Appenders>
<Loggers>
<Logger name="org.chorke.academia.http.spider.mapper" level="WARN"/>
<Logger name="springfox.documentation" level="WARN"/>
<Logger name="edu.uci.ics.crawler4j" level="ERROR"/>
<Logger name="org.apache.activemq" level="WARN"/>
<Logger name="org.chorke.academia" level="INFO"/>
<Logger name="org.springframework" level="WARN"/>
<Logger name="org.apache.camel" level="WARN"/>
<Logger name="org.thymeleaf" level="WARN"/>
<Logger name="javax.servlet" level="WARN"/>
<Logger name="bitronix.tm" level="WARN"/>
<Logger name="org.jasypt" level="WARN"/>
<Logger name="org.quartz" level="WARN"/>
<Logger name="com.zaxxer" level="WARN"/>
<Root level="INFO">
<AppenderRef ref="async"/>
</Root>
</Loggers>
</Configuration>
Knowledge
docker \ run --detach \ --name crawler \ --publish 1983:1983 \ chorke/crawler:1.0.00 docker compose up docker compose up -d docker compose logs -f -t docker logs crawler docker logs -f crawler docker exec -it crawler /bin/sh docker inspect crawler_app|grep compose docker build --rm -t 'chorke/crawler:1.0.00' -f ./Dockerfile . docker run --name='crawler' -d -p 1983:1983 chorke/crawler:1.0.00 docker run --rm --name='crawler' -d -p 1983:1983 chorke/crawler:1.0.00 docker run --rm --name='crawler' -d -p 1983:1983 hub.chorke.org/chorke/crawler:1.0.00
docker push and pull docker login reg.chorke.org -u academia -p sadaqah! docker tag chorke/crawler:1.0.00 reg.chorke.org/chorke/crawler:1.0.00 docker push reg.chorke.org/chorke/crawler:1.0.00 docker login hub.chorke.org -u academia -p sadaqah! docker pull hub.chorke.org/chorke/crawler:1.0.00 docker tag hub.chorke.org/chorke/crawler:1.0.00 chorke/crawler:1.0.00 docker rmi hub.chorke.org/chorke/crawler:1.0.00
docker logout hub.chorke.org docker logout reg.chorke.org
docker \ run --detach \ --name crawler \ --publish 1983:1983 \ hub.chorke.org/chorke/crawler:1.0.00 docker exec -it crawler /bin/sh
nodejs static web server for curl npm install yarn@latest -g yarn global add serve serve -s target
if [[ "$(</proc/sys/kernel/osrelease)" == *microsoft* ]];then echo 'WSL enabled';fi
if grep -qEi '(Microsoft|WSL)' /proc/version &>/dev/null;then echo 'WSL enabled';fi
if [[ "$(</proc/version)" == *microsoft* ]];then echo 'WSL enabled';fi