+ create stack & make base dirs helpers
This commit is contained in:
2
.env.example
Normal file
2
.env.example
Normal file
@ -0,0 +1,2 @@
|
||||
MACHINE=
|
||||
MYSQL_ROOT_PASSWORD=
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
.env
|
186
create-stack-project.sh
Executable file
186
create-stack-project.sh
Executable file
@ -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
Normal file
26
make-base-dirs.sh
Normal file
@ -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
|
Reference in New Issue
Block a user