项目部署上线,如果是单服务器,那么有多种方式可以部署,比如直接ftp上传,或者直接git去拉取,人工操作也不会花费精力和时间,但是如果采用了集群模式,有多台服务器,那么依靠一台一台的去上传代码,就显得耗费精力了,最重要的是,一旦某台服务器少传或者错传了代码,那么直接会影响服务运行,风险性高,如果代码出现问题,要回滚到上一个稳定版本的话,也只有单台单台的去重新恢复。如果有一套部署机制,能够实现多台服务器自动部署代码,那就会减少大量的时间和精力,服务出现问题也能一键回滚到稳定版本,那么瓦力绝对是一个很好的选择。当然,有小伙伴会说,有jekins可以实现,本人对jekins也有一定的了解,功能方面没问题,对于管理界面来说,那就真的比不上瓦力了,另外配置的复杂程度方面,个人认为瓦力的配置相对容易些。借用瓦力官方的介绍,这是一款支持各种web代码发布,php、java、python、go等代码的发布、回滚可以通过web来一键完成, 一个可自由配置项目,更人性化,高颜值,支持git、多用户、多语言、多项目、多环境同时部署的开源上线部署系统。walle目前为止有两个大版本,分别为walle1.x版本和walle2.0,两个版本不兼容,1.x版本使用php语言开发,使用web服务访问,2.0版本使用python开发,脚本管理,在部署效率上,有了大幅的提升,此文就介绍一下,walle2.0版本在centos7上面的安装部署过程,想部署1.x版本的伙伴可以自行去阅读官方文档部署。

walle1.x官方文档地址:https://walle-web.io/docs/1/installation.html,walle2.0官方文档地址:http://www.walle-web.io/docs/dependency.html

1.环境检查

nginx

git

Python 3.5+ 和 Python 2.7+

MySQL 5.6.5以上,否则会在安装时报错

在MySQL 5.6.5版本之前,Automatic Initialization and Updating只适用于TIMESTAMP,而且一张表中,最多允许一个TIMESTAMP字段采用该特性。从MySQL 5.6.5开始,Automatic Initialization and Updating同时适用于TIMESTAMP和DATETIME,且不限制数量。

2.下载walle

git clone https://github.com/meolu/walle-web.git

3.nginx配置

nginx.conf文件内容如下:

  1. upstream webservers {
  2. server 192.168.64.139: weight=; #域名设置,需要配置python的访问端口
  3. }
  4.  
  5. server {
  6. listen ;
       #设置为自己的IP
  7. server_name 192.168.64.139;
  8.  
  9. #charset koi8-r;
  10. #access_log /var/log/nginx/host.access.log main;
  11.  
  12. location / {
  13. #这里设置为自己walle-web路径
  14. root /usr/share/nginx/html/walle-web/fe;
  15. index index.html index.htm;
  16. try_files $uri $uri/ /index.html;
  17. add_header access-control-allow-origin *;
  18. }
  19.  
  20. #error_page /.html;
  21.  
  22. # redirect server error pages to the static page /50x.html
  23. #
  24. error_page /50x.html;
  25. location = /50x.html {
  26. root /usr/share/nginx/html;
  27. }
  28.  
  29. # proxy the PHP scripts to Apache listening on 127.0.0.1:
  30. #
  31. #location ~ \.php$ {
  32. # proxy_pass http://127.0.0.1;
  33. #}
  34.  
  35. # pass the PHP scripts to FastCGI server listening on 127.0.0.1:
  36. #
  37. location ~ \.php$ {
  38. root /usr/share/nginx/html;
  39. fastcgi_pass 127.0.0.1:;
  40. fastcgi_index index.php;
  41. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  42. include fastcgi_params;
  43. }
  44.  
  45. location ^~ /api/ {
  46. add_header access-control-allow-origin *;
  47. proxy_pass http://webservers;
  48. proxy_set_header X-Forwarded-Host $host:$server_port;
  49. proxy_set_header X-Real-IP $remote_addr;
  50. proxy_set_header Origin $host:$server_port;
  51. proxy_set_header Referer $host:$server_port;
  52. }
  53.  
  54. location ^~ /socket.io/ {
  55. add_header access-control-allow-origin *;
  56. proxy_pass http://webservers;
  57. proxy_set_header X-Forwarded-Host $host:$server_port;
  58. proxy_set_header X-Real-IP $remote_addr;
  59. proxy_set_header Origin $host:$server_port;
  60. proxy_set_header Referer $host:$server_port;
  61. proxy_set_header Host $http_host;
  62. proxy_set_header X-NginX-Proxy true;
  63.  
  64. # WebScoket Support
  65. proxy_http_version 1.1;
  66. proxy_set_header Upgrade $http_upgrade;
  67. proxy_set_header Connection "upgrade";
  68. }
  69. # deny access to .htaccess files, if Apache's document root
  70. # concurs with nginx's one
  71. #
  72. #location ~ /\.ht {
  73. # deny all;
  74. #}
  75. }

