Browse Source

+ create stack & make base dirs helpers

master
WSL Winda 6 days ago
commit
9f2c6244cb
  1. 2
      .env.example
  2. 1
      .gitignore
  3. 186
      create-stack-project.sh
  4. 26
      make-base-dirs.sh

2
.env.example

@ -0,0 +1,2 @@
MACHINE=
MYSQL_ROOT_PASSWORD=

1
.gitignore

@ -0,0 +1 @@
.env

186
create-stack-project.sh

@ -0,0 +1,186 @@
#!/bin/bash
set -e
PROJECT=$1
if [[ -z "${PROJECT}" ]]; then
echo 'Usage: ./create-stack-project PROJECT [SEAFILE_DUMPS_LIB_UUID]';
exit 1;
fi
test -f .env || {
echo 'No env';
exit 1;
}
echo
source .env
P_UID=1000
P_GID=1000
mkdir /opt/stacks/${PROJECT}
cat << EOF > /opt/stacks/${PROJECT}/compose.yaml
name: ${PROJECT}
services:
nginx:
extends:
file: /opt/structure/docker-compose.base.yml
service: nginx
php:
extends:
file: /opt/structure/docker-compose.base.yml
service: php
build:
args:
- PHP_VERSION=8.1
workspace:
extends:
file: /opt/structure/docker-compose.base.yml
service: workspace
build:
args:
- PROJECT=\${PROJECT}
- PHP_VERSION=8.1
expose:
- 22
working_dir: /var/www/${PROJECT}
volumes:
- /opt/projects/${PROJECT}/profiler:/tmp/profiler
- /opt/projects/${PROJECT}/www:/var/www
mariadb:
extends:
file: /opt/structure/docker-compose.base.yml
service: mariadb
redis:
extends:
file: /opt/structure/docker-compose.base.yml
service: redis
seafile:
extends:
file: /opt/structure/docker-compose.base.yml
service: seafile
secrets:
user_authorized_keys:
file: /opt/projects/\${PROJECT}/ssh/authorized_keys
user_ssh_key:
file: /opt/projects/\${PROJECT}/ssh/id_ed25519
user_ssh_key_pub:
file: /opt/projects/\${PROJECT}/ssh/id_ed25519.pub
composer_auth:
file: /opt/projects/\${PROJECT}/config/composer/auth.json
networks:
dockge_default:
external: true
structure:
volumes:
seafile:
EOF
SEAFILE_USER="${MACHINE}-workspace-${PROJECT}@dimti.ru"
SEAFILE_PASS=$(pwgen -s 20 1)
SEAFILE_DUMPS_LIB=$2
echo "Seafile credentionals for create new account:"
echo "SEAFILE_USER=${SEAFILE_USER}"
echo "SEAFILE_PASS=${SEAFILE_PASS}"
cat << EOF > /opt/stacks/${PROJECT}/.env
PROJECT=${PROJECT}
MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
SEAFILE_USER=${SEAFILE_USER}
SEAFILE_PASS=${SEAFILE_PASS}
SEAFILE_DUMPS_LIB=${SEAFILE_DUMPS_LIB}
EOF
chown -R $_PUID:$P_GID /opt/stacks/${PROJECT}
PROJECT_DIR=/opt/projects/${PROJECT}
CONFIG_DIR=${PROJECT_DIR}/config
HOSTFILES_DIR=${PROJECT_DIR}/hostfiles
LOGS_DIR=${PROJECT_DIR}/logs
MARIADB_DIR=${PROJECT_DIR}/mariadb
PROFILER_DIR=${PROJECT_DIR}/profiler
SSH_DIR=${PROJECT_DIR}/ssh
WWW_DIR=${PROJECT_DIR}/www
mkdir -p ${CONFIG_DIR}/composer
mkdir -p ${CONFIG_DIR}/mariadb
mkdir -p ${CONFIG_DIR}/nginx/conf.d
mkdir -p ${CONFIG_DIR}/nginx/includes.d
mkdir -p ${CONFIG_DIR}/nginx/ssl.d
mkdir -p ${CONFIG_DIR}/redis
cat << EOF > ${CONFIG_DIR}/composer/auth.json
{
"github-oauth": {
"github.com": ""
}
}
EOF
cat << EOF > ${CONFIG_DIR}/mariadb/90-mysqld.cnf
[mysqld]
EOF
cat << EOF > ${CONFIG_DIR}/nginx/conf.d/vhosts.conf
upstream php {
server php:9000;
}
map \$http_host \$root {
${PROJECT}.local.wpstudio.ru /var/www/${PROJECT};
}
server {
listen 80 default;
root \$root;
include includes.d/octobercms.conf;
include includes.d/staticfiles.conf;
client_max_body_size 300M;
large_client_header_buffers 4 32k;
location ~ ^/index.php {
fastcgi_pass php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
fastcgi_param SERVER_NAME \$host;
}
}
EOF
cp /opt/stacks/structure/config/nginx/includes.d/octobercms.conf ${CONFIG_DIR}/nginx/includes.d/
cp /opt/stacks/structure/config/nginx/includes.d/staticfiles.conf ${CONFIG_DIR}/nginx/includes.d/
cat << EOF > ${CONFIG_DIR}/redis/redis-local.conf
port 6379
tcp-backlog 128
protected-mode no
stop-writes-on-bgsave-error no
databases 4
always-show-logo no
syslog-enabled yes
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
EOF
chown $P_UID:$P_GID -R ${CONFIG_DIR}
mkdir ${HOSTFILES_DIR}
chown $P_UID:$P_GID ${HOSTFILES_DIR}
mkdir -p ${LOGS_DIR}/mariadb
mkdir -p ${LOGS_DIR}/nginx
mkdir -p ${LOGS_DIR}/php-fpm
mkdir ${MARIADB_DIR}
mkdir ${PROFILER_DIR}
mkdir ${SSH_DIR}
touch ${SSH_DIR}/authorized_keys
ssh-keygen -N "" -t ed25519 -f ${SSH_DIR}/id_ed25519 -C workspace-${PROJECT}@${MACHINE} 2>&1 > /dev/null
echo "SSH Key:"
cat ${SSH_DIR}/id_ed25519.pub
ssh-keyscan -H github.com > ${SSH_DIR}/known_hosts 2>/dev/null
chown $P_UID:$P_GID -R ${SSH_DIR}
mkdir -p ${WWW_DIR}/${PROJECT}
chown -R $P_UID:$P_GID ${WWW_DIR}

26
make-base-dirs.sh

@ -0,0 +1,26 @@
#!/bin/bash
set -e
P_UID=1000
P_GID=1000
cd /opt
mkdir cache
cd cache
mkdir composer JetBrains yarn
cd /opt
mkdir npm nvm projects pyenv
mkdir share
cd share
mkdir JetBrains pnpm
chown -R $P_UID:$P_GID \
cache \
npm \
nvm \
projects \
pyenv \
share
Loading…
Cancel
Save