前言

近期在服务器上配的一些小东西

最近时间稍微多了些,便又开始捣鼓我那迷你服务器,算是有些成果陆陆续续搭建了几个新的服务在博客里。

服务列表

Gitea

Gitea 是一个自己托管的Git服务程序。他和GitHub, Bitbucket or Gitlab等比较类似。他是从 Gogs 发展而来,不过我们已经Fork并且命名为Gitea
Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

  • 开源化:所有代码均在 GitHub! 加入我们让 Gitea 更好,你可以做到!

  • 易安装:直接 从二进制安装。 或者使用 Docker源代码安装,和 安装包

  • 跨平台:Gitea 可以运行在任何 Go 能够编译的平台:Windows, macOS, Linux, ARM 等等,选择你喜欢的即可!

  • 轻量级:Gitea 拥有很低的系统需求,即使Raspberry Pi(树莓派)也可运行,节约机器资源!

  • 官网地址: https://gitea.io/zh-cn/

  • 源码地址:https://github.com/go-gitea/gitea

docker方式运行

阅读本章之前我们已经假设您对docker已经有了解并能够正常使用docker

我们在 Docker HubGitea 组织中提供了自动更新的 Docker 镜像,它会保持最新的稳定版。你也可以用其它 Docker 服务来更新。

  • 首先你需要pull镜像:
docker pull gitea/gitea:latest
  • 如果要将git和其它数据持久化,你需要创建一个目录来作为数据存储的地方:
sudo mkdir -p /var/lib/gitea
  • 然后就可以运行 docker 容器了,这很简单。 当然你需要定义端口数数据目录:
docker run -d --name=gitea -p 10022:22 -p 10080:3000 -v /var/lib/gitea:/data gitea/gitea:latest

然后 容器已经运行成功,在浏览器中访问 http://hostname:10080 就可以看到界面了。

docker-compose方式运行

阅读本章之前我们已经假设您对docker-compose已经有了解并能够正常使用docker-compose

  • docker-compose.yaml文件
version: '2'
services:
  gitea:
    image: gitea/gitea:latest
    container_name: gitea
    volumes:
      - ./data:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "10080:3000"
      - "10022:22"
    restart: always
  • 运行指令:
docker-compose up -d

然后 容器已经运行成功,在浏览器中访问 http://hostname:10080 就可以看到界面了。

安装指南

服务搭建成功之后,会出现如下页面。

image.png

之后点击登陆按钮会进入服务初始化配置。

数据库配置

image.png

这里是按个人喜好与服务提供方式来选择。因为博主搭建git服务主要用于托管一些常用代码,以及备份一些github上的代码镜像,所以选择的比较轻量级的SQLlite

一般配置

image.png

这里重点说明一下这几个配置。

  • SSH 服务域名:用于 SSH 克隆的域名或主机地址。见名知意,此处只是ssh服务的域名,无需添加端口号,如localhost。若有进行解析域名,则此处就填写解析后的域名,如git.yourhost.com

  • SSH 服务端口:因为使用的是docker方式安装,所以此处端口号需要填写你实际映射的端口号,如10022

  • HTTP 服务端口:此端口不做改动,就是docker容器内部的端口。

  • Gitea 基本 URL:此地址是你经过容器映射后的地址,如http(s)://localhost:10080/。如果你的服务经过的nginx的代理了域名,那么此处填写代理后的域名即可,如http(s)://git.yourhost.com/

image.png

可选配置

  • 电子邮箱配置

image.png

这里需要注意的是SMTP 主机这个配置。如果使用的是qq邮箱,需要在
smtp域名后面添加端口号,例如:smtp.qq.com。其他邮件服务器配置也类似,都需要加上端口号。

Gitea服务到此已搭建完毕,后续文章属于Gitea进阶配置说明。若无更改配置需求,可无视。

Gitea配置说明

配置说明

这是针对Gitea配置文件的说明,你可以了解Gitea的强大配置。需要说明的是,你的所有改变请修改 custom/conf/app.ini 文件而不是源文件。所有默认值可以通过 app.example.ini 查看到。如果你发现 %(X)s 这样的内容,请查看 ini 这里的说明。标注了 ❗ 的配置项表明除非你真的理解这个配置项的意义,否则最好使用默认值。

