单服务器部署CTFd+whale踩坑
环境:
os: ubuntu16
Docker: Version: 20.10.7
Docker-compose: version v2.12.1
参考:
https://www.zhaoj.in/read-6333.html/comment-page-1#_Direct_Frp
详细步骤:
创建集群:
docker swarm init --advertise-addr $your_machine_ip
标记节点:
docker node ls #检查节点 ID
docker node update --label-add name=linux-1 <节点 ID>
one step:
docker node update --label-add name=linux-1 $(docker node ls -q)
下载代码:
git clone -b single https://github.com/glzjin/CTFd.git
配置:
cd CTFd
vi frp/frps.ini # token 一定要随机
vi frp/frpc.ini # token 一定要随机
#(这个token我没改,最后成功搭起来了,不知道赵总的随机是啥意思)
git submodule update --init
docker-compose up -d
从docker-compose up -d
开始踩坑了,一开始先是报错是找不到python和python-dev,这个改Dockerfile就好
python -> python3
python-dev -> python3-dev
然后docker-compose up -d
还是报错,如下:
Error response from daemon: Could not attach to network ctfd_frp_containers: rpc error: code = PermissionDenied desc = network ctfd_frp_containers not manually attachable
上网查了查,要加上--attachable
参数来启动network,要先删除这个network再启动一次,命令如下:
docker network rm ctfd_frp_containers
docker network create --driver overlay --attachable ctfd_frp_containers
接下来再执行docker-compose up -d
,第3+n个坑出现了,ctfd容器死活起不来,一直restarting,但是可能不同的操作系统坑不同,所以以下报错也可能不会出现在其他版本的操作系统上,docker logs $容器id或者名字
查看报错
1.
ImportError: cannot import name 'escape' from 'jinja2' (/usr/local/lib/python3.7/site-packages/jinja2/__init__.py)
2.
ImportError: cannot import name 'soft_unicode' from 'markupsafe' (/usr/local/lib/python3.7/site-packages/markupsafe/__init__.py)
3.
ValueError: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 40 from PyObject
调试过程过于繁琐,就不详细写了,查询报错原因发现主要是pip下载库版本有问题,然后对照官方的git仓库来修改赵总git里的requirements.txt,加了几个库最后就可以成功起ctfd容器了,最终requirements.txt如下:
Flask==1.1.2
Werkzeug==0.16.0
Flask-SQLAlchemy==2.4.1
Flask-Caching==1.4.0
Flask-Migrate==2.5.2
Flask-Script==2.0.6
SQLAlchemy==1.3.11
SQLAlchemy-Utils==0.36.0
passlib==1.7.2
bcrypt==3.1.7
six==1.13.0
itsdangerous==1.1.0
jinja2==2.11.3
requests>=2.20.0
PyMySQL==0.9.3
gunicorn==19.9.0
normality==2.0.0
dataset==1.1.2
mistune==0.8.4
netaddr==0.7.19
redis==3.3.11
datafreeze==0.1.0
gevent==21.12.0
python-dotenv==0.10.3
flask-restplus==0.13.0
pathlib2==2.3.5
flask-marshmallow==0.10.1
marshmallow-sqlalchemy==0.17.0
boto3==1.10.39
markupsafe==1.1.1
marshmallow==2.20.2
记得先把container和images删了再重新运行docker-compose up -d
,不然还是运行不了,然后就照着赵总博客设置就行,本文主要介绍搭建时遇到的问题,搭建操作详情见赵总的博客或者其他师傅的博客。