autocommit
This commit is contained in:
parent
d5e5d631d8
commit
a6c426eac4
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
install.env
|
62
README.md
Normal file
62
README.md
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
|
||||||
|
#### Запустить все:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd /data/gitea-init
|
||||||
|
bash gitea-init.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
`gitea-init.sh` выполнит следующие команды:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
bash gitea-admin.sh
|
||||||
|
bash create-all.sh
|
||||||
|
bash push-all.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
После успешного выполнения репозиторий Gitea будет готов к работе.
|
||||||
|
|
||||||
|
|
||||||
|
#### Первоначальная конфигурация:
|
||||||
|
|
||||||
|
Параметры, необходимые для инициализации Gitea:
|
||||||
|
|
||||||
|
```env
|
||||||
|
GITEA_API_HOST=git.<gitea_host>
|
||||||
|
GITEA_USER_NAME=<gitea_admin_username>
|
||||||
|
ADMIN_EMAIL=<gitea_admin_email>
|
||||||
|
SERVER_NAME=server-<name>
|
||||||
|
GIT_REMOTE_PREFIX=<prefix>-
|
||||||
|
GIT_BRANCH=<branch_name>
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
#### Создание админа и токена доступа к Gitea:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd /data/gitea-init
|
||||||
|
bash gitea-admin.sh
|
||||||
|
```
|
||||||
|
Имя токена в Gitea: `WRITE_USER_REPO`
|
||||||
|
Имя переменной в `/data/secrets/dev.env`: `GITEA_WRITE_USER_REPO`
|
||||||
|
|
||||||
|
Права:
|
||||||
|
* `write:repository `
|
||||||
|
* `write:user`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### Создать в Gitea репозитории из файла `repos.list`:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd /data/gitea-init
|
||||||
|
bash create-all.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
#### Push всех репозтиориев из файла `repos.list`:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd /data/gitea-init
|
||||||
|
bash push-all.sh
|
||||||
|
```
|
@ -1,36 +1,39 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
LIST_FILE="./repos.list"
|
LIST_FILE="/data/gitea-init/repos.list"
|
||||||
ENV_FILE="/data/secrets/dev.env"
|
ENV_FILE="/data/gitea-init/install.env"
|
||||||
|
|
||||||
# Checking for a CSV file
|
trap 'echo -e "\033[31mcreate-all.sh: Something went wrong\033[0m"; exit 1' ERR
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "Checking for a repos.list file..."
|
||||||
if [ ! -f "$LIST_FILE" ]; then
|
if [ ! -f "$LIST_FILE" ]; then
|
||||||
echo "File $LIST_FILE not found"
|
echo "File $LIST_FILE not found"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Including a file with environment variables
|
echo "Including a file with environment variables..."
|
||||||
if [ -f $ENV_FILE ]; then
|
if [ -f $ENV_FILE ]; then
|
||||||
source $ENV_FILE
|
source $ENV_FILE
|
||||||
else
|
else
|
||||||
echo "File dev.env not found"
|
echo "File install.env not found"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Checking the presence of a variable GITEA_W_USER_REPO
|
echo "Checking the presence of a variable GITEA_WRITE_USER_REPO..."
|
||||||
if [ -z "$GITEA_W_USER_REPO" ]; then
|
if [ -z "$GITEA_WRITE_USER_REPO" ]; then
|
||||||
echo "The GITEA_W_USER_REPO variable is not set"
|
echo "The GITEA_WRITE_USER_REPO variable is not set"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Reading a CSV file and creating repositories
|
echo "Reading a CSV file and creating repositories..."
|
||||||
OLDIFS=$IFS
|
OLDIFS=$IFS
|
||||||
IFS=' | '
|
IFS=' | '
|
||||||
while read -r NAME_REPO DESCRIPTION_REPO; do
|
while read -r NAME_REPO DESCRIPTION_REPO; do
|
||||||
if [ "$NAME_REPO" != "NAME_REPO" ]; then # Skip title
|
if [ "$NAME_REPO" != "NAME_REPO" ]; then # Skip title
|
||||||
RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" -X POST "https://git.rozenlab.com/api/v1/user/repos" \
|
RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" -X POST "https://$GITEA_API_HOST/api/v1/user/repos" \
|
||||||
-H "Content-Type: application/json" \
|
-H "Content-Type: application/json" \
|
||||||
-H "Authorization: token $GITEA_W_USER_REPO" \
|
-H "Authorization: token $GITEA_WRITE_USER_REPO" \
|
||||||
-d '{
|
-d '{
|
||||||
"name": "'"$NAME_REPO"'",
|
"name": "'"$NAME_REPO"'",
|
||||||
"private": true,
|
"private": true,
|
||||||
@ -44,4 +47,7 @@ while read -r NAME_REPO DESCRIPTION_REPO; do
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
done < "$LIST_FILE"
|
done < "$LIST_FILE"
|
||||||
IFS=$OLDIFS
|
IFS=$OLDIFS
|
||||||
|
|
||||||
|
trap - ERR
|
||||||
|
echo "Create all complete"
|
42
env-gen-install.sh
Normal file
42
env-gen-install.sh
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
echo "Use: $0 <var_name> [value]"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
VARIABLE_NAME=$1
|
||||||
|
ENV_FILE="/data/gitea-init/install.env"
|
||||||
|
|
||||||
|
trap 'echo -e "\033[31menv-gen-install.sh: Something went wrong\033[0m"; exit 1' ERR
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Password gen: 20chars,0-9,a-z
|
||||||
|
generate_random_password() {
|
||||||
|
pwgen -s 20 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# If the second parameter is specified, use it as the value of the variable
|
||||||
|
if [ -n "$2" ]; then
|
||||||
|
VALUE=$2
|
||||||
|
else
|
||||||
|
VALUE=$(generate_random_password)
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Creating dir and .env file if it doesn't exist..."
|
||||||
|
if [ ! -f "$ENV_FILE" ]; then
|
||||||
|
mkdir -p "$(dirname "$ENV_FILE")"
|
||||||
|
touch "$ENV_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Update or add a variable to the .env file..."
|
||||||
|
if grep -q "^$VARIABLE_NAME=" "$ENV_FILE"; then
|
||||||
|
# The variable exists, update its value
|
||||||
|
sed -i "s/^$VARIABLE_NAME=.*/$VARIABLE_NAME=$VALUE/" "$ENV_FILE"
|
||||||
|
else
|
||||||
|
# The variable does not exist, add it to the file
|
||||||
|
echo "$VARIABLE_NAME=$VALUE" >> "$ENV_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
trap - ERR
|
||||||
|
echo "Variable $VARIABLE_NAME successfully updated/added to $ENV_FILE"
|
63
gitea-admin.sh
Normal file
63
gitea-admin.sh
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
INSTALL_ENV="/data/gitea-init/install.env"
|
||||||
|
|
||||||
|
trap 'echo -e "\033[31mgitea-admin.sh: Something went wrong\033[0m"; exit 1' ERR
|
||||||
|
set -e
|
||||||
|
|
||||||
|
source $INSTALL_ENV
|
||||||
|
|
||||||
|
echo " Create admin password..."
|
||||||
|
GITEA_ADMIN_PASSWORD=$(pwgen -s 20 1);
|
||||||
|
echo "Save GITEA_ADMIN_PASSWORD token to $INSTALL_ENV..."
|
||||||
|
cd /data/gitea-init
|
||||||
|
bash env-gen-install.sh GITEA_ADMIN_PASSWORD $GITEA_ADMIN_PASSWORD
|
||||||
|
|
||||||
|
echo " Create admin user..."
|
||||||
|
docker exec -it --user git gitea gitea admin user create --username $GIT_USER --password $GITEA_ADMIN_PASSWORD --email $ADMIN_EMAIL --admin
|
||||||
|
docker exec -it --user git gitea gitea admin user list
|
||||||
|
|
||||||
|
echo " Create admin access token..."
|
||||||
|
TOKEN=$(curl -s -X POST "https://$GITEA_API_HOST/api/v1/users/$GITEA_USER_NAME/tokens" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"name": "WRITE_USER_REPO", "scopes": ["write:repository", "write:user"]}' \
|
||||||
|
-u "$GITEA_USER_NAME:$GITEA_ADMIN_PASSWORD" | jq -r .sha1)
|
||||||
|
|
||||||
|
if [[ -z "$TOKEN" || "$TOKEN" == "null" ]]; then
|
||||||
|
echo "Failed to obtain admin token"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Save GITEA_WRITE_USER_REPO token to $INSTALL_ENV..."
|
||||||
|
cd /data/gitea-init
|
||||||
|
bash env-gen-install.sh GITEA_WRITE_USER_REPO $TOKEN
|
||||||
|
|
||||||
|
|
||||||
|
echo "Add public SSH key to gitea app..."
|
||||||
|
SSH_PUBLIC_KEY=$(cat ~/.ssh/id_ed25519.pub)
|
||||||
|
|
||||||
|
echo "Get SSH keys list from gitea API..."
|
||||||
|
keys=$(curl -X GET -H "Authorization: token $TOKEN" "https://$GITEA_API_HOST/api/v1/user/keys")
|
||||||
|
|
||||||
|
echo "Search SSH key in gitea..."
|
||||||
|
existing_key_id=$(echo $keys | jq -r ".[] | select(.title == \"$SERVER_NAME\") | .id")
|
||||||
|
|
||||||
|
echo "If already exist SSH key in gitea, remove it..."
|
||||||
|
if [ -n "$existing_key_id" ]; then
|
||||||
|
curl -X DELETE -H "Authorization: token $TOKEN" "https://$GITEA_API_HOST/api/v1/user/keys/$existing_key_id"
|
||||||
|
echo "SSH key removed"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Add new SSH public key in gitea..."
|
||||||
|
curl -X POST \
|
||||||
|
"https://$GITEA_API_HOST/api/v1/user/keys" \
|
||||||
|
-H "Authorization: token $TOKEN" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "{
|
||||||
|
\"title\": \"$SERVER_NAME\",
|
||||||
|
\"key\": \"$SSH_PUBLIC_KEY\"
|
||||||
|
}"
|
||||||
|
|
||||||
|
|
||||||
|
trap - ERR
|
||||||
|
echo "New Gitea user and api token created"
|
11
gitea-init.sh
Normal file
11
gitea-init.sh
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
trap 'echo -e "\033[31mgitea-init.sh: Something went wrong\033[0m"; exit 1' ERR
|
||||||
|
set -e
|
||||||
|
|
||||||
|
bash gitea-admin.sh
|
||||||
|
bash create-all.sh
|
||||||
|
bash push-all.sh
|
||||||
|
|
||||||
|
trap - ERR
|
||||||
|
echo "Gitea inited"
|
115
push-all.sh
115
push-all.sh
@ -1,90 +1,37 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
# notes
|
LIST_FILE="/data/gitea-init/repos.list"
|
||||||
# git@rozenlab.com:leo/notes.git
|
ENV_FILE="/data/gitea-init/install.env"
|
||||||
cd /data/notes
|
|
||||||
git push notes main
|
|
||||||
|
|
||||||
# ssl-gen
|
trap 'echo -e "\033[31mcreate-all.sh: Something went wrong\033[0m"; exit 1' ERR
|
||||||
# git@rozenlab.com:leo/ssl-gen.git
|
set -e
|
||||||
cd /data/ssl-gen
|
|
||||||
git push ssl-gen main
|
|
||||||
|
|
||||||
# utils
|
echo "Checking for a repos.list file..."
|
||||||
# git@rozenlab.com:leo/utils.git
|
if [ ! -f "$LIST_FILE" ]; then
|
||||||
cd /data/utils
|
echo "File $LIST_FILE not found"
|
||||||
git push utils main
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# server-origin
|
echo "Including a file with environment variables..."
|
||||||
# git@rozenlab.com:leo/server-origin.git
|
if [ -f $ENV_FILE ]; then
|
||||||
cd /data/server-origin
|
source $ENV_FILE
|
||||||
git push server-origin main
|
else
|
||||||
|
echo "File install.env not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# backup
|
echo "Reading a CSV file and creating repositories..."
|
||||||
# git@rozenlab.com:leo/backup.git
|
OLDIFS=$IFS
|
||||||
cd /data/backup
|
IFS=' | '
|
||||||
git push backup main
|
while read -r NAME_REPO DESCRIPTION_REPO; do
|
||||||
|
if [ "$NAME_REPO" != "NAME_REPO" ]; then # Skip title
|
||||||
|
cd /data/$NAME_REPO
|
||||||
|
git remote remove ${PREFIX}$NAME_REPO
|
||||||
|
git remote add ${PREFIX}$NAME_REPO git@$GITEA_API_HOST:$GITEA_USER_NAME/$NAME_REPO.git
|
||||||
|
git push ${PREFIX}$NAME_REPO $GIT_BRANCH
|
||||||
|
fi
|
||||||
|
done < "$LIST_FILE"
|
||||||
|
IFS=$OLDIFS
|
||||||
|
|
||||||
# gitea
|
trap - ERR
|
||||||
# git@rozenlab.com:leo/gitea.git
|
echo "Create all complete"
|
||||||
cd /data/gitea
|
|
||||||
git push gitea main
|
|
||||||
|
|
||||||
# traefik
|
|
||||||
# git@rozenlab.com:leo/traefik.git
|
|
||||||
cd /data/traefik
|
|
||||||
git push traefik main
|
|
||||||
|
|
||||||
# socks5
|
|
||||||
# git@rozenlab.com:leo/socks5.git
|
|
||||||
cd /data/socks5
|
|
||||||
git push socks5 main
|
|
||||||
|
|
||||||
# install
|
|
||||||
# git@rozenlab.com:leo/install.git
|
|
||||||
cd /data/install
|
|
||||||
git push install main
|
|
||||||
|
|
||||||
# server-backup
|
|
||||||
# git@rozenlab.com:leo/server-backup.git
|
|
||||||
cd /data/server-backup
|
|
||||||
git push server-backup main
|
|
||||||
|
|
||||||
# tetris
|
|
||||||
# git@rozenlab.com:Leo/tetris.git
|
|
||||||
cd /data/tetris
|
|
||||||
git push tetris main
|
|
||||||
|
|
||||||
# brickgame
|
|
||||||
# git@rozenlab.com:leo/brickgame.git
|
|
||||||
cd /data/brickgame
|
|
||||||
git push brickgame main
|
|
||||||
|
|
||||||
# blog-frontend
|
|
||||||
# git@rozenlab.com:leo/blog-frontend.git
|
|
||||||
cd /data/blog-frontend
|
|
||||||
git push blog-frontend main
|
|
||||||
|
|
||||||
# blog-wp
|
|
||||||
# git@rozenlab.com:leo/blog-wp.git
|
|
||||||
cd /data/blog-wp
|
|
||||||
git push blog-wp main
|
|
||||||
|
|
||||||
# nginx-main
|
|
||||||
# git@rozenlab.com:leo/nginx-main.git
|
|
||||||
#cd /data/nginx-main
|
|
||||||
#git push nginx-main main
|
|
||||||
|
|
||||||
# pgadmin
|
|
||||||
# git@rozenlab.com:leo/pgadmin.git
|
|
||||||
cd /data/pgadmin
|
|
||||||
git push pgadmin main
|
|
||||||
|
|
||||||
# postgres
|
|
||||||
# git@rozenlab.com:leo/postgres.git
|
|
||||||
cd /data/postgres
|
|
||||||
git push postgres main
|
|
||||||
|
|
||||||
# gitea-init
|
|
||||||
# git@rozenlab.com:leo/gitea-init.git
|
|
||||||
cd /data/gitea-init
|
|
||||||
git push gitea-init main
|
|
@ -9,6 +9,11 @@ backup | Backup all databases & files
|
|||||||
server-origin | Head site, repositories, etc
|
server-origin | Head site, repositories, etc
|
||||||
notes | Other notes
|
notes | Other notes
|
||||||
ssl-gen | Self signed SSL certs generator
|
ssl-gen | Self signed SSL certs generator
|
||||||
brickgame | Tetris and other games
|
|
||||||
tetris | Classic Tetris
|
tetris | Classic Tetris
|
||||||
brickgame | Modular system with several games
|
brickgame | Modular system with several games
|
||||||
|
blog-wp | Wordpress dev blog
|
||||||
|
blog-wp-install | Init wordpress blog
|
||||||
|
mariadb | Docker Mariadb for Wordpress dev blog
|
||||||
|
gitea-init | Create all repos of origin in Gitea
|
||||||
|
postgres | Docker postgres for traefik
|
||||||
|
pgadmin | Docker pgadmin for traefik
|
||||||
|
Loading…
Reference in New Issue
Block a user