DevOps 常见于各大云计算提供商。DevOpe被用于打破开发者和运维者之间的壁垒,目的是缩短软件 继续阅读
GitLab 绑定 GCP 使用 Auto DevOps(可领取GCP $200.00 赠金)
Auto DevOps provides pre-defined CI/CD configuration which allows you to automatically detect, build, test, deploy, and monitor your applications. Leveraging CI/CD best practices and tools, Auto DevOps aims to simplify the setup and execution of a mature & modern software development lifecycle.
GitLab 的 Auto DevOps 是一个亮点,博主对于其特性还不够了解,在此不多谈。本文仅介绍如何为自建的 GitLab 绑定 Google Kubernets Engine (GKE)。
GitLab 配置 Kubernets 节点的方式用两种,一种是绑定 GKE,一种是使用已存在的 Cluster ,但实测第二种貌似是用于 AWS ,这一点博主暂且不提。接着说本文重点 GKE。绑定 GKE需要配置 Google OAuth2 OmniAuth Provider。
领取GCP $200.00 赠金(可用3个月)

在根据上文 《KVM 虚拟机安装 GitLab EE》 配置完毕 GieLab,在 GitLab 绑定 Kubernets 节点的界面出现这样一段描述:
[tip type=”info” title=”Did you know?”] Every new Google Cloud Platform (GCP) account receives $300 in credit upon sign up. In partnership with Google, GitLab is able to offer an additional $200 for both new and existing GCP accounts to get started with GitLab’s Google Kubernetes Engine . [/tip]
大概意思是说,谷歌为每一个注册 GCP 的新账户提供 $300 的赠金。作为 GCP 的伙伴,GitLab 也可以为每一位新的并已有 GCP 账户的用户提供 $200 的赠金用于整合 GKE 和 GitLab 的整合。于是抱着试一试的心态,点击按钮填写表单,没想到没过多久,就收到了邮件:

邮件告诉我,GCP 代表他们的合作伙伴为我提供了 $200 的信用额度,我可以使用这一额度构建自己的应用程序。兑换的信用代码需要在 30 天内兑换并在兑换后三个月内到期。
进入兑换,成功兑换。

如果你是进来看领取赠金的方法,我在这里简单总结一下,但是在此我想说一下:云计算服务可以做的事情很多,如果仅仅是用于 VPS 就颇有一种大炮打蚊子的场面。GCP 等大型云服务提供商提供的稳定、灵活高可用性的云计算服务更加令人兴奋。
大致方法如下:
- 自建 GitLab (Docker,War包等方式)
- 使用root账户进入管理后台,进入添加 Kubernets 节点界面
- 检查是否有获取 GCP 赠金的入口
为 GitLab 配置 GCP 凭据实现二者对接
-
首先进入 GCP 云资源管理界面: cloud resource manager。
-
创建项目,可使用
GitLab作为项目名称,项目ID可以使用系统自动生成的,也可自己指定但必须唯一 -
进入 API 控制台
-
在左上方切换到刚刚新建的项目
-
在左侧选择
OAuth 同意屏幕并完整填写信息 -
从左侧 sidebar 进入
凭据,创建凭据,选择OAuth 客户端 ID,并完整填写信息
应用类型选择Web 应用程序名称可使用自动生成的或自定义已获授权的 JavaScript 来源可填入您的 GitLab域名https://gitlab.example.com/已获授权的重定向 URI需包含下列两个地址https://gitlab.example.com/users/auth/google_oauth2/callbackhttps://gitlab.example.com/-/google_api/auth/callback
-
完成以上步骤即可得到
客户端 ID和客户端密钥, 信息后面还能看到,后面配置需要用到。 -
为项目授权以下 APi 权限
- Google Kubernetes Engine API
- Cloud Resource Manager API
- Cloud Billing API
通过这个方法授权:
- 进入 Google API Console
- 点击
启用APi和服务 - 在搜索框内依次检索以上三个
API,进入点击启用 - 等待数分钟完成
- 修改 GitLab 配置
# For Omnibus GitLab:
$ sudo editor /etc/gitlab/gitlab.rb
# For installations from source:
$ cd /home/git/gitlab
$ sudo -u git -H editor config/gitlab.yml
找到以下内容进行修改:
# For Omnibus GitLab:
gitlab_rails['omniauth_providers'] = [
{
"name" => "google_oauth2",
"app_id" => "YOUR_APP_ID",
"app_secret" => "YOUR_APP_SECRET",
"args" => { "access_type" => "offline", "approval_prompt" => '' }
}
]
# For installations from source:
- { name: 'google_oauth2', app_id: 'YOUR_APP_ID',
app_secret: 'YOUR_APP_SECRET',
args: { access_type: 'offline', approval_prompt: '' } }
修改 YOUR_APP_ID 和 client ID为上面获取到的 GCP 密钥。
- 完成

