6 changed files with 588 additions and 0 deletions
-
86lib/bashrc_watcher.sh
-
60lib/common.bash
-
39lib/setup-common.bash
-
93lib/setup-prod-normal-user.bash
-
283setup-prod.bash
-
27yamal.d/2025_05_09_060105.bash
@ -0,0 +1,86 @@ |
|||
function sed_replace { |
|||
REGEX=$1 |
|||
STRING=$2 |
|||
FILE=$3 |
|||
if ! grep -Eq "$REGEX" "$FILE"; then |
|||
builtin echo -e "$STRING" >>"$FILE" |
|||
echo 'appended' |
|||
else |
|||
sed -Ei "s|$REGEX|$STRING|g" "$FILE" |
|||
echo 'replaced' |
|||
fi |
|||
} |
|||
|
|||
function bashrc_count_lines { |
|||
wc -l "$HOME/.bashrc" | cut -d' ' -f1 |
|||
} |
|||
|
|||
function bashrc_watch_start { |
|||
if [[ -z "${BASHRC_LINES+set}" ]]; then |
|||
BASHRC_LINES=$(bashrc_count_lines) |
|||
else |
|||
BASHRC_EVOLVED=true |
|||
fi |
|||
} |
|||
|
|||
function bashrc_watch_end { |
|||
bashrc_lines=$(bashrc_count_lines) |
|||
if [[ "$BASHRC_LINES" -lt "$bashrc_lines" || -n "${BASHRC_EVOLVED+set}" ]]; then |
|||
echo |
|||
echo '*****************************' |
|||
echo '* BASHRC has evolved! *' |
|||
echo '* please synchronize: *' |
|||
echo '* *' |
|||
echo "* source ~/.bashrc *" |
|||
echo '* *' |
|||
echo '*****************************' |
|||
echo |
|||
fi |
|||
} |
|||
|
|||
function _bashrc_env_with_prefix { |
|||
arg1="$1" |
|||
arg2="$2" |
|||
prefix="$3" |
|||
if printenv | grep -q "$arg1"; then |
|||
real_value=$(eval "echo \$$arg1") |
|||
echo "success for $arg1 = $real_value" |
|||
else |
|||
case "$prefix" in |
|||
export) |
|||
session_line="export ${arg1}=${arg2}" |
|||
regex="$session_line" |
|||
;; |
|||
eval) |
|||
session_line="eval \"\$($arg2)\"" |
|||
regex="eval \"\\\$\\($arg2\\)\"" |
|||
;; |
|||
*) echo "unknown prefix $prefix" && exit 10 ;; |
|||
esac |
|||
sed_replace "$regex" "$session_line" "$HOME/.bashrc" &>/dev/null |
|||
eval "$session_line" |
|||
set +e |
|||
trap - EXIT |
|||
eval "BASHRC_LINES=$BASHRC_LINES $0" |
|||
exit $? |
|||
fi |
|||
|
|||
} |
|||
|
|||
function bashrc_export { |
|||
_bashrc_env_with_prefix "$1" "$2" 'export' |
|||
} |
|||
|
|||
function bashrc_eval { |
|||
_bashrc_env_with_prefix "$1" "$2" 'eval' |
|||
} |
|||
|
|||
function on_exit() { |
|||
rv=$? |
|||
# [[ $rv -eq 0 ]] && bashrc_watch_end |
|||
bashrc_watch_end |
|||
exit $rv |
|||
} |
|||
|
|||
bashrc_watch_start |
|||
trap "on_exit" EXIT |
|||
@ -0,0 +1,60 @@ |
|||
# library functions |
|||
|
|||
function confirm { |
|||
read -p "$1 ([y]es or [N]o): " |
|||
case $(echo $REPLY | tr '[A-Z]' '[a-z]') in |
|||
y | yes) echo "yes" ;; |
|||
*) echo "no" ;; |
|||
esac |
|||
} |
|||
|
|||
function load_app_name { |
|||
[[ -z "${PROJECT_DIR:-}" ]] && echo '`PROJECT_DIR` variable should be initialized first!' && exit 4 |
|||
local application_ruby="$PROJECT_DIR/config/application.rb" |
|||
[[ ! -f $application_ruby ]] && echo "ERROR: $application_ruby not found!" && exit 20 |
|||
APP_NAME=$(grep ^module $application_ruby | cut -d' ' -f2) |
|||
APP_NAME=${APP_NAME,,} # downcase |
|||
} |
|||
|
|||
function load_database_settings { |
|||
local rails_cmd=" |
|||
ActiveRecord::Base.configurations.configurations |
|||
# .find{it.env_name == '$RAILS_ENV'} |
|||
.find{_1.env_name == '$RAILS_ENV'} |
|||
.configuration_hash |
|||
.each do |k,v| |
|||
puts \"#{k}\\t#{v}\" |
|||
end |
|||
" |
|||
local db_settings=$(rails runner "$rails_cmd") |
|||
|
|||
ADAPTER=$(echo -e "$db_settings" | grep adapter | cut -f2) |
|||
DB_NAME=$(echo -e "$db_settings" | grep database | cut -f2) |
|||
DB_USER=$(echo -e "$db_settings" | grep user | cut -f2) |
|||
DB_PASSWORD=$(echo -e "$db_settings" | grep password | cut -f2) |
|||
} |
|||
|
|||
function load_storage_settings { |
|||
STORAGE_DIR=$(rails runner 'puts ActiveStorage::Blob.service.root') |
|||
} |
|||
|
|||
function load_db_version { |
|||
DB_VERSION=$(grep -E "define\(version:" "$PROJECT_DIR/db/schema.rb" | cut -d' ' -f2 | cut -d')' -f1) |
|||
} |
|||
|
|||
function load_yamal_d_extra_scripts { |
|||
load_app_name |
|||
load_db_version |
|||
echo "APP_NAME=$APP_NAME" |
|||
echo "DB_VERSION=$DB_VERSION" |
|||
if [[ -f $PROJECT_DIR/bin/yamal.d/$DB_VERSION.bash ]]; then |
|||
echo '------------------------' |
|||
echo "YAMAL_D extra script found" |
|||
source $PROJECT_DIR/bin/yamal.d/$DB_VERSION.bash |
|||
echo '------------------------' |
|||
fi |
|||
} |
|||
|
|||
## MAIN |
|||
|
|||
load_yamal_d_extra_scripts |
|||
@ -0,0 +1,39 @@ |
|||
## library functions |
|||
|
|||
function install_pacapt { |
|||
if [[ $DISTRO == 'arch' ]]; then |
|||
PACMAN_CMD=$(which pacman) |
|||
echo 'pacman natively detected!' |
|||
else |
|||
if [[ ! -f $HOME/.local/bin/pacman ]]; then |
|||
[[ $DISTRO == 'debian' ]] && apt install -y apt-utils |
|||
mkdir -p $HOME/.local/bin |
|||
curl -sLo $HOME/.local/bin/pacman https://github.com/icy/pacapt/raw/ng/pacapt |
|||
chmod 755 $HOME/.local/bin/pacman |
|||
echo "pacapt/pacman ($PACMAN_CMD) successfully installed!" |
|||
fi |
|||
PACMAN_CMD="$HOME/.local/bin/pacman" |
|||
fi |
|||
} |
|||
|
|||
function install_idem_packages { |
|||
if ! pacman -Qi $1 &>/dev/null; then |
|||
sudo $HOME/.local/bin/pacman -S --noconfirm $1 >/dev/null |
|||
echo "$2 installed successfully" |
|||
else |
|||
echo "$2 already installed!" |
|||
fi |
|||
} |
|||
|
|||
function install_packages { |
|||
install_idem_packages "${DISTRO_PACKAGES[_]}" "generic packages" |
|||
[ -v "DISTRO_PACKAGES[${DISTRO}]" ] && install_idem_packages "${DISTRO_PACKAGES[${DISTRO}]}" "distro specific packages: [$DISTRO]" |
|||
true |
|||
} |
|||
|
|||
function postgres_newdb { |
|||
if ! (sudo -u postgres -- psql --csv -tc "SELECT 1 as found FROM pg_roles WHERE rolname = '$DB_USER'" | grep -q ^1$); then |
|||
sudo -iu postgres psql -c "CREATE USER $DB_USER WITH PASSWORD '$DB_USER'" |
|||
sudo -iu postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER" |
|||
fi |
|||
} |
|||
@ -0,0 +1,93 @@ |
|||
## CONSTANTS |
|||
|
|||
REPO_URL=$1 |
|||
REPO_BRANCH=$2 |
|||
FORCE=${3:-false} |
|||
|
|||
RAILS_ENV=production |
|||
KEY_LENGTH=10 |
|||
|
|||
## FUNCTIONS |
|||
|
|||
function install_mise { |
|||
if [[ ! -f $HOME/.local/bin/mise ]]; then |
|||
echo -n 'installing mise...' |
|||
curl -s https://mise.run | sh 2>&1 >/dev/null |
|||
echo OK |
|||
fi |
|||
|
|||
if [[ ! -f $HOME/.bashrc ]] || ! grep -q '.local/bin/mise activate bash' $HOME/.bashrc; then |
|||
echo "eval \"\$($HOME/.local/bin/mise activate bash)\"" >>$HOME/.bashrc |
|||
echo "cd /opt/$USER" >>$HOME/.bashrc |
|||
source $HOME/.bashrc |
|||
mise version |
|||
fi |
|||
|
|||
if [[ ! -f $HOME/.config/mise/config.toml ]] || ! grep -q 'RAILS_ENV' $HOME/.config/mise/config.toml; then |
|||
mise self-update -y 2>&1 >/dev/null |
|||
mise settings add idiomatic_version_file_enable_tools ruby |
|||
mise set --global RAILS_ENV=production |
|||
mise set --global SECRET_KEY_BASE=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c $KEY_LENGTH) |
|||
echo mise install successfully for production with SECRET_KEY_BASE |
|||
fi |
|||
|
|||
} |
|||
|
|||
function pull_repo { |
|||
if [[ ! -d .git ]]; then |
|||
git config --global init.defaultBranch $REPO_BRANCH |
|||
git init |
|||
git remote add origin $REPO_URL |
|||
fi |
|||
|
|||
if git fetch origin $REPO_BRANCH --dry-run --verbose 2>&1 | grep -q " =.*\-> origin\/$REPO_BRANCH"; then |
|||
set +Eue |
|||
$FORCE || exit 100 # means no change |
|||
set -Eue |
|||
fi |
|||
git config pull.rebase true |
|||
git pull origin $REPO_BRANCH |
|||
git checkout -q $REPO_BRANCH |
|||
} |
|||
|
|||
function install_rails { |
|||
mise install |
|||
mise exec -- bundle check >/dev/null || mise exec -- bundle install --quiet |
|||
mise exec -- rails db:prepare |
|||
mise exec -- rails assets:precompile |
|||
} |
|||
|
|||
function assert_params { |
|||
[[ $# -ge 2 ]] || (echo '2 params required: REPO_URL REPO_BRANCH [FORCE]' && exit 1) |
|||
} |
|||
|
|||
function link_to_config { |
|||
for file in /etc/$USER/*; do |
|||
local destination=$(basename $file) |
|||
case "$destination" in |
|||
\*) |
|||
echo "WARNING: no configuration file provided, you may copy from ./config/*_sample.yml to location: /etc/$USER" |
|||
;; |
|||
service.conf) |
|||
echo "environment (service.conf) converted to .env.production" |
|||
ln -sf $(realpath $file) .env.production |
|||
;; |
|||
*.yml | *.yaml) |
|||
echo "yaml file: $(realpath $file) -> config" |
|||
ln -sf $(realpath $file) config/ |
|||
;; |
|||
esac |
|||
done |
|||
} |
|||
|
|||
## MAIN |
|||
set -Eue |
|||
assert_params $* |
|||
|
|||
mkdir -p /opt/$USER |
|||
cd /opt/$USER |
|||
|
|||
pull_repo |
|||
link_to_config |
|||
install_mise |
|||
install_rails |
|||
@ -0,0 +1,283 @@ |
|||
#!/usr/bin/env bash |
|||
|
|||
## CONSTANTS |
|||
|
|||
REPO_BRANCH=main |
|||
YAMAL_DIR=/home/yamal |
|||
YAMAL_CONFIG=$YAMAL_DIR/config |
|||
RAILS_BASE_PORT=900 |
|||
FORCE=false |
|||
DEBUG='' |
|||
|
|||
PACMAN_CMD='pacman' |
|||
SESSION_RESTART=false |
|||
OS_RELEASE=/etc/os-release |
|||
DISTRO=$(test -f "$OS_RELEASE" && (grep -s ^ID "$OS_RELEASE" | cut -d= -f2) || echo unknown_distro) |
|||
|
|||
# TODO: project introspection... |
|||
declare -A DISTRO_PACKAGES |
|||
DISTRO_PACKAGES[_]="postgresql shfmt" |
|||
DISTRO_PACKAGES[debian]="build-essential libssl-dev libyaml-dev zlib1g-dev libgmp-dev libpq-dev libvips42 poppler-utils redis-server" |
|||
DISTRO_PACKAGES[arch]="base-devel openssl libyaml zlib gmp libvips poppler valkey" |
|||
|
|||
## FUNCTIONS |
|||
|
|||
function usage { |
|||
echo "$(dirname $0)/$(basename $0) --repo-url|-r <URL> [--repo-name|-n <NAME>] [--project|-p <NAME>] [--branch|-b <BRANCH>] [--force|-f] [--debug|-d]" |
|||
} |
|||
|
|||
function assert_requirements { |
|||
[[ ! $SHELL =~ /bash$ ]] && (echo 'bash is mandatory!' && exit 1) |
|||
command -v curl >/dev/null || (echo 'curl is mandatory!' && exit 2) |
|||
true |
|||
} |
|||
|
|||
function parse_options { |
|||
while [[ $# -gt 0 ]]; do |
|||
case "$1" in |
|||
--repo-url | -r) |
|||
shift 1 |
|||
[[ -z ${1:-} || $1 =~ ^- ]] && usage && exit 1 |
|||
REPO_URL=$1 |
|||
;; |
|||
--repo-name | -n) |
|||
shift 1 |
|||
[[ -z ${1:-} || $1 =~ ^- ]] && usage && exit 1 |
|||
REPO_NAME=$1 |
|||
;; |
|||
--project | -p) |
|||
shift 1 |
|||
[[ -z ${1:-} || $1 =~ ^- ]] && usage && exit 1 |
|||
PROJECT_NAME=$1 |
|||
;; |
|||
--branch | -b) |
|||
shift 1 |
|||
[[ -z ${1:-} || $1 =~ ^- ]] && usage && exit 1 |
|||
REPO_BRANCH=$1 |
|||
;; |
|||
--origin | -o) |
|||
shift 1 |
|||
[[ -z ${1:-} || $1 =~ ^- ]] && usage && exit 1 |
|||
ORIGIN=$1 |
|||
;; |
|||
--force | -f) |
|||
FORCE=true |
|||
;; |
|||
--debug | -d) |
|||
DEBUG='bash -xl' |
|||
;; |
|||
--help | -h) |
|||
usage |
|||
exit 0 |
|||
;; |
|||
*) |
|||
echo "Unknown option: $1" |
|||
usage |
|||
exit 2 |
|||
;; |
|||
esac |
|||
|
|||
shift 1 # Move to the next argument |
|||
done |
|||
} |
|||
|
|||
function assert_repo_url { |
|||
if [[ -z ${REPO_URL:-} ]]; then |
|||
>&2 echo -e "ERROR3: REPO_URL undefined!\n\tplease either use --repo-url or -r\n" |
|||
usage |
|||
exit 3 |
|||
fi |
|||
} |
|||
|
|||
function create_user { |
|||
if ! id -u $PROJECT_NAME >/dev/null 2>&1; then |
|||
[[ -d /opt/$PROJECT_NAME ]] && |
|||
echo -e "ERROR\n special opt folder not empty: /opt/$PROJECT_NAME\nplease specify unique project name with argument --project|-p" && |
|||
exit 20 |
|||
useradd -G ssh,yamal -rm --home-dir $YAMAL_DIR/projects/$PROJECT_NAME --shell /bin/bash $PROJECT_NAME |
|||
echo "user $PROJECT_NAME successfully created!" |
|||
fi |
|||
|
|||
if [[ ! -d /opt/$PROJECT_NAME ]]; then |
|||
mkdir -p /opt/$PROJECT_NAME |
|||
chown $PROJECT_NAME:$PROJECT_NAME /opt/$PROJECT_NAME |
|||
fi |
|||
|
|||
if [[ ! -d /etc/$PROJECT_NAME ]]; then |
|||
mkdir -p /etc/$PROJECT_NAME |
|||
echo "special folder: /etc/$PROJECT_NAME successfully created!" |
|||
fi |
|||
chown -R $PROJECT_NAME:$PROJECT_NAME /etc/$PROJECT_NAME |
|||
} |
|||
|
|||
function set_project_name { |
|||
[[ -z ${REPO_NAME:-} ]] && REPO_NAME=$(echo $REPO_URL | rev | cut -d/ -f1 | rev |cut -d. -f1) # get last url part minus '.git' |
|||
DB_USER=$REPO_NAME |
|||
[[ -z ${PROJECT_NAME:-} ]] && PROJECT_NAME=$REPO_NAME |
|||
true |
|||
} |
|||
|
|||
function define_rails_app { |
|||
if [[ -f $YAMAL_CONFIG ]]; then |
|||
local index=$(grep "^rails_app_.*=$PROJECT_NAME\$" $YAMAL_CONFIG | cut -d '=' -f1 | cut -d '_' -f3) |
|||
[[ -z $index ]] && index=$(grep "rails_app_count=" $YAMAL_CONFIG | cut -d '=' -f2) |
|||
fi |
|||
RAILS_APP=${index:-0} |
|||
} |
|||
|
|||
function inc_rails_app_count { |
|||
if [[ -f $YAMAL_CONFIG ]]; then |
|||
if ! grep -q "^rails_app_.*=$PROJECT_NAME\$" $YAMAL_CONFIG; then |
|||
echo "rails_app_$RAILS_APP=$PROJECT_NAME" >>$YAMAL_CONFIG |
|||
RAILS_APP=$(($RAILS_APP + 1)) |
|||
sed -i "s/^rails_app_count.*/rails_app_count=$RAILS_APP/" $YAMAL_CONFIG |
|||
echo "new rails app succesfully registered!" |
|||
fi |
|||
else |
|||
mkdir -p $(dirname $YAMAL_CONFIG) |
|||
echo "rails_app_count=1" >$YAMAL_CONFIG |
|||
echo "rails_app_$RAILS_APP=$PROJECT_NAME" >>$YAMAL_CONFIG |
|||
fi |
|||
} |
|||
|
|||
function install_systemd_service { |
|||
local service="/etc/systemd/system/$PROJECT_NAME.service" |
|||
local rails_port=$(($RAILS_BASE_PORT + $RAILS_APP)) |
|||
if [[ ! -f $service ]]; then |
|||
cat <<EOF >$service |
|||
[Unit] |
|||
Description=$PROJECT_NAME |
|||
After=network.target |
|||
|
|||
[Service] |
|||
Type=simple |
|||
User=$PROJECT_NAME |
|||
SyslogIdentifier=$PROJECT_NAME |
|||
AmbientCapabilities=CAP_NET_BIND_SERVICE |
|||
PermissionsStartOnly=true |
|||
WorkingDirectory=/opt/$PROJECT_NAME |
|||
ExecStart=$YAMAL_DIR/projects/$PROJECT_NAME/.local/bin/mise exec -- rails server --port $rails_port |
|||
|
|||
[Install] |
|||
WantedBy=multi-user.target |
|||
EOF |
|||
systemctl daemon-reload |
|||
systemctl enable $PROJECT_NAME |
|||
fi |
|||
systemctl restart $PROJECT_NAME |
|||
systemctl is-active $PROJECT_NAME >/dev/null && echo "service $PROJECT_NAME running on port: $rails_port" |
|||
} |
|||
|
|||
function launch_normal_user_setup { |
|||
# clean temporary files in case mise install ruby fails! |
|||
rm /tmp/mise-ruby-build -rf |
|||
|
|||
echo "launch setup as normal user: $PROJECT_NAME" |
|||
local cmd="${DEBUG:-bash -l} -- $(realpath $(dirname "$0"))/lib/setup-prod-normal-user.bash $REPO_URL $REPO_BRANCH $FORCE" |
|||
if sudo -iu $PROJECT_NAME $cmd; then |
|||
: #ok |
|||
else |
|||
local exit_code=$? |
|||
[[ $exit_code == 100 ]] && echo 'up-to-date: no change!' && exit 0 |
|||
echo "an error $exit_code has occured during 'setup-prod-normal-user'" && exit $exit_code |
|||
fi |
|||
} |
|||
|
|||
function enhance_mise_user_from_origin { |
|||
[[ -z ${ORIGIN:-} ]] && return |
|||
if [[ -d $ORIGIN/.local/share/mise/installs/ruby ]] && [[ ! -f /home/$PROJECT_NAME/.local/bin/mise ]]; then |
|||
echo -n "copy mise ruby from origin=$ORIGIN..." |
|||
mkdir -p /home/$PROJECT_NAME/.local/share/mise/installs/ruby |
|||
cp -r $ORIGIN/.local/share/mise/installs/ruby /home/$PROJECT_NAME/.local/share/mise/installs/ |
|||
chown -R $PROJECT_NAME:$PROJECT_NAME /home/$PROJECT_NAME/.local |
|||
echo OK |
|||
fi |
|||
} |
|||
|
|||
function install_pacapt { |
|||
if [[ ! -f $HOME/.local/bin/pacman ]]; then |
|||
mkdir -p $HOME/.local/bin |
|||
curl -sLo $HOME/.local/bin/pacman https://github.com/icy/pacapt/raw/ng/pacapt |
|||
chmod 755 $HOME/.local/bin/pacman |
|||
else |
|||
if [[ $DISTRO == 'arch' ]]; then |
|||
echo 'pacman natively detected!' |
|||
else |
|||
PACMAN_CMD="$HOME/.local/bin/pacman" |
|||
# echo "pacapt/pacman ($PACMAN_CMD) already installed!" |
|||
fi |
|||
fi |
|||
} |
|||
|
|||
function install_idem_packages { |
|||
if ! pacman -Qi $1 &>/dev/null; then |
|||
sudo $HOME/.local/bin/pacman -S --noconfirm $1 >/dev/null |
|||
echo "$2 installed successfully" |
|||
else |
|||
echo "$2 already installed!" |
|||
fi |
|||
} |
|||
|
|||
function install_packages { |
|||
install_idem_packages "${DISTRO_PACKAGES[_]}" "generic packages" |
|||
[ -v "DISTRO_PACKAGES[${DISTRO}]" ] && install_idem_packages "${DISTRO_PACKAGES[${DISTRO}]}" "distro specific packages: [$DISTRO]" |
|||
true |
|||
} |
|||
|
|||
function assert_etc_config_for_user { |
|||
local config_dir="/etc/$PROJECT_NAME" |
|||
if [[ -d $config_dir ]]; then |
|||
chown $PROJECT_NAME $config_dir |
|||
chmod -R 750 $config_dir |
|||
else |
|||
echo -e "-----\nERROR\n-----\nplease provide configuration file from location:\n $config_dir" |
|||
false |
|||
fi |
|||
} |
|||
|
|||
function postgres_newdb { |
|||
if ! (sudo -u postgres -- psql --csv -tc "SELECT 1 as found FROM pg_roles WHERE rolname = '$DB_USER'" | grep -q ^1$); then |
|||
echo "creating postgresql user: $DB_USER" |
|||
sudo -iu postgres psql -c "CREATE USER $DB_USER WITH PASSWORD '$DB_USER'" |
|||
sudo -iu postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER" |
|||
fi |
|||
} |
|||
|
|||
function postgres_global_encoding_utf8 { |
|||
if ! sudo -iu postgres -- psql -c '\l template1' | grep -q UTF8; then |
|||
echo 'defining postgresql template1 with default UTF8 encoding' |
|||
sudo -iu postgres -- psql <<EOF |
|||
UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1'; |
|||
DROP DATABASE template1; |
|||
CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UTF8'; |
|||
UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1'; |
|||
VACUUM FREEZE; |
|||
EOF |
|||
fi |
|||
} |
|||
|
|||
## MAIN |
|||
|
|||
assert_requirements |
|||
parse_options $* |
|||
|
|||
[[ $(id -u) != 0 ]] && exec sudo -- $DEBUG $(dirname "$0")/$(basename "$0") --origin $HOME $* |
|||
|
|||
set -Eue |
|||
|
|||
assert_repo_url |
|||
set_project_name |
|||
install_pacapt |
|||
install_packages |
|||
define_rails_app |
|||
|
|||
# echo "$PROJECT_NAME:$REPO_BRANCH:$RAILS_APP:$ORIGIN" |
|||
|
|||
create_user |
|||
assert_etc_config_for_user |
|||
# enhance_mise_user_from_origin # FIXME: not working yet! |
|||
postgres_global_encoding_utf8 |
|||
postgres_newdb |
|||
launch_normal_user_setup |
|||
install_systemd_service |
|||
inc_rails_app_count |
|||
@ -0,0 +1,27 @@ |
|||
[[ $RAILS_ENV != 'production' ]] && return |
|||
|
|||
function export_config { |
|||
mkdir -p $EXPORT_TEMP_DIR/config |
|||
if [[ -d /etc/$APP_NAME ]]; then |
|||
echo "found deprecated: /etc/$APP_NAME" |
|||
cp /etc/$APP_NAME/* $EXPORT_TEMP_DIR/config |
|||
else |
|||
cp /etc/$USER/* $EXPORT_TEMP_DIR/config |
|||
fi |
|||
rm -f $EXPORT_TEMP_DIR/config/database.yml |
|||
} |
|||
|
|||
function import_config { |
|||
cp $IMPORT_TEMP_DIR/config/*.yml /etc/$USER |
|||
for i in /etc/$USER/*.yml; do ln -sf $i $PROJECT_DIR/config/; done |
|||
|
|||
local service_conf="/etc/$USER/service.conf" |
|||
if [[ -f $service_conf ]]; then |
|||
ln -sf $service_conf $PROJECT_DIR/.env.production |
|||
if grep -q ^SECRET_KEY_BASE= $service_conf; then |
|||
local secret=$(grep ^SECRET_KEY_BASE= $service_conf | cut -d= -f2) |
|||
mise set --global SECRET_KEY_BASE=$secret |
|||
echo "SECRET_KEY_BASE stored via mise environment!" |
|||
fi |
|||
fi |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue