Gogs 仓库使用

2018-08-15 Wednesday     misc

Gogs 的功能类似于 GitHub 或者 GitLab ,不过相比来说是一款极易搭建的 Git 服务。

其目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务,通过 Go 语言开发,使得 Gogs 能够通过独立二进制分发,支持平台包括了 Linux、Mac OS、Windows 以及 ARM 。

git gogs logo

简介

这里使用的是独立的 OpenSSH 服务,而非内置的 ssh ,同时需要创建一个独立的 git 帐号用来保存管理。

----- 启动OpenSSH服务以及Gogs
# systemctl start sshd
# systemctl start gogs

假设配置了域名 (可以使用 /etc/hosts 文件),例如 http://gogs.cargo.com:3000 那么可以直接访问 gogs.cargo.com:3000

创建用户

在使用时增加 git 用户,用于处理 ssh 相关的内容,直接执行 adduser git 命令即可。

安装

可以直接从 gogs.io 下载相关的二进制包,然后解压到 /usr/local/gogs 目录下。

# cd /usr/local/gogs
# cp scripts/systemd/gogs.service /usr/lib/systemd/system/

然后编辑 gogs.service 文件,示例如下。

[Unit]
Description=Gogs
After=syslog.target network.target

[Service]
Type=simple
User=git
Group=git
WorkingDirectory=/usr/local/gogs
ExecStart=/usr/local/gogs/gogs web
Restart=always
Environment=USER=git HOME=/home/git

[Install]
WantedBy=multi-user.target

通过 systemctl daemon-reload 命令加载配置文件,然后使用 systemctl start gogs 启动进程,此时会监听 3000 端口,直接通过 http://localhost:3000 访问即可。

配置

首次启动时,会启动一个配置页面用来修改配置,如果仓库不大,直接使用 SQLite 即可。

其中服务端相关的配置如下。

[server]
DOMAIN           = gogs.cargo.com
HTTP_PORT        = 3000
ROOT_URL         = http://gogs.cargo.com:3000/
DISABLE_SSH      = false
SSH_PORT         = 22
START_SSH_SERVER = false
OFFLINE_MODE     = false

注意,在创建时需要设置一个 admin 用户用于管理,例如 root 用户。

ssh

gogs 提供了一个基本的 ssh 服务端,不过不太好用,所以还是用 OpenSSH 吧。在使用时,需要通过 systemctl start sshd 启动 ssh 服务端。

免密码登陆可以参考 Git 使用杂项 中的相关介绍。

备份

只需要备份配置、数据库、仓库数据即可。

#!/bin/bash

TMP__PATH="/tmp/gogs"
APP__PATH="/usr/local/gogs"
REPO_PATH="/home/git/gogs-repositories"
CURR_DATE=`date "+%Y%m%d%H%M%S"`

if [[ $# -lt 1 ]]; then
	echo "Usage: $0 <backup|restore>"
	exit 1
fi

if [[ ! -d "${TMP__PATH}" ]]; then
	mkdir -p "${TMP__PATH}"
fi

if [[ "${1}" == "backup" ]]; then
	echo "Start to backup '${REPO_PATH}'."

	pushd "${TMP__PATH}"
	#----- 数据库备份,使用的是SQLite可以直接复制文件
	cp "${APP__PATH}/data/gogs.db" .
	#----- 备份配置文件
	cp "${APP__PATH}/custom/conf/app.ini" .
	#----- 备份仓库,这里使用的是git账户
	cp -rf "${REPO_PATH}" "gogs-repo"

	popd
	tar zcf "gogs-backup-${CURR_DATE}.tar.gz" -C "${TMP__PATH}" .
	rm -rf "${TMP__PATH}"
elif [[ "${1}" == "restore" ]]; then
	if [[ $# -lt 2 ]]; then
		echo "Usage: $0 restore <backup file>"
		exit 1
	fi
	echo "Start to restore '${2}'."

	umask 022
	tar -xf "${2}" -C "${TMP__PATH}"
	pushd "${TMP__PATH}"

	#----- 数据库恢复,使用的是SQLite可以直接复制文件
	cp "gogs.db" "${APP__PATH}/data/gogs.db"
	#----- 恢复配置文件
	cp "app.ini" "${APP__PATH}/custom/conf/app.ini" .
	#----- 恢复仓库,这里使用的是git账户
	cp -rf "gogs-repo" "${REPO_PATH}"
	chown git:git "${REPO_PATH}"
else
	echo "Unsupport method."
	exit 1
fi

参考



如果喜欢这里的文章,而且又不差钱的话,欢迎打赏个早餐 ^_^


About This Blog

Recent Posts

Categories

Related Links

  • RTEMS
    RTEMS
  • GNU
  • Linux Kernel
  • Arduino

Search


This Site was built by Jin Yang, generated with Jekyll, and hosted on GitHub Pages
©2013-2019 – Jin Yang