参考文献
综述 DevOps
DevOps 常见于各大云计算提供商。DevOpe被用于打破开发者和运维者之间的壁垒,目的是缩短软件开发周期并提供高质量的持续集成。
[tip type=”info” title=”DevOps”]
DevOps is a set of practices that combines software development (Dev) and information-technology operations (Ops) which aims to shorten the systems development life cycle and provide continuous delivery with high software quality. (WikiPedia)
[/tip]
这样的说法很抽象,来看看各个服务商都是怎么描述自家的 DevOps 的吧。
- CODING DevOps 包括代码托管、项目管理、测试管理、持续集成、制品库等多款产品和服务,涵盖软件开发从构想到交付的一切所需,使研发团队在云端高效协同,实践敏捷开发与 DevOps,提升软件交付质量与速度。 (Tencent Cloud)
- DevCloud是集华为研发实践、前沿研发理念、先进研发工具为一体的研发云平台; 面向开发者提供研发工具服务,让软件开发简单高效。(HuaWei Cloud)
- 利用 DevOps 缩短版本发布间隔时间,提高可靠性,在竞争中保持领先地位; DevOps 是一种日益常见的软件交付方法,开发和运营团队以速度、质量和控制协作构建、测试、部署和监控应用程序。 DevOps 与任何类型的软件项目都相关,无论架构、平台或用途如何。常见用例包括:云原生和移动应用、应用集成以及现代化和多云管理。 成功的 DevOps 实施通常依赖于一组集成的解决方案或“工具链”,用于消除手动步骤,减少错误,并超越小型孤立团队实现扩展。 (IBM DevOps)
- 无论是才刚开始执行 DevOps 实现,还是期望与现有工具链和流程集成,都可以采用 Azure DevOps 技术更加快速、安全地构建端到端的持续交付管道。减少工具集维护耗费的时间,更加专注于客户价值。通过 DevOps 技术生成、发布、测试并监视云和移动应用程序非常简单可靠,可让用户使用任意工具链持续实现创新。(Azure DevOps)
- DevOps 是一项组织和文化运动,旨在加快软件交付速度,提高服务可靠性,并在软件利益相关方之间建立共享所有权。了解如何提高软件交付的速度、稳定性、可用性和安全性。(Google Cloud)
- AWS 可以提供一套灵活的服务,让各家公司利用 AWS 和 DevOps 实践经验来更加快速、可靠地构建和交付产品。这些服务可以简化基础设施的预置和管理、应用程序代码的部署、软件发布流程的自动化以及应用程序和基础设施性能的监控。DevOps 集文化理念、实践和工具于一身,可以提高组织高速交付应用程序和服务的能力,与使用传统软件开发和基础设施管理流程相比,能够帮助组织更快地发展和改进产品。这种速度使组织能够更好地服务其客户,并在市场上更高效地参与竞争。(AWS DevOps)
从上面多家云服务商的描述大概可以窥探 DevOps 一二了吧。目前来说,DevOps更多的还停留在理念层面,它使用容器、Kubernetes 和微服务等服务,多提供代码托管、工作流、软件测试、持续交付等功能。越是大型的企业,提供的服务更全面、高级、层次更高。反观国内的提供商还是有一些差距的。
根据文章 《DevOps漫谈之一:DevOps、CI、CD都是什么鬼?》的说法,DevOps是 Development 和 Operations 的组合,是一种方法论,是一组过程、方法与系统的统称,用于促进应用开发、应用运维和质量保障(QA)部门之间的沟通、协作与整合。以期打破传统开发和运营之间的壁垒和鸿沟。

