http://www.jianshu.com/p/424627516ef6

零、安装 Docker 和 Compsoe

  1. 首先安装 Docker:

    $ curl -sSL https://get.docker.com/ | sh
    $ sudo usermod -aG docker YOURUSERNAME

    YOURUSERNAME 为你的用户名。

  2. 然后安装 Compsoe:
    $ sudo curl -L https://github.com/docker/compose/releases/download/1.9.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
    $ sudo chmod +x /usr/local/bin/docker-compose

一、HTTP 运行 Gogs

使用 HTTPS 直接看第二部分。

准备、Nginx 配置

虽然每个人的配置不一样,但是还是贴一个简单的模板:

server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on; root /app;
index index.html index.htm; server_name localhost; location / {
try_files $uri $uri/ =404;
}
}
# 上面是默认的不用管也可以。
server
{
listen 80;
server_name git.example.com; # 这里填自定义域名
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://172.17.0.3:8181; # 这里填容器地址,如果不知道填写公网IP也是可以的。
}
}

保存这个文件为 Nginx 配置文件,目录你自己喜欢,哪都可以。


版本一、Gogs + Sqlite + Nginx

Gogs 支持 Sqlite,对于个人用户,Sqlite 足以应付,所以硬件资源有限的情况下不妨选择 Sqlite。
Gogs 默认端口是 3000,打算把 git.example.com 解析到 3000 端口。

新建一个文件命名为 docker-compose.yml ,然后复制粘贴下面的代码并保存。

version: '2'
services:
nginx:
container_name: [nginx]
image: nginx:alpine
volumes:
- "[~/nginx/]:/etc/nginx/conf.d/"
ports:
- "80:80"
restart: always
gogs:
container_name: [gogs]
image: gogs/gogs
volumes:
- [~/gogs]:/data
ports:
- "[3000]:3000"
- "[3022]:22"
restart: always

如你所见 “[]” 里面的内容你自己决定,可以自由修改。保存上面代码为 docker-compose.yml 文件之后,使用命令:

$ docker-compose up -d

即可运行。
默认容器叫做 gogs ,数据保存在 ~/gogs,端口是 30003022

  • - 3022:22 会将 3022 暴露给外网,用于 Git 的 SSH 协议, 不用 SSH 可以去掉。
  • - [~/gogs]:/data 将映射本地的 ~/gogs 目录作为 volume 给容器使用, 根据自己创建的目录修改此项。

然后检查一下容器有没有正常在运行:

$ docker ps

访问网站进行初次的配置, 配置中需要注意的是这两项不用修改:

  • Repository Root Path(仓库根目录)
  • Run User(运行用户)
  • HTTP Port(HTTP端口)设置为3000
  • SSH Port(SSH端口)设置为你-p参数设定的值(比如3002)
  • Application URL(应用网址)设置为你的http://你的域名

nginx 已经帮我们把容器内的3000端口在服务器上代理给80端口了。

选择 sqlite3 作为数据库,那么一切都搞定了(Linux 大部分都装了 sqlite3),不需要去考虑更多的事情,剩下的便是登录你的管理员账号然后在后台设置好你 SSH 登录用的公钥(如果用 SSH 的话)。

哦,对了,域名要设置好解析到你的 IP~~(这个提醒会不会有点多余,笑)


版本二、Gogs + Mysql + Nginx

如果你不希望使用 Sqlite,而是使用 Mysql,可以使用下面这份 docker-compose.yml

你不需要在本地安装 Nginx 和 Mysql,全文都通过 Docker 来完成。

version: '2'
services:
nginx:
container_name: [nginx]
image: nginx:alpine
volumes:
- "[~/nginx/]:/etc/nginx/conf.d/"
ports:
- "80:80"
restart: always
db:
container_name: [db]
image: mysql:5.7
volumes:
- "[~/mysql]:/var/lib/mysql"
restart: always
environment:
MYSQL_ROOT_PASSWORD: [PASSWORD]
MYSQL_DATABASE: [GOGS]
MYSQL_USER: [USER]
MYSQL_PASSWORD: [PASSWORD]
gogs:
container_name: [gogs]
depends_on:
- db
image: gogs/gogs
volumes:
- [~/gogs]:/data
links:
- db
ports:
- "[3000]:3000"
- "[3022]:3022"
restart: always

[]”里面的内容你自己决定,可以自由修改,(不改请去掉[]符号,保持括号内的默认值)。保存上面代码为 docker-compose.yml ,使用 docker-compose up -d 即可运行。

