在参考了walle给的官方文档后,决定自己用docker构建walle代码环境;如果要搭建到本机的话,极有可能将服务器玩坏,容器的话删除创建很方便;而官方给的docker镜像感觉很难受,最后启动了三个容器构成了整个walle,真心觉得不舒服.
1、我先将walle的代码放到了服务器的 /data/wwwroot/walle 目录下;通过挂载的方式到容器里
git clone https://github.com/meolu/walle-web.git
1、构造容器: 宿主机贡献出: 5000 -> 容器80端口
docker run -it -v /data/wwwroot/walle-web:/data/wwwroot/walle-web -p 5000:80 --name python_demo ubuntu:latest /bin/bash
2、安装、更新必要的软件
apt-get update
apt-get install vim-gtk
apt-get install nginx
3、开始安装 walle的python扩展(walle给的 sh admin.sh init命令如果执行不成功则执行 它下面的6步)
#sh admin.sh init (相当于这个操作中具体执行的命令)
(1)apt install libmysqld-dev libmysqlclient-dev python-dev python-virtualenv python-pip
(2)pip install virtualenv
(3)virtualenv --no-site-packages -p /usr/local/bin/python2.7 venv (安装虚拟环境)
(4)source ./venv/bin/activate(激活虚拟环境)
(5)pip install -r ./requirements/prod.txt(安装其他一些东东)
(6)export GIT_PYTHON_REFRESH=quiet
sh admin.sh migration (如果执行失败,则分开执行以下5步)
(1)export FLASK_APP=waller.py
(2)flask db upgrade
(3)pip install flask
(4)pip install flask-migrate
(5)pip install flask-sqlalchemy
宿主机的nginx文件:
server {
listen 80;
server_name walle.zhangqi.art; # 域名设置
location / {
proxy_pass http://127.0.0.1:5000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
容器中的nginx文件:
server {
listen 80;
server_name walle.zhangqi.art; # 域名设置
access_log /data/wwwroot/walle-web/walle.log;
index index.html index.htm; # 日志目录
location / {
try_files $uri $uri/ /index.html;
add_header access-control-allow-origin *;
root /data/wwwroot/walle-web/fe; # 前端代码已集成到walle-web,即walle-web/fe的绝对路径
}
location ^~ /api/ {
add_header access-control-allow-origin *;
#return 200 'ok';
proxy_pass http://127.0.0.1:5000;
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Origin $host:$server_port;
proxy_set_header Referer $host:$server_port;
}
location ^~ /socket.io/ {
add_header access-control-allow-origin *;
proxy_pass http://127.0.0.1:5000;
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header Origin $host:$server_port;
proxy_set_header Referer $host:$server_port;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
# WebScoket Support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
nginx重启之后就可以正常访问了;
初始账号:
超管:[email protected] \ Walle123
所有者:[email protected] \ Walle123 (可以新建项目)
负责人:[email protected] \ Walle123
开发者:[email protected] \ Walle123
访客:[email protected] \ Walle123
使用过程中遇到的问题:
1、ssh远程连接 (如果之前有 ssh数据,则将 id_rsa.pub复制到 远程服务器上 authorized_keys)
walle所在的宿主机免密连接远程服务器
apt-get install openssh-server
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
2、错误: bad Request
#proxy_set_header Origin $host:$server_port;
nginx里面把这行注释掉就正常了
3、提交上线单时出现空白错误框,查看 logs/runtime.log 报下面之类的。
3e3ce3c735cf432db1cc9a5862f06f78: Sending packet MESSAGE data 2/walle,["branches",{"data":["dev","master","release","test"],"event":"branches"}]
3e3ce3c735cf432db1cc9a5862f06f78: Received packet MESSAGE data 2/walle,["commits",{"branch":"dev"}]
3e3ce3c735cf432db1cc9a5862f06f78: Received packet CLOSE data None
查看nginx的access.log文件发现他要连接 git仓库,http的需要输入用户名密码,所以在创建项目时git仓库的地址填ssh的,然后:
git config --global user.name 'zhangqi'
git config --global user.email '[email protected]'
(2)第二步
删除 .ssh文件夹下的 known_hosts文件
(3)git 命令(之后两个回车)
ssh-keygen -t rsa -C "[email protected]"
(4)将id_rsa.pub文件复制,登录到 github网站上面,找到设置SSH部分
然后再试就OK了
5、-bash: syntax error near unexpected token `('
名字中不允许有 () ,新建上线单,上线
6、Remote 'origin' has no refspec set
不一定是代码的问题,我这里是由于 复制了上一个上线项目,然后编辑成了之前的,有问题,之后重新添加项目就没有问题了