Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
108 commits
Select commit Hold shift + click to select a range
e05cbb9
first Makefile
panaC Jan 4, 2022
5354c35
up run
panaC Jan 5, 2022
14d114a
up Makefile build and run
panaC Jan 5, 2022
c7a4a30
README
panaC Jan 5, 2022
5fc1940
README
panaC Jan 5, 2022
2bff06a
improve run
panaC Jan 5, 2022
981a083
fix run script
panaC Jan 5, 2022
4242334
fix rm
panaC Jan 6, 2022
ac2ee7f
move frontend/manage to build dir
panaC Jan 6, 2022
831a9e9
first docker frontend
panaC Jan 6, 2022
ed15845
up frontend
panaC Jan 6, 2022
20abc28
fix linux/mac sed
panaC Jan 6, 2022
b33f1f1
up frontend Dockerfile
panaC Jan 7, 2022
072c496
up docker
panaC Jan 7, 2022
9d009c3
gix gitignore
panaC Jan 7, 2022
fe3cc76
fix docker frontend
panaC Jan 7, 2022
c722cdb
up
panaC Jan 7, 2022
6f6fb1a
add some config
panaC Jan 10, 2022
fd93e4c
lcp server + frontend fixes
panaC Jan 10, 2022
40c6265
lsd docker + lcp fixes
panaC Jan 10, 2022
38adc9f
some fixes
panaC Jan 10, 2022
e7a5434
some fixes
panaC Jan 10, 2022
ce3264a
docker-compose
panaC Jan 11, 2022
7fb870e
docker build script
panaC Jan 11, 2022
9daa86c
fixes previous
panaC Jan 11, 2022
79c7d8f
readme build
panaC Jan 11, 2022
6f6c7d4
replace git: with https:
panaC Jan 11, 2022
76b8f43
dockerfile build go in alpine
panaC Jan 11, 2022
e703299
set directory
panaC Jan 11, 2022
f327fef
fix typo lsd
panaC Jan 11, 2022
9b7df78
improve dockerbuild
panaC Jan 11, 2022
c5b4ad5
set -e dockerbuild
panaC Jan 11, 2022
6d7fefc
alpine lsdserver
panaC Jan 11, 2022
5e79bcd
fix: IF NOT EXISTS in sql query
panaC Jan 18, 2022
26f7fe6
Revert "fix: IF NOT EXISTS in sql query"
panaC Jan 18, 2022
06d8298
docker-compose baseline > mariadb + minio
panaC Jan 18, 2022
5488039
up docker-compose
panaC Jan 18, 2022
c46222c
fix ENV in yaml
panaC Jan 19, 2022
d9e7f4a
up: docker-compose works with mariadb -- not tested with s3
panaC Jan 19, 2022
7afabd4
end day commit
panaC Jan 19, 2022
9c09862
fix: lcpserver and frontend need to share one volume -- and try to st…
panaC Jan 20, 2022
8e162ed
docker-compose in a google vm
panaC Jan 20, 2022
b11d1f2
fix: docker-compose deploy restart
panaC Jan 27, 2022
6af0eaf
cloud-init
panaC Jul 1, 2022
6284048
improve dockerbuild script
panaC Jul 4, 2022
bb7773a
try to build a lcpmaster dockerfile
panaC Jul 4, 2022
6cb2863
up docker lcpmaster with init
panaC Jul 5, 2022
3cbda9a
lcpmaster works now on my machine
panaC Jul 5, 2022
96757d9
up dockerrun
panaC Jul 5, 2022
2fcd0eb
update master dockerfile
panaC Jul 6, 2022
f8d34d7
comment dockerbuild in docker run
panaC Jul 6, 2022
792cacf
gcloud script to create/update vm
panaC Jul 6, 2022
a086457
remove unused cloud-init
panaC Jul 6, 2022
222f8fd
add a comment to not use docker-compos
panaC Jul 6, 2022
5e835cf
up readme
panaC Jul 6, 2022
e856242
remove unused previous entrypoint to docker-compose
panaC Jul 6, 2022
27df784
fix dockerfile copy bin
panaC Jul 6, 2022
f30e1a8
container port fixed to 8080
panaC Jul 6, 2022
589978a
up gcloud
panaC Jul 6, 2022
f3614b9
disable body size check nginx
panaC Jul 7, 2022
c33112c
add build prod in makefile prepare rule
panaC Jul 8, 2022
bbeefe3
makefile prepare and clean lcpserver prod build
panaC Jul 8, 2022
2a57493
first cloudbuild'
panaC Jul 8, 2022
16b6ecd
gitignore
panaC Jul 8, 2022
9b4ce9a
[skip ci] update Dockerfile to include build arg
panaC Jul 8, 2022
43ebab5
fix indentation cloudbuild.yaml
panaC Jul 11, 2022
d21728e
fix Makefile to compile lcpserver in prod mode
panaC Jul 11, 2022
5941190
fix timeout in docker build
panaC Jul 11, 2022
0790ea9
fix: Dockerfile arg and cloudbuild push
panaC Jul 12, 2022
b47970f
fix: cloudbuild yaml share file between steps with /workspace folder
panaC Jul 12, 2022
8871e4a
fix: COPY Build prod file in Dockerfile
panaC Jul 12, 2022
5e7a8cf
try to fix copy file
panaC Jul 12, 2022
5c515d8
try to fix copy file
panaC Jul 12, 2022
f35dd25
try to fix copy file
panaC Jul 12, 2022
77e0383
fix cloudbuild copy build file works now fixes timeout
panaC Jul 12, 2022
ea9b724
fix: build lcpserver test not prod
panaC Jul 12, 2022
8f11f79
try to fix build error on copy dummy file
panaC Aug 1, 2022
96531c5
add privkey and cert to cloudbuild prod
panaC Aug 4, 2022
b92e33d
swap privkey and cert in Dockerfile
panaC Aug 4, 2022
58797b9
set profile in config yaml variable for prod mode (basic vs 1.0)
panaC Aug 4, 2022
c8927fd
add ssl
panaC Aug 4, 2022
619cf17
add ca-certificates in alpine linux
panaC Aug 4, 2022
ece5bd9
up ca-certificates and openssl alpine linux
panaC Aug 4, 2022
4a7e590
add gandi intermediaire certificat to certificat chain
panaC Aug 5, 2022
2690dc5
swap certificat in chain
panaC Aug 5, 2022
060577c
Merge pull request #288 from readium/master
panaC Aug 8, 2022
668e901
Delete docker-compose.yml
panaC Aug 8, 2022
a2eb929
set EXPOSE port to in Dockerfile
panaC Aug 17, 2022
36ff80f
Merge branch 'cd' of https://github.com/readium/readium-lcp-server in…
panaC Aug 17, 2022
56758e8
remove ssl from Dockerfile and cloudbuild and add a directory nginx-e…
panaC Aug 18, 2022
4f3234c
restore dummy file for Dockerfile test mode
panaC Aug 18, 2022
39145ea
update nginx proxy
panaC Aug 18, 2022
e70f0a5
fix cloudbuild prod and test
panaC Aug 18, 2022
9b84e29
nginx: set default conf
panaC Aug 18, 2022
026eefb
Update readme.md
panaC Aug 19, 2022
e9ada5a
Update readme.md
panaC Aug 19, 2022
4805722
Update readme.md
panaC Aug 19, 2022
82df6f9
Update README.md
panaC Aug 19, 2022
962f9c2
Merge pull request #290 from readium/master
panaC Aug 19, 2022
ba584d7
Merge pull request #294 from readium/master
panaC Sep 30, 2022
e925a1d
fix: echoing htpasswd in Makefile
panaC Oct 3, 2022
19aa7ef
Merge pull request #306 from readium/master
panaC Dec 6, 2022
bb61a59
Merge branch 'master' of https://github.com/readium/readium-lcp-serve…
panaC Jan 2, 2023
1e4dd2d
Merge branch 'master' into cd
danielweck May 26, 2023
119de34
Merge branch 'master' into cd
danielweck May 26, 2023
92f6e09
Merge branch 'master' into cd
danielweck May 26, 2023
88f97f0
Merge branch 'master' into cd
danielweck Sep 13, 2023
238a9b8
Merge branch 'master' into cd
danielweck Jan 17, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