安装时注意,数据库地址不是 localhost 而是 db ,其他按提示操作即可。


二、使用 HTTPS 运行 Gogs

版本一、Caddy + Gogs + Sqlite

新建文件 Caddyfile ,注意大小写,然后修改 tls i@example.com 的邮箱为你自己的常用邮箱,IP 改成你的服务器 IP ,然后保存。

git.example.com {
proxy / 123.456.789.0:3000 { # 改成你 IP:port
proxy_header Host {host}
proxy_header X-Real-IP {remote}
proxy_header X-Forwarded-Proto {scheme}
}
log /var/log/caddy.log
gzip
tls i@example.com # 你的邮箱
}

新建文件 docker-compose.yml ,基本不用修改参数,直接使用 docker-compose up -d 即可运行。

version: '2'
services:
caddy:
container_name: caddy
image: abiosoft/caddy
volumes:
- "~/caddy/Caddyfile:/etc/Caddyfile"
restart: always
gogs:
container_name: gogs
image: gogs/gogs
volumes:
- ~/gogs:/data
ports:
- "3000:3000"
- "3022:22"
restart: always

版本二、Nginx + Letsencrypt + Gogs + Sqlite

克隆 Letsencrypt 仓库:

$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt
$ ./letsencrypt-auto certonly -d git.example.com

选择第二个,自动生成证书:

自动生成证书

生成下面文字即为成功:

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
.........
.........
- If you like Let's Encrypt, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

Nginx 配置:

