# Gitea 在 Linux 的安裝與搬運
Gitea 是一個提供 Git 服務的前端。會選擇 Gitea 的主要原因是他支持繁體中文的標簽且對硬體要求低;相對而言,Gitlab 的中文化程度不優,而且硬體要求高。這份文件的意義是記錄如何安裝和未來如果需要搬運伺服器的時候如何應對。
# 安裝
安裝在 Ubuntu 20.04 但幾乎 Linux 的操作系統都差不多?
## 懶人安裝方法(不建議)
> 我自己不推薦這個方法只是因爲官網不推薦,但餘下的文件設定應該都在 `snap/` 路徑以下吧(沒有實際操作過)
如果是一個 Ubuntu 的虛擬機的話,直接安裝 Snap 版本就好
```shell
snap install gitea
```
Gitea 就可以安裝成功并且運行了,只要到 `IP位置:3000` 可以看到一下的畫面

可以在 `MySQL`、`MSSQL`、`PostgressSQL` 和 `SQLite` 之間選擇,但我懶惰建制資料庫,所以選擇了 `SQLite`。`SQLite` 的預設存儲路徑為 `/var/snap/gitea/common/data/gitea.db`。其餘的設定我都留預設,唯有Base URL改成IP位置的,改成 `192.168.xx.xx:3000`

剩下就是增加一個 Admin 使用者的賬密

