オンプレミスの開発管理サーバーをGiteaで構築する


# 1. 概要

## 1.1. 目的

- オンプレミスで開発管理サーバーを立てる。
- 使い道なくて余っている["インテル Compute Stick STCK1A8LFC"](https://ark.intel.com/content/www/jp/ja/ark/products/86613/intel-compute-stick-stck1a8lfc.html)を有効利用する。

## 1.2. 構成

- 使用ソフトウェア

|ソフトウェア|内容|備考|
|:--|:--|:--|
|[Git](https://git-scm.com/)|バージョン管理ツール。||
|[Gitea](https://gitea.io/ja-jp/)| [Go 言語](https://golang.org/)製の軽量のコードホスティングソリューション。Gitを内蔵している。||
|[Lubuntu 18.04](https://lubuntu.me/)|サーバーのOS。||

- Giteaのディレクトリ構成

```
/var/local/bin/
	└ gitea		実行ファイル
/var/local/lib/
	├ data		データ（SQLiteファイル）、セッション等
	├ log		ログ
	├ repos		リポジトリ	
	└ custom	カスタムソース
```

# 2. セットアップ
## 2.1. ハードセットアップ

- ["インテル Compute Stick STCK1A8LFC"](https://ark.intel.com/content/www/jp/ja/ark/products/86613/intel-compute-stick-stck1a8lfc.html)のスペックは以下となる。
	- CPU： Atom 1.83GHz L2Cache2MB
	- メモリ： 1GB
	- 内部ストレージ： 8GB
	- 外部ストレージ： 32GB（SDカード）

- Lubuntu 18.04を最小構成でインストールする。
- ディスク容量や性能に制限があるため、ディレクトリ構造等は工夫している。

	```
	パーティション
	mmcblk1（内部ストレージ: 7-8GB）
	  mmcblk1p1	/boot/efi 	EFIシステムパーティション（200MB）
	  mmcblk1p5	/			ext4（残り6GB）
	mmcblk2（SDカード: 32GB）
	  mmcblk2p1	/home		ext4（10GB）
	  mmcblk2p2	/var		ext4（残り22GB）		
	```

## 2.2. パッケージインストール

1. ``git``パッケージをインストールする。

	```
	$ sudo apt install git
	```
2. ``/var/lib/gitea`` をアプリのインストール先など、ディレクトリを作成する。

	```
	$ sudo mkdir /var/local/bin
	$ sudo mkdir -p /var/local/lib/gitea/{custom,repos,data,log}
	```
3. ``gitea``をダウンロードし、実行権限を与える。

	```
	$ cd /var/local/bin/
	$ sudo wget -O gitea https://dl.gitea.io/gitea/1.13.6/gitea-1.13.6-linux-amd64
	$ sudo chmod +x gitea
	```
4. 実行ユーザーを作成し、ディレクトリ権限を設定する。

	```
	$ sudo adduser --system --shell /bin/bash --gecos 'Git Version Control' --group --disabled-password --home /home/git git

	$ sudo chown -R git:git /var/local/lib/gitea/
	$ sudo chmod -R 750 /var/local/lib/gitea/

	$ sudo mkdir /etc/gitea
	$ sudo chown root:git /etc/gitea
	$ sudo chmod 770 /etc/gitea
	```
5. systemdサービスファイルを作成する。

	```
	$ sudo vim /etc/systemd/system/gitea.service
	``` 
	```
	[Unit]
	Description=Gitea (Git with a cup of tea)
	After=syslog.target
	After=network.target
	〜〜

	[Service]
	〜〜
	
	RestartSec=2s
	Type=simple
	User=git
	Group=git
	WorkingDirectory=/var/local/lib/gitea/
	〜〜
	
	ExecStart=/var/local/bin/gitea web --config /etc/gitea/app.ini
	Restart=always
	Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/local/lib/gitea
	〜〜

	[Install]
	WantedBy=multi-user.target
	```
6. ``gitea`` サービスを起動する。

	```
	$ sudo systemctl start gitea
	```
7. 設定ファイルにポートを設定する。

	```
	$ sudo vim /etc/gitea/app.ini
	```
	```
	〜〜〜
	[server]
	HTTP_PORT = 8080
	〜〜〜
	```
8. サービスの再起動と自動起動設定をする。

	```
	$ sudo systemctl restart gitea
	$ sudo systemctl enable gitea
	```

## 2.3. 初期設定

- hostsに名前解決の設定をする。（WindowsでもMacでも）

	```
	192.168.x.x <ホスト名>.local
	```

1. 画面にアクセスする。
	- http://<ホスト名>.local:8080
2. "エクスプローラ"、"登録"などのメニューにアクセスすると初期設定画面が開くため、以下を設定する。記述内容以外はデフォルトとする。
	- データベース設定
		- データベース： SQLite3
	- 基本設定
		- サイトタイトル： 任意
		- リポジトリのルートパス： /var/local/lib/gitea/repos
		- SSHサーバーのドメイン： <ホスト名>.local
		- GiteaのベースURL： http://<ホスト名>.local:8080/
3. "Giteaをインストール"でインストールを実行する。

## 2.4. 管理者アカウント登録

最初に登録したユーザーが管理者アカウントとなる。

1. "アカウントが必要ですか？今から登録しましょう" などのリンクから登録画面を開く。
2. ID、パスワード、メールアドレス等を設定する。

# 3. 使用方法

## 3.1. ローカルのGitリポジトリをプッシュ

1. ローカルリポジトリはコミットを済ませておく。
2. Web画面から組織とリポジトリを作成する。
	- 最近の事情から、デフォルトブランチは``master``→``main``にしている。
3. リポジトリのURL（例: http://<ホスト名>.local:8080/<組織名>/<リポジトリ名>.git）をコピーする。
4. ローカルリポジトリに移動し、コマンドラインからリモートリポジトリを設定する。
	1. リモートリポジトリを確認し、設定がある場合は確認して削除する。

	```
	リモートリポジトリの確認
	% git remote -v
	→結果あり

	削除
	% git remote rm origin

	リモートリポジトリの確認
	% git remote -v
	→結果なし
	```
	2. リモートリポジトリを登録する。

	```	
	リモートリポジトリの登録
	% git remote add origin http://<ホスト名>.local:8080/<組織名>/<リポジトリ名>.git
	
	リモートリポジトリの確認
	% git remote -v
	origin http://<ホスト名>.local:8080/<組織名>/<リポジトリ名>.git (push)
	origin http://<ホスト名>.local:8080/<組織名>/<リポジトリ名>.git (fetch)
 	```
5. ローカルのソースをプッシュする。

	```	
	プッシュ
	% git remote origin main
	```
6. Web画面でプッシュされたことを確認する。

## 3.2. その他

- 課題、WikiなどGithub、Gitlabに似た基本的な機能は使用できる。