mirror of
https://github.com/coderaiser/cloudcmd.git
synced 2026-01-23 02:35:49 +00:00
feature(docker) add Dockerfile for arm based clients such as rpi (#268)
This commit is contained in:
parent
a4c8736663
commit
7fcc860bea
8 changed files with 157 additions and 38 deletions
|
|
@ -11,8 +11,7 @@ yarn-error.log
|
||||||
yarn.lock
|
yarn.lock
|
||||||
now.json
|
now.json
|
||||||
|
|
||||||
Dockerfile
|
docker
|
||||||
Dockerfile.alpine
|
|
||||||
|
|
||||||
webpack.config.js
|
webpack.config.js
|
||||||
cssnano.config.js
|
cssnano.config.js
|
||||||
|
|
|
||||||
79
.madrun.js
79
.madrun.js
|
|
@ -57,12 +57,22 @@ module.exports = {
|
||||||
'wisdom:type': () => 'bin/release.js',
|
'wisdom:type': () => 'bin/release.js',
|
||||||
'docker:pull:node': () => 'docker pull node',
|
'docker:pull:node': () => 'docker pull node',
|
||||||
'docker:pull:alpine': () => 'docker pull mhart/alpine-node',
|
'docker:pull:alpine': () => 'docker pull mhart/alpine-node',
|
||||||
'docker:push': () => `docker push coderaiser/cloudcmd:${version}`,
|
'docker:pull:arm32': () => 'docker pull arm32v7/node:slim',
|
||||||
'docker:push:latest': () => 'docker push coderaiser/cloudcmd:latest',
|
'docker:pull:arm64': () => 'docker pull arm64v8/node:slim',
|
||||||
'docker:push:alpine': () => `docker push coderaiser/cloudcmd:${version}-alpine`,
|
'docker:push': () => dockerPush('x64', version),
|
||||||
'docker:push:alpine:latest': () => 'docker push coderaiser/cloudcmd:latest-alpine',
|
'docker:push:latest': () => dockerPush('x64'),
|
||||||
'docker:build': () => `docker build -t coderaiser/cloudcmd:${version} .`,
|
'docker:push:alpine': () => dockerPush('alpine', version),
|
||||||
'docker:build:alpine': () => `docker build -f Dockerfile.alpine -t coderaiser/cloudcmd:${version}-alpine .`,
|
'docker:push:alpine:latest': () => dockerPush('alpine'),
|
||||||
|
'docker:push:arm32': () => dockerPush('arm32', version),
|
||||||
|
'docker:push:arm32:latest': () => dockerPush('arm32'),
|
||||||
|
'docker:push:arm64': () => dockerPush('arm64', version),
|
||||||
|
'docker:push:arm64:latest': () => dockerPush('arm64'),
|
||||||
|
'docker:build': () => dockerBuild('docker/Dockerfile', 'x64', version),
|
||||||
|
'docker:build:alpine': () => dockerBuild('docker/Dockerfile.alpine', 'alpine', version),
|
||||||
|
'docker:build:arm32': () => dockerBuild('docker/arm/Dockerfile.arm32v7', 'arm32', version),
|
||||||
|
'docker:build:arm64': () => dockerBuild('docker/arm/Dockerfile.arm64v8', 'arm64', version),
|
||||||
|
'docker:manifest:create': () => 'docker manifest create coderaiser/cloudcmd:latest coderaiser/cloudcmd:latest-x64 coderaiser/cloudcmd:latest-arm32 coderaiser/cloudcmd:latest-arm64',
|
||||||
|
'docker:manifest:push': () => 'docker manifest push coderaiser/cloudcmd:latest',
|
||||||
'docker': () => run(['docker:pull*', 'docker:build*', 'docker:tag*', 'docker:push*']),
|
'docker': () => run(['docker:pull*', 'docker:build*', 'docker:tag*', 'docker:push*']),
|
||||||
'docker-ci': () => run(['build', 'docker-login', 'docker']),
|
'docker-ci': () => run(['build', 'docker-login', 'docker']),
|
||||||
'docker-login': () => 'docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD',
|
'docker-login': () => 'docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD',
|
||||||
|
|
@ -75,12 +85,39 @@ module.exports = {
|
||||||
'docker:push:alpine:latest',
|
'docker:push:alpine:latest',
|
||||||
]),
|
]),
|
||||||
|
|
||||||
'docker:tag': () => `docker tag coderaiser/cloudcmd:${version} coderaiser/cloudcmd:latest`,
|
'docker:arm32': () => run([
|
||||||
'docker:tag:alpine': () => `docker tag coderaiser/cloudcmd:${version}-alpine coderaiser/cloudcmd:latest-alpine`,
|
'docker:pull:arm32',
|
||||||
'docker:rm:version': () => `docker rmi -f coderaiser/cloudcmd:${version}`,
|
'docker:build:arm32',
|
||||||
'docker:rm:latest': () => 'docker rmi -f coderaiser/cloudcmd:latest',
|
'docker:tag:arm32',
|
||||||
'docker:rm:alpine': () => `docker rmi -f coderaiser/cloudcmd:${version}-alpine`,
|
'docker:push:arm32',
|
||||||
'docker:rm:latest-alpine': () => 'docker rmi -f coderaiser/cloudcmd:latest-alpine',
|
'docker:push:arm32:latest',
|
||||||
|
]),
|
||||||
|
|
||||||
|
'docker:arm64': () => run([
|
||||||
|
'docker:pull:arm64',
|
||||||
|
'docker:build:arm64',
|
||||||
|
'docker:tag:arm64',
|
||||||
|
'docker:push:arm64',
|
||||||
|
'docker:push:arm64:latest',
|
||||||
|
]),
|
||||||
|
|
||||||
|
'docker:manifest': () => run([
|
||||||
|
'docker:manifest:create',
|
||||||
|
'docker:manifest:push',
|
||||||
|
]),
|
||||||
|
|
||||||
|
'docker:tag': () => dockerTag('x64', version),
|
||||||
|
'docker:tag:alpine': () => dockerTag('alpine', version),
|
||||||
|
'docker:tag:arm32': () => dockerTag('arm32', version),
|
||||||
|
'docker:tag:arm64': () => dockerTag('arm64', version),
|
||||||
|
'docker:rm:version': () => dockerRmi('x64', version),
|
||||||
|
'docker:rm:latest': () => dockerRmi('x64'),
|
||||||
|
'docker:rm:alpine': () => dockerRmi('alpine', version),
|
||||||
|
'docker:rm:latest-alpine': () => dockerRmi('alpine'),
|
||||||
|
'docker:rm:arm32': () => dockerRmi('arm32', version),
|
||||||
|
'docker:rm:latest-arm32': () => dockerRmi('arm32'),
|
||||||
|
'docker:rm:arm64': () => dockerRmi('arm64', version),
|
||||||
|
'docker:rm:latest-arm64': () => dockerRmi('arm64'),
|
||||||
'docker:rm-old': () => `${parallel('docker:rm:*')} || true`,
|
'docker:rm-old': () => `${parallel('docker:rm:*')} || true`,
|
||||||
'coverage': () => `${env} nyc ${run('test:base')}`,
|
'coverage': () => `${env} nyc ${run('test:base')}`,
|
||||||
'report': () => 'nyc report --reporter=text-lcov | coveralls',
|
'report': () => 'nyc report --reporter=text-lcov | coveralls',
|
||||||
|
|
@ -89,7 +126,7 @@ module.exports = {
|
||||||
'6to5:client:dev': () => `NODE_ENV=development ${run('6to5', '--mode development')}`,
|
'6to5:client:dev': () => `NODE_ENV=development ${run('6to5', '--mode development')}`,
|
||||||
'pre6to5:client': () => 'rimraf dist',
|
'pre6to5:client': () => 'rimraf dist',
|
||||||
'pre6to5:client:dev': () => 'rimraf dist-dev',
|
'pre6to5:client:dev': () => 'rimraf dist-dev',
|
||||||
'watch:client': () => run('6to5:client','--watch'),
|
'watch:client': () => run('6to5:client', '--watch'),
|
||||||
'watch:client:dev': () => run('6to5:client:dev', '--watch'),
|
'watch:client:dev': () => run('6to5:client:dev', '--watch'),
|
||||||
'watch:server': () => 'nodemon bin/cloudcmd.js',
|
'watch:server': () => 'nodemon bin/cloudcmd.js',
|
||||||
'watch:lint': () => `nodemon -w client -w server -w webpack.config.js -x ${run('lint')}`,
|
'watch:lint': () => `nodemon -w client -w server -w webpack.config.js -x ${run('lint')}`,
|
||||||
|
|
@ -102,3 +139,19 @@ module.exports = {
|
||||||
'build:client:dev': () => run('6to5:client:dev'),
|
'build:client:dev': () => run('6to5:client:dev'),
|
||||||
'heroku-postbuild': () => run('6to5:client'),
|
'heroku-postbuild': () => run('6to5:client'),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function dockerPush(type, version = 'latest') {
|
||||||
|
return `docker push coderaiser/cloudcmd:${version}-${type}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function dockerBuild(file, type, version) {
|
||||||
|
return `docker build -f ${file} -t coderaiser/cloudcmd:${version}-${type} .`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function dockerTag(type, version) {
|
||||||
|
return `docker tag coderaiser/cloudcmd:${version}-${type} coderaiser/cloudcmd:latest-${type}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function dockerRmi(type, version = 'latest') {
|
||||||
|
return `docker rmi -f coderaiser/cloudcmd:${version}-${type}`;
|
||||||
|
}
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
*.spec.js
|
*.spec.js
|
||||||
*.fixture.js*
|
*.fixture.js*
|
||||||
manifest.yml
|
manifest.yml
|
||||||
Dockerfile*
|
docker
|
||||||
docker-compose.yml
|
docker-compose.yml
|
||||||
test
|
test
|
||||||
fixture
|
fixture
|
||||||
|
|
|
||||||
45
.travis.yml
45
.travis.yml
|
|
@ -1,20 +1,20 @@
|
||||||
language: node_js
|
language: node_js
|
||||||
node_js:
|
node_js:
|
||||||
- 13
|
- 13
|
||||||
- 12
|
- 12
|
||||||
- 10
|
- 10
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
npm: false
|
npm: false
|
||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
allow_failures:
|
allow_failures:
|
||||||
- os: windows
|
- os: windows
|
||||||
|
|
||||||
os:
|
os:
|
||||||
- linux
|
- linux
|
||||||
- osx
|
- osx
|
||||||
- windows
|
- windows
|
||||||
|
|
||||||
# https://docs.travis-ci.com/user/customizing-the-build/#git-end-of-line-conversion-control
|
# https://docs.travis-ci.com/user/customizing-the-build/#git-end-of-line-conversion-control
|
||||||
# need for windows
|
# need for windows
|
||||||
|
|
@ -26,22 +26,27 @@ script:
|
||||||
- npm run lint && npm run build && npm run coverage && npm run report
|
- npm run lint && npm run build && npm run coverage && npm run report
|
||||||
|
|
||||||
notifications:
|
notifications:
|
||||||
email:
|
email:
|
||||||
on_success: never
|
on_success: never
|
||||||
on_failure: change
|
on_failure: change
|
||||||
|
|
||||||
sudo: required
|
sudo: required
|
||||||
|
|
||||||
services:
|
services:
|
||||||
- docker
|
- docker
|
||||||
|
|
||||||
deploy:
|
before_deploy:
|
||||||
provider: script
|
- echo '{"experimental":"enabled"}' | sudo tee /etc/docker/daemon.json
|
||||||
script: npm run docker-ci
|
- mkdir -p $HOME/.docker
|
||||||
skip_cleanup: true
|
- echo '{"experimental":"enabled"}' | sudo tee $HOME/.docker/config.json
|
||||||
on:
|
- sudo service docker start
|
||||||
node: '10'
|
|
||||||
condition: $TRAVIS_OS_NAME = linux
|
|
||||||
tags: true
|
|
||||||
all_branches: false
|
|
||||||
|
|
||||||
|
deploy:
|
||||||
|
provider: script
|
||||||
|
script: npm run docker-ci
|
||||||
|
skip_cleanup: true
|
||||||
|
on:
|
||||||
|
node: "10"
|
||||||
|
condition: $TRAVIS_OS_NAME = linux
|
||||||
|
tags: true
|
||||||
|
all_branches: false
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
FROM node
|
FROM node
|
||||||
MAINTAINER Coderaiser
|
LABEL maintainer="Coderaiser"
|
||||||
|
|
||||||
RUN mkdir -p /usr/src/app
|
RUN mkdir -p /usr/src/app
|
||||||
WORKDIR /usr/src/app
|
WORKDIR /usr/src/app
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
FROM node:alpine
|
FROM node:alpine
|
||||||
MAINTAINER Coderaiser
|
LABEL maintainer="Coderaiser"
|
||||||
|
|
||||||
RUN mkdir -p /usr/src/app
|
RUN mkdir -p /usr/src/app
|
||||||
WORKDIR /usr/src/app
|
WORKDIR /usr/src/app
|
||||||
31
docker/arm/Dockerfile.arm32v7
Normal file
31
docker/arm/Dockerfile.arm32v7
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
# Dockerfile to be used in an ARMv7 environment like Raspverry PI 4
|
||||||
|
FROM arm32v7/node:slim
|
||||||
|
LABEL maintainer="Coderaiser, tea-mo903"
|
||||||
|
|
||||||
|
RUN mkdir -p /usr/src/app
|
||||||
|
WORKDIR /usr/src/app
|
||||||
|
|
||||||
|
COPY package.json /usr/src/app/
|
||||||
|
|
||||||
|
RUN apt-get update && apt-get -y install python3 make g++
|
||||||
|
|
||||||
|
ENV PYTHON python3
|
||||||
|
|
||||||
|
RUN npm config set package-lock false && \
|
||||||
|
npm install --production && \
|
||||||
|
npm i gritty && \
|
||||||
|
npm cache clean --force
|
||||||
|
|
||||||
|
RUN apt-get -y remove --purge python3 make g++
|
||||||
|
|
||||||
|
COPY . /usr/src/app
|
||||||
|
|
||||||
|
WORKDIR /
|
||||||
|
|
||||||
|
ENV cloudcmd_terminal true
|
||||||
|
ENV cloudcmd_terminal_path gritty
|
||||||
|
ENV cloudcmd_open false
|
||||||
|
|
||||||
|
EXPOSE 8000
|
||||||
|
|
||||||
|
ENTRYPOINT ["/usr/src/app/bin/cloudcmd.js"]
|
||||||
31
docker/arm/Dockerfile.arm64v8
Normal file
31
docker/arm/Dockerfile.arm64v8
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
# Dockerfile to be used in an ARMv7 environment like Raspverry PI 4
|
||||||
|
FROM arm64v8/node:slim
|
||||||
|
LABEL maintainer="Coderaiser, tea-mo903"
|
||||||
|
|
||||||
|
RUN mkdir -p /usr/src/app
|
||||||
|
WORKDIR /usr/src/app
|
||||||
|
|
||||||
|
COPY package.json /usr/src/app/
|
||||||
|
|
||||||
|
RUN apt-get update && apt-get -y install python3 make g++
|
||||||
|
|
||||||
|
ENV PYTHON python3
|
||||||
|
|
||||||
|
RUN npm config set package-lock false && \
|
||||||
|
npm install --production && \
|
||||||
|
npm i gritty && \
|
||||||
|
npm cache clean --force
|
||||||
|
|
||||||
|
RUN apt-get -y remove --purge python3 make g++
|
||||||
|
|
||||||
|
COPY . /usr/src/app
|
||||||
|
|
||||||
|
WORKDIR /
|
||||||
|
|
||||||
|
ENV cloudcmd_terminal true
|
||||||
|
ENV cloudcmd_terminal_path gritty
|
||||||
|
ENV cloudcmd_open false
|
||||||
|
|
||||||
|
EXPOSE 8000
|
||||||
|
|
||||||
|
ENTRYPOINT ["/usr/src/app/bin/cloudcmd.js"]
|
||||||
Loading…
Add table
Add a link
Reference in a new issue