如果對其他設定想要微調隨時歡迎,我只是覺得沒很大必要
## 比較符合官方文件的安裝方法
- [官方文件安裝方式的英文版本](https://docs.gitea.io/en-us/install-from-binary/)
- [官方文件安裝方式的中文版本](https://docs.gitea.io/zh-tw/install-from-binary/)
會附上英文版本的原因是因爲中文版本的有些内容沒寫(我覺得有用的步驟,比如創造 git 使用者),而且我往後大概率會忘記如何操作/維護這個頁面,所以我就在下面順便寫全部的步驟:
0. 我是 assume 建置一個 SQLite3 server 才寫的(要弄一個 MySQL 伺服器對我來説太麻煩)
1. 先下載需要的檔案和修改權限 **(注意! wget 後面的檔名必須從 https://dl.gitea.io/gitea 裏面選擇正確的檔名)**
```bash
wget -O gitea https://dl.gitea.io/gitea/1.16.0/gitea-1.16.0-linux-amd64
chmod +x gitea
```
2. 安裝 git,如果是 Debian 的話就
```bash
sudo apt install git
```
3. 創造 git 使用者
```bash
sudo adduser \
--system \
--shell /bin/bash \
--gecos 'Git Version Control' \
--group \
--disabled-password \
--home /home/git \
git
```
4. 把需要的文件目錄創造出來
```bash
sudo mkdir -p /var/lib/gitea/{custom,data,log}
sudo chown -R git:git /var/lib/gitea/
sudo chmod -R 750 /var/lib/gitea/
sudo mkdir /etc/gitea
sudo chown root:git /etc/gitea
sudo chmod 770 /etc/gitea
```
5. 把 gitea 安裝檔案丟到 global 的位置
```bash
sudo cp gitea /usr/local/bin/gitea
```
6. 讓 gitea 成爲一個 systemd 的服務:把 [這個文件](https://github.com/go-gitea/gitea/blob/main/contrib/systemd/gitea.service) 自己斟酌(我自己是放預設)修改了以後放到 `/etc/systemd/system/gitea.service`
7. 開啓 gitea 服務
```bash
sudo systemctl enable gitea
sudo systemctl start gitea
```
8. 瀏覽器開 `ip:3000` 就可以完成 GUI 設定
設定想要的資料庫,我自己覺得 SQLite3 應該夠用

記得更改上面的 IP

(可省略)設定一個 Admin 賬號
如果現在不想弄,第一個申請的賬號將會默認爲 Admin

# 搬遷
如果某天要換個伺服器來跑的話,我目前找到的辦法只有在[官網的説明文件](https://docs.gitea.io/zh-tw/backup-and-restore/),只要把上述網站的`.zip`檔案拿去還原。懶惰核對的話,步驟為以下:
## 在要搬走資料的伺服器上
0. 爲了方便也可以給 git 密碼(但應該是非必要)
```bash
passwd git
```
并且在 `etc/sudoers` 提供 sudo 權限
```bash
root ALL=(ALL:ALL) ALL
git ALL=(ALL:ALL) ALL
```
1. 切換到 git 使用者
```bash
sudo su git
```
2. 停止 gitea 用 `sudo systemctl stop gitea` 並且切換到您安裝 gitea 的位置(如果是跟著上面寫的話,那應該是 `/usr/local/bin/gitea`) 你的 `app.ini` 應該是在 `/etc/gitea/app.ini` 。把整個資料檔案打包成 dump zip 檔案。找不到的話可以用 Linux 的 [find](https://www.geeksforgeeks.org/find-command-in-linux-with-examples/) 指令(備注:只要用在 `/home/git` 之下可以讓 git 用戶操作的 `gitea` 執行檔案即可)
```bash
./gitea dump -c /etc/gitea/app.ini
```
> 以上的指令我碰過 privilage 問題,比如説沒辦法寫入/沒辦法access,我都有點作弊式的把 gitea 執行檔案 copy 到 `/home/git` 之下,然後用 sudo 建制好他需要的目錄(需要的話就看錯誤訊息幫他製作)再不然頂多幫 git 製作一個密碼,因爲我們一開始創造 git 使用者沒密碼,因此要看[這個](https://unix.stackexchange.com/questions/56765/creating-a-user-without-a-password)
3. 把 dump file 送到另外一個伺服器,可以用 `scp` [參考](https://linuxize.com/post/how-to-use-scp-command-to-securely-transfer-files/) -> 但是兩個電腦的 SSH 都要開
```bash
scp gitea-dump-xxxx.zip username@ip:/directory
```
4. 先 wget gitea 執行檔案到做好 systemd 的設定并且 start,開網頁設定,**但設定好,讓他跑完了就不要動了!**
5. 把相關的文件移到正確的位置(和官網寫的不一樣,但我覺得比較符合我的狀況)如果以下的`.sql`寫說你已經設定過以下參數似乎是沒問題的
```bash
unzip gitea-dump-xxxx.zip
# 自行更改 xxxx
cd gitea-dump-xxxx
# 自行更改 xxxx
# sudo mv app.ini /usr/local/bin/custom/conf/app.ini
sudo mv app.ini /etc/gitea/app.ini
sudo mv data/* /var/lib/gitea/data/
sudo mv log/* /var/lib/gitea/log/
# 我好像自己沒有 log,你如果有就用這
sudo mkdir /var/lib/gitea/data/gitea-repositories
# 他好像初始化不會自動創建一個
sudo mv repos/* /var/lib/gitea/data/gitea-repositories
# sqlite3
sudo apt install sqlite3
# 如果你不是 Debian base 自行更換,dnf 應該是 sqlite
sudo sqlite3 $DATABASE_PATH < gitea-db.sql
# $DATABASE_PATH 要改成你在網頁設定的位置
# 預設應該是 /var/lib/gitea/data/gitea.db
sudo chown -R git:git /etc/gitea/app.ini /var/lib/gitea
sudo service gitea restart
```
# 更改設定
大部分前端的設定可以在網站 admin 賬戶裏面做更改。
剩下(後臺)的設定要到 `/etc/gitea/app.ini` 裏面更改(根據[ArchWiki](https://wiki.archlinux.org/title/Gitea) 的寫法)而不是在[官網](https://docs.gitea.io/en-us/config-cheat-sheet/#repository---upload-repositoryupload)上寫的 `/etc/gitea/config/app.ini`。更改的辦法是
1. 去[官網設定一覽表](https://docs.gitea.io/en-us/config-cheat-sheet/#repository---upload-repositoryupload)看有沒有相關的設定
2. 如果有的話沒有的話就去看 [github 上的 `app.ini` 範例](https://github.com/go-gitea/gitea/blob/main/custom/conf/app.example.ini) 做對比查看需要的哪行
3. 把他加入 `/etc/gitea/app.ini` 裏面
4. 輸入指令 `sudo systemctl restart gitea` 即可
###### tags: `work`