Overall (DEFAULT)
  • APP_NAME: 应用名称,改成你希望的名字。
  • RUN_USER: 运行Gitea的用户,推荐使用 git;如果在你自己的个人电脑使用改成你自己的用户名。如果设置不正确,Gitea可能崩溃。
  • RUN_MODE: 从性能考虑,如果在产品级的服务上改成 prod。如果您使用安装向导安装的那么会自动设置为 prod
Repository (repository)
  • ROOT: 存放git工程的根目录。这里必须填绝对路径,默认值是 ~/<username>/gitea-repositories
  • SCRIPT_TYPE: 服务器支持的Shell类型,通常是 bash,但有些服务器也有可能是 sh
  • ANSI_CHARSET: 默认字符编码。
  • FORCE_PRIVATE: 强制所有git工程必须私有。
  • DEFAULT_PRIVATE: 默认创建的git工程为私有。 可以是last, privatepublic。默认值是 last表示用户最后创建的Repo的选择。
  • MAX_CREATION_LIMIT: 全局最大每个用户创建的git工程数目, -1 表示没限制。
  • PULL_REQUEST_QUEUE_LENGTH: 小心:合并请求测试队列的长度,尽量放大。
UI (ui)
  • EXPLORE_PAGING_NUM: 探索页面每页显示的仓库数量。
  • ISSUE_PAGING_NUM: 工单页面每页显示的工单数量。
  • MEMBERS_PAGING_NUM: 20: 组织成员页面每页显示的成员数量。
  • FEED_MAX_COMMIT_NUM: 活动流页面显示的最大提交数量。
UI - Admin (ui.admin)
  • USER_PAGING_NUM: 用户管理页面每页显示的用户数量。
  • REPO_PAGING_NUM: 仓库管理页面每页显示的仓库数量。
  • NOTICE_PAGING_NUM: 系统提示页面每页显示的提示数量。
  • ORG_PAGING_NUM: 组织管理页面每页显示的组织数量。
Markdown (markdown)
  • ENABLE_HARD_LINE_BREAK: 是否启用硬换行扩展。
Server (server)
  • PROTOCOL: 可选 httphttps
  • DOMAIN: 服务器域名。
  • ROOT_URL: Gitea服务器的对外 URL。
  • HTTP_ADDR: HTTP 监听地址。
  • HTTP_PORT: HTTP 监听端口。
  • DISABLE_SSH: 是否禁用SSH。
  • START_SSH_SERVER: 是否启用内部SSH服务器。
  • SSH_PORT: SSH端口,默认为 22
  • OFFLINE_MODE: 针对静态和头像文件禁用 CDN。
  • DISABLE_ROUTER_LOG: 关闭日志中的路由日志。
  • CERT_FILE: 启用HTTPS的证书文件。
  • KEY_FILE: 启用HTTPS的密钥文件。
  • STATIC_ROOT_PATH: 存放模板和静态文件的根目录,默认是 Gitea 的根目录。
  • STATIC_CACHE_TIME: 6h: 静态资源文件,包括 custom/, public/ 和所有上传的头像的浏览器缓存时间。
  • ENABLE_GZIP: 启用应用级别的 GZIP 压缩。
  • LANDING_PAGE: 未登录用户的默认页面,可选 homeexplore
  • LFS_START_SERVER: 是否启用 git-lfs 支持. 可以为 truefalse, 默认是 false
  • LFS_CONTENT_PATH: 存放 lfs 命令上传的文件的地方,默认是 data/lfs
  • LFS_JWT_SECRET: LFS 认证密钥,改成自己的。
Database (database)
  • DB_TYPE: 数据库类型,可选 mysql, postgres, mssql, tidbsqlite3
  • HOST: 数据库服务器地址和端口。
  • NAME: 数据库名称。
  • USER: 数据库用户名。
  • PASSWD: 数据库用户密码。
  • SSL_MODE: MySQL 或 PostgreSQL数据库是否启用SSL模式。
  • CHARSET: utf8mb4: 仅当数据库为 MySQL 时有效, 可以为 "utf8" 或 "utf8mb4"。注意:如果使用 "utf8mb4",你的 MySQL InnoDB 版本必须在 5.6 以上。
  • PATH: Tidb 或者 SQLite3 数据文件存放路径。
  • LOG_SQL: true: 显示生成的SQL,默认为真。
  • MAX_IDLE_CONNS 0: 最大空闲数据库连接
  • CONN_MAX_LIFETIME 3s: 数据库连接最大存活时间
Indexer (indexer)
  • ISSUE_INDEXER_TYPE: bleve: 工单索引类型,当前支持 bleve, dbelasticsearch,当为 db 时其它工单索引项可不用设置。

  • ISSUE_INDEXER_CONN_STR: ****: 工单索引连接字符串,仅当 ISSUE_INDEXER_TYPE 为 elasticsearch 时有效。例如: http://elastic:changeme@localhost:9200

  • ISSUE_INDEXER_NAME: gitea_issues: 工单索引名称,仅当 ISSUE_INDEXER_TYPE 为 elasticsearch 时有效。

  • ISSUE_INDEXER_PATH: indexers/issues.bleve: 工单索引文件存放路径,当索引类型为 bleve 时有效。

  • ISSUE_INDEXER_QUEUE_TYPE: levelqueue: 工单索引队列类型,当前支持 channellevelqueueredis

  • ISSUE_INDEXER_QUEUE_DIR: indexers/issues.queue: 当 ISSUE_INDEXER_QUEUE_TYPElevelqueue 时,保存索引队列的磁盘路径。

  • ISSUE_INDEXER_QUEUE_CONN_STR: addrs=127.0.0.1:6379 db=0: 当 ISSUE_INDEXER_QUEUE_TYPEredis 时,保存Redis队列的连接字符串。

  • ISSUE_INDEXER_QUEUE_BATCH_NUMBER: 20: 队列处理中批量提交数量。

  • REPO_INDEXER_ENABLED: false: 是否启用代码搜索(启用后会占用比较大的磁盘空间)。

  • REPO_INDEXER_PATH: indexers/repos.bleve: 用于代码搜索的索引文件路径。

  • UPDATE_BUFFER_LEN: 20: 代码索引请求的缓冲区长度。

  • MAX_FILE_SIZE: 1048576: 进行解析的源代码文件的最大长度,小于该值时才会索引。

Security (security)
  • INSTALL_LOCK: 是否允许运行安装向导,(跟管理员账号有关,十分重要)。
  • SECRET_KEY: 全局服务器安全密钥 最好改成你自己的 (当你运行安装向导的时候会被设置为一个随机值)。
  • LOGIN_REMEMBER_DAYS: Cookie 保存时间,单位天。
  • COOKIE_USERNAME: 保存用户名的 cookie 名称。
  • COOKIE_REMEMBER_NAME: 保存自动登录信息的 cookie 名称。
  • REVERSE_PROXY_AUTHENTICATION_USER: 反向代理认证的 HTTP 头名称。
Service (service)
  • ACTIVE_CODE_LIVE_MINUTES: 登录验证码失效时间,单位分钟。
  • RESET_PASSWD_CODE_LIVE_MINUTES: 重置密码失效时间,单位分钟。
  • REGISTER_EMAIL_CONFIRM: 启用注册邮件激活,前提是 Mailer 已经启用。
  • DISABLE_REGISTRATION: 禁用注册,启用后只能用管理员添加用户。
  • SHOW_REGISTRATION_BUTTON: 是否显示注册按钮。
  • REQUIRE_SIGNIN_VIEW: 是否所有页面都必须登录后才可访问。
  • ENABLE_CACHE_AVATAR: 是否缓存来自 Gravatar 的头像。
  • ENABLE_NOTIFY_MAIL: 是否发送工单创建等提醒邮件,需要 Mailer 被激活。
  • ENABLE_REVERSE_PROXY_AUTHENTICATION: 允许反向代理认证,更多细节见:https://github.com/gogits/gogs/issues/165
  • ENABLE_REVERSE_PROXY_AUTO_REGISTRATION: 允许通过反向认证做自动注册。
  • ENABLE_CAPTCHA: 注册时使用图片验证码。
