diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0662cee --- /dev/null +++ b/.gitignore @@ -0,0 +1,392 @@ +### Gradle ### +.gradle +build/ + +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Cache of project +.gradletasknamecache + +# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 +# gradle/wrapper/gradle-wrapper.properties + +### Gradle Patch ### +**/build/ + +### Intellij ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Intellij Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# Sonarlint plugin +.idea/sonarlint + + +### Intellij+iml ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Intellij+iml Patch ### +# Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-249601023 + +*.iml +modules.xml +.idea/misc.xml +*.ipr + +### Maven ### +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +.mvn/wrapper/maven-wrapper.jar +.flattened-pom.xml + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Intellij Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# Sonarlint plugin +.idea/sonarlint + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +### Node Patch ### +# Serverless Webpack directories +.webpack/ + +# Optional stylelint cache + +# SvelteKit build / generate output +.svelte-kit + + +### yarn ### + +.yarn/* +!.yarn/releases +!.yarn/patches +!.yarn/plugins +!.yarn/sdks +!.yarn/versions + +# if you are NOT using Zero-installs, then: +# comment the following lines +!.yarn/cache + +# and uncomment the following lines +# .pnp.* diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/checkstyle-idea.xml b/.idea/checkstyle-idea.xml new file mode 100644 index 0000000..4d61831 --- /dev/null +++ b/.idea/checkstyle-idea.xml @@ -0,0 +1,16 @@ + + + + 10.15.0 + JavaOnly + true + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..05a5805 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,12 @@ +FROM alpine +LABEL com.isharkfly.image.authors="huyuchengus@gmail.com" + +RUN apk update +RUN apk add supervisor +RUN apk add nginx + +RUN mkdir -p /var/log/supervisor +COPY deploy/supervisord.conf /etc/supervisor/conf.d/supervisord.conf + +ENTRYPOINT ["supervisord", "--nodaemon", "--configuration", "/etc/supervisor/conf.d/supervisord.conf"] +# CMD ["/usr/bin/supervisord" , "-c", "/etc/supervisor/conf.d/supervisord.conf"] \ No newline at end of file diff --git a/LICENSE b/LICENSE index 8386990..a013c54 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2024 YuCheng Hu +Copyright (c) 2024 iSharkFly Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 3b61cc4..9b0bf68 100644 --- a/README.md +++ b/README.md @@ -1 +1,52 @@ -# Docker-Alpine-Supervisord \ No newline at end of file +# Docker Alpine Supervisord + +A lightweight Docker image running [Supervisor][supervisor] on [Alpine Linux][alpine] to monitor processes. +Supervisor makes it easy to [run and monitor multiple processes][supervisor-run]. + +## Build Docker Image +Then build and run the image: + +```sh +docker build -f Dockerfile -t alpine-supervisord:0.0.1 --label alpine-supervisord . +``` + + +## Run Docker +```bash +docker run -it --rm alpine-supervisord:0.0.1 +``` + +You will see the output of docker run. + +```bash +PS D:\WorkDir\Repository\HoneyMoose\Docker-Alpine-Supervisord> docker run -it --rm alpine-supervisord:0.0.1 +2024-05-15 02:57:11,742 CRIT Supervisor is running as root. Privileges were not dropped because no user is specified in the config file. If you intend to run as root, you can set user=root in the config file to avoid this message. +2024-05-15 02:57:11,744 INFO supervisord started with pid 1 +2024-05-15 02:57:12,746 INFO spawned: 'nginx_00' with pid 7 +2024-05-15 02:57:13,748 INFO success: nginx_00 entered RUNNING state, process has stayed up for > than 0 seconds (startsecs) +``` + +## Demo +On folder nginx-spring, we provide a demo can run nginx and spring boot application a the same docker container. + +You need to copy the supervisord.conf file replace in deploy folder. + +## Community +* [Join us](https://www.isharkfly.com/c/computer-technology/system-and-container/25) + +# 联系方式 + +请使用下面的联系方式和我们联系: + +| 联系方式名称 | 联系方式 | +|---------|-----------------------------------------------| +| 电子邮件 | [service@ossez.com](mailto:service@ossez.com) | +| 微信和QQ同号 | 103899765 | +| 社区论坛 | https://www.isharkfly.com/ | + + +[supervisor]: http://supervisord.org/ +[supervisor-run]: http://supervisord.org/running.html +[supervisor-config]: http://supervisord.org/configuration.html +[alpine]: http://www.alpinelinux.org/ +[dockerhub]: https://hub.docker.com/ diff --git a/deploy/supervisord.conf b/deploy/supervisord.conf new file mode 100644 index 0000000..3fe1a8a --- /dev/null +++ b/deploy/supervisord.conf @@ -0,0 +1,13 @@ +[supervisord] +nodaemon=true + +[program:nginx] +command=nginx -g 'daemon off;' +process_name=%(program_name)s_%(process_num)02d +numprocs=1 +autostart=true +autorestart=false +startsecs=0 +redirect_stderr=true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 \ No newline at end of file diff --git a/nginx-spring/Dockerfile b/nginx-spring/Dockerfile new file mode 100644 index 0000000..2a7c9e4 --- /dev/null +++ b/nginx-spring/Dockerfile @@ -0,0 +1,28 @@ +FROM eclipse-temurin:17-alpine +LABEL com.isharkfly.image.authors="huyuchengus@gmail.com" + +RUN apk add nginx +RUN apk add supervisor + +## DOCKER VOLUME +VOLUME /tmp + +## API +COPY api/target/*.jar /usr/share/app/app.jar + +## UI +COPY ui/dist/ /usr/share/nginx/html/ +RUN rm /etc/nginx/nginx.conf +COPY deploy/nginx.conf /etc/nginx/nginx.conf + + +## DOCKER START +Expose 80 443 + +RUN mkdir -p /var/log/supervisor +COPY deploy/supervisord.conf /etc/supervisor/conf.d/supervisord.conf +CMD ["/usr/bin/supervisord" , "-c", "/etc/supervisor/conf.d/supervisord.conf"] + +# ENTRYPOINT ["java","-jar","/usr/share/app/app.jar"] +# CMD ["nginx", "-g", "daemon off;"] +# CMD ["sh", "-c", "nginx -g 'daemon off;' & /usr/share/app/app.jar"] \ No newline at end of file diff --git a/nginx-spring/supervisord.conf b/nginx-spring/supervisord.conf new file mode 100644 index 0000000..4f40fec --- /dev/null +++ b/nginx-spring/supervisord.conf @@ -0,0 +1,24 @@ +[supervisord] +nodaemon=true + +[program:nginx] +command=nginx -g 'daemon off;' +process_name=%(program_name)s_%(process_num)02d +numprocs=1 +autostart=true +autorestart=false +startsecs=0 +redirect_stderr=true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 + +[program:app] +command=java -jar usr/share/app/app.jar +process_name=%(program_name)s_%(process_num)02d +numprocs=1 +autostart=true +autorestart=false +startsecs=0 +redirect_stderr=true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 \ No newline at end of file