.github
.git
build

README.md
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,11 @@ lcpencrypt/.DS_Store
lcpserver/.DS_Store
npm-debug.log
manage/config.js

!docker/**/config.yaml
!docker/cloudbuild.prod.yaml
!docker/cloudbuild.test.yaml
!docker/nginx-edrlab/cloudbuild.yaml
build/
.*.swp
docker/private/
120 changes: 120 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@

ROOT_DIR=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))

BUILD_DIR=$(ROOT_DIR)/build

UNAME_S= $(shell uname -s)

BUILD_PROD=false
LIBUSERKEY_PATH=/
USERKEYH_PATH=/
USERKEYGO_PATH=/

export READIUM_LCPSERVER_CONFIG := $(BUILD_DIR)/config.yaml
export READIUM_LSDSERVER_CONFIG := $(BUILD_DIR)/config.yaml
export READIUM_FRONTEND_CONFIG := $(BUILD_DIR)/config.yaml
export GOPATH= $(BUILD_DIR)

lcpencrypt=lcpencrypt
lcpserver=lcpserver
lsdserver=lsdserver
frontend=frontend
frontend_manage=frontend/manage

NODE_VERSION=6.9.2

ifeq ($(UNAME_S), Linux)
NODE_URL="https://nodejs.org/dist/v$(NODE_VERSION)/node-v$(NODE_VERSION)-linux-x64.tar.xz"
SED_I=sed -i
else
NODE_URL="https://nodejs.org/dist/v$(NODE_VERSION)/node-v$(NODE_VERSION)-darwin-x64.tar.xz"
SED_I=sed -i ''
endif