4.初始化

cd walle-web

sh admin.sh init

初始化会安装更新各种依赖包,执行时间较长,耐心等待,执行成功,如下图:

执行后,可能的报错:

1.ERROR: Package 'gunicorn' requires a different Python: 2.7.5 not in '>=3.4'

解决方式:

需要需改文件配置:/walle-web/requirements/prod.txt  gunicorn>=19.1.1  改成 gunicorn==19.1.1

2.No module named flask.helpers

安装pip install flask-helpers

pip list 检查一下是否有 flask-helpers

修改完成后,重新执行初始化操作

5.配置数据库

先创建数据库walle

CREATE DATABASE `walle` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

修改配置文件:/walle-web/walle/config/settings_prod.py

修改瓦力数据源配置信息@TODO 部分是需要修改的,大致如下:

  1. # -*- coding: utf- -*-
  2. """
  3. walle-web
  4. Application configuration.
  5. 注意: 带了 @TODO 的地方可能需要你的调整
  6.  
  7. :copyright: © - walle-web.io
  8. :created time: -- ::
  9. :author: wushuiyong@walle-web.io
  10. """
  11.  
  12. import os
  13. from walle.config.settings import Config
  14. #修改为自己用户名,密码,地址
  15. SETTINGS = {
  16. "MYSQL_USER": "root",
  17. "MYSQL_PASSWORD": "",
  18. "MYSQL_DATABASE": "walle",
  19. "MYSQL_ROOT_PASSWORD": "",
  20. "MYSQL_HOST": "127.0.0.1",
  21. "MYSQL_PORT": ,
  22. }
  23.  
  24. class ProdConfig(Config):
  25. """Production configuration."""
  26. ENV = 'prod'
  27. DEBUG = False
  28. SQLALCHEMY_ECHO = False
  29.  
  30. # 服务启动 @TODO
  31. # HOST 修改为与 nginx server_name 一致.
  32. # 后续在web hooks与通知中用到此域名.
  33. HOST = '192.168.64.139'
  34. PORT =
  35. # https True, http False
  36. SSL = False
  37.  
  38. # 数据库设置 @TODO
  39. SQLALCHEMY_DATABASE_URI = 'mysql://root:123456@localhost:3306/walle?charset=utf8'
  40. #SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://{root}:{123456}@{localhost}:{3306}/{walle}?charset=utf8mb4'.format(
  41. #SETTINGS["MYSQL_USER"], SETTINGS["MYSQL_PASSWORD"], SETTINGS["MYSQL_HOST"], SETTINGS["MYSQL_PORT"],
  42. #SETTINGS["MYSQL_DATABASE"])
  43.  
  44. # 阿里云RDS强制释放空闲连接导致经常报错 mysql server has gone way
  45. # 适当修改该参数即可 单位为秒
  46. # N秒不用的连接自动释放
  47. # SQLALCHEMY_POOL_RECYCLE =
  48.  
  49. # 本地代码检出路径(用户查询分支, 编译, 打包) #TODO
  50. CODE_BASE = '/tmp/walle/codebase/'
  51.  
  52. # 日志存储路径 @TODO
  53. # 默认为walle-web项目下logs, 可自定义路径, 需以 / 结尾
  54. # LOG_PATH = '/var/logs/walle/'
  55. LOG_PATH = os.path.join(Config.PROJECT_ROOT, 'logs')
  56. LOG_PATH_ERROR = os.path.join(LOG_PATH, 'error.log')
  57. LOG_PATH_INFO = os.path.join(LOG_PATH, 'info.log')
  58. LOG_FILE_MAX_BYTES = * *
  59.  
  60. # 邮箱配置 @TODO
  61. MAIL_SERVER = 'smtp.qq.com'
  62. MAIL_PORT =
  63. MAIL_USE_SSL = True
  64. MAIL_USE_TLS = False
  65. MAIL_DEFAULT_SENDER = 'xxxxxx'
  66. MAIL_USERNAME = 'xxxxxx'
  67. MAIL_PASSWORD = 'xxxxx'
  68.  
  69. # 登录cookie 防止退出浏览器重新登录
  70. COOKIE_ENABLE = False

6.数据迁移

sh admin.sh migration

执行成功如下图所示:

7.启动/重启

启动:sh admin.sh start

重启:sh admin.sh restart

查看启动状态:netstat -ntpl  看到5000端口已开启

8.访问

浏览器访问:http://192.168.64.139,如果出现任何打开页面出现404或者只显示’wall-web 2.0’等,都是nginx配置或者服务没有启动,细心检查。walle运行过程,以及部署过程出错了,具体日志可以查看logs/runtime.log

默认提供的登录账户:

超管:super@walle-web.io  Walle123

所有者:owner@walle-web.io Walle123

负责人:master@walle-web.io Walle123

开发者:developer@walle-web.io Walle123

访客:reporter@walle-web.io  Walle123

登录后,界面如下:

