Everybody knows gitHub, ok, but today, We will install another competitor (From Google, I’m sure you know it !) : Gogs.

 

Let’start with any CentOS 7.x Linux distribution (mine is CentOS 7.2 runing as a virtual machine hosted on a XenServer 6.5 host).

[root@docker ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)

Install Docker

Yes, by now, I prefer using Docker containers …

It’s really simple :

[root@docker ~]# curl -fsSL https://get.docker.com/ | bash
+ sh -c 'sleep 3; yum -y -q install docker-engine'
warning: /var/cache/yum/x86_64/7/docker-main-repo/packages/docker-engine-selinux-1.11.2-1.el7.centos.noarch.rpm: Header V4 RSA/SHA512 Signature, key ID 2c52609d: NOKEY
Public key for docker-engine-selinux-1.11.2-1.el7.centos.noarch.rpm is not installed
Importing GPG key 0x2C52609D:
 Userid     : "Docker Release Tool (releasedocker) <docker@docker.com>"
 Fingerprint: 5811 8e89 f3a9 1289 7c07 0adb f762 2157 2c52 609d
 From       : https://yum.dockerproject.org/gpg
restorecon:  lstat(/var/lib/docker) failed:  No such file or directory
warning: %post(docker-engine-selinux-1.11.2-1.el7.centos.noarch) scriptlet failed, exit status 255
Non-fatal POSTIN scriptlet failure in rpm package docker-engine-selinux-1.11.2-1.el7.centos.noarch

If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:

  sudo usermod -aG docker your-user

Remember that you will have to log out and back in for this to take effect!

Start Docker service :

[root@docker ~]# systemctl start docker

And keep it started on a next reboot :

[root@docker ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

Our docker installation looks good :

[root@docker ~]# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
a9d36faac0fe: Pull complete
Digest: sha256:e52be8ffeeb1f374f440893189cd32f44cb166650e7ab185fa7735b7dc48d619
Status: Downloaded newer image for hello-world:latest

Hello from Docker.
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker Hub account:
 https://hub.docker.com

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

MariaDB

Download MariaDB Docker image :

[root@docker ~]# docker pull mariadb

Start MariaDB container :

[root@docker ~]# docker run --name MariaDB -e MYSQL_ROOT_PASSWORD=your_password -d mariadb
b8c01a9d244a240bbed9abc2c525f45d1d05ecea1489c63befdcc7edf586f662

Create a dadabase for Gogs :

[root@docker ~]# docker exec -it MariaDB bash
root@b8c01a9d244a:/# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 10.1.14-MariaDB-1~jessie mariadb.org binary distribution

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> create database gogs;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> quit
Bye
root@b8c01a9d244a:/# exit
exit

Create a new filesystem to contain data

Using XenCenter, we add a new virtual drive.

This new drive has been created (XenServer Tools ?) :

[root@docker ~]# lsblk -f
NAME                         FSTYPE      LABEL UUID                                   MOUNTPOINT
sr0
xvda
├─xvda1                      xfs               a19f05de-5566-40c4-82d2-10fd4cdc9910   /boot
└─xvda2                      LVM2_member       IK0mzQ-wTXL-nhD1-e6q9-4xUP-qMHd-cfAqL4
  ├─centos-root              xfs               7cca21b7-bd02-4a19-b97a-f6dd1a918e1a   /
  └─centos-swap              swap              0eacd7e9-776d-434f-a5d5-1e06d477ca53   [SWAP]
xvdb
loop0
└─docker-253:0-16929800-pool
loop1
└─docker-253:0-16929800-pool

Create a full partition on this drive :

[root@docker ~]# parted -s /dev/xvdb mklabel gpt
[root@docker ~]# parted -s /dev/xvdb mkpart primary xfs 0% 100%

Create an XFS filesystem :

[root@docker ~]# mkfs.xfs /dev/xvdb1
meta-data=/dev/xvdb1             isize=256    agcount=4, agsize=130944 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=523776, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

It’s time to mount this filesystem :

  • Create a mount point :
[root@docker ~]# mkdir /gogs/data
  • Add an entry in “/etc/fstab” :
[root@docker ~]# grep /data /etc/fstab
/dev/xvdb1      /gogs/data   xfs     defaults        0       0
  • And mount this filesystem :
root@docker ~]# mount /gogs/data