Webhook (webhook)
  • QUEUE_LENGTH: 说明: Hook 任务队列长度。
  • DELIVER_TIMEOUT: 请求webhooks的超时时间,单位秒。
  • SKIP_TLS_VERIFY: 是否允许不安全的证书。
  • PAGING_NUM: 每页显示的Webhook 历史数量。
  • PROXY_URL: ****: 代理服务器网址,支持 http://, https//, socks://, 为空将使用环境变量中的 http_proxy/https_proxy 设置。
  • PROXY_HOSTS: ****: 逗号分隔的需要代理的域名或IP地址。支持 * 号匹配符,使用 ** 匹配所有域名和IP地址。
Mailer (mailer)
  • ENABLED: 是否启用邮件服务。
  • DISABLE_HELO: 禁用 HELO 命令。
  • HELO_HOSTNAME: 自定义主机名来回应 HELO 命令。
  • HOST: SMTP 主机地址和端口 (例如:smtp.gitea.io:587)。
  • FROMemail@example.com: 邮件发送地址,RFC 5322. 这里可以填一个邮件地址或者 "Name" <> 格式。
  • USER: 用户名(通常就是邮件地址)。
  • PASSWD: 密码。
  • SKIP_VERIFY: 忽略证书验证。

说明:实际上 Gitea 仅仅支持基于 STARTTLS 的 SMTP。

Cache (cache)
  • ENABLED: true: 是否启用。
  • ADAPTER: memory: 缓存引擎,可以为 memory, redismemcache
  • INTERVAL: 60: 只对内存缓存有效,GC间隔,单位秒。
  • HOST: <empty>: 针对redis和memcache有效,主机地址和端口。
    • Redis: network=tcp,addr=127.0.0.1:6379,password=macaron,db=0,pool_size=100,idle_timeout=180
    • Memache: 127.0.0.1:9090;127.0.0.1:9091
  • ITEM_TTL: 16h: 缓存项目失效时间,设置为 0 则禁用缓存。
Cache - LastCommitCache settings (cache.last_commit)
  • ENABLED: true: 是否启用。
  • ITEM_TTL: 8760h: 缓存项目失效时间,设置为 0 则禁用缓存。
  • COMMITS_COUNT: 1000: 仅当仓库的提交数大于时才启用缓存。
Session (session)
  • PROVIDER: Session 内容存储方式,可选 memory, file, redismysql
  • PROVIDER_CONFIG: 如果是文件,那么这里填根目录;其他的要填主机地址和端口。
  • COOKIE_SECURE: 强制使用 HTTPS 作为session访问。
  • GC_INTERVAL_TIME: Session失效时间。