到此,就把walle成功的部署了,后续还会有walle项目配置,部署上线的流程介绍,有兴趣的伙伴可以留意一下。各位如果觉得还有点意义,烦请点一下推荐,加个关注,互相交流。

centos7 walle2瓦力部署教程的更多相关文章

  1. Django+nginx+uwsgi部署教程(centos7+ubuntu16.4)

    在线教育平台项目演示地址 项目部署教程 1.1.工作原理介绍 django 一个基于python的开源web框架 uwsgi 一是一个web服务器,也可以当做中间件 nginx 常用高性能代理服务器 ...

  2. 又一篇Centos7下的asp.net core部署教程

    历程2个多月的学习,我终于从PHP转.Net开发了. 从壹开始前后端分离[ .NETCore2.1 +Vue 2 +AOP+DI]框架 感谢老张的博客,我对asp.net core入门主要就是靠他的博 ...

  3. 在CentOS7 开发与部署 asp.net core app笔记

    原文:在CentOS7 开发与部署 asp.net core app笔记 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/lihongzhai/art ...

  4. centos7.8 安装部署 k8s 集群

    centos7.8 安装部署 k8s 集群 目录 centos7.8 安装部署 k8s 集群 环境说明 Docker 安装 k8s 安装准备工作 Master 节点安装 k8s 版本查看 安装 kub ...

  5. deepsooncms在Ubuntu 14.04上部署教程

    deepsooncms在Ubuntu 14.04上部署教程 一.安装mono1.在命令行运行sudo apt-key adv --keyserver keyserver.ubuntu.com --re ...

  6. 自动化部署教程(一) redhat安装jenkins

    自动化部署教程(一)  redhat安装jenkins 源配置: sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.or ...

  7. 写给新手看的Flask+uwsgi+Nginx+Ubuntu部署教程

    学习 Flask,写完一个 Flask 应用需要部署的时候,就想着折腾自己的服务器.根据搜索的教程照做,对于原理一知半解,磕磕碰碰,只要运行起来了,谢天谢地然后不再折腾了,到下一次还需要部署时,这样的 ...

  8. LAMP 搭建wordpress部署教程贴.

    LAMP 搭建wordpress部署教程贴.这是一篇主要将LAMP,并且通过wordpress来进行验证,演示.如何去部署PHP CMS很多新手看到LAMP就很很头大,觉得很难搞,编译安装,搞了好几天 ...

  9. Cowrie蜜罐部署教程【转载】

    0.蜜罐分类: 低交互:模拟服务和漏洞以便收集信息和恶意软件,但是攻击者无法和该系统进行交互: 中等交互:在一个特有的控制环境中模拟一个生产服务,允许攻击者的部分交互: 高交互:攻击者可以几乎自由的访 ...

随机推荐

  1. 使用pem连接服务器

    后台同学甩给你一个pem文件,username@IP后如何链接服务器 准备:ssh客户端 例子xshell 文件->新建->主机(连接界面主机输入框输入IP)->点击用户身份-> ...

  2. SV 类继承的多态性问题(NVDIA2019笔试)

    1.原题 class class_a; virtual function void print_name(); $display("this is class_a"); endfu ...

  3. PHP0003:PHP基础2

    die表示结束,程序到此运行不过来了. 字符串比较是挨个比较

  4. iframe在iphone手机上的问题

    问题1: 通过document.addEventListener("scroll",function(){})对页面滚动监听事件进行监听,但ios下$(document).scro ...

  5. maven发布java-分支构建

    1.安装parameter插件 2. 新建maven项目 3.配置maven项目 4.配置maven项目2 5.配置maven项目3 6. 模拟开发给提交打tag标签 7.版本发布 8.tag获取并构 ...

  6. 怎么利用 ChromeDriver 和 Selenium对 CEF应用进行自动化测试-java实现

    Overview ChromeDriver and Selenium are tools for automated testing of Chromium-based applications. T ...

  7. Java中的isEmpty方法、null以及""的区别

    本文转自:https://blog.csdn.net/peng86788/article/details/80885814 这是一个比较容易混淆的概念,为了弄清楚这个问题,最好的方法当然是写程序来验证 ...

  8. c基本语法和数据类型

    一.C语言结构 C 程序主要包括以下部分: 预处理器指令 函数 变量 语句 & 表达式 注释 二.基本语法 1.  分号是语句结束符. 2. 单行注释//.多行注释/* */. 3. 标识符是 ...

  9. gitlab 备份和恢复

    前言 gitlab这个代码托管工具真是强大,很多东西都是做好了直接用的. 这里就包括备份和恢复功能. 正文 备份 我们可以直接运行此命令,来进行备份. sudo gitlab-rake gitlab: ...

  10. Python静态方法、类方法、属性方法

    静态方法 使用静态方法以后,相当于把下面的函数和类的关系截断了,它的作用相当于是类下面的一个独立函数,不会自动传入参数self. class people:..... @staticmethod de ...