Gogs

Download Gogs docker image :

[root@docker ~]# docker pull gogs/gogs

My images is here :

[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
gogs/gogs           latest              f6cdd266fdf5        7 days ago          84.58 MB
mariadb             latest              0112f2662974        9 days ago          387.6 MB
hello-world         latest              693bce725149        11 days ago         967 B

Start Gogs container :

[root@docker ~]# docker run --name=Gogs -p 10022:22 -p 10080:3000 -v /gogs/data:/data --link MariaDB:mysql -d gogs/gogs
e375cbdd96ba9d3c59d03124840d5948f1fad4414577763c6b8e47fd9c115f6b

Git account

Create “git” account with the same UID/GID Docker Gogs container uses :

[root@docker ~]# docker exec -it Gogs bash
bash-4.3# id git
uid=1000(git) gid=1000(git) groups=1000(git)
bash-4.3# exit
exit

Within the container, both group “git” and user “git” exit (GID=1000 ; UID=1000), we will create them in Linux :

[root@docker ~]# groupadd -g 1000 git
[root@docker ~]# useradd -u 1000 -g 1000 git

Set “git” as the owner of this mount point :

[root@docker ~]# chown git:git /gogs/data

Configure firewalld

Open ports :

[root@docker ~]# firewall-cmd --permanent --add-port=10080/tcp
success
[root@docker ~]# firewall-cmd --permanent --add-port=10022/tcp
success

Apply rules :

[root@docker ~]# firewall-cmd --reload
success

Gogs configuration

Open a WEB browser to port 10080 :

Enter the password you set for MariaDB …

Go back to http://your_Linux_server:10080 page :

dockergogs

 

 

 

 

 

 

 

 

 

 

 

 

 

You can create an account :

dockergogs1

 

 

 

 

 

 

 

 

Logon using this account, and create your first repository :

dockergogs3

 

 

 

 

 

 

 

 

 

This repository has been created :

dockergogs4

 

 

 

 

 

 

Intall “git” :

[root@docker ~]# yum -y install git

Download your first repository :

[wou@docker ~]$ git clone http://192.168.1.155:10080/wou/my_NGINX.git


 Cloning into 'my_NGINX'...
 warning: You appear to have cloned an empty repository.

Go to the directory :

[wou@docker ~]$ cd my_NGINX

Create “README” MarkDown format file :

[wou@docker my_NGINX]$ echo <<THE_END >README.md
 > My NGINX configuration files
 > ============================
 > <br>
 > I will put some files in this repository
 > THE_END

Update the repository :

  • Add this file :
[wou@docker my_NGINX]$ git add README.md
  • Commit the change :
[wou@docker my_NGINX]$ git commit -m "first steep"
[master (root-commit) d7318a5] first steep
 1 file changed, 1 insertion(+)
 create mode 100644 README.md
  • Then push :
[wou@docker my_NGINX]$ git push
warning: push.default is unset; its implicit value is changing in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the current behavior after the default changes, use:

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use:

  git config --global push.default simple

See 'git help config' and search for 'push.default' for further information.
(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
'current' instead of 'simple' if you sometimes use older versions of Git)

Username for 'http://192.168.1.155:10080': wou
Password for 'http://wou@192.168.1.155:10080':
No refs in common and none specified; doing nothing.
Perhaps you should specify a branch such as 'master'.
Everything up-to-date

 

 

 

PDF24    Send article as PDF   

Leave a Reply

Your email address will not be published. Required fields are marked *


*