一、fisco-bcos-browser源码下载
git 克隆源码到本地
https://github.com/FISCO-BCOS/fisco-bcos-browser
下载后的源码,其中server为后端服务,web为前端服务

目录
二、编译源码
把后端server源码导入到idea中,gradle-build源码,生成后端dist文件
执行前端目录下get_solc_js.sh文件,会自动下载solc-bin,下面v0.4.25.js等文件,执行完后检查dist/static/js是否下载完这些js文件,get_solc_js.sh文件如下。get_solc_js中的路径合约js无法正常下载,若需要请私信我获取。

get_solc_js.sh下载的js

image.png

打包
三、创建docker容器部署目录结构
如下图所示,其中db存放sql文件,server存放后端编译后的dist文件和挂载的application.yml文件,web存放前端dist文件和挂载的nginx配置文件。
数据库脚本和前端dist文件源码中都有。

目录

数据库脚本

后端文件

前端文件
四、编写后端服务dockerfile文件
FROM gradle:jdk8
MAINTAINER wenjinwei
LABEL Version="2.0"
LABEL Name="fisco-bcos-browser 2.0"
LABEL Description="Oracle Jre 8 + gradle 5.2.1"
# python package
RUN sed -i 's/archive.ubuntu.com/mirrors.cloud.tencent.com/g' /etc/apt/sources.list \
&& sed -i 's/security.ubuntu.com/mirrors.cloud.tencent.com/g' /etc/apt/sources.list \
&& apt-get update \
&& apt-get install -y python3-pip \
&& pip3 install PyMySQL
WORKDIR /fisco-bcos-browser/server/fisco-bcos-browser
COPY dist /fisco-bcos-browser/server/fisco-bcos-browser/dist
RUN cp dist/conf_template dist/conf -r
WORKDIR /fisco-bcos-browser/server/fisco-bcos-browser/dist/
RUN chmod +x ./start.sh
CMD ["sh", "start.sh"]
server:
port: 5101
context-path: /fisco-bcos-browser
spring:
datasource:
url: jdbc:mysql://fbb-mysql:3306/db_browser?useUnicode=true&characterEncoding=utf8
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
mybatis:
mapper-locations: classpath:mapper/*.xml
constant:
cronBlockChainInfo: 0/10 * * * * ?
cronBlockInfo: 0/10 * * * * ?
cronTxnByDay: 30 0/1 * * * ?
cronAyncNode: 0 0/10 * * * ?
cronIfNodeActive: 0 0/1 * * * ?
cronDeleteTxn: 0 0/10 * * * ?
handleBlocks: 50
keepTxnCnt: 500000
logging:
config: classpath:log4j2.xml
五、编写前端服务dockerfile文件
FROM nginx:1.15.9-alpine
MAINTAINER wenjinwei
# 创建目录
RUN mkdir -p /data/app/web/
# 将本地的 dist 文件夹复制到容器的 /data/app/web/dist/ 目录下
COPY dist /data/app/web/dist/
# 设置工作目录
WORKDIR /data/app/web
# 可选:配置 Nginx
# COPY nginx.conf /etc/nginx/nginx.conf
# 暴露端口
EXPOSE 80
# 启动 Nginx
CMD ["nginx", "-g", "daemon off;"]
#user nobody;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
#error_log logs/error.log notice;
#error_log logs/error.log info;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log ;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
add_header X-Frame-Options SAMEORIGIN;
server {
listen 5100 default_server;
server_name 127.0.0.1;
location / {
root /data/app/web/dist;
index index.html index.htm;
try_files $uri $uri/ /index.html =404;
}
include /etc/nginx/default.d/*.conf;
location /api {
proxy_pass http://fbb_back:5101/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
六、编写dockerCompose文件
version: '3'
services:
fbb-mysql:
image: mysql:5.6
container_name: fbb-mysql
restart: always
privileged: true
ports:
- "23306:3306"
environment:
- TZ=Asia/Shanghai
- MYSQL_ROOT_PASSWORD=root
- MYSQL_USER=dbUsername
- MYSQL_PASSWORD=dbPassword
- MYSQL_DATABASE=db_browser
volumes:
- ./db:/docker-entrypoint-initdb.d
command: --lower_case_table_names=1 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --default-authentication-plugin=mysql_native_password
fbb_back:
container_name: fbb-back
build: ./server/.
volumes:
- ./server/application.yml:/fisco-bcos-browser/server/fisco-bcos-browser/dist/conf/application.yml:ro
depends_on:
- fbb-mysql
command: sh -c "./start.sh && tail -f log/*"
fbb_front:
container_name: fbb-front
build: ./web/.
volumes:
- ./web/nginx.conf:/etc/nginx/nginx.conf:ro
ports:
- "5100:5100"
depends_on:
- fbb_back
command: ["nginx-debug", "-g", "daemon off;"]
七、启动服务
docker-compose up -d

正常启动
八、新增群组
执行rpc命令查看群组ID
[root@bogon 192.168.122.101]# curl -X POST --data '{"jsonrpc":"2.0","method":"getGroupList","params":[],"id":1}' http://192.168.122.101:8545
{"id":1,"jsonrpc":"2.0","result":[1,2]}
九、新增节点
查看各节点config.ini文件中所配置的IP、RPC端口和P2P端口

config.ini

新增后的节点信息