#LDFLAGS=-extldflags=-static
LDFLAGS=

CC=GOARCH=amd64 go install -x #-ldflags="$(LDFLAGS)"

.PHONY: all node run prepare clean

all: $(lcpencrypt) $(lcpserver) $(lsdserver) $(frontend) $(frontend_manage)

clean:
@if [ "$(BUILD_PROD)" = "true" ]; then\
echo "RM $(LIBUSERKEY_PATH)"; \
rm -f license/libuserkey.a; \
echo "RM $(USERKEYH_PATH)"; \
rm -f license/userkey.h; \
echo "RM $(USERKEYGO_PATH)"; \
mv $(BUILD_DIR)/user_key.go.backup license/user_key.go; \
fi

@rm -rf $(BUILD_DIR) 2>/dev/null || true
@rm -rf $(ROOT_DIR)/$(frontend_manage)/node_modules
@rm -rf $(ROOT_DIR)/$(frontend_manage)/dist

node:
open $(NODE_URL)

prepare:
mkdir -p $(BUILD_DIR)
mkdir -p $(BUILD_DIR)/cert
mkdir -p $(BUILD_DIR)/db
mkdir -p $(BUILD_DIR)/files
mkdir -p $(BUILD_DIR)/files/storage
cp $(ROOT_DIR)/test/cert/cert-edrlab-test.pem $(BUILD_DIR)/cert/.
cp $(ROOT_DIR)/test/cert/privkey-edrlab-test.pem $(BUILD_DIR)/cert/.
mkdir -p $(BUILD_DIR)/log
mkdir -p $(BUILD_DIR)/frontend/manage
sed 's~<LCP_HOME>~$(BUILD_DIR)~g' < $(ROOT_DIR)/test/config.yaml > $(BUILD_DIR)/config.yaml
echo "adm_username:\$$apr1\$$bxwn8jim\$$kbfYFRgbBlKDWpAvd2tHW." > $(BUILD_DIR)/htpasswd
@if [ "$(BUILD_PROD)" = "true" ]; then\
echo "COPY $(LIBUSERKEY_PATH)"; \
cp $(LIBUSERKEY_PATH) license/.; \
echo "COPY $(USERKEYH_PATH)"; \
cp $(USERKEYH_PATH) license/.; \
echo "COPY $(USERKEYGO_PATH)"; \
cp license/user_key.go $(BUILD_DIR)/user_key.go.backup; \
cp $(USERKEYGO_PATH) license/.; \
fi

