docker上对gogs二次开发

ducksoul · · 1027 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

甲方需求是在一个容器上启动mysql服务,另一个容器上搭gogs,且gogs可修改

一开始的想法是搭一个go容器,然后源码发上去直接改,然后发现不行,主要原因是我pull了golang的镜像,但是似乎应该用alpine,总之这块没弄清楚自己想要不就在centos上搭呗。

首先安装mysql

run mysql

# 用于存放mysql数据文件

mkdir /opt/docker/data/mysql/data

# 用于存放mysql配置文件

mkdir /opt/docker/data/mysql/conf

cd /opt/docker/data/mysql/conf

在/opt/docker/data/mysql/conf目录下建立3个mysql配置文件 docker.cnf, mysql.cnf,

mysqldump.cnf

docker.cnf 内容

[mysqld]

skip-host-cache

skip-name-resolve

mysql.cnf内容

[mysql]

default-character-set = utf8

[mysql_safe]

default-character-set = utf8

[client]

default-character-set = utf8

[mysqld]

pid-file      = /var/run/mysqld/mysqld.pid

socket        = /var/run/mysqld/mysqld.sock

datadir      = /var/lib/mysql

#log-error    = /var/log/mysql/error.log

# By default we only accept connections from localhost

#bind-address = 127.0.0.1

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

# 修改mysql默认字符集

init_connect  = 'SET NAMES utf8'

character-set-server = utf8

collation-server = utf8_unicode_ci

mysqldump.cnf内容

[mysqldump]

quick

quote-names

max_allowed_packet  = 16M

启动mysql服务

docker run -d --name mysql56 --net=backend -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -v

/opt/docker/data/mysql/data:/var/lib/mysql -v /opt/docker/data/mysql/conf:/etc/mysql/conf.d

mysql:5.6

在数据库中创建库gogs,utf-8

docker exec -it mysql56 bash进入到容器中,mysql -u root -p进入mysql然后create database什么的

然后就是艰苦的gogs尝试记录,我先把正确的方法写下来,后面的是踩坑记录脑子也挺乱的可能比较难看

1.直接运行gogs镜像:

docker run -d -p 10022:22 -p 10080:3000 --name=gogs1 --net=backend -v

/opt/docker/gogs/:/data gogs/gogs

问题:无法进行二次开发,基础镜像内文件无法更改。

2.源码gogs搭建

本地编译得到gogs文件

go build gogs.go

把整个项目压缩成tar包

tar -zxvf gogs gogs.tar

下载go

wget https://studygolang.com/dl/golang/go1.10.1.linux-amd64.tar.gz

打包go环境变量

vi go.sh

内容为

export GOROOT=/data/work/go

export GOPATH=/data/work/gopath

export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

下拉centos镜像

docker pull centos

建立dockerfile

vi Dockerfile

FROM centos:latest

#维护者信息

MAINTAINER TEST@TEST.COM

#设置用户

RUN groupadd git && useradd -r -g git git

RUN mkdir /home/git

RUN mkdir /gogs

RUN mkdir /go

run chmod 777 /go

RUN chmod 777 /gogs

RUN mkdir /root/gogs

RUN mkdir /root/go

RUN chmod 777 /root/go

RUN chmod 777 /root/gogs

RUN mkdir /usr/local/git

RUN chmod 777 /usr/local/git

#将服务器的go工程代码加入到docker容器中

COPY ./gogs.tar /gogs

COPY ./go1.12.6.linux-amd64.tar.gz /root

#COPY ./git-2.9.5.tar.gz /usr/local/git/

#源码安装git太麻烦还是用yum了,但是这样会导致每次build都要下载git

COPY ./go.sh /etc/profile.d/

#COPY ./git.sh /etc/profile.d/

#RUN tar -C /usr/local/git -zxvf /usr/local/git/git-2.9.5.tar.gz

#RUN cd /usr/local/git/git-2.9.5 && ls -a && ./configure --prefix=/usr/local/git && make && make install

RUN yum install -y git

RUN git --version

RUN tar -C /usr/local/ -zxvf /root/go1.12.6.linux-amd64.tar.gz && ls -a /usr/local/go

RUN tar -zxvf /gogs/gogs.tar

RUN source /etc/profile.d/go.sh

#RUN source /etc/profile.d/git.sh

#RUN go env#这句话运行不了

RUN chmod -R 777 /root

RUN chmod -R 777 /home

RUN chmod -R 777 /usr

RUN chmod -R 777 /opt

RUN ls -a /root/gogs

RUN rm -f /root/go1.12.6.linux-amd64.tar.gz

RUN rm -f /gogs/gogs.tar

WORKDIR /root/gogs

USER root

RUN whoami

#暴露端口

EXPOSE 3000

EXPOSE 22

#最终运行docker的命令

CMD ["./gogs","web"]


这段里面给权限安全隐患较大但是因为在docker容器内也没那么危险了,主要是为了让git用户有权限


源码gogs搭建错误历史

本地编译得到gogs文件

go build gogs.go

上传到linux

//docker run -it  -v /root/gogs:/gogs -v /root/test/:/test -p 10022:22 -p 10080:3000 --name=gogs

--privileged centos bash

docker run -it -v /root/test/:/test -p 10022:22 -p 10080:3000 --name=gogs --network=backend --

privileged golang bash

//cd src/github.com/gogs/gogs/

//go build

./gogs web

进入网页http://192.168.152.128:10080/

数据库mysql56:3306

报错:运行系统用户非当前用户:root ->

原因分析:gogs依赖于git服务,没有安装gitX

使用git用户运行

su - git -c "cd /go/src/github.com/gogs/gogs && ./gogs web &"

编译后转到linux上运行不了,报错:[FATAL] [...gogs/gogs/cmd/web.go:66 checkVersion()] Fail to read

'templates/.VERSION': open /test/templates/.VERSION: no such file or directory

找不到文件

目前问题:install后无法访问http://192.168.152.128:10080/ 配置文件尝试

[server]

DOMAIN          = localhost

HTTP_PORT        = 3000

ROOT_URL        = http://localhost:10080/  ## 这个就是图形界面的应用URL的值

DISABLE_SSH      = false

SSH_PORT        = 10022

START_SSH_SERVER = false

OFFLINE_MODE    = false

错误

如果配置文件没问题,是否设置端口号有问题?

docker建立镜像和导出到文件

docker commit 4977b34adaee mysql56

4977b34adaee为容器名 mysql56为镜像名

docker save -o mysql56 mysql56

储存镜像为文件,前一个mysql56为文件名,后一个为镜像名

测试:删除docker镜像后导入文件

docker stop 所有容器后

docker rmi mysql56

导入docker镜像

docker load --input mysql56


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:ducksoul

查看原文:docker上对gogs二次开发

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1027 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传