Compare commits
8 Commits
feat/inter
...
test/gitea
| Author | SHA1 | Date | |
|---|---|---|---|
|
53148f573e
|
|||
|
e8f052e0d1
|
|||
|
7f450d620a
|
|||
|
41a1bc743f
|
|||
|
30108e3bc5
|
|||
|
a2dc9f43e3
|
|||
|
1203719eac
|
|||
|
373a71f04d
|
32
.dockerignore
Normal file
32
.dockerignore
Normal file
@@ -0,0 +1,32 @@
|
||||
|
||||
.env
|
||||
.env*
|
||||
__pycache__/
|
||||
|
||||
templates/assets/css/styles.min.css
|
||||
|
||||
ignore/
|
||||
|
||||
plugins/signatures.json
|
||||
|
||||
.venv/
|
||||
|
||||
user_data/
|
||||
customPlugins/
|
||||
cache/
|
||||
build/
|
||||
dist/
|
||||
hsd/
|
||||
hsd-data/
|
||||
hsd.lock
|
||||
hsdconfig.json
|
||||
|
||||
Dockerfile
|
||||
Dockerfile.hsd
|
||||
FireWalletBrowser.bsdesign
|
||||
LICENSE.md
|
||||
README.md
|
||||
docker-compose.yml
|
||||
example.env
|
||||
plugins.md
|
||||
|
||||
@@ -4,11 +4,22 @@ on:
|
||||
push:
|
||||
|
||||
jobs:
|
||||
Build Image:
|
||||
Build Images:
|
||||
runs-on: [ubuntu-latest, amd]
|
||||
strategy:
|
||||
matrix:
|
||||
variant:
|
||||
- target: default
|
||||
tag_suffix: ""
|
||||
dockerfile: "Dockerfile"
|
||||
- target: hsd
|
||||
tag_suffix: "-hsd"
|
||||
dockerfile: "Dockerfile.hsd"
|
||||
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
- name: Install Docker
|
||||
run : |
|
||||
apt-get install ca-certificates curl gnupg
|
||||
@@ -17,7 +28,7 @@ jobs:
|
||||
chmod a+r /etc/apt/keyrings/docker.gpg
|
||||
echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
apt-get update
|
||||
apt-get install docker-ce-cli -y
|
||||
apt-get install docker-ce-cli -y
|
||||
- name: Build Docker image
|
||||
run : |
|
||||
echo "${{ secrets.DOCKERGIT_TOKEN }}" | docker login git.woodburn.au -u nathanwoodburn --password-stdin
|
||||
@@ -34,8 +45,8 @@ jobs:
|
||||
fi
|
||||
|
||||
|
||||
docker build -t firewallet:$tag_num .
|
||||
docker tag firewallet:$tag_num git.woodburn.au/nathanwoodburn/firewallet:$tag_num
|
||||
docker push git.woodburn.au/nathanwoodburn/firewallet:$tag_num
|
||||
docker tag firewallet:$tag_num git.woodburn.au/nathanwoodburn/firewallet:$tag
|
||||
docker push git.woodburn.au/nathanwoodburn/firewallet:$tag
|
||||
docker build --build-arg BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') --build-arg VCS_REF=$GITEA_SHA --build-arg VERSION=$GITEA_TAG --file ${{matrix.variant.dockerfile}} -t firewallet${{matrix.variant.tag_suffix}}:$tag_num .
|
||||
docker tag firewallet${{matrix.variant.tag_suffix}}:$tag_num git.woodburn.au/nathanwoodburn/firewallet${{matrix.variant.tag_suffix}}:$tag_num
|
||||
docker push git.woodburn.au/nathanwoodburn/firewallet${{matrix.variant.tag_suffix}}:$tag_num
|
||||
docker tag firewallet${{matrix.variant.tag_suffix}}:$tag_num git.woodburn.au/nathanwoodburn/firewallet${{matrix.variant.tag_suffix}}:$tag
|
||||
docker push git.woodburn.au/nathanwoodburn/firewallet${{matrix.variant.tag_suffix}}:$tag
|
||||
22
Dockerfile
22
Dockerfile
@@ -1,7 +1,7 @@
|
||||
FROM --platform=$BUILDPLATFORM python:3.10-alpine AS builder
|
||||
FROM --platform=$BUILDPLATFORM python:3.13-alpine AS builder
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
RUN apk add git openssl curl
|
||||
COPY requirements.txt /app
|
||||
RUN --mount=type=cache,target=/root/.cache/pip \
|
||||
pip3 install -r requirements.txt
|
||||
@@ -9,10 +9,22 @@ RUN --mount=type=cache,target=/root/.cache/pip \
|
||||
COPY . /app
|
||||
|
||||
# Add mount point for data volume
|
||||
# VOLUME /data
|
||||
RUN apk add git openssl curl
|
||||
VOLUME /app/user_data
|
||||
|
||||
|
||||
ARG BUILD_DATE
|
||||
ARG VCS_REF
|
||||
|
||||
LABEL org.opencontainers.image.title="FireWallet" \
|
||||
org.opencontainers.image.description="The Handshake Wallet That is Fire" \
|
||||
org.opencontainers.image.url="https://firewallet.au" \
|
||||
org.opencontainers.image.source="https://git.woodburn.au/nathanwoodburn/firewalletbrowser" \
|
||||
org.opencontainers.image.version="2.0.0" \
|
||||
org.opencontainers.image.created=$BUILD_DATE \
|
||||
org.opencontainers.image.revision=$VCS_REF \
|
||||
org.opencontainers.image.licenses="AGPL-3.0-only"
|
||||
|
||||
ENTRYPOINT ["python3"]
|
||||
CMD ["server.py"]
|
||||
|
||||
FROM builder as dev-envs
|
||||
FROM builder AS dev-envs
|
||||
|
||||
58
Dockerfile.hsd
Normal file
58
Dockerfile.hsd
Normal file
@@ -0,0 +1,58 @@
|
||||
# ---- HSD build stage ----
|
||||
FROM node:22-alpine AS hsd-build
|
||||
WORKDIR /opt/hsd
|
||||
RUN apk add --no-cache git bash unbound-dev gmp-dev g++ gcc make python3
|
||||
RUN git clone --depth=1 --branch v8.0.0 https://github.com/handshake-org/hsd.git .
|
||||
RUN npm install --omit=dev
|
||||
|
||||
# ---- Final stage ----
|
||||
FROM python:3.13-alpine
|
||||
WORKDIR /app
|
||||
|
||||
# Install runtime deps only
|
||||
RUN apk add --no-cache unbound-dev gmp
|
||||
|
||||
|
||||
# Copy node and npm from hsd-build stage
|
||||
COPY --from=hsd-build /usr/local/bin/node /usr/local/bin/node
|
||||
COPY --from=hsd-build /usr/local/lib/node_modules/npm /usr/local/lib/node
|
||||
COPY --from=hsd-build /usr/local/bin/npm /usr/local/bin/npm
|
||||
|
||||
# Copy FireWallet dependencies
|
||||
COPY requirements.txt .
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
|
||||
# Copy HSD from build stage
|
||||
COPY --from=hsd-build /opt/hsd /app/hsd
|
||||
|
||||
# Copy FireWallet source
|
||||
COPY . .
|
||||
|
||||
# Expose ports
|
||||
EXPOSE 5000
|
||||
# Optional HSD ports
|
||||
# EXPOSE 12037
|
||||
# EXPOSE 12039
|
||||
|
||||
ENV INTERNAL_HSD=true
|
||||
ENV HSD_DOCKER_CONTAINER=true
|
||||
|
||||
ARG BUILD_DATE
|
||||
ARG VCS_REF
|
||||
|
||||
LABEL org.opencontainers.image.title="FireWallet (HSD)" \
|
||||
org.opencontainers.image.description="The Handshake Wallet That is Fire" \
|
||||
org.opencontainers.image.url="https://firewallet.au" \
|
||||
org.opencontainers.image.source="https://git.woodburn.au/nathanwoodburn/firewalletbrowser" \
|
||||
org.opencontainers.image.version="2.0.0" \
|
||||
org.opencontainers.image.created=$BUILD_DATE \
|
||||
org.opencontainers.image.revision=$VCS_REF \
|
||||
org.opencontainers.image.licenses="AGPL-3.0-only"
|
||||
|
||||
|
||||
|
||||
VOLUME ["/app/hsd-data", "/app/user_data"]
|
||||
|
||||
|
||||
ENTRYPOINT ["python3"]
|
||||
CMD ["server.py"]
|
||||
72
account.py
72
account.py
@@ -1784,32 +1784,39 @@ def checkPreRequisites() -> dict[str, bool]:
|
||||
"git": False,
|
||||
"hsd": False
|
||||
}
|
||||
|
||||
try:
|
||||
# Check if node is installed and get version
|
||||
nodeSubprocess = subprocess.run(["node", "-v"], capture_output=True, text=True,timeout=2)
|
||||
if nodeSubprocess.returncode == 0:
|
||||
major_version = int(nodeSubprocess.stdout.strip().lstrip('v').split('.')[0])
|
||||
if major_version >= HSD_CONFIG.get("minNodeVersion", 20):
|
||||
prerequisites["node"] = True
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
try:
|
||||
# Check if npm is installed
|
||||
npmSubprocess = subprocess.run(["npm", "-v"], capture_output=True, text=True,timeout=2)
|
||||
if npmSubprocess.returncode == 0:
|
||||
major_version = int(npmSubprocess.stdout.strip().split('.')[0])
|
||||
if major_version >= HSD_CONFIG.get("minNPMVersion", 8):
|
||||
prerequisites["npm"] = True
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Check if node is installed and get version
|
||||
nodeSubprocess = subprocess.run(["node", "-v"], capture_output=True, text=True)
|
||||
if nodeSubprocess.returncode == 0:
|
||||
major_version = int(nodeSubprocess.stdout.strip().lstrip('v').split('.')[0])
|
||||
if major_version >= HSD_CONFIG.get("minNodeVersion", 20):
|
||||
prerequisites["node"] = True
|
||||
try:
|
||||
# Check if git is installed
|
||||
gitSubprocess = subprocess.run(["git", "-v"], capture_output=True, text=True,timeout=2)
|
||||
if gitSubprocess.returncode == 0:
|
||||
prerequisites["git"] = True
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Check if npm is installed
|
||||
npmSubprocess = subprocess.run(["npm", "-v"], capture_output=True, text=True)
|
||||
if npmSubprocess.returncode == 0:
|
||||
major_version = int(npmSubprocess.stdout.strip().split('.')[0])
|
||||
if major_version >= HSD_CONFIG.get("minNPMVersion", 8):
|
||||
prerequisites["npm"] = True
|
||||
|
||||
# Check if git is installed
|
||||
gitSubprocess = subprocess.run(["git", "-v"], capture_output=True, text=True)
|
||||
if gitSubprocess.returncode == 0:
|
||||
prerequisites["git"] = True
|
||||
|
||||
# Check if hsd is installed
|
||||
if os.path.exists("./hsd/bin/hsd"):
|
||||
prerequisites["hsd"] = True
|
||||
|
||||
|
||||
|
||||
|
||||
return prerequisites
|
||||
|
||||
@@ -1818,11 +1825,23 @@ def checkPreRequisites() -> dict[str, bool]:
|
||||
def hsdInit():
|
||||
if not HSD_INTERNAL_NODE:
|
||||
return
|
||||
prerequisites = checkPreRequisites()
|
||||
|
||||
# Don't check prerequisites if HSD is included in a docker container
|
||||
if os.getenv("HSD_DOCKER_CONTAINER", "false").lower() == "true":
|
||||
prerequisites = {
|
||||
"node": True,
|
||||
"npm": True,
|
||||
"git": True,
|
||||
"hsd": True
|
||||
}
|
||||
else:
|
||||
prerequisites = checkPreRequisites()
|
||||
|
||||
minNodeVersion = HSD_CONFIG.get("minNodeVersion", 20)
|
||||
minNPMVersion = HSD_CONFIG.get("minNPMVersion", 8)
|
||||
PREREQ_MESSAGES = {
|
||||
"node": "Install Node.js from https://nodejs.org/en/download (Version >= {minNodeVersion})",
|
||||
"npm": "Install npm (version >= {minNPMVersion}) - usually comes with Node.js",
|
||||
"node": f"Install Node.js from https://nodejs.org/en/download (Version >= {minNodeVersion})",
|
||||
"npm": f"Install npm (version >= {minNPMVersion}) - usually comes with Node.js",
|
||||
"git": "Install Git from https://git-scm.com/downloads"}
|
||||
|
||||
|
||||
@@ -1831,8 +1850,10 @@ def hsdInit():
|
||||
print("HSD Internal Node prerequisites not met:")
|
||||
for key, value in prerequisites.items():
|
||||
if not value:
|
||||
print(f" - {key} is missing or does not meet the version requirement.")
|
||||
exit(1)
|
||||
print(f" - {key} is missing or does not meet the version requirement.",flush=True)
|
||||
if key in PREREQ_MESSAGES:
|
||||
print(PREREQ_MESSAGES[key],flush=True)
|
||||
exit(1)
|
||||
return
|
||||
|
||||
# Check if hsd is installed
|
||||
@@ -1958,7 +1979,6 @@ def hsdRestart():
|
||||
hsdStart()
|
||||
|
||||
|
||||
checkPreRequisites()
|
||||
hsdInit()
|
||||
hsdStart()
|
||||
# endregion
|
||||
14
docker-compose-internal.yml
Normal file
14
docker-compose-internal.yml
Normal file
@@ -0,0 +1,14 @@
|
||||
services:
|
||||
firewallet:
|
||||
image: firewallet-hsd:latest
|
||||
ports:
|
||||
- "5000:5000"
|
||||
volumes:
|
||||
- hsd_data:/app/hsd-data
|
||||
- user_data:/app/user_data
|
||||
environment:
|
||||
- INTERNAL_HSD=true
|
||||
|
||||
volumes:
|
||||
hsd_data:
|
||||
user_data:
|
||||
26
docker-compose.yml
Normal file
26
docker-compose.yml
Normal file
@@ -0,0 +1,26 @@
|
||||
services:
|
||||
hsd:
|
||||
image: ghcr.io/handshake-org/hsd:8
|
||||
volumes:
|
||||
- hsd_data:/root/.hsd
|
||||
environment:
|
||||
- HSD_HTTP_HOST=0.0.0.0
|
||||
- HSD_WALLET_HTTP_HOST=0.0.0.0
|
||||
- HSD_LOG_LEVEL=error
|
||||
- HSD_API_KEY=changeme
|
||||
|
||||
|
||||
firewallet:
|
||||
image: git.woodburn.au/nathanwoodburn/firewallet:latest
|
||||
ports:
|
||||
- "5000:5000"
|
||||
environment:
|
||||
- HSD_IP=hsd
|
||||
- HSD_API=changeme
|
||||
volumes:
|
||||
- user_data:/app/user_data
|
||||
|
||||
|
||||
volumes:
|
||||
hsd_data:
|
||||
user_data:
|
||||
Reference in New Issue
Block a user