根据另一篇文章《DevOps简介》的说法:
DevOps的一个巨大好处就是可以高效交付,这也正好是它的初衷。Puppet和DevOps Research and Assessment (DORA) 主办了2016年DevOps调查报告,根据全球4600位各IT公司的技术工作者的提交数据统计,得出高效公司平均每年可以完成1460次部署。
与低效组织相比,高效组织的部署频繁200倍,产品投入使用速度快2555倍,服务恢复速度快24倍。在工作内容的时间分配上,低效者要多花22%的时间用在为规划好或者重复工作上,而高效者却可以多花29%的时间用在新的工作上。所以这里的高效不仅仅指公司产出的效率提高,还指员工的工作质量得到提升。
DevOps另外一个好处就是会改善公司组织文化、提高员工的参与感。员工们变得更高效,也更有满足和成就感;调查显示高效员工的雇员净推荐值(eNPS:employee Net Promoter Score)更高,即对公司更加认同。
综上,DevOps 致力于促进开发人员和运维人员的沟通,及时递交需求、完成软件测试、反馈问题、自动化交付。可以免去很多机械化的操作。这么说,作者认为这和 工作流 的理念也有一些像。
工作流(Work Flow)就是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。工作流要解决的主要问题是:为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传递文档、信息或者任务。简单地说,工作流就是一系列相互衔接、自动进行的业务活动或任务。我们可以将整个业务过程看作是一条河,其中流过的就是工作流。(MBA 智库)
将一切可流程化的工作流程化,搭建一个高灵活性的工作流平台,将这一平台应用于各个领域,这已成为大势所趋。微软的 Folw,跨平台的 IFTTT,苹果的 捷径,开源的 N8n 等等工具都在致力于将机械化的工作流水线化,从而提高工作效率。Gis 专业的博主最近也在想,能不能将地信的种种应用做成模版,从而将分析过程简化,降低 Gis 的使用门槛,让更多的人可以使用到。
使用广泛的 git hosting 平台 gitlab 也因其强大的 CI/CD 功能而闻名,实际上在使用 GitLab 时是需要绑定 Google Cloud Platform(GCP) 的 Google Kubernetes Engine 服务进行使用的。其实还有开源可用的 Jenkins 可以作为 CI/CD 的有力工具。
工具众多,开源可用,工作流和持续集成有着众多类似之处,但究竟会怎样还是要实践后才知道。
参考文献
Linux 使用 DNSMasq 自建 DNS 服务器
DNS(Domain Name System) 是一个为计算机、服务器或其他任何需要接入互联网或私有网络提供分级域名分发系统(hierarchical and decentralized naming system)。
在内网中又一台服务器提供服务,为了使用使其可以在公共网络中访问到需要为它分配 ip 或者使用端口转发、内网穿透等,但绑定域名后域名解析到公网ip,如果在内网访问的话就写多此一举。因此在内网自建一台 DNS 服务器,使其优先级高于公网域名解析服务器,进而实现内网访问解析为内网 ip 且不影响外网访问的目的。
DNSMasq 主要用来解决内网 DNS 域名缓存、DHCP、网络启动和路由通告功能,本文目的是将 DNSMasq 作为内网 DNS 使用。
- 安装 DNSMasq
# Ubuntu/Debian
$ sudo apt update
$ sudo apt install -y dnsmasq
# Centos
$ yum install dnsmasq -y
$ service dnsmasq start
- 修改配置
$ sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
$ sudo vim /etc/dnsmasq.conf
....
resolv-file=/etc/resolv.conf
strict-order
listen-address=<host-ip>
addn-hosts=/etc/hosts.dnsmasq
修改内容解释:
- resolv-file:从文件读取 DNSMasq 上游的 DNS 服务器配置。
- strict-order:resolv-file 文件中如果指定了多个 DNS 服务器,严格安装 DNS 服务器的先后顺序查询域名。
- listen-address:监听地址,如果你不想所有用户都使用你的DNS服务,可以在listen-address后面加上你指定的IP地址即可。
- addn-hosts:从文件读取本地 DNS 域名和 IP 的对应关系,格式为 。其实可以把 IP 和域名的对应关系写在 /etc/hosts 文件中,DNSMasq 默认从那里读取,但如果要支持一个域名对应多个 IP,就必须使用 addn-hosts 选项了。
/etc/hosts.dnsmasq 文件内容如下:
$ cat /etc/hosts.dnsmasq
10.0.0.1 blackpiglet.com
10.0.0.2 blackpiglet.com
10.0.0.3 blackpiglet.com
修改完成后重启 DNSMasq
$ sudo systemctl restart dnsmasq.service
- 配置Dnsmasq上游DNS服务器
DNSMasq 是从 /etc/resolv.conf 文件中读取上游 DNS 服务器, 编辑 /etc/resolv.conf ,参考如下:
nameserver 223.5.5.5
nameserver 223.4.4.4
- 启动Dnsmasq并加入启动项(Centos)
chkconfig dnsmasq on
/etc/init.d/dnsmasq restart
- 使用
在需要内网解析的服务器上修改网络设置中的DNS服务器即可。
参考文献
KVM虚拟机安装 GitLab EE
GitLab 是一个基于网页的软件开发生命周期管理工具,提供了 git 代码仓库、知识库、问题追踪、CI/CD 流水线功能,使用开源许可证,由 GitLab 公司开发(来自 WikiPedia)。
自建 GitLab 服务器基于以下原因:
- GitHub 到国内的访问速度实在堪忧
- 随着某种关系的变化发展,作者并不指望这种状况有什么改善
- Git 仓库速度缓慢会拖慢开发效率
- GitHub Pages 的访问速度慢,托管在此的网页对于国内用户实在太不友好
- GitLab 提供的 CI/CD 流水线功能比较完善
- GitLab 的文档很全面,英文说明还不错,值得探索
- 借此机会提高英文
自建方法还是基于 KVM 虚拟化一台 Ubuntu 虚拟机,并由这台虚拟机提供服务,外网由宿主机反向代理到内网实现外网访问。本文记录基于此上描述的环境及日后遇到的解决方案,本文带有一个持续更新区。
虚拟化
-
创建虚拟磁盘
qemu-img create -f qcow2 ubuntu_gitlab.qcow2 100G -
新建虚拟机
virt-install \ --virt-type=kvm \ --name=ubuntu_gitlab \ --hvm \ --vcpus=4 \ --memory=6144 \ --cdrom=/srv/kvm/iso/ubuntu-18.04.3-live-server-amd64.iso \ --disk path=/srv/kvm/ubuntu_gitlab.qcow2,size=100,format=qcow2 \ --network network=default \ --graphics vnc,password=tianlun666,listen=::,port=5914 \ --autostart \ --force
3. 安装
在安装的过程中,为虚拟机配置网络如下:
- statics ip : `192.168.122.4`
- GatWay: `192.168.122.1`
- name server: `192.168.122.1`
- Subnet: `192.168.122.0/24`
## 安装 GitLab
GitLab 官方提供的[安装说明](https://about.gitlab.com/install/)很全面,本文提取其中关键步骤,具体安装请以官网文档为准。
1. 安装并配置相关依赖
$ sudo apt-get update $ sudo apt-get install -y curl openssh-server ca-certificates
[tip type="info" title="安装Postfix (选装)"]
GitLab 支持 Postfix, SMTP 等方式实现邮件通知,使用SMTP请跳过此步,如果需要安装Postfix邮件请执行以下的命令:
sudo apt-get install -y postfix
安装过程中可能会出现一个全屏显示窗口,此时选择'Internet Site'并回车,使用你服务器的外部 DNS 作为'mail name'并回车,不出意外的话安装会继续进行。
[/tip]
2. 添加 GitLab 软件源
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
3. 运行 GitLab 安装
将代码中的网址替换为您为 GitLab 准备的地址,GitLab 会使用 Let's Encrypt 验证您的域名并自动为其配置 SSL。
sudo EXTERNAL_URL=”https://gitlab.example.com” apt-get install gitlab-ee
4. 设置默认 root 密码。
使用浏览器进入您上一步设置的地址,使用 `root` 账户登录,系统会提示您为其设置密码。
## 案例汇总(持续更新区)
### 为 GitLab 配置 SMTP 邮箱
1. 依次修改配置文件
vim /etc/gitlab/gitlab.rb
依次修改
gitlab_rails[‘smtp_enable’] = true gitlab_rails[‘smtp_address’] = “smtp.mxhichina.com” gitlab_rails[‘smtp_port’] = 25 gitlab_rails[‘smtp_user_name’] = “gitlab@yinnote.com” gitlab_rails[‘smtp_password’] = “xxxxxx” gitlab_rails[‘smtp_domain’] = “yinnote.com” gitlab_rails[‘smtp_authentication’] = “login” gitlab_rails[‘smtp_enable_starttls_auto’] = true gitlab_rails[‘smtp_tls’] = false
gitlab_rails[‘gitlab_email_from’] = “gitlab@yinnote.com” user[“git_user_email”] = “gitlab@yinnote.com”
2. 生效配置并重启 GitLab
$ gitlab-ctl reconfigure $ gitlab-ctl restart
3. 监听日志打印
如果出现问题,可以使用该命令在控制台监听日志。
$ gitlab-ctl tail
4. 可能用到的 VIM 命令
整页翻页 ctrl-f ctrl-b
f就是forword b就是backward
翻半页
ctrl-d ctlr-u d=down u=up
滚一行
ctrl-e ctrl-y
zz 让光标所在的行居屏幕中央 zt 让光标所在的行居屏幕最上一行 t=top zb 让光标所在的行居屏幕最下一行 b=bottom
查找
/string
向前(Forward)查找字符串string
按下回车后,光标就能跳到正确的地方
### 手动刷新 Let’s Encrypt 证书
sudo gitlab-ctl reconfigure sudo gitlab-ctl renew-le-certs
## 参考文献
- [GitLab Installation](https://about.gitlab.com/install/)
- [WikiPedia/GitLab](https://en.wikipedia.org/wiki/GitLab)
- [VIM中的翻页命令](https://blog.csdn.net/nyist327/article/details/48625385)
- [VIM 查找文本](https://blog.csdn.net/hitustc/article/details/5585101)
- [GitLab邮件配置](https://www.jianshu.com/p/b91d2e676cba)
- [Git:gitlab修改域名配置](https://blog.csdn.net/qq_36937234/article/details/89381857)
- [SSL Configuration](https://docs.gitlab.com/omnibus/settings/ssl.html)
- [使用SSL证书保护GitLab服务器的方法](https://ywnz.com/linuxyffq/3961.html) 自建网盘之 NextCloud 终极记录
自建过许多网盘,试过 可道云、Seafile、FileRun、Nextcloud,但Nextcloud的如下特性吸引了我:
- 完整、好用的客户端,包括 windows、mac、android、ios …
- 强大的插件扩展,如 Talk, Contacts, notes, Maps …
- 完整的第三方扩展,支持 Amazie S3, OneDrive, DropBox, Google Drive, Ftp, WebDav …
- …
以上种种吸引了我进行了无数次的配置、尝试、探索。我在 Centos, Debian, Ubuntu, Docker, Cpanel Virtual Hosting 上都尝试过配置 Nextcloud , 但最终发现,还是官方首推的 sudo snap install nextcloud 方式是最稳定的,此外的自建环境 (Linux + Nginx + Php + MySQL) 总是会出各种各样的兼容性、异常报错,而这些异常报错会在一些莫名其妙、意想不到的地方出现让人在一个莫名其妙的地方掉坑。
以上种种,我决定在服务器上 KVM 虚拟出来一个 Ubuntu 系统专门配置 Nextcloud 服务。会有人说有必要吗?在一台 VPS 就可以配置 LNMG/LAMP + CLoud Drive + Docker + Kubernates + node.js 等等环境。但在我踩过无数的坑之后,发现一切兼容的,都难以发挥其自身最大的力量。
话不多说,本文主要记录 Nextcloud 配置在 KVM 虚拟化出的 Ubuntu 系统上,并持续更新后续各种基于此环境的操作。
虚拟机环境
- 创建虚拟磁盘
qemu-img create -f qcow2 ubuntu_nextcloud.qcow2 100G
-
创建
KVM虚拟机virt-install \ --virt-type=kvm \ --name=ubuntu_nextcloud \ --hvm \ --vcpus=4 \ --memory=4096 \ --cdrom=/srv/kvm/iso/ubuntu-18.04.3-live-server-amd64.iso \ --disk path=/srv/kvm/ubuntu_nextcloud.qcow2,size=400,format=qcow2 \ --network network=default \ --graphics vnc,password=kvm,listen=::,port=5913 \ --autostart \ --force -
VNC装系统
通过 VNC viewer 连入宿主机 5913 端口输入密码,安装操作系统。
- 端口转发
在宿主机使用 Frp, Iptables, NAT…等方式按照需求将虚拟机 80 端口转发出来,当然也可以不转发,这样子可以在内网的机器上使用内网 ip 直接访问到将来配置的 Nextcloud.
安装 nextcloud
A snap is a zip file containing an application together with its dependencies, and a description of how it should safely be run on your system, especially the different ways it should talk to other software. Most importantly snaps are designed to be secure, sandboxed, containerized applications isolated from the underlying system and from other applications.
To install the Nextcloud Snap Package, run the following command in a terminal:
sudo snap install nextcloud
此前已经说明在这里使用 snap 一键安装 Nextcloud ,除此之外还有 Web installer , zip, 等方式,可以直接将 nextcloud 安装在 自建好的 lnmp 环境上,但这种方式在此不再说明。
注:英文部分摘自官网说明。
Nextcloud 维护 (持续更新区)
在使用过程中会需要各种莫名其妙的问题,因此在这里记录基于以上配置方法及环境下遇到的问题。
snap 常用命令
#查看snap版本信息
snap --version
#找出所有snap应用
snap find
#安装应用
snap install 包名
#重启应用
snap restart 应用名
#升级应用
snap refresh 应用名
#查看安装的应用
snap list
#卸载应用
snap remove 应用名
Nextcloud 资源位置
- 数据资源位置:
/var/snap/nextcloud/common/nextcloud/data - 配置资源位置:
/var/snap/nextcloud/current/nextcloud/config/config.php
调整 PHP 内存限制的方法
$ sudo snap set nextcloud php.memory-limit=512M
# To set it to be unlimited
$ sudo snap set nextcloud php.memory-limit=-1
调整最大处理时间的方法
$ sudo snap set nextcloud nextcloud.cron-interval=10m
# disable the cronjob completely
$ sudo snap set nextcloud nextcloud.cron-interval=-1
添加可信域的方法
# 查看可信域
$ sudo nextcloud.occ config:system:get trusted_domains
# 添加可信域,请调整 1 和 example.com, 计数从 ‘0’ 开始
$ sudo nextcloud.occ config:system:set trusted_domains 1 --value=example.com
关闭维护模式的方法
sudo nextcloud.occ maintenance:mode --off
IOS 配置 Calendar / Contacts
-
打开设置 settings application -> Select Mail, Contacts, Calendars -> Select Add Account Select Add CalDAV/CardDAV account.
-
填入服务器、账号、密码
For server, type example.com/remote.php/dav/principals/users/USERNAME/
- 成功 Select Next.
上传文件限制
根据文章 snap安装nextcloud详细配置 的说法:snap nextcloud的项目地址在https://github.com/nextcloud/nextcloud-snap,目前snap安装的nextcloud还不能调整和配置包内的php和apache2,但官方已经配置好的apache2和PHP 单文件16Gb的上传限制(实际好像不限制大小),一般来说应该不需要更改。
自签名证书 ssl
I copyied the cert files in /var/snap/nextcloud/current/certs/custom/
and then
sudo nextcloud.enable-https custom -s cert.pem privkey.pem chain.pem
也许会成功,来源 :Using your own SSL certs in snap
参考文献
- GitHub/nextcloud/nextcloud-snap
- Nextcloud/Docs/Installation and server configuration/Installation on Linux
- NextCloud/Docs/Groupware/Synchronizing with iOS
- NextCloud一直处于维护状态解决方法
- 如何在Ubuntu 18.04上安装和配置Nextcloud
- Ubuntu使用Snap快速安装NextCloud网盘,并配置域名及SSL证书
- Ubuntu使用Snap快速安装NextCloud网盘,并配置域名及SSL证书
- snap安装nextcloud详细配置
解决 MySQL 报错 “ Column count of mysql.user is wrong…”
新建 MySQL 账户报错:
Column count of mysql.user is wrong. Expected 45, found 43. Created with MySQL 5
错误是由于你曾经升级过数据库,升级完后没有使用mysql_upgrade升级数据结构造成的。
解决办法:使用mysql_upgrade命令
$ mysql_upgrade -u root -p
Enter password:
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Checking system database.
mysql.columns_priv OK
mysql.db OK
mysql.engine_cost OK
mysql.event OK
mysql.func OK
mysql.general_log OK
mysql.gtid_executed OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.innodb_index_stats OK
mysql.innodb_table_stats OK
mysql.ndb_binlog_index OK
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql.server_cost OK
mysql.servers OK
mysql.slave_master_info OK
mysql.slave_relay_log_info OK
mysql.slave_worker_info OK
mysql.slow_log OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
Upgrading the sys schema.
Checking databases.
pan.oc_accounts OK
pan.oc_activity OK
pan.oc_activity_mq OK
pan.oc_addressbookchanges OK
pan.oc_addressbooks OK
pan.oc_appconfig OK
pan.oc_authtoken OK
pan.oc_bruteforce_attempts OK
pan.oc_calendar_invitations OK
pan.oc_calendar_reminders OK
pan.oc_calendar_resources OK
pan.oc_calendar_resources_md OK
pan.oc_calendar_rooms OK
pan.oc_calendar_rooms_md OK
pan.oc_calendarchanges OK
pan.oc_calendarobjects OK
pan.oc_calendarobjects_props OK
pan.oc_calendars OK
pan.oc_calendarsubscriptions OK
pan.oc_cards OK
pan.oc_cards_properties OK
pan.oc_collres_accesscache OK
pan.oc_collres_collections OK
pan.oc_collres_resources OK
pan.oc_comments OK
pan.oc_comments_read_markers OK
pan.oc_credentials OK
pan.oc_dav_cal_proxy OK
pan.oc_dav_shares OK
pan.oc_directlink OK
pan.oc_external_applicable OK
pan.oc_external_config OK
pan.oc_external_mounts OK
pan.oc_external_options OK
pan.oc_federated_reshares OK
pan.oc_file_locks OK
pan.oc_filecache OK
pan.oc_filecache_extended OK
pan.oc_files_trash OK
pan.oc_flow_checks OK
pan.oc_flow_operations OK
pan.oc_group_admin OK
pan.oc_group_user OK
pan.oc_groups OK
pan.oc_jobs OK
pan.oc_login_flow_v2 OK
pan.oc_maps_address_geo OK
pan.oc_maps_apikeys OK
pan.oc_maps_device_points OK
pan.oc_maps_devices OK
pan.oc_maps_favorites OK
pan.oc_maps_photos OK
pan.oc_maps_tracks OK
pan.oc_migrations OK
pan.oc_mimetypes OK
pan.oc_mounts OK
pan.oc_notes_meta OK
pan.oc_notifications OK
pan.oc_notifications_pushtokens OK
pan.oc_oauth2_access_tokens OK
pan.oc_oauth2_clients OK
pan.oc_ocdownloader_adminsettings OK
pan.oc_ocdownloader_personalsettings OK
pan.oc_ocdownloader_queue OK
pan.oc_phonetrack_devices OK
pan.oc_phonetrack_filtersb OK
pan.oc_phonetrack_geofences OK
pan.oc_phonetrack_points OK
pan.oc_phonetrack_proxims OK
pan.oc_phonetrack_pubshares OK
pan.oc_phonetrack_sessions OK
pan.oc_phonetrack_shares OK
pan.oc_phonetrack_tileserver OK
pan.oc_preferences OK
pan.oc_privacy_admins OK
pan.oc_properties OK
pan.oc_schedulingobjects OK
pan.oc_share OK
pan.oc_share_external OK
pan.oc_storages OK
pan.oc_systemtag OK
pan.oc_systemtag_group OK
pan.oc_systemtag_object_mapping OK
pan.oc_talk_commands OK
pan.oc_talk_guests OK
pan.oc_talk_participants OK
pan.oc_talk_rooms OK
pan.oc_talk_signaling OK
pan.oc_text_documents OK
pan.oc_text_sessions OK
pan.oc_text_steps OK
pan.oc_trusted_servers OK
pan.oc_twofactor_backupcodes OK
pan.oc_twofactor_providers OK
pan.oc_users OK
pan.oc_vcategory OK
pan.oc_vcategory_to_object OK
pan.oc_whats_new OK
sys.sys_config OK
Upgrade process completed successfully.
Checking if update is needed.
参考文献
kvm 虚拟化安装 Ubuntu 18.04 server
本文续上篇 《裸金属服务器 kvm 虚拟化安装 win10》继续记录使用 KVM 在 Centos 继续阅读
NextCloud手动添加文件并列出
NextCloud 自带的数据目录在列目录时都是通过数据库查询,如果需要手动在磁盘目录上添加文件并使用nextcloud列出就需要手动扫描。
sudo -u www php console.php files:scan --all
这条命令是官方提供的,但是实际使用时会报错如下:
Unknown user 1 media
+---------+-------+--------------+
| Folders | Files | Elapsed time |
+---------+-------+--------------+
| 0 | 0 | 00:00:00 |
+---------+-------+--------------+
经过信息检索发现问题,在nextcloud安装目录下使用如下命令扫描,就可以看到新添加的文件了:
$ sudo -u www php console.php files:scan --path songtianlun/files
# songtianlun 可替换为你需要扫描的用户
参考文献
kvm 虚拟化安装 Ubuntu 18.04 server
本文续上篇 《裸金属服务器 kvm 虚拟化安装 win10》继续记录使用 KVM 在 Centos 7.5 裸金属服务器上安装 Ubuntu 18.04 Server的过程及遇到的问题。
资源准备
首先要配置好 KVM 环境,上文已经详细说明,磁盘配置类似的使用 qemu-img create -f qcow2 ubuntu.qcow2 100G 命令创建虚拟磁盘,系统镜像可以去官网下载:
Ubuntu 官网: https://ubuntu.com/ Ubuntu Server 18.04 LTS 下载: https://ubuntu.com/download/server/thank-you?country=HK&version=18.04.3&architecture=amd64
Verify your download
# Run this command in your terminal in the directory the iso was downloaded to verify the SHA256 checksum:
$ echo "b9beac143e36226aa8a0b03fc1cbb5921cff80123866e718aaeba4edb81cfa63 *ubuntu-18.04.3-live-server-amd64.iso" | shasum -a 256 --check
# You should get the following output:
ubuntu-18.04.3-live-server-amd64.iso: OK
网络配置继续使用 KVM 默认的 default nat 方式。
安装
$ virt-install \
--virt-type=kvm \
--name=nextcloud \
--hvm \
--vcpus=2 \
--memory=2048 \
--cdrom=/srv/kvm/nextcloud/ubuntu-18.04.3-live-server-amd64.iso \
--disk path=/srv/kvm/nextcloud/nextcloud.qcow2,size=500,format=qcow2 \
--network bridge=br0 \
--graphics vnc,password=kvmwin10,listen=::,port=5911 \
--autostart \
--force
安装成功后使用任意一个可以接入互联网的带有桌面换的设备上的 VNC viewer 进入 YourIp:5911 输入密码 kvmwin10,就可以进入虚拟机,然后继续安装了。
Virsh 基础命令
virsh list --all # 查看所有运行和没有运行的虚拟机
virsh list # 查看在运行的虚拟机
virsh dumpxml vm-name # 查看kvm虚拟机配置文件
virsh start vm-name # 启动kvm虚拟机
virsh shutdown vm-name # 正常关机
virsh destroy vm-name # 非正常关机,强制关闭虚拟机(相当于物理机直接拔掉电源)
virsh undefine vm-name # 删除vm的配置文件
ls /etc/libvirt/qemu
# 查看删除结果,Centos-6.6的配置文件被删除,但磁盘文件不会被删除
virsh define file-name.xml # 根据配置文件定义虚拟机
virsh suspend vm-name # 挂起,终止
virsh resumed vm-name # 恢复被挂起的虚拟机
virsh autostart vm-name # 开机自启动vm
virsh console <虚拟机名称> # 连接虚拟机
-install 常用参数说明
–name指定虚拟机名称
–memory分配内存大小。
–vcpus分配CPU核心数,最大与实体机CPU核心数相同
–disk指定虚拟机镜像,size指定分配大小单位为G。
–network网络类型,此处用的是默认,一般用的应该是bridge桥接。
–accelerate加速
–cdrom指定安装镜像iso
–vnc启用VNC远程管理,一般安装系统都要启用。
–vncport指定VNC监控端口,默认端口为5900,端口不能重复。
–vnclisten指定VNC绑定IP,默认绑定127.0.0.1,这里改为0.0.0.0。
–os-type=linux,windows
–os-variant=rhel6
--name 指定虚拟机名称
--ram 虚拟机内存大小,以 MB 为单位
--vcpus 分配CPU核心数,最大与实体机CPU核心数相同
–-vnc 启用VNC远程管理,一般安装系统都要启用。
–-vncport 指定VNC监控端口,默认端口为5900,端口不能重复。
–-vnclisten 指定VNC绑定IP,默认绑定127.0.0.1,这里改为0.0.0.0。
--network 虚拟机网络配置
# 其中子选项,bridge=br0 指定桥接网卡的名称。
–os-type=linux,windows
–os-variant=rhel7.2
--disk 指定虚拟机的磁盘存储位置
# size,初始磁盘大小,以 GB 为单位。
--location 指定安装介质路径,如光盘镜像的文件路径。
--graphics 图形化显示配置
# 全新安装虚拟机过程中可能会有很多交互操作,比如设置语言,初始化 root 密码等等。
# graphics 选项的作用就是配置图形化的交互方式,可以使用 vnc(一种远程桌面软件)进行链接。
# 我们这列使用命令行的方式安装,所以这里要设置为 none,但要通过 --extra-args 选项指定终端信息,
# 这样才能将安装过程中的交互信息输出到当前控制台。
--extra-args 根据不同的安装方式设置不同的额外选项
Ubuntu 固定ip
由于安装 Ubuntu 是为了做某应用的服务,因此需要外网访问,使用 Nat 映射端口需要固定 ip。
首先,您需要确定要配置的网络接口。 您可以使用ifconfig命令列出系统中所有连接的网络接口。
$ ifconfig -a
Ubuntu设置静态IP地址
$ sudo vim /etc/netplan/xxxx.ymal
修改这个文件:
network:
ethernets:
ens33:
addresses:
- 192.168.122.3/24
dhcp4: false
gateway4: 192.168.122.1
nameservers:
addresses:
- 192.168.122.1
search: []
version: 2
说明:
# ens33:网络接口名称
# dhcp4:接收IPV4接口的dhcp属性
# dhcp6:接收IPV6接口的dhcp属性
# addresses:接口的静态地址序列
# gateway4:默认网关的IPV4地址
# Nameservers:DNS服务器地址,以,号分割
[tip type=”info” title=”小提示”]
如果在 vim 中误触,可以使用 u撤销一次操作.
u 撤销上一步的操作
Ctrl+r 恢复上一步被撤销的操作
[/tip]
保存该文件并退出。然后使用以下netplan命令应用最近的网络更改。
$ sudo netplan apply
现在再次验证所有可用的网络接口,ens33以太网接口现在应连接到本地网络,并具有IP地址.
ifconfig -a
至此,Ubuntu 虚拟机安装完成, 进入 VNC 继续后续操作就好。
彩蛋
浏览参考文献时发现一个有意思的文章《使用virt-install安装虚拟机,发行版安装代码直接复制运行》,在这里记录一下,有时间试试。
Debian 8
virt-install \
--name debian8 \
--ram 1024 \
--disk path=./debian8.qcow2,size=8 \
--vcpus 1 \
--os-type linux \
--os-variant generic \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location 'http://ftp.nl.debian.org/debian/dists/jessie/main/installer-amd64/' \
--extra-args 'console=ttyS0,115200n8 serial'
Debian 7
virt-install \
--name debian7 \
--ram 1024 \
--disk path=./debian7.qcow2,size=8 \
--vcpus 1 \
--os-type linux \
--os-variant debian7 \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location 'http://ftp.nl.debian.org/debian/dists/jessie/main/installer-amd64/' \
--extra-args 'console=ttyS0,115200n8 serial'
Debian 6
virt-install \
--name debian6 \
--ram 1024 \
--disk path=./debian6.qcow2,size=8 \
--vcpus 1 \
--os-type linux \
--os-variant debian6 \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location 'http://ftp.nl.debian.org/debian/dists/squeeze/main/installer-amd64/' \
--extra-args 'console=ttyS0,115200n8 serial'
CentOS 7
virt-install \
--name centos7 \
--ram 1024 \
--disk path=./centos7.qcow2,size=8 \
--vcpus 1 \
--os-type linux \
--os-variant centos7 \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location 'http://mirror.i3d.net/pub/centos/7/os/x86_64/' \
--extra-args 'console=ttyS0,115200n8 serial'
CentOS 6
virt-install \
--name centos6 \
--ram 1024 \
--disk path=./centos6.qcow2,size=8 \
--vcpus 1 \
--os-type linux \
--os-variant centos6 \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location 'http://mirror.i3d.net/pub/centos/6/os/x86_64/' \
--extra-args 'console=ttyS0,115200n8 serial'
CentOS 5
virt-install \
--name centos5 \
--ram 1024 \
--disk path=./centos5.qcow2,size=8 \
--vcpus 1 \
--os-type linux \
--os-variant centos5 \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location 'http://mirror.i3d.net/pub/centos/5/os/x86_64/' \
--extra-args 'console=ttyS0,115200n8 serial'
Ubuntu 14.04
virt-install \
--name ubuntu1404 \
--ram 1024 \
--disk path=./ubuntu1404.qcow2,size=8 \
--vcpus 1 \
--os-type linux \
--os-variant generic \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location 'http://archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/' \
--extra-args 'console=ttyS0,115200n8 serial'
Ubuntu 12.04
virt-install \
--name ubuntu1204 \
--ram 1024 \
--disk path=./ubuntu1204.qcow2,size=8 \
--vcpus 1 \
--os-type linux \
--os-variant ubuntu12.04 \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location 'http://archive.ubuntu.com/ubuntu/dists/precise/main/installer-amd64/' \
--extra-args 'console=ttyS0,115200n8 serial'
Ubuntu 10.04
virt-install \
--name ubuntu1004 \
--ram 1024 \
--disk path=./ubuntu1004.qcow2,size=8 \
--vcpus 1 \
--os-type linux \
--os-variant ubuntu10.04 \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location 'http://archive.ubuntu.com/ubuntu/dists/lucid/main/installer-amd64/' \
--extra-args 'console=ttyS0,115200n8 serial'
OpenSUSE 13
virt-install \
--name opensuse13 \
--ram 1024 \
--disk path=./opensuse13.qcow2,size=8 \
--vcpus 1 \
--os-type linux \
--os-variant generic \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location 'http://download.opensuse.org/distribution/13.2/repo/oss/' \
--extra-args 'console=ttyS0,115200n8 serial'
OpenSUSE 12
virt-install \
--name opensuse12 \
--ram 1024 \
--disk path=./opensuse12.qcow2,size=8 \
--vcpus 1 \
--os-type linux \
--os-variant generic \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location 'http://download.opensuse.org/distribution/12.3/repo/oss/' \
--extra-args 'console=ttyS0,115200n8 serial'
OpenSUSE 11
virt-install \
--name opensuse11 \
--ram 1024 \
--disk path=./opensuse11.qcow2,size=8 \
--vcpus 1 \
--os-type linux \
--os-variant generic \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location 'http://download.opensuse.org/distribution/11.4/repo/oss/' \
--extra-args 'console=ttyS0,115200n8 serial'
Generic ISO
Download an ISO file and give the filename to the --cdrom= parameter. This is used instead of --location. A VNC console is available on localhost, port 5999 for you to use.
An example for FreeBSD 10. First download the ISO:
wget http://ftp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/10.1/FreeBSD-10.1-RELEASE-amd64-dvd1.iso
Then start virt-install:
virt-install \
--name freebsd10 \
--ram 1024 \
--disk path=./freebsd10.qcow2,size=8 \
--vcpus 1 \
--os-type generic \
--os-variant generic \
--network bridge=virbr0 \
--graphics vnc,port=5999 \
--console pty,target_type=serial \
--cdrom ./FreeBSD-10.1-RELEASE-amd64-dvd1.iso \
You need to start up a VNC client to do the installation.