server {
listen 80 default_server;
listen [::]:80 default_server;
server_name git.example.com; # 修改域名
server_tokens off;
location /generate_204 { return 204; }
# Discourage deep links by using a permanent redirect to home page of HTTPS site
return 301 https://$host;
# Alternatively, redirect all HTTP links to the matching HTTPS page
return 301 https://$host$request_uri;
} server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name git.example.com; # 修改域名
server_tokens off;
location /generate_204 { return 204; } # ssl on;
################
# SSL 配置
################
ssl_certificate /etc/nginx/certs/fullchain.pem;
ssl_certificate_key /etc/nginx/certs/privkey.pem;
################
# from https://cipherli.st/
# and https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
################
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
# ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5:!MEDIUM:!LOW";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# Disable preloading HSTS for now. You can use the commented out header line that includes
# the "preload" directive if you understand the implications.
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
# add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff; # ssl_dhparam /etc/nginx/certs/dhparam.pem;
################
# SSL END
################
add_header 'Access-Control-Allow-Origin' *;
add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS';
location / {
proxy_pass http://123.456.789.0:3000; # 修改为你的 IP:port
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

然后新建一个文件 docker-compose.yml,使用 docker-compose up -d 运行即可。

version: '2'
services:
nginx:
container_name: [nginx]
image: nginx:alpine
volumes:
- "~/nginx/:/etc/nginx/conf.d/"
- "~/nginx/certs/dhparam.pem:/etc/nginx/certs/dhparam.pem:ro"
- "/etc/letsencrypt/live/zuolan.me/cert.pem:/etc/nginx/certs/cert.pem:ro"
- "/etc/letsencrypt/live/zuolan.me/chain.pem:/etc/nginx/certs/chain.pem:ro"
- "/etc/letsencrypt/live/zuolan.me/fullchain.pem:/etc/nginx/certs/fullchain.pem:ro"
- "/etc/letsencrypt/live/zuolan.me/privkey.pem:/etc/nginx/certs/privkey.pem:ro"
ports:
- "80:80"
- "443:443"
restart: always
gogs:
container_name: [gogs]
image: gogs/gogs
volumes:
- [~/gogs]:/data
ports:
- "[3000]:3000"
- "[3022]:22"
restart: always

以上一共四个版本,根据需要选择一种即可。


作者:左蓝
链接:http://www.jianshu.com/p/424627516ef6
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

一步搞定私有Git服务器部署(Gogs)的更多相关文章

  1. 五步搞定Android开发环境部署

    引言   在windows安装Android的开发环境不简单也说不上算复杂,本文写给第一次想在自己Windows上建立Android开发环境投入 Android浪潮的朋友们,为了确保大家能顺利完成开发 ...

  2. 五步搞定Android开发环境部署——非常详细的Android开发环境搭建教程

      在windows安装Android的开发环境不简单也说不上算复杂,本文写给第一次想在自己Windows上建立Android开发环境投入Android浪潮的朋友们,为了确保大家能顺利完成开发环境的搭 ...

  3. 三步搞定IDEA集成热部署

    第一步.在你的SpringBoot项目中添加DevTools依赖 <!-- 热部署DevTools --> <dependency> <groupId>org.sp ...

  4. 用腾讯云Gogs搭建私有git服务器

    前言 经常有需要写不能公开代码的项目,所以只好自己搭建一个私人的git服务器 Gogs的好处在于比Gitlib轻量化了好多,而且是国人写的,官方主页也是中文的 Gogs首页 腾讯云服务器配置: Ubu ...

  5. Docker 一步搞定 ZooKeeper 集群的搭建

    Docker 一步搞定 ZooKeeper 集群的搭建 背景 原来学习 ZK 时, 我是在本地搭建的伪集群, 虽然说使用起来没有什么问题, 但是总感觉部署起来有点麻烦. 刚好我发现了 ZK 已经有了 ...

  6. 利用阿里云搭建私有Git服务器

    服务器系统:Centos 6 (查看centos版本命令:lsb_release -a) 客户端系统:Windows 7 一.服务器端安装Git ==通常centos上使用yum源安装的git版本过低 ...

  7. 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】

    说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...

  8. APP设计师拿到APP产品原型开始,七步搞定APP设计(转)

    任何一款成功的APP都需要以坚实的产品概念作为基础,因为概念决定了产品最终完成的潜力. 一般情况下,交到app设计师手里的都是移动app产品原型图.当然这个是在移动产品经理反复斟酌,并且与大家开会讨论 ...

  9. iOS开发三步搞定百度推送

    iOS开发三步搞定百度推送   百度推送很简单,准备工作:在百度云推送平台注册应用,上传证书. 步骤一: 百度云推送平台 http://push.baidu.com/sdk/push_client_s ...

随机推荐

  1. Linux学习笔记之Linux通过yum安装桌面

    Centos系统最小化安装以后,进入默认是命令行模式,所以需要进一步安装桌面. 1,本文使用的是CentOS 7 Minimal版本. 2,启动linux操作系统,进入后没有图形界面,但是有时候还是希 ...

  2. [置顶] SNMP协议详解<三>

    在上篇文章中,说到了SNMPv3主要在安全性方面进行了增强,采用USM(基于用户的安全模型)和VACM(基于视图的访问控制模型)技术.下面我们就主要讲解SNMPv3的报文格式以及基于USM的认证和加密 ...

  3. HBase Shell相关

    1.进入hbase命令行 ./hbase shell 2.基本命令 显示hbase中的表List list 查询user表中的所有信息Scan scan 'users' 清空user表中的数据Trun ...

  4. SqlBulkCopy 批量导入数据 转换表字段类型

    在使用SqlBulkCopy导入数据时,要有一个跟数据库里面同样的DataTable 要赋值表名 要求每个列跟数据库中列同名,并且列的类型要赋值跟数据库中列的类型对应的NET类型 要求数据库中为Nul ...

  5. Scan法求凸包

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1348 给一个半径和n个点 求圆的周长 + n个点的凸包的周长 #include<bits/std ...

  6. P4行为模型BMV2安装

    前提:依赖关系请移步上篇博客.P4行为模型BMV2依赖关系安装:thrift nanomsg nnpy安装 以及,要把下面这些东西装好. On Ubuntu 14.04, the following ...

  7. POJ 1142 Smith Numbers(分治法+质因数分解)

    http://poj.org/problem?id=1142 题意: 给出一个数n,求大于n的最小数,它满足各位数相加等于该数分解质因数的各位相加. 思路:直接暴力. #include <ios ...

  8. vim 将文件从dos格式转换到unix格式

    dos格式文件传输到unix系统时,会在每行的结尾多一个^M(/r),当然也有可能看不到.但是在vim的时候,会在下面显示此文件的格式,比如 "dos.txt" [dos] 120 ...

  9. [原][译][osgearth]关于Features & Symbology (特征与符号)(OE绘制矢量几何与特殊字符)讲解(OE官方文档翻译)

    原文参考:http://docs.osgearth.org/en/latest/user/features.html 自己翻译的,本人英文水平有限,有问题看原链接,原文 20170802重置修改部分翻 ...

  10. Java回顾之一些基础概念

    类的初始化顺序 在Java中,类里面可能包含:静态变量,静态初始化块,成员变量,初始化块,构造函数.在类之间可能存在着继承关系,那么当我们实例化一个对象时,上述各部分的加载顺序是怎样的? 首先来看代码 ...