Picture (picture)
  • GRAVATAR_SOURCE: 头像来源,可以是 gravatar, duoshuo 或者类似 http://cn.gravatar.com/avatar/ 的来源
  • DISABLE_GRAVATAR: 开启则只使用内部头像。
  • ENABLE_FEDERATED_AVATAR: 启用头像联盟支持 (参见 http://www.libravatar.org)
Attachment (attachment)
  • ENABLED: 是否允许用户上传附件。
  • PATH: 附件存储路径
  • ALLOWED_TYPES: 允许上传的附件类型。比如:image/jpeg|image/png,用 */* 表示允许任何类型。
  • MAX_SIZE: 附件最大限制,单位 MB,比如: 4
  • MAX_FILES: 一次最多上传的附件数量,比如: 5

关于 ALLOWED_TYPES, 在 (*)unix 系统中可以使用file -I <filename> 来快速获得对应的 MIME type

$ file -I test00.tar.xz
test00.tar.xz: application/x-xz; charset=binary

$ file --mime test00.xlsx
test00.xlsx: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=binary

file -I test01.xls
test01.xls: application/vnd.ms-excel; charset=binary
Log (log)
  • ROOT_PATH: 日志文件根目录。
  • MODE: 日志记录模式,默认是为 console。如果要写到多个通道,用逗号分隔
  • LEVEL: 日志级别,默认为Trace
Cron (cron)
  • ENABLED: 是否在后台运行定期任务。
  • RUN_AT_START: 是否启动时自动运行。
Cron - Update Mirrors (cron.update_mirrors)
  • SCHEDULE: 自动同步镜像仓库的Cron语法,比如:@every 1h
Cron - Repository Health Check (cron.repo_health_check)
  • SCHEDULE: 仓库健康监测的Cron语法,比如:@every 24h
  • TIMEOUT: 仓库健康监测的超时时间,比如:60s.
  • ARGS: 执行 git fsck 命令的参数,比如:--unreachable --tags
Cron - Repository Statistics Check (cron.check_repo_stats)
  • RUN_AT_START: 是否启动时自动运行仓库统计。
  • SCHEDULE: 仓库统计时的Cron 语法,比如:@every 24h.
Cron - Update Migration Poster ID (cron.update_migration_poster_id)
  • SCHEDULE: @every 24h : 每次同步的间隔时间。此任务总是在启动时自动进行。
Git (git)
  • MAX_GIT_DIFF_LINES: 比较视图中,一个文件最多显示行数。
  • MAX_GIT_DIFF_LINE_CHARACTERS: 比较视图中一行最大字符数。
  • MAX_GIT_DIFF_FILES: 比较视图中的最大现实文件数目。
  • GC_ARGS: 执行 git gc 命令的参数, 比如: --aggressive --auto
Git - 超时设置 (git.timeout)
  • DEFAUlT: 360: Git操作默认超时时间,单位秒
  • MIGRATE: 600: 迁移外部仓库时的超时时间,单位秒
  • MIRROR: 300: 镜像外部仓库的超时时间,单位秒
  • CLONE: 300: 内部仓库间克隆的超时时间,单位秒
  • PULL: 300: 内部仓库间拉取的超时时间,单位秒
  • GC: 60: git仓库GC的超时时间,单位秒
  • ENABLE_AUTO_GIT_WIRE_PROTOCOL: true: 是否根据 Git Wire Protocol协议支持情况自动切换版本,当 git 版本在 2.18 及以上时会自动切换到版本2。为 false 则不切换。
API (api)
  • ENABLE_SWAGGER: true: 是否启用swagger路由 /api/swagger, /api/v1/swagger etc. endpoints. True 或 false; 默认是 true.
  • MAX_RESPONSE_ITEMS: 50: 一个页面最大的项目数。
  • DEFAULT_PAGING_NUM: 30: API中默认分页条数。
  • DEFAULT_GIT_TREES_PER_PAGE: 1000: GIT TREES API每页的默认最大项数.
  • DEFAULT_MAX_BLOB_SIZE: 10485760: BLOBS API默认最大大小.
Markup (markup)

外部渲染工具支持,你可以用你熟悉的文档渲染工具. 比如一下将新增一个名字为 asciidoc 的渲染工具which is followed markup. ini section. And there are some config items below.

[markup.asciidoc]
ENABLED = false
FILE_EXTENSIONS = .adoc,.asciidoc
RENDER_COMMAND = "asciidoc --out-file=- -"
IS_INPUT_FILE = false
  • ENABLED: 是否启用,默认为false。
  • FILE_EXTENSIONS: 关联的文档的扩展名,多个扩展名用都好分隔。
  • RENDER_COMMAND: 工具的命令行命令及参数。
  • IS_INPUT_FILE: 输入方式是最后一个参数为文件路径还是从标准输入读取。
Time (time)
  • FORMAT: 显示在界面上的时间格式。比如: RFC1123 或者 2006-01-02 15:04:05
  • DEFAULT_UI_LOCATION: 默认显示在界面上的时区,默认为本地时区。比如: Asia/Shanghai
Task (task)
  • QUEUE_TYPE: channel: 任务队列类型,可以为 channelredis
  • QUEUE_LENGTH: 1000: 任务队列长度,当 QUEUE_TYPEchannel 时有效。
  • QUEUE_CONN_STR: addrs=127.0.0.1:6379 db=0: 任务队列连接字符串,当 QUEUE_TYPEredis 时有效。如果redis有密码,则可以 addrs=127.0.0.1:6379 password=123 db=0
Migrations (migrations)
  • MAX_ATTEMPTS: 3: 在迁移过程中的 http/https 请求重试次数。
  • RETRY_BACKOFF: 3: 等待下一次重试的时间,单位秒。
Other (other)
  • SHOW_FOOTER_BRANDING: 为真则在页面底部显示Gitea的字样。
  • SHOW_FOOTER_VERSION: 为真则在页面底部显示Gitea的版本。

后记

博客部分说明参考Gitea官方文档。

原文档地址:点我达官方地址

Q.E.D.


所以,看不到光,算是不幸吗?需要光才是真正的不幸吧。