commit 9f2c6244cb94a8a7f292c4ca65a1d409d157bee2 Author: WSL Winda Date: Sun Feb 16 20:00:54 2025 +0300 + create stack & make base dirs helpers diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..6b08a8a --- /dev/null +++ b/.env.example @@ -0,0 +1,2 @@ +MACHINE= +MYSQL_ROOT_PASSWORD= \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2eea525 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.env \ No newline at end of file diff --git a/create-stack-project.sh b/create-stack-project.sh new file mode 100755 index 0000000..896ffa4 --- /dev/null +++ b/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} diff --git a/make-base-dirs.sh b/make-base-dirs.sh new file mode 100644 index 0000000..bc70609 --- /dev/null +++ b/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 \ No newline at end of file