Gogs 安装 - 本地安装,容器安装
参考资料:
- Gogs 官网地址:https://gogs.io
- Gogs 的 GitHub 地址:https://github.com/gogits/gogs
安装 Gogs
有 3 中方式可以安装:
- Gogs 直接安装在 Linux 服务器上,同时其所依赖的 MySQL 数据库也安装在服务器上
- Gogs 安装在容器中,其所依赖的 MySQL 数据库安装在服务器上
- Gogs 和其所依赖的 MySQL 数据库都安装在容器中
本地安装
代码是比较重要的资料,推荐使用本地安装,尽可能减少异常。可以参考本地安装的 官方安装教程。
前提条件:
数据库
MySQL 可以使用完全兼容的 MariaDB 替代,且 CentOS 默认安装了 MariaDB。MariaDB 的安装可以 参考这里。MySQL 的安装可以 参考这里。
数据库安装完成后,需要创建名为 gogs
的数据库。可以
- 使用
etc/mysql.sql
来自动创建 - 如果选择手动创建,则必须将编码设置为
utf8mb4
我用的是 MySQL8.0,默认 InnoDB 引擎,UTF8MB4编码,命令如下:
create database gogs;
创建 gogs 数据库用户:
create user 'gogs'@'localhost' identified by 'your-password';
grant all privileges on gogs.* to 'gogs'@'localhost';
flush privileges;
git
服务端和客户端均需版本 >= 1.7.1
# git version
git version 1.8.3.1
创建 git 用户
为了安全起见,单独创建 git 用户,所有项目放在家目录下:
sudo adduser git
su git
SSH 服务器
如果只使用 HTTP/HTTPS 的话,则不需要。Linux 系统默认都安装了 SSH 服务。
安装
这里只讲简单的二进制安装,源码安装可以参考官网。
- 在 这里 下载合适的版本,我使用的是
linux_amd64.tar.gz
。 - 解压压缩包。
- 使用命令 cd 进入解压后创建的目录。
- 执行命令
./gogs web
,完成。
升级
- 下载最新版的压缩包。
- 删除当前的 templates 目录。
- 解压压缩包并将所有内容复制粘贴到相应(当前)的位置。
配置及运行
配置
默认配置都保存在 conf/app.ini
,永远不需要编辑它。该文件从 v0.6.0 版本开始被嵌入到二进制中。
如果需要自定义配置,只要创建 custom/conf/app.ini
,在这个文件中修改相应选项的值即可。
例如,改变仓库根目录的路径:
[repository]
ROOT = /data/git/gogs-repositories
当然,也可以修改数据库配置:
[database]
PASSWD = root
运行 Gogs 服务
- 开发者模式:
需要在custom/conf/app.ini
文件中将选项 security -> INSTALL_LOCK 的值设置为 true。可以使用超能的 make 命令:
$ make
$ ./gogs web
部署模式:
脚本均放置在 scripts 目录,但请在仓库根目录执行它们- Gogs 支持多种方式的启动:
- 普通:只需执行 ./gogs web
- 守护进程:详见 scripts 文件夹
- Gogs 支持多种方式的启动:
在线安装 Gogs
可以通过配置文件安装,也可以在线安装。
Gogs 服务启动后,访问 ip:3000/install
来完成首次运行的配置工作。这里需要明确一点:是否使用Nginx反向代理。我使用了Nginx做反向代理,需要配置Nginx,同时将用于 git clone
的两个URL(分别用于 git 和 http 方式)都配置为 https://gogs.kikakika.com
,Gogs的端口不变,仍是3000:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name gogs.kikakika.com;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://$server_addr:3000$request_uri;
}
ssl on;
ssl_certificate /etc/nginx/ssl/fullchain.cer;
ssl_certificate_key /etc/nginx/ssl/kikakika.key;
ssl_session_timeout 5m;
}
server {
listen 80;
listen [::]:80;
server_name gogs.kikakika.com;
return 301 https://$host$request_uri;
}
后台运行 gogs
启动命令并在后台运行
nohup ./gogs web &
如果你已经启动 gogs 了,可以通过 ctrl + z
将命令转入后台并停止运行,然后通过 bg
命令将后台停止运行的命令在后台启动运行。如果后台有多个停止的命令,可以先用 jobs
命令查看任务编号,然后用 bg 编号
来启动指定的任务。
如果想查看 gogs 的输出,可以用下面的命令:
tail -f nohup.out
通过 docker-compose 安装
通过 docker-compose 配合 YAML 配置文件,可以方便的安装 Gogs。具体的配置跟本地安装一样,也是通过 Web 进行设置。
可以参考 Gogs 跟 Docker 相关的资料。
数据库和 Gogs 都安装在容器中
docker-compose.yml
文件:
version: '2'
services:
mysql:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=myrootuser
- MYSQL_DATABASE=gogs
volumes:
- /data/docker/gogs/mysql:/var/lib/mysql
- ./conf/:/etc/mysql/conf.d
gogs:
image: gogs/gogs:latest
ports:
- 11022:22
- 11080:3000
volumes:
- /data/docker/gogs/gogs:/data
links:
- mysql
depends_on:
- mysql
这里还需要通过 my.conf
文件配置 MySQL,否则访问 MySQL 时会报错:Error 1130: Host '172.21.0.2' is not allowed to connect to this MariaDB server
。这是因为 MySQL 默认只支持 127.0.0.1
或 localhost
的本地访问,对于其他 IP,需要登录数据库增加对这个 IP 的信任。
在 docker-compose.yml
配置文件所在目录中,创建 conf
目录,将 my.conf
配置文件放入刚创建的 conf
目录。配置文件内容如下:
[mysqld]
bind-address=0.0.0.0
跨容器通信比较简单,直接使用 links
部分指定的名称替代 IP 即可。这里通过 Web 页面首次运行安装程序时,在 数据库设置 -> 数据库主机 这个字段中填入 mysql:3306
,其他前面的 IP 部分由 YAML 配置文件中 gogs 服务的 links
部分指定。
数据库本地安装,Gogs 安装在容器中
需要设置本地安装的数据库,以允许来自容器的 IP 的访问请求。
docker-compose.yml
文件:
version: '2'
services:
gogs:
image: gogs/gogs:latest
ports:
- 11022:22
- 11080:3000
volumes:
- /data/docker/gogs/gogs:/data
Nginx 配置文件
这里使用 Nginx 作为反向代理,通过域名访问 Gogs:
upstream gogs {
server 127.0.0.1:11080 fail_timeout=0;
}
server {
listen 443 ssl http2;
server_name gogs.kikakika.com;
ssl on;
ssl_certificate /etc/nginx/ssl/fullchain.cer;
ssl_certificate_key /etc/nginx/ssl/kikakika.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://gogs;
}
}
server {
listen 80;
server_name gogs.kikakika.com;
return 301 https://$server_name$request_uri;
}
通过浏览器访问
Gogs 启动后首次访问时,会进入在线安装页面,在这个页面配置数据库等信息。
设置数据库
我这里将 MySQL 安装在了容器中,所以需要使用 links
指定的数据库名字访问,而不是 IP 地址:
应用基本设置
设置邮箱
注册用户
Gogs 中第一个注册的用户会自动成为 root 用户。这样省去了繁琐的配置,挺不错的。
后面所有注册的用户都是普通用户。
常见问题
Error 1130: Host '172.21.0.2' is not allowed to connect to this MariaDB server
原因:数据库默认只支持 127.0.0.1
或 localhost
的本地访问,对于其他 IP,需要登录数据库增加对这个 IP 的信任。有多种解决方案:
- 可以编辑数据库配置文件
/etc/my.cnf
,在[mysqld]
下面添加bind-address=0.0.0.0
:
[mysqld]
bind-address=0.0.0.0
- 可以在登入数据库后,更改 “mysql” 数据库中, “user” 表中 root 用户的 “host” 项,从"localhost"改称"%",使其可以从任何 IP 登录:
mysql> USE mysql;
mysql> UPDATE user SET host = '%' WHERE user = 'root';
mysql> FLUSH RIVILEGES;
- 或登录数据库后,创建一个可以从任何 IP 登录的用户,例如:
mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' WITH GRANT OPTION;
mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
- 直接操作 root 用户:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
上面使用 FLUSH PRIVILEGES
指令后,可以不用重启 MySQL。'monty'@'%'
表示允许 monty 用户从所有 IP 登录,当然也可以只允许其从指定的 IP 登录:
GRANT ALL PRIVILEGES ON gogs.* TO 'monty'@'192.168.1.3' WITH GRANT OPTION;
dial tcp 127.0.0.1:3306: getsockopt: connection refused
原因:指定的 MySQL 服务器不存在。
通过 Docker 安装的数据库,默认使用 bridge 桥接网络。如果其他容器需要访问数据库容器,需要通过 links
设置的数据库名称直接访问数据库,这里是 mysql:3306
。
Error 1049: Unknown database 'gogs'
原因:没有创建指定的数据库。
需要在数据库配置中使用环境变量创建这个数据库 - MYSQL_DATABASE=gogs
。注意,如果已经报这个错误了,需要手动清除之前产生的数据库信息(对于上面的 docker-compose 配置文件,执行 rm -fr /data/docker/gogs/mysql/
),然后再执行 docker-compose up
命令。:
mysql:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=myrootuser
- MYSQL_DATABASE=gogs
volumes:
- /data/docker/gogs/mysql:/var/lib/mysql
- ./conf/:/etc/mysql/conf.d
Gogs 安装 - 本地安装,容器安装的更多相关文章
- Red Hat Linux 安装 (本地、网络安装)
Red Hat Linux 安装 (本地.网络安装) 650) this.width=650;" onclick='window.open("http://blog.51cto.c ...
- Docker的安装以及使用Docker安装jenkins,gogs,tomcat(一)
(1)Docker的安装 官网安装链接 :https://yeasy.gitbooks.io/docker_practice/content/ 卸载旧版本 旧版本的 Docker 称为 docker ...
- docker容器安装及使用技巧
关于docker前言 A)首先是关于虚拟化 虚拟化我们可以简单的理解为一种资源管理方式.有如下几种虚拟化的方式: 1.完全虚拟化:对底层硬件实现完全的虚拟.例如:Vmware Workstation ...
- 如何在本地数据中心安装Service Fabric for Windows集群
概述 首先本文只是对官方文档(中文,英文)的一个提炼,详细的安装说明还请仔细阅读官方文档. 虽然Service Fabric的官方名称往往被加上Azure,但是实际上(估计很多人不知道)Service ...
- Docker 实战(二)——centos7镜像安装nginx,将安装nginx的centos容器生成新的镜像,并导出
Docker centos7镜像安装nginx 1.安装docker 使用yum安装docker不再重复:见 Linux常用命令 2.pull centos 1)在docker仓库中搜索centos ...
- docker概述与安装及运行容器
传统虚拟化 传统虚拟化步骤 1.安装虚拟化软件以及虚拟化的管理软件 2.创建虚拟机 3.给虚拟机安装os 4.在虚拟机内部不是应用(http.db之类的应用) 传统虚拟化的特点 1.VM与VM之间是完 ...
- Linux下Docker容器安装与使用
注:作者使用的环境是CentOS 7,64位,使用yum源安装. 一.Docker容器的安装 1.查看操作系统及内核版本,CentOS 7安装docker要求系统为64位.系统内核版本为 3.10及以 ...
- 如何使用本地账户"完整"安装 SharePoint Server 2010+解决“New-SPConfigurationDatabase : 无法连接到 SharePoint_Config 的 SQL Server 的数据 库 master。此数据库可能不存在,或当前用户没有连接权限。”
注:目前看到的解决本地账户完整安装SharePoint Server 2010的解决方案如下,但是,有但是的哦: 当我们选择了"完整"模式安装SharePointServer201 ...
- 在把webpack作为本地开发依赖安装的时候报错
在把webpack作为本地开发依赖安装的时候报错 Refusing to install webpack as a dependency of itself 原因是package.json里的name ...
随机推荐
- squid代理服务问答
1. 简述一下squid的用途?squid可以做代理和缓存服务器,而做代理时,可以分为正向代理和反向代理.正向代理用在企业办公环境中,企业员工上网通过代理来上网,代理的缓存功能可以为企业节省宝贵的带宽 ...
- 关于Python程序的运行方面,有什么手段能提升性能?
1.使用多进程,充分利用机器的多核性能 2.对于性能影响较大的部分代码,可以使用C或C++编写 3.对于IO阻塞造成的性能影响,可以使用IO多路复用来解决 4.尽量使用Python的内建函数 5.尽量 ...
- 2019牛客暑期多校训练营(第七场) - C - Governing sand - 平衡树
5 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 感觉该出14才对,取前k小写成了取前k大. 5 1 5 4 2 5 3 3 5 2 4 5 1 6 5 5 suf=55 res=0 a ...
- 一步一步玩控件:自定义TabControl——从山寨Safari开始
作者:野比 (conmajia@gmail.com) 时间:May, 2012 封面图片为野比原创,请勿未经允许私自引用 #1-1 嗯,各位,又是我,生物钟颠倒的家伙. 今天我要山寨的是大名鼎鼎的Ap ...
- mysql的sql语句优化方法面试题总结
mysql的sql语句优化方法面试题总结 不要写一些没有意义的查询,如需要生成一个空表结构: select col1,col2 into #t from t where 1=0 这类代码不会返回任何结 ...
- Django基础之简介(二)
三板斧 from django.shortcuts import render,HttpResponse, redirect HttpResponse # 返回字符串 urls: urlpatte ...
- mybatis对java自定义注解的使用
转自:https://www.cnblogs.com/sonofelice/p/4980161.html 最近在学习spring和ibatis框架. 以前在天猫实习时做过的一个小项目用到的mybati ...
- 05XML
1.XML入门 1.1 引入 HTML, 超文本标记语言. html语言语法是很松散的! 1)标签不区分大小写的! 2)标签可以不匹配的. 由w3c组织,针对html的语法缺陷,去设计了另一门,叫xm ...
- hdu4417 Super Mario (树状数组/分块/主席树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4417 题目大意:给定一个长度为n的序列,有m个询问,每次询问包含l,r,h,即询问区间[l,r]小于等 ...
- 2017ICPC南宁M The Maximum Unreachable Node Set (偏序集最长反链)
题意:给你一张DAG,让你选取最多的点,使得这些点之间互相不可达. 思路:此问题和最小路径可重复点覆盖等价,先在原图上跑一边传递闭包,然后把每个点拆成两个点i, i + n, 原图中的边(a, b)变 ...