$(lcpencrypt): prepare
GOPATH=$(GOPATH) $(CC) ./$@

$(lcpserver): prepare
GOPATH=$(GOPATH) CGO_ENABLED=1 $(CC) ./$@

$(lsdserver): prepare
GOPATH=$(GOPATH) $(CC) ./$@

$(frontend): prepare
GOPATH=$(GOPATH) $(CC) ./$@

$(frontend_manage): prepare
cd ./$@ \
&& cp package.json package.json.backup \
&& $(SED_I) '/\"lite-server\"\:/d' package.json \
&& $(SED_I) 's/git\:/https\:/g' package.json \
&& npm install \
&& npm update \
&& npm run clean \
&& npm run build-css \
&& npm run copy-templates \
&& $(SED_I) '/es2015/d' node_modules/@types/node/index.d.ts \
&& node_modules/.bin/tsc \
&& mv package.json.backup package.json \
&& cp -r . $(BUILD_DIR)/frontend/manage/.


run:
rm -f $(BUILD_DIR)/run.sh
echo "#! /usr/bin/env sh" >> $(BUILD_DIR)/run.sh
echo "READIUM_LCPSERVER_CONFIG=$(READIUM_LCPSERVER_CONFIG) $(BUILD_DIR)/bin/$(lcpserver) > $(BUILD_DIR)/log/$(lcpserver).log &" >> $(BUILD_DIR)/run.sh
echo "READIUM_LSDSERVER_CONFIG=$(READIUM_LSDSERVER_CONFIG) $(BUILD_DIR)/bin/$(lsdserver) > $(BUILD_DIR)/log/$(lsdserver).log &" >> $(BUILD_DIR)/run.sh
echo "READIUM_FRONTEND_CONFIG=$(READIUM_FRONTEND_CONFIG) $(BUILD_DIR)/bin/$(frontend) > $(BUILD_DIR)/log/$(frontend).logi &" >> $(BUILD_DIR)/run.sh
echo "wait" >> $(BUILD_DIR)/run.sh
chmod +x $(BUILD_DIR)/run.sh
@open http://127.0.0.1:8991/
sh $(BUILD_DIR)/run.sh

30 changes: 30 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,36 @@ Out of the box, this open-source software is using what we call the "basic" (or

But this profile, because it is open, does not offer any security. Security is provided by a "production" profile, i.e. confidential crypto information and a personal X.509 certificate delivered to trusted implementers by [EDRLab](mailto:contact@edrlab.org). EDRLab is the wordwide LCP Certification Authority. Licenses generated with the "production" profile are handled by any LCP compliant Reading System.

Quickstart
==========


> You have to download node [v6.9.2](https://nodejs.org/dist/v6.9.2/) to compile the frontend webapp

```
make clean && PATH=/Users/edrlab/Downloads/node-v6.9.2-darwin-x64/bin:$PATH make && make run
```

Docker
=======


To build the master container (lcp+lsd+frontend) :

```
./docker/dockerbuild.sh `pwd` master
```

To run it :

```
./docker/dockerrun.sh
```


go to http://127.0.0.1:8080/frontend


Executables
===========
The server software is composed of several independant parts:
Expand Down
14 changes: 14 additions & 0 deletions docker/100-lcpserver-lsdserver-frontend.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/bin/sh

/lcpserver/entrypoint.sh /lcpserver/tmp/config.yaml /lcpserver/lcpserver &
echo "LCPSERVER PID=$!"


/lsdserver/entrypoint.sh /lsdserver/tmp/config.yaml /lsdserver/lsdserver &
echo "LSDSERVER PID=$!"


/frontend/entrypoint.sh /frontend/tmp/config.yaml /frontend/manage /frontend/frontend &
echo "FRONTENDSERVER PID=$!"


126 changes: 126 additions & 0 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@

FROM golang:alpine as lcpserver
WORKDIR /lcp
COPY . /lcp/.

ARG BUILD_PROD=false
ARG LIBUSERKEY_PATH=/docker/dummy
ARG USERKEYH_PATH=/docker/dummy
ARG USERKEYGO_PATH=/docker/dummy

COPY $LIBUSERKEY_PATH $LIBUSERKEY_PATH
COPY $USERKEYH_PATH $USERKEYH_PATH
COPY $USERKEYGO_PATH $USERKEYGO_PATH

RUN apk add build-base
RUN make BUILD_PROD=${BUILD_PROD} LIBUSERKEY_PATH=${LIBUSERKEY_PATH} USERKEYH_PATH=${USERKEYH_PATH} USERKEYGO_PATH=${USERKEYGO_PATH} lcpserver


FROM golang:alpine as lsdserver
WORKDIR /lcp
COPY . /lcp/.

RUN apk add build-base
RUN make lsdserver

# FROM node:6.9.2 doesn't works npm failed to download librairies
FROM ubuntu:20.04 as frontend-manage

WORKDIR /lcp
COPY . /lcp/.

RUN apt-get update \
&& apt-get install -y make curl git \
&& curl -O https://nodejs.org/dist/v6.9.2/node-v6.9.2-linux-x64.tar.gz \
&& tar -xzf node-v6.9.2-linux-x64.tar.gz

RUN PATH=/lcp/node-v6.9.2-linux-x64/bin:$PATH make "frontend/manage"

FROM golang:alpine as frontendserver
WORKDIR /lcp
COPY . /lcp/.

RUN apk add build-base
RUN make frontend




FROM nginx:stable-alpine

COPY --from=lcpserver /lcp/build/bin/lcpserver /usr/bin/lcpserver
COPY --from=lsdserver /lcp/build/bin/lsdserver /usr/bin/lsdserver
COPY --from=frontendserver /lcp/build/bin/frontend /usr/bin/frontend
COPY --from=frontend-manage /lcp/build/frontend/manage/. /frontend/manage/.

ARG I18N=/messages
ARG AUTH_FILE=/test/htpasswd
ARG PRIVATE_KEY_PATH=/test/cert/privkey-edrlab-test.pem
ARG CERTIFICATE_PATH=/test/cert/cert-edrlab-test.pem
ARG CONFIG_PATH=/docker/config.yaml
ARG PROFILE=basic

COPY $PRIVATE_KEY_PATH /privkey.pem
COPY $CERTIFICATE_PATH /cert.pem
COPY $I18N /i18n
COPY $AUTH_FILE /htpasswd

# envsubst in inittab once
COPY $CONFIG_PATH /tmp/config.yaml
COPY /docker/init.sh /init.sh

COPY /docker/inittab /etc/inittab

RUN apk --update add --no-cache gettext sed ca-certificates openssl && update-ca-certificates

ENV LCP_PORT=8081
ENV LCP_HOST=127.0.0.1
ENV LSD_PORT=8082
ENV LSD_HOST=127.0.0.1
ENV FRONTEND_PORT=8083
ENV FRONTEND_HOST=127.0.0.1

ENV AUTH_FILE=/htpasswd
ENV CERTIFICATE_PATH=/cert.pem
ENV PRIVATE_KEY=/privkey.pem
ENV LOCALIZATION_FOLDER=/i18n

ENV LOCALIZATION_DEFAULT_LANGUAGE=en-US
ENV LOCALIZATION_LANGUAGES_ARRAY=[\"en-US\"]

ENV LCP_DATABASE_ROOT_PATH=/lcp/db

ENV LSD_BASE_URL=http://127.0.0.1:8080/lsdserver
ENV LSD_NOTIFY_AUTH_USER=adm_username
ENV LSD_NOTIFY_AUTH_PASS=adm_password
ENV LSD_DATABASE=sqlite3://file:$LCP_DATABASE_ROOT_PATH/lcp.sqlite?cache=shared&mode=rwc

ENV LCP_BASE_URL=http://127.0.0.1:8080/lcpserver
ENV LCP_UPDATE_AUTH_USER=adm_username
ENV LCP_UPDATE_AUTH_PASS=adm_password
ENV LCP_DATABASE=sqlite3://file:$LCP_DATABASE_ROOT_PATH/lsd.sqlite?cache=shared&mode=rwc
ENV LCP_STORAGE_PATH=/lcp/files/storage

ENV FRONTEND_BASE_URL=http://127.0.0.1:8080/frontend
ENV FRONTEND_MANAGE=/frontend/manage
ENV FRONTEND_DATABASE=sqlite3://file:$LCP_DATABASE_ROOT_PATH/frontend.sqlite?cache=shared&mode=rwc

ENV FRONTEND_MASTER_PATH=/lcp/files/master
ENV FRONTEND_ENCRYPTED_PATH=/lcp/files/encrypted
ENV FRONTEND_PROVIDER_URI=https://www.myprovidername.org

ENV READIUM_LCPSERVER_CONFIG=/config.yaml
ENV READIUM_LSDSERVER_CONFIG=/config.yaml
ENV READIUM_FRONTEND_CONFIG=/config.yaml

ENV PROFILE=$PROFILE

ENV PORT=8080

ENV BASE_URL=http://127.0.0.1:8080/frontend/

COPY /docker/nginx.conf.template /etc/nginx/templates/default.conf.template

CMD ["init"]

EXPOSE $PORT
32 changes: 32 additions & 0 deletions docker/cloudbuild.prod.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
steps:
# Docker Build
- name: gcr.io/cloud-builders/gsutil
args: ['cp', 'gs://lcpserver-build-prod/libuserkey.a', '/workspace/libuserkey.a']
- name: gcr.io/cloud-builders/gsutil
args: ['cp', 'gs://lcpserver-build-prod/userkey.h', '/workspace/userkey.h']
- name: gcr.io/cloud-builders/gsutil
args: ['cp', 'gs://lcpserver-build-prod/user_key.go', '/workspace/user_key.go']
- name: gcr.io/cloud-builders/gsutil
args: ['cp', 'gs://lcpserver-build-prod/cert-edrlab.pem', '/workspace/cert-edrlab.pem']
- name: gcr.io/cloud-builders/gsutil
args: ['cp', 'gs://lcpserver-build-prod/privkey-edrlab.pem', '/workspace/privkey-edrlab.pem']
- name: 'gcr.io/cloud-builders/docker'

args: ['build', '-t',
'europe-west1-docker.pkg.dev/lcpserver-1/lcp-server-build/readium-lcp-server-build-prod:latest',
'-f', 'docker/Dockerfile',
'--build-arg', 'LIBUSERKEY_PATH=/libuserkey.a',
'--build-arg', 'USERKEYH_PATH=/userkey.h',
'--build-arg', 'USERKEYGO_PATH=/user_key.go',
'--build-arg', 'BUILD_PROD=true',
'--build-arg', 'PRIVATE_KEY_PATH=/privkey-edrlab.pem',
'--build-arg', 'CERTIFICATE_PATH=/cert-edrlab.pem',
'--build-arg', 'PROFILE=1.0',
'.']

# Docker Push
- name: 'gcr.io/cloud-builders/docker'
args: ['push',
'europe-west1-docker.pkg.dev/lcpserver-1/lcp-server-build/readium-lcp-server-build-prod:latest']

timeout: 3600s
14 changes: 14 additions & 0 deletions docker/cloudbuild.test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
steps:
# Docker Build
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t',
'europe-west1-docker.pkg.dev/lcpserver-1/lcp-server-build/readium-lcp-server-build-test:latest',
'-f', 'docker/Dockerfile',
'.']

# Docker Push
- name: 'gcr.io/cloud-builders/docker'
args: ['push',
'europe-west1-docker.pkg.dev/lcpserver-1/lcp-server-build/readium-lcp-server-build-test:latest']

timeout